selawdivad
@selawdivad@lemm.ee
- Comment on Source for tutorials and a question? 1 year ago:
Depends what you’re trying to learn, and how much of a beginner you are. If you want to learn the shell, try the Software Carpentry tutorials:
If you know the basics, you might try honing your skills with CLI Mystery (murder mystery puzzle).
You’ll probably want to learn how to use the following:
- SSH
- Command-line text editor. Choose one of the following:
- Nano <- Smallest learning curve
- Vim (or Neovim) <- My favourite (See Mastering the Vim Language)
- Emacs <- Some people like it
The final tip is: It’s usually better in the long run to spend 2 hours reading the documentation than 2 minutes searching the web. Reading the documentation helps you to understand the big picture, and gives you a much better foundation. Of course, if you’re reading the documentation and don’t understand something, searching the web is an OK way to figure it out.
- Comment on New rules for bots on lemm.ee & Lemmy programming stream 1 year ago:
First bot I blocked.
- Comment on unrolling loops is efficient, right? 1 year ago:
It worked, but it was slow and dropped packets sometimes. I think the next team switched to Java. I met with them and walked them through the code and suggested they try a different approach. Hopefully they did!
- Comment on I can't code. 1 year ago:
What are your hobbies? Most people struggle to learn programming until they find a project that they are interested in. You mentioned an interest in music. Perhaps you could try Sonic Pi, which is a live coding environment where you can create music from code. It comes with a built-in tutorial, and a bunch of pre-written example code-music. It’s built with the ruby language.
- Comment on unrolling loops is efficient, right? 1 year ago:
One of the first real programs I wrote was a program to display telemetry data from a CAN bus. I was on the solar car team at uni, and we wanted to be able to view the data from the various systems live during the race. The CAN network was connected to a CAN-ethernet converter, which sent UDP packets over a wireless ethernet link to our lead car. I had no experience with networking, or UDP or CAN at all, but I had some documentation and a lot of free time, so I got to work.
Each device on the CAN network had a bit mask to identify it. For example, the bit mask for the motor controller might have been
0x1200
. This meant that any packet starting with0x12
belonged to the motor controller. For example,0x1201
was one type of message, and0x1202
another type, but both belonged to the motor controller.There was specific logic for each device on the network, so you needed to first figure out which device owned a packet using the bit mask, then apply the relevant logic to decode the packet.
Looking back, I realise the correct way to approach this would be to have a list of bit masks:
0x1200 0x1300 0x1400
Then simply bitwise & any incoming packet with
0xff00
, and lookup the result in the list of bit masks.Not knowing better however, what I actually did was create a giant dictionary of every possible packet value, so I could lookup any packet and determine which system it came from. This was so repetitive that I had to make use of my newfound super-power – vim macros – to complete the 8000 line dictionary…
Excerpt from real code below:
{ 0x102: { 'name': 'SHUNT_CMU_STATUS_TEMPERATURE_AND_VOLTAGE_1_2', 'data': [ 'cell_0_voltage', 'cell_1_voltage', 'cell_2_voltage', 'cell_3_voltage', ], 'unpack_string': 'intle:16, intle:16, intle:16, intle:16' }, 0x103: { 'name': 'SHUNT_CMU_STATUS_TEMPERATURE_AND_VOLTAGE_1_3', 'data': [ 'cell_4_voltage', 'cell_5_voltage', 'cell_6_voltage', 'cell_7_voltage', ], 'unpack_string': 'intle:16, intle:16, intle:16, intle:16' }, }