Tuesday, August 19, 2025

Gaining Experience by Fixing Existing Web Apps

Here’s a little secret: most small business web apps… kinda suck. Small businesses usually don’t have the budget for high-quality software engineering, so their apps are often missing important features, are slow, outdated, and not mobile-friendly. But that’s actually an opportunity for you as a student. Instead of building yet another “hello world” project or a to-do list app no one uses, try this:

  1. Find a small business with a clunky website or app, e.g. diyetta.
  2. Use it on PC and mobile, make a list of improvements.
  3. Make a copy of the whole app or parts of it and make it faster, cleaner, easier to use.
  4. Demo your version to the owner.

Worst case? You get real-world experience. Best case? You get paid. Either way, you win. You’re not just learning to code—you’re learning how to:

  • Create real value (solving actual problems, not just coding puzzles)
  • Sell your ideas (convincing skills)

This one simple strategy can turn you from “just another student” into someone who can point to real impact. That looks so much better on your resume than “I built a weather app.”

So… what’s the worst small business web app you’ve seen lately? Maybe that’s your next project.

Tuesday, June 3, 2025

Startup Checklist for Students

Thinking about turning your hobby or project into a business? Ask yourself:

  1. Who wants it? What makes it better than the alternatives?
  2. How will people hear about it? A great product is useless if no one knows it exists.
  3. How will it make money?

Friday, April 4, 2025

Teknofest Fighter UAV Competition

I am helping an undergraduate team with their Teknofest Fighter UAV Competition. The most difficult technical challenge is autonomously detecting and following other fixed-wing UAVs in the air. Teams must use a single stationary camera—no gimbals are allowed [Specification 6.1].

My first piece of advice to the team was to set realistic expectations and define intermediate success metrics, so that regardless of the final outcome, they can feel good about their progress. Last year's winning team was established in 2017 and reused a UAV they had been improving since 2020, which shows that having a realistic chance of winning requires several years of preparation.

The domains in which you need to be knowledgeable include:

  1. Image processing, object tracking
  2. Airplane aerodynamics
  3. Mechanics
  4. Guidance and navigation for autonomous take-off, flight, waypoint navigation, target tracking, landing
  5. Embedded software development for UAV avionics, real-time operating systems
  6. Ground station software development
  7. Telecommunications for telemetry and commands from ground station
  8. System identification
  9. Manufacturing and system integration
  10. Use of simulation tools (e.g., ArduPilot SITL, Gazebo, QGroundControl)
  11. Public relations and marketing to acquire necessary resources (~$5,000)
  12. Ground testing of individual components and the integrated system
  13. Manual flight of the UAV for system identification maneuvers
  14. Autonomous UAV flight testing

Mastering all of these domains is beyond the capability of any undergraduate team. Fortunately, systems like Pixhawk Cube Orange and PX4 Autopilot handle autonomous flight, NVIDIA Jetson series can handle object detection, and ready-made airframes like the X-UAV Talon reduce the production burden. This allows the team to focus on UAV-ground communications, tracking the target UAV in the video feed and generating appropriate guidance commands for their own UAV to follow it.

Since the Critical Design Report must not exceed 25 pages [see Critical Design Report Template, p.8], it is more of a system overview than a design report.

In light of all the above, here are my suggested success metrics:

  1. Pass the Technical Qualification Form
  2. Learn how to use ArduPilot SITL with Gazebo
  3. Pass the Critical Design Report
  4. Obtain monetary/component sponsorship
  5. Ground test all components
  6. Submit System Identification and Flight Evidence Video
  7. Qualify as a finalist
  8. Participate in the competition and complete at least one mission
  9. Win a prize in the competition
  10. Win first place
This year, I would be satisfied if the team reaches step 4 and pleasantly surprised if they make it to step 7. In any case, they should understand that it will likely take at least another year to be in a position to win any prizes.

Bonus: Python code for generating guidance commands from object tracking.

Sunday, March 23, 2025

Memory and Storage Latency

Below you can see memory and storage latencies and their corresponding analogies. For example, a cache miss that triggers a memory access from RAM, is about 100 times slower than the L1 cache. A skilled engineer can make an app run at supersonic speed instead of at a snail's pace — often the difference between a popular app and a dead one.

Component

Latency

Order

Metaphorical Speed

CPU Register

~0.5 ns

1

🚀 3,600 km/h Supersonic jet

L1 Cache

~1 ns

1

✈️ 1,800 km/h Commercial jet

L2/L3 Cache

~ 5 ns

10

🚅 360 km/h High speed train

RAM (DRAM)

~100 ns

100

🛵 18 km/h Scooter

Flash (NOR)

~10 µs

10⁴

🐢 0.18 km/h Tortoise

NVMe SSD

~50 µs

10⁵

🐌 0.036 km/h Snail

Wednesday, March 19, 2025

Minor, double major or projects

Engineering students often ask, 'Would doing a minor or double major benefit my career?' My answer is that pursuing a minor or double major is a demanding process. Instead, by working on projects related to your field of study, you can achieve much greater benefits with less effort.

Wednesday, December 18, 2024

Why I unit test

I primarily write unit tests for the following reasons:

  1. When I write an algorithm, I almost always miss some edge cases. Writing unit tests helps uncover most of them.
  2. Unit testing forces me to maintain clean function interfaces and design modularly.
While it may sometimes feel tedious, the peace of mind that comes with having passing tests is well worth the effort.

Thursday, November 14, 2024

Tech trends for software engineers

Yesterday, we had a discussion with software engineering colleagues about Bitcoin and other tech trends. I was asked for my opinion on a current trend that could be profitable to get into. Unsurprisingly, I said AI. By itself, this advice is too vague to be helpful, so I gave a more concrete example: using AI to transform the user interface of apps from menu-based to speech-based. I also pointed them to my Python script that demonstrates the basics of this concept.

As someone who was introduced to computers in the 1980s with the Commodore 64, I have witnessed the rise of Windows, the internet, web apps, mobile apps, and cryptocurrency. This shift toward AI is similar to—and even more dramatic than—when companies started moving to the web during the early days of the internet. 

I understand that creating a new AI model requires billions of dollars and years of research. But the good news is that many of these models provide APIs, which makes them accessible to us mere mortals. We just need to understand a few key concepts, such as:

  • How to use AI APIs.
  • Which large language models (LLMs) are suitable for offline use.
  • How to employ Retrieval-Augmented Generation (RAG) to incorporate data or documents not included in an LLM's training model

As a software engineer, you already possess the most important skills: algorithms, data structures, and programming languages. By spending just a couple of weeks on basic AI topics, you can add another superpower to your skill set. I, for one, will definitely be doing so.

Music: Barış Manço - Şehrazat