Computer Science Lounge - [Too Many Idea Men Edition]

nmap -sT -O localhost should check for open ports, make sure that the one you're using for mail is open.

nmap seems to be having issues,

What is the command to open the port on the firewall?

it depends on whats blocking it (if its being blocked).

Most of the time system have that stuff blocked in ip tables.

sudo ufw allow $PORT

where $PORT is the port number.

Source

tried that I also checked the router port and that is open.

It seems to be giving me these issues in the log.

looks like google can't authenticate who you say you are so its refusing to deliver your request.

Do you know how I could authenticate the message?

from the thread you made I believe you have to have your domain name set up. Once its been authenticated through DNS google might take your email.

I only bought the domain name today so I guess I must have to change some stuff on that side of things.

Would you happen to know what I should configure on the DNS side for the email?

I may have asked this before but if I was ever to look into embedded systems to do a project to say I have experience with embedded systems where could I start. I have taken a digital logic course, computer architecture course, C and C++ course. What course material could I pursue on my own to learn the basics?

Not sure if super related, but I've been teaching myself how to use EAGLE recently.

This embedded systems thing is a pretty loose concept since you can run linux on really small things. Is a Raspberry Pi controller an embedded system?

If you are looking for something exotic, you could try a hard real-time system. Something with an XMOS multicore CPU on it (RISC load-store architecture), or an 8-bit classic like z80* and 6502* (still being produced, although modernized for low price + low power consumption). By "hard real-time" I refer to CPU:s whose execution times are predictable at compile-time - each instruction takes exactly the defined amount of cycles, at the exactly defined clock-speed - it is guaranteed. Perfect for signal processing. And notably most of the 8-bit and 16-bit era home computers in the 80's and were hard real-time systems.

Options to do constrained, and/or hard real-time programming are pretty huge these days and cross-compiling tools are much more available.

*z80 is essentially an extended 8-bit x86. Similarly, *6502 shares some common principles (and designers) with the 8-bit motorola precursor to the motorola 68000 CPU.

Curious, how can it be so? In Sweden it is almost impossible to not get employment after a CS degree even if you aren't really good at it (I don't mean inexperienced, will expand on it further down in this post). But if you are good at it, you also get to choose where you want to work and get well paid according to what goes for pay in this country (less then in US for sure, but to myself plenty). Is it a difficulty with obtaining proper certificates outside the degree?

I think I understand where you are going with what you are saying, but I might be wrong, so I'll put what I think about that in my own terms here. I don't care much about people's certificates, or their previous work being at large or famous companies. However these can or at least should be a good indicator of what I do care about - to grasp a candidates length, variety, and depth of experience, so that we can test a candidate's ability to change mindset, to learn, and to add to our mindset. I would say that I don't care about all the math in and of itself or programming language use. But I do care very much about their specific skills of objective and logical reasoning and task solving. A systematic mind, consistency, ability to learn fast from experience, and to know when their conclusion is based on verifiable fact, or of it is just a fair assumption. Knowing how to verify an assumption before leaning on it. This last part is what an academic degree can or at least should be a good indicator of. People who can't do this can still work and earn well, but their advancement and pay-grade where I work is limited by those abilities.

Of specific programmer skills, it is a very good trait being able to visualize how code executes on a target environment down to CPU level, and to quickly find a bug and clarify the extent of its impact (which also includes ability to test, to understand what has been tested and why, and how to consistently construct code so that it enables to do these things).


To illustrate why I think this with a real life bad personal work experience:

We've had a guy who was unable to reason about correctness of what he'd delivered, unable to self-organize by chunking up a task and plan his milestones (for some reason he thought himself smart enough to keep everything relevant in his head over the course of weeks, but he wasn't), and subsequently also failing to understand how much of the task he'd actually delivered, and then further subsequently also unable to reason about whether he was done with a task or not. As a consequence, in an environment of independent and self-driving developers (we are all both product developers and coders) his throughput was 10% of anyone else's, and also taking everyone else's time to finish up what he should have delivered when "done" ("oh, it's almost finished", after one week in and three weeks remaining, should have preferably been "these are the things I don't know how they work, so I will spend a few days on it and then deliver you an estimate"). He slowly but consistently improved for about 8 months, which was apparently painful to him but we had gone out of our way to help him enable himself to carry his part of the burden. After about six months, he even stopped introducing new types of errors to the code, and we could finally typify the errors (to make it easier to correct in a code review) and handle/correct all the delivered errors accordingly, and then he peaked his performance for a while, and then stopped improving and even reverted to the performance from barely 2 months in. He got the job in the first place because we desperately needed someone to add at least 10% to our throughput over a period of time - at that time we've been fucking tired of overtime and needed breathing room to improve our delivery processes - and in that, it worked out. We weren't able to provide a satisfying environment for ourselves and him because we couldn't weigh reasoning about the consequences in the same way, within the same contexts.

Just to illustrate a specific conversation. He thought he came up with an idea to improve our product experience in one very specific way. We told him that we'd considered it and it could not be done (without us paying or finding means to offset a considerable cost for changing the in-data at the data source company), and then gave him the entire documented logical analysis of what was missing (peer reviewed by three developers five to fifteen years senior to his at the time one year professional experience). Explaining exactly why it can not be done. He still thought it could be done. I personally walked him through it. He acknowledged every step as if he understood it, and then he surprisingly still thought it could be done. Then I explained to him that I never bet my money on something I am not 100% certain of. Not 99.999%. 100%. There is no more than absolute certainty. Then I told him (probably mistakenly so) that I am so certain of it that I'd personally give him (about) $1000 off my own next paycheck if he could actually do this thing which was absolutely and obviously, and beyond any shadow of a doubt proven to be impossible to achieve - the data has a damn missing link between the damn entities, and there is no way to invent it out of order. And I wouldn't even take money from him for being wrong. Even failing to grasp the logics, he still didn't seem to react on me explaining at length that I never, absolutely never bet money without being absolutely certain I will win, nor did he seem to acknowledge the fact that during his tenure I never did bet money without winning. He then went on to spend 6 hours of his work time trying to break this, in spite of being explicitly asked to drop it by two of us senior developers. And only so he would come to the same conclusion in the end. I seriously cringed when he surprisedly exclaimed his a-ha moment - "Hey, but this can't be done. You are right. This can't be done".

The other guy who'd asked him to drop it simply went a little red in the face and just refocused on the screen in front of him, probably because he'd had a similar (albeit shouting) conversation with the guy a week or two before, explaining how a contractual obligations of maintaining and upgrading a product we don't like weighs more than a personal opinion, and the product can not be dumped out of existence without first renegotiating the contract with the customer, which is more costly than maintaining it, while maintaining the said product is cheaper than even discussing about maintaining it.

So, we (including him) were all quite happy to see him find job somewhere else. We have a fine reputation as a company, so it was not a problem for him to change elsewhere, which kind of circles back to where I started off this topic - I don't get a hard on if you work or have worked at a large or famous or well-reputed company. Also, the value of increased throughput per developer made it easier to ask a raise, especially in the light of him getting job in US, Silicon Valley solely based on our reputation. For their sake I just hope they test his logical skills, or that he is an exact match for what they want.

Given the experience, I'd rather quit my current job (which I quite enjoy), than have to work with a person with a reasoning ability inadequate to the task, and I don't care if that person is below me, above me, or by my side. As for maths vs logics vs programming... we have a marketing guy with a fantastic logical ability. I wouldn't attach it to any branch of education. I think its just something that gets awakened in some people and not in others, through personal experience or through formal education.

Interestingly, the guy who then came after him (same age when starting with us, same school, same education, same work experience) was spot-on the first week, and his entry level was at where the previous that guy was 3 months in, and within the first month the new guy passed the peak level of the previous guy (I spent only an hour a week correcting his code, discussing properties of constructing code this way or the other, and he gave input towards some new ideas worth exploring), quickly improving his output and throughput to the team without any hand-holding at all. We've been able to speak on equal terms since, which is central to our organizational approach. He simply doesn't make more mistakes then anyone else here, and carries his own increment in the throughput value, and thus increments our team value. He adds to us.

2 Likes

I can very much agree with this. At the graduate level, I would argue that CS is really a set of fields within mathematics more than it is programming for what that is worth. Oh lord the math...

CS graduates I see are basically math majors with more knowledge of theory of computation.

I spend 80% of my time developing embedded software for 8-bit, 16-bit, and 32-bit MCUs (PIC and AVR). I do everything from memory layouts, boot loaders, drivers for IC control via SPI, I2C, and UART, file systems, external communication such as USB, Ethernet, Wifi, and RFID.

I have used RTOSs such as FreeRTOS and VxWorks. I am currently working on a system using the ideas of Active Objects as described by Quantum Leaps (www.state-machine.com).

I am familiar with laying out circuits with Altium, EAGLE, and KiCAD. I generate GERBER files and order PCBs (rigid and flexible) from board houses. I hand assemble simple circuits and contract out larger/production ones.

The other 20% of my time is spent modeling optical systems, developing/optimizing signal processing algorithms (MATLAB), and designing wearable sensors.

There are so many parts to embedded systems that you will always have something new to learn. If I ever find free time I want to dabble in FPGAs. and VHDL.

The embedded software field has a lot of opportunities with the rising interest in the IoTs. I have had the opportunity to learn all of these skills working for small companies that require you to wear many hats.

Anyone interested in getting started in the embedded world can start with Arduinos and Raspberry Pis. After getting a handle on the fundamentals you can move up to MCU/IC evaluation boards. After this you should be comfortable with your own custom designs.

When you say this do you mean like designing you own processor?

possibly FPGA work.

I have done a little with FPGA and I made a seudo random number generator.

1 Like

I feel that I have many directions I want to go in. Embedded stuff seems cool, machine learning and AI is also cool, and I also like concurrent programming. I am a computer science student so naturally concurrent programming and machine learning would be more in line with my major but I would also like to know some low level stuff for embedded. I will be taking a concurrent programming graduate level course my last semester and I want to teach myself some data science/machine learning/AI over the summer.