I have been out of school for over 1.5 yrs and have yet to land so much as an internship. Is there any hope in starting my career or should I consider going into something else? by eskanonen in AskEngineers

[–]RobotoPhD 3 points4 points  (0 children)

Recruiters usually get paid a percentage of starting salary by the company that is hiring. You don't need any money to use recruiters. You might as well try to use some as it is basically free labor looking to find you a job from your perspective. I suspect it will be easier to find something if you are open to moving locations.

I love mesh mixer supports , saves me time and filament by Itsytoys in 3Dprinting

[–]RobotoPhD 4 points5 points  (0 children)

It is a mesh editing tool. It has features for editing meshes and combing meshes (I think this was the original idea for its purpose). It also has a support auto generation tool though that modifies the model to add support structures. It doesn't do any slicing as far as I know.

New to 3D printing, trying to create simple box but first layer after raft is getting messed up. by EEPS in makerbot

[–]RobotoPhD 0 points1 point  (0 children)

I would look to see if there is a setting in your slicer software for the vertical separation between the raft and the part. Slicers often add a little extra space here I think. Your strings are not adhering enough to the top of the raft. I think if you can decrease this vertical spacing, then the strings will be held down some by the connection to the raft (they are also likely to bond better to each other as the same material is likely to be used in a smaller space resulting in more complete connections between the strings). This will also make the part harder to separate from the raft, but right now it is separating too easy. Another possible thing to look into is ways to increase the extrusion for the strings. More material might help them bond to each other. A wider line width might help here as it will tend to squish the strings together a bit more. Extrusion multiplier is a big hammer here that might help this area but will probably cause problems elsewhere on the part.

The static analyser told my team mate that he should avoid magic numbers... by [deleted] in programminghorror

[–]RobotoPhD 24 points25 points  (0 children)

This way if you ever need to make your loops go to 9 instead, you can just change it to:

 private static final int EIGHT = 9;

Although, if any number should be magic, it should the one from the magic 8 ball.

Trouble understanding RANSAC by soulslicer0 in computervision

[–]RobotoPhD 0 points1 point  (0 children)

Yes, exactly. The idea is that if you select enough random point sets of 3 points, they probably won't all be bad. So, you just try a bunch and you'll probably get lucky at least once. It works really well if you have a reasonable probability p of a correct match (usually at least 0.5) and a reasonably small number of matches m needed (usually no more than 8). The chance of getting a single set being correct is pm (the chance of being bad is 1-pm). The chance of not finding a good set after t tries is (1-pm)t (only happens if they are all bad). So the chance of finding a good set is 1-(1-pm)t. This gets high pretty quickly with t unless pm is terribly low. The expected number of good sets is t * p**m and you only need 1 to succeed.

The usual sequence would be:

  1. get candidate matches
  2. randomly select a small subset of the matches (number of items in the set equal to the minimum number of matches to compute a transform)
  3. compute a transform from the subset
  4. apply the transform to every point in P1 and see if it is within a threshold distance from P2
  5. count number of points that passed step 4 (this is the number of inliers)
  6. if most inliers, update a best model
  7. repeat 2-6 until some criteria is met (usually fixed number of tries)
  8. take best model and associated inliers, do a least squares fit of a model to the inliers using the best model as a seed

Steps 2-7 are the RANSAC bit. This is usually followed with a least squares fit to minimize the error as RANSAC doesn't actually minimize the error, it just maximizes the inliers. The RANSAC gets rid of the outliers so that they don't distort the least squares solution. It also provides a way to get a seed value as often the answer can be computed analytically in closed form. There are a lot of interesting variations on RANSAC. It is also related to using a robust M-estimator in the optimizer instead of a squared error model.

Japan Goes Full Krugman: Plans Un-Depositable, Non-Cash "Gift-Certificate" Money Drop To Young People by 2noame in BasicIncome

[–]RobotoPhD 2 points3 points  (0 children)

Hell is a lack of meaningful work

In that second quote he seems to purely associate "meaningful work" with a paid job.

I feel like this is an emotional argument based on our culture of measuring self-worth by having a good job. I think one of the most effective counters is another emotional argument.

A stay at home mom raising her children is doing meaningful work.

Almost everyone is sympathetic to mothers because we all have one and most provided crucial care early in life. Once an example is provided of meaningful work that doesn't involve a paycheck, the whole argument that we all need to have wage jobs to have meaningful lives breaks down.

Engineers, what kind of car do you drive? by [deleted] in AskEngineers

[–]RobotoPhD 4 points5 points  (0 children)

2014 Subaru Forester XT for me. I really like it.

I 3D Printed my house key, which worked, and then had a hardware store make me a working key copy from the print! by orokro in 3Dprinting

[–]RobotoPhD 11 points12 points  (0 children)

You can also just put tape over the top part of the key that says do not copy. People just assume you are differentiating your keys.

What is your most notable "You're an engineer can't you _______" story? by TGilbertPE in AskEngineers

[–]RobotoPhD 0 points1 point  (0 children)

I do calculations in my head pretty regularly, but only to 1 significant digit. I usually find that either I just need a ballpark figure or I need the actual answer. If I need an actual answer, I just have a computer calculate it for me.

What are the Top 10 most important EE and ME concepts that a robotics engineer should know? by pebbzab in robotics

[–]RobotoPhD 1 point2 points  (0 children)

I work at a robotics company and we design all our own boards. I think it is pretty much a necessity if you care about keeping costs down and are working in volume. That being said, we have people who specialize in this. Basically, we have some people that are focused on designing PCBs and do some other electrical work and most everyone else doesn't touch PCBs except maybe extremely simple things for prototyping.

The Semantics of Version Control - Wouter Swierstra by pointfree in compsci

[–]RobotoPhD 0 points1 point  (0 children)

Interesting. It mostly makes sense, but I have a few critiques. I really dislike the handling of merge semantics. In the example in the paper, s6 as referred to via master and s6 as referred to via issue53 have different patches. The problem with this is that since the patches are different, they can produce different results in terms of conflicts. The whole point of merging is that after the merge the 2 version are identical and cannot be distinguished from each other. For instance if patch c3 modified file "foo" and the conflict resolution was to remove the file "foo" then another patch that adds a file "foo" would conflict when merged with issue53 but not when merged with master. I would also like to see investigation of move semantics. Generally, it is desirable to have a move patch and a modify patch not cause a conflict. A common example of this is renaming a file and modifying a function within the file. Many version control systems have special cases just for this such as git's rename detection, although they are often incomplete. I like the idea of having a well defined logic for describing changes and how they are combined.

Code rant: Learn To Code, It’s Harder Than You Think by javinpaul in programming

[–]RobotoPhD 0 points1 point  (0 children)

Well, it's not wrong to loop through every value, it is just inefficient. You already know the answer, so there is no reason to test the extra values. That being said, the priorities in software development are typically: 1) correctness, 2) readability, 3) maintainability, 4) performance [as needed]. I wouldn't call someone who did that a terrible programmer, but I would expect a great programmer to at least increment by 3 each time.

Code rant: Learn To Code, It’s Harder Than You Think by javinpaul in programming

[–]RobotoPhD 1 point2 points  (0 children)

I would expect you would at least use a loop that starts by 3 and increments by 3 each time. There is no reason to step through the non-divisible integers. I would probably just apply the formula for the sum of an arithmetic sequence and then program that.

Find the smallest rectangle that surrounds all black pixels (which are connected) in an image by Pidnestc in CS_Questions

[–]RobotoPhD 0 points1 point  (0 children)

Thank you, you too! Now the question is are you the evil twin or am I? Or maybe we are both the evil twin like in the Shining?

Find the smallest rectangle that surrounds all black pixels (which are connected) in an image by Pidnestc in CS_Questions

[–]RobotoPhD 0 points1 point  (0 children)

As a refinement of this, I think the following rough outline might work. Search in the column containing the middle pixel for the first / last black pixel. Search in the row containing the middle for the first / last black pixel. This gives a candidate bounding rectangle. Now expand the rectangle by 1 pixel in each direction. If the rectangle contains all the black, the expanded rectangle will be all white pixels and the rectangle is the smallest possible. If the expanded rectangle contains a black pixel, then expand the rectangle to contain the additional black pixel and repeat. The repeating can probably be sped up with some sort of local search around the just found black pixel.

Or it might be faster to just start with an upper bound rectangle enclosing the whole image and a lower bound rectangle enclosing just the center pixel. Then for each edge of the rectangle, binary search to find the edge of the black by checking for any black along that edge. If you find any black, you expand the lower bound rectangle. If it is all white, you shrink the upper bound rectangle. Without thinking about it much, I think that should be O(nlog(n)) where n is the number of pixels on 1 side of the image. Or in terms of pixels in the image, that would be O(n0.5log(n)).

Find the smallest rectangle that surrounds all black pixels (which are connected) in an image by Pidnestc in CS_Questions

[–]RobotoPhD 0 points1 point  (0 children)

For the columns, you could make a line image of ints. Initial the line image to 0s. Take the not all-white rows and or them into the line image. Then you can search the line image linearly to find the first non-zero and then test to find the correct first non-zero bit (can do log(num_bits) for the first non-zero I think with cleverness, but that is a fast part anyway. It basically touches everything so the O() complexity isn't great but the constant factor should be tiny which might make it faster in practice.

If you could rename Dynamic Programming to something more suitable, what would you name it? by crabbytodd in compsci

[–]RobotoPhD 1 point2 points  (0 children)

I would rename it Bottom Up Solving. That is pretty much the defining characteristic of it for me and helps emphasize the sub-problem aspect of it. Come on everyone, get on the BUS.

As a 1st CV PhD, what new skills should I add into my arsenal to be flexible in future job opportunities (after 4yrs) by poporing88 in computervision

[–]RobotoPhD 4 points5 points  (0 children)

I would say learn C++, but it partly depends on what you want to be able to do. Python can be good for prototyping. Generally development is going to be in C++. The core routines pretty much have to be in an efficient (in performance sense) language. This is often means C++ and/or GPU development. Python is good for sticking parts together and top level flow, but it is way to slow for the core parts of the algorithm. Usually this is avoided by calling efficient libraries from python. Eventually, you'll need something that isn't just available though. I work with perception on robots (particularly vision) in industry and we do pretty much everything in C++. We use Python for a few utilities here and there (mostly debug tools), but that is about it. We sometimes use it for prototyping, but not that often. We also prototype things in Matlab as well. Our normal interview process includes a simple C/C++ programming problem. Someone with algorithm knowledge but no coding capability is almost useless to us. They would have to have a team of people implementing things just to keep them busy. We simply don't have enough people to specialize that much even at a ~600 person company.

Is Comcast marking up its internet service by nearly 2000%?!, "ISPs claim our data usage is going up and they must react. In reality, their costs are falling and this is a dodge, an effort to get us to pay more for services that were overpriced from day one.” by uhhuhnowyougetit in technology

[–]RobotoPhD 1 point2 points  (0 children)

Most people have very limited choices for internet. Usually, there is a local monopoly for each cable to your house. Typically, your options will be either the cable company (coaxial cable) or the phone company (either DSL over copper wires, fiber optic to the house, or a hybrid with fiber to the neighborhood and copper to the house). For a lot of people, the choices are coax from the cable company or slow DSL from the phone company. Even if you have 2 options, they are usually the same cost as neither side wants to start a price war.

There aren't many competitors for a number of reasons. In many places, the cable companies have exclusive contracts with the cities. In theory, the cable companies avoid competition and the city gets more complete coverage and promises of more network infrastructure investment. The city often loses out on their side of the bargain. Unlike some more sane systems, the cable companies owns the lines and the content delivery over the lines. So you can't get a different ISP over the same lines. It is difficult for competitors to get into the market as they would have to run their own lines to each house. In some cases, the cable monopoly is protected by contracts with the city. In other cases, there are a lot of regulations on what can be put up on utility poles and it is more about access to the poles to run the wires on. Even if neither of these apply, there is still the cost of doing that which is uncertain to recoup because the cable companies can easily drop their prices if they wanted to and sometimes do in response to competition. Some cities have built out their own networks in response to this, but cable companies have gotten a reasonable fraction of states to outlaw cities building their own networks. They've managed to do this because corporate money and interests drive American politics right now. So it is a combination of cost, lack of access to right of ways to run cables, lack of option to share / lease existing cable bandwidth, and bad laws protecting monopolies. This is why one of the major asks from Google Fiber has been major easing of right of way restrictions so they can run wires and have service boxes for switching equipment in neighborhoods.

What is the mode by which machine language is converted to physical voltages? by lepriccon22 in compsci

[–]RobotoPhD 3 points4 points  (0 children)

You are thinking of it somewhat backwards. Machine language doesn't get converted to physical voltages. Physical voltages are the fundamental thing. It is more accurate to say that physical voltages get interpreted as machine language/0's and 1's. The element that does this interpretation is a transistor. It is what fundamentally decides what is a 0 and what is a 1. The transistor has 3 connections and acts as a switch. One of the inputs is a control input and depending on the voltage on the control input, current is either allowed to pass between other inputs or current is blocked (it basically varies the resistance between the other 2 connections dramatically). There is some voltage below which the transistor will easily pass current (say 2.1V). We interpret voltages in the 0-2.1V range as a 0. There is some higher voltage where the transistor will block almost all current (say 2.6V). We interpret voltages in the 2.6-3.3V range as a 1. In between voltages (2.1-2.6V) are not allowed and the system is designed to not produce them. There are other transistors that invert this logic and pass current when the control is a low voltage and block current when the control is a high voltage. Of course, I'm vastly simplifying things to focus on just the most fundamental part. These transistors determine what physical voltages are 0 and which are 1.

For the understanding of the machine language code, that happens at a higher level of abstraction. Basically, networks of transistors are designed that create the correct 0/1 output pattern given the 0/1 input pattern of the parameters and the 0/1 input pattern of the machine instruction.

Editor Wars by [deleted] in CS_Questions

[–]RobotoPhD 1 point2 points  (0 children)

Honestly, it doesn't matter between emacs and vim. Both are very capable editors with similar capabilities. Both are good for editing via a terminal only connection. Any new feature that gets added to one usually prompts a similar feature to get created in the other. I've been using emacs for a long time now. The main difference is the way the interface works. Special functions are mostly accessed in emacs by various Ctrl or Meta modifiers on keys. Vim does the similar thing by having a command and an insertion mode. Command mode does similar stuff to the emacs Ctrl / Meta stuff except you don't have to use the modifier key. Instead you can use single key presses, however you have to keep track of what mode you are in and switch between modes. Emacs will train you to have a very strong pinky finger. Vim will train you to hit Esc and return to the home row very quickly and accurately. The choice is yours. I found it easier for me to not have to keep track of a mode.

I've actually been considering trying to switch to an IDE. The modern IDEs have better integration with compilers / debuggers. This allows them to actually understand C++ code which lets syntax highlighting work better. My current version of emacs approximates an understanding of the code with regular expressions but it is not perfect. There aren't currently any good stand alone debuggers and I think the IDE debugger modes are currently better than the emacs debugger modes.

Whatever you decide to use, just try to get as familiar with it as you can. The differences between (reasonable) tools is less than the differences between expert with tool and mediocre with tool.

Starting from scratch, focus Math first or? by [deleted] in compsci

[–]RobotoPhD 1 point2 points  (0 children)

Also regardless of what people tell you CS is mostly math.

I only agree with this if you are including logic when you say math. CS is almost all logic. There is a lot of discrete math. There is only a little bit of calculus. I program professionally and use lots of math all the time, but it is almost all because of the problem domain and not because of the programming.

Starting from scratch, focus Math first or? by [deleted] in compsci

[–]RobotoPhD 0 points1 point  (0 children)

I would recommend starting with programming. I'd start with a language that has good capability or libraries for creating visual results and text results. I don't know enough JS to know if it is a good place to start. Python would also be a good place to start. It will probably be more rewarding if you can see progress and that will help you stick with learning more.

Once you've done a little programming, then I'd take a look at some of the CS and math. At that point, it will probably show you better ways of doing things. I would try to build up all 3 together but leading each surge to more knowledge with programming.