My scope for this blog is a large one unfortunately. Its intent is a mixture of clarifying my thought-process, learning and revisiting old skills, documenting my decision-making; providing an additional supplement to help me with my interview process while I’m job searching in the US.
1. Benchmarking Python’s Data Structures
While the scope of Code, Security and Electronics is a large one, my initial focus will be to analyze Python’s performance and features given that the language provides multiple ways to structure your code to reach to a solution. Typically the most pythonic way is the most encouraged (typically leveraging lists, sets, dictionaries and their comprehensions - providing easily readable, concise code).
For the sake of review and deeper understanding we can further explore these data structures and benchmark them against each other. It might not be uncommon in an interview to intuitively recognize that tuples provide faster access to data than lists (lists being mutable and tuples being immutable). I’ve found myself mid-interview wondering, how much faster could access be; is it a very noticeable difference? - Probably a terrible question to consume your mind mid-interview, especially when speaking aloud your thoughts.
There are other questions such as testing the speed of regex searches vs other methods of parsing words and finding matches, if having lambda functions slow down list comprehensions and how much faster list comprehensions are compared to building the list in a loop.
2. Algorithms
Naturally, in the programming interview process, this seems to be weighted heftily. Ultimately, it’s a filter of the candidates who are willing to put in the work and show comfort and fluency in their language.
I’m doing challenges on HackerRank and LeetCode currently. I’ve done a lot of challenges on
Unfortunately, those challenges were mostly done in the year 2013 and 2014 when I was being extremely competitive with it (against Randy Ram and Rikaard Hosein). Aside from using C++ in my solutions back then, it’s also been 6 years. So I’m trying to get back into that flow.
I may post Algorithm type challenges intermittently. These posts may be a little more brief as I’m more focused on tackling Easy to Medium problems currently (and not spending hours behind Hard).
3. Reverse Engineering
These posts will be sparse. I’ve enjoyed participating in Smash The Stack Wargaming and intend to revisit these overflow challenges. I intend to make 3 beginner-type posts covering reversing.
- Build an extremely simple C++ app. Then using GHIDRA, I’ll reverse it to uncover a password.
- Build a more convoluted way of constructing a password. Relying on deciphering disassembly, or trudging through decompiled C code (dealing with its mess of pointers).
- Build a frozen Python executable and exploring patching unprotected executables (preventing server-side authentication functionality).
After touching on each phase, I’ll explore Stack Overflows and doing the whole NOP slide to a shellcode payload - typically also involved in the Smash The Stack Wargaming challenges.
4. Pen-testing Tools
I’d like to revisit a lot of the tools I started using and modifying during University (but stopped on entering the world of work). I intend to cover:
- Sqlmap - sqli (including blind sqli)
- Uniscan - recon and showing xss exploits
- Nmap - performing scans across a network
- Metasploit - based on recon data from nmap, trying exploits on open ports
- Reaver - WPS pin brute-forcing
- Aircrack-ng - WEP network infiltration
5. Learning a new Language or Framework
A lot of the previous topics focus more on me re-learning or re-touching on something I had once attempted/executed. It’s ultimately a refresher and the pen-testing tools are not meant to be overly long posts (mainly focused on just using the tools in a very straight-forward fashion without having to do much reconnaissance on an unknown site/target).
To further myself as a developer. I need to learn how to do mobile development comfortably. I intend to learn Flutter to achieve more comfort with mobile app development. While I’ve touched on Go-lang slightly, I’ve never built scripts or apps, so my comfort with Go is below elementary. I’m hoping I can get this language up to speed. Currently, I am a little time-pressed in my review/cram involved in having to do interviews (as I should focus on algorithmic challenges on languages I’m interviewing for - Python, C++, JavaScript).
6. Electronics Design & Development - Being a Maker
I will go through the process of building extremely cost-effective electronics (Do not stop at using an Arduino + Arduino Shield for your product! - Break out the necessary components and build your own ASIC) to interface with web-stacks. I will leverage the ESP8266 and ESP32 along with peripheral sensors (and displays). I will cover different interfaces and ICs needed in those cases. The plan ultimately would be to show the creation of building a device to interact with slot machines - from conception to production/mass manufacture (leveraging a PCB turnkey company like PCBway). I also intend to build other electronics such as GPS trackers, watches and other gadgetry.
This is more of a requirement that I will fulfill down the road as I do not wish to lose these skills that I’ve recently developed during my work-years (2015-2019).