Category: Medium Read

length read, about 1000 words

  • 2004-22 My PC with WC 💧

    2004-22 My PC with WC 💧

    ⏱️Overview

    I described here my PC and its water cooling (WC).
    It also features my own fan controller, which motivated me to finally create this page.
    Obviously, I’m using my own firmware in heavily modded keyboard with my PC.

    📷Gallery

    Final version pictures here.

    💧Water cooling history and observations

    History intro

    I got my first PC in 1992, as seen in my very first post here. I had many more since then. I’ve put my full PC history in last chapter, at bottom.

    Until 2004 I had no big issues with PCs and their noise. Those had 2 medium fans (about 9cm), one on CPU other in PSU. Surely those weren’t quiet (just cheap) and were mounted firmly so their vibrations were even amplified.

    Before WC

    In 2004 I bought a new Pentium 4 and decided that I had enough of that noise, “a PC should not be heard” I said. So I first started buying “quiet” fans:

    • Well the small 9cm: Zalman CNPS7000A-Cu wasn’t that great, was full copper (whatever, too heavy), and with so little space between fins it was great at gathering a lot of dust, but it had a nice knob regulator.
    • Years later I found a good one: Scythe Grand Kama Cross 2 for next CPU. It’s big but not very heavy, and has a 14cm fan which actually makes it way quieter. It’s still used in my mother’s PC.

    Well that was rather a waste of money. Not very expensive, but not very quiet either. Yes until now, I’ve spent much more for WC in total, but it was used in 3 PCs already. I’d even say it was more universal than those “quiet” PC fans dedicated to some socket or one GPU type only.

    WC Kit

    I bought a WC (not to confuse with ?) kit from a local company Cpc/Hydrox. Needless to say they changed company name like 3 times, didn’t last long etc. But sometimes their parts still appear on auctions. I even sold my surplus once this way.
    To put it short, their cooler was crap, their WC PSU plain garbage (cheapest and also had a loud fan), water pump is just a cheapo for aquarium.
    So a kit was really a bad way. But water blocks were cheap and really good.

    My PC evolved the most since 2004, when I bought that Pentium 4 and started water cooling it. My current PC still has most of the WC parts from that time (water blocks, 6mm (~1/4″) tubes, water reservoir and pump).

    My choice for that kit and 6mm was its low price. Seriously, whenever I tried looking at other water blocks after (thinking I could maybe improve mine), all were 10 or 12mm (~1/2″) diameter and literally 3x more expensive.

    PC WC Modding Rant

    Back then, once a while, I was looking at pics of modded water cooled PCs, with “style” and plenty of lights too. How do I put it, just IMO OFC, let’s just say that’s the most illogical (retarded) thing to do with a PC. It’s the same approach as in modding cars. It’s a huge profiting business, a hype and really nothing more IMHO. Apart from water cooling, which is the most logical way of cooling, but for PCs it is way overpriced. Modded PCs are the culmination of commercial stupidity, visible from a distance and eye catching (i.e. self promotion).

    For me it was a matter of how loud my PC still is, best measured in acoustic dB. Just like I said: “a PC should not be heard”, I also add: “and should not emit any light” or otherwise be visible even.
    Of course, since my PC is on floor under own desk, I do have some white lights to make it visible when needed.

    And it also mattered a lot more for me to have other modifications. as described in next chapter.

    Radiator

    I changed the radiator from kit, to a decent (got it used) copper for one 12cm fan. It was too small as it turned out. Water was heating up, fan didn’t manage to cool it when CPU was at maximum. At some point I had two such one fan coolers. I think it still wasn’t enough, definitely not for CPU and GPU, and too much tubing trouble.
    So at that point I bought a 3 fan radiator Black ICE GT Stealth 360 and I’m still using it today. It isn’t very deep and it’s easy to vacuum clean the dust from it. I do this like once in 6 months.

    After moving my PC to WC (water cooling, right), I surely hated every CPU stock fan, especially those loud, stupid, cheapest Intel vibrating fans. I once even just cut off that fan of radiator and mounted a quiet Noctua 9cm fan above it, this worked well and was way quieter.

    Fans

    At some point I searched for quietest fans. After I think 4 tries I settled for Noctua. It actually varies from model to model. And the downside is their ugly, distinct color, which I didn’t spray black, I don’t want to risk damage.

    For the radiator I bought 3 Noiseblocker fans (to be cheaper than Noctua and black already). They also have those rubbers good for mounting on radiator. I’d say they’re okay at low RPM, but not when higher, I can hear some motor noise.

    HDD

    Naturally after having CPU and GPU water cooled and quiet, the next thing is PSU and HDD.

    HDD is easier. I used to wrap it in cloth, but this makes them too hot. So now I have one in some foam, covered by some old noise reduction foam, with the back being open to air.

    PSU

    I did try 2 noiseless fanless PSUs in 2004 or 5:

    • Yesico FL-550ATX, a heavy tank (big parts) that was always hot, but quiet
    • and Seasonic X-460FL, a light empty, too expensive, low power PSU, that wasn’t 0dB quiet, it had some high frequency hiss noise.

    After Pentium 4 for better GPUs, I needed more power but there were no such fanless PSUs. I made a very stupid thing and tried using both fanless PSUs in 1 PC. Just connected their grounds and I killed Yesico this way?‍☠️.

    Finally, some time later I found an awesome PSU: Antec CP-850. I even bought a 2nd one for my other PC, a year after.
    It is bigger then most though. Inside, it wasn’t freaking all cramped to still fit the old retarded dimensions from very first PC ATX PSUs. It is just stupid: airflow is chaotic, no space left, all big hot inductors are nearby big capacitors (which don’t like heat) etc.

    Bigger PSU is spacious inside and its design with components in lines is good for airflow, thus the 12cm fan is rotating very slow. BTW I eventually replaced it to a quieter one. There is a big surplus of power 850W, I’m probably using 130W to 300W. So it won’t heat up and suffer from it and/or make noise.

    Case

    Yes the Antec PSU is bigger and won’t fit most PC cases, at the time there were only 3 available for it, but that was just a stupid commercial for their products.
    PC cases are likely my last concern and I buy them as rarely as possible.
    I used this PSU outside of my PC case from 2008 for 15 years now. My other PC has it on top.
    Eventually I moved to even smaller PC case and I placed it inside, thus making it look like it does now, sticking out.

    🛠️Modifications

    Apart from water cooling things, I have many utility mods for (or in) my PC:

    • external relay 220V to power water pump, and DAC (earlier audio amplifier) when PC is on
    • for years I had just a simple analog knobs for PC fans, now I have my own fan controller
    • also my own firmware in heavily modded keyboard
    • external power switch
    • and HDD LED (actually not used, too distracting)
    • external 12V connector, to power my mini drill
    • 2 USB switch
      I use it to switch my keyboard and mouse between my PC and a laptop. Works like a charm, I can’t imagine not having this now.
      I did it on a universal PCB with relays, since I had them available, but they do use 2,5W when on. There are 2 USB input ports and 4 output USB cables: one pair to PC and other to laptop. There are 6 relays, for 5V, D+, D-, and GND is common.
    • external switch for monitor input, near keyboard
      This was a bit tricky. I had to disassemble my decent LCD monitor, get to the switch, solder some wires, and add a long 2m cable with external switch. It is extremely useful, I don’t have to lean to press and wait like that too.

    📜My full PC history

    Well this chapter is very optional, since it has quite nostalgic value for me, but otherwise it’s just mostly (ancient) history. Yeah, it’s almost 30 years since my first PC.

    Legend for the below table:

    ? – I’m not sure about exact amount or date
    💀 – Dead, it broke by itself. Obviously very undesired.
    🔨 – I killed it, so my fault. By bad overclocking @, or by accident otherwise.
    ♻️ – Sold it, eventually.
    🗑️ – It became electronic garbage.
    ☑️ – Still using it.

    YearCPU, MBCPU Freq. @OCRAMHDD, SSDGPUMonitorAudio, PSU
    1992PC XT8 MHz640 kB20 MB 💀14″ CRT EGAPC Speaker
    1994386, 486?33 MHz1?, 4 MB?260 MB 💀14″ CRT VGA 💀
    1996Pentium 1120 MHz 🔨@32 MB?1 GB 💀💀borrow Voodoo1?
    1999AMD K6-2300 @366 MHz32? 64? MB4 GB?borrow Voodoo3?
    2001Duron
    K7VTA3 📷
    1.0 GHz256 MBGF2 MX40017″ CRT
    Samsung 753dfx ♻️
    2004Pentium 4
    MSI 865PE Neo2
    3.0 GHz ♻️2 GB?40, 80 GB? 🔨Ati 960019″ CRT Samsung ♻️SB 128 PCI? 💀
    Yesico FL-550ATX PSU🔨
    2005Ati X800 💀21″ CRT Dell 🗑️
    2008Quad Q6600
    P5E Deluxe
    2x 2.4 @3.0 GHz4 GB? DDR3 1066 🔨@320 GBGTX 8800 512MB 💀24″ LCD TN Iiyama ♻️SB X-Fi PCIe Xtreme 💀
    Antec CP-850 PSU ☑️☑️
    20111TB? 💀GTX 560 Ti 1GB💀♻️
    2012i7 2600K
    P8Z68-V GEN3
    4x 3.4 @4.4 GHz ☑️8 GB DDR3 1333?2TB
    201424″ LCD IPS
    Eizo EV2436W ☑️
    202016 GB DDR3 21331TBRX 570 4GB ☑️DAC AIYIMA A5 PRO ☑️
    2023Ryzen 5 7600X
    B650M DS3H
    6x 4.7 GHz ☑️32 GB DDR5 60001TB M.2 Gen4 NVMeRX 6600XT 8GB ☑️

    ⌛Conclusions

    As a kid I didn’t have new PCs too often, they were also getting faster and obsolete quite often. Then after a brief period of having newer hardware (mostly GPUs) somewhat often, while most of them died too early I think I realized it’s not good to buy (they’re soon to be garbage anyway).

    Later I realized that since years CPUs don’t really get much better, yet they do cost same or more. Thus my CPU and MB is still from 2012 (happy 10 years man).
    I did have them overclocked for few years, but now I even don’t. It gets 30% faster, but uses 30% more power. So I’d rather have 100W (not 130W) at idle, when I just listen to music or watch something. I don’t need that extra 30% like I did when I was building C++ often, for Stunt Rally.

    After all PCs are just tools (and not just gaming like consoles) but for learning, creating and entertainment too. So naturally buying a PC is an investment, that has to be done rationally.

    Some time later I decided it will be better to buy (instead of new PC) a new ergonomic chair (for PC) and a bed. Those are similar priced but much better for health.

    ➡️End

    Well in Sep 2023 I bought a new PC, even with case, only PSU still same. Added it to history table. It feels way faster than my previous, like 3 to 5 times. It seems I’ve skipped a new PC (CPU+MB) somewhere along the last 11 years. I always aimed for new PC to be at least 2 times faster to not waste money and time for updating. It needs some time to update, like a week to choose right components, move OS setup, etc. I cleaned dust in this now old PC and moved to air cooling again, then set it up and gave to my mother. Replacing previous one, which was way too slow, nowadays even movies were not smooth. Yet still almost all PCs of mine drain above 100W at idle. Well it’s good to update and do stuff faster, but of course still a high cost for new technologies.

  • 2021-22 Fan Controller 🌡️

    2021-22 Fan Controller 🌡️

    ⏱️Overview

    This is a nice gadget I made recently for controlling speed / power of my PC fans (all are 12cm, 12V, 3 pin, with RPM output).
    It has way more features than my old & basic 3 knob regulator which I used for over 15 years.
    And since this is open source (and I wrote it), it surely has and can have any feature (commercially unavailable, not even thought of, or way too expensive).
    Obviously it isn’t badly needed, that’s why I made it after so long.

    📷Gallery

    Pictures here.

    📂Sources

    Sources for Teensy 3.1 or 3.2 are available here.

    I do not recommend Teensy 3 at all. All Teensy boards are quite expensive and aren’t that needed for a fan controller. I think a bluepill or blackpill would suffice and be much cheaper. More info and detail in my MCU tutorial.
    I simply used Teensy 3 since I had it available, doing nothing and I had code for it from my older keyboard firmware, so it was faster to adapt it.

    ✍️Motivation

    For many years I was using just the simplest LM317T voltage regulators with 3 knobs (for 3 fan sets).

    Obviously a basic analog fan controller is very simple and extremely useful. I had 3 knobs (5k logarithmic potentiometers) with LM317T (even with no capacitors or radiators), mounted in the 3½” floppy disk bay. It was working very well for years and I could still use it.

    I did try once a Gelid Speedtouch 6, wasn’t very cheap, and it was hopeless. Even worse, when I realized that I can make a better one myself, like usually.
    Additionally, after being rather finished with my keyboard features, I had some Teensy 3.2 boards left, lying around, doing nothing, simply asking to be used for something. Even better, I could use my older keyboard firmware for Teensy 3.2 and adapt it fast for this controller.

    So I finally got to creating it. I called it “Fancy” from Fan C(ontroller).
    There was something new to learn too. I even used a cool circuit simulator to find out resistors around transistor, wasn’t exactly the real value later though.

    And of course not everything went as planned.

    For example: I wanted to use thermocouples for temperature which I had few of already. I tried an op-amp with differential amplifier for them and used ADC to read voltage which seemed working on breadboard. But after doing that for real (and using bigger resistor values) something didn’t work and I saw noise. So after few days trying I dropped it and just used DS18B20. They are bigger (3pin package) but have more precise measurement (at higher cost too).

    Unfortunately I also killed one Teensy 3.2 board by accident. I’m not even sure how. I’m guessing some 12V was still left on capacitors and I could touch 3.3V pins with it.

    📊Features

    A shorter, bulleted list of all features can be seen in sources readme with more detail on electronic parts and schematic (image here).

    GUI

    It has a 3×3 keyboard and a LCD color display (diagonal is 1.8″, 4.5 cm). I did years ago my keyboards this way, so it also came with 3 levels menu (GUI), many options and even full screen demos (why not).
    Of course it permanently saves all settings, in EEPROM.

    📈Regulating

    The main advantage of my digital fan controller is that it allows lower RPM than analog, which then makes PC slightly quieter.
    This is because a fan needs shortly higher power (voltage or PWM) to start, but can have it lower after it started rotating (I don’t mean the power started rotating ?).

    Next, it monitors RPM (revolutions per minute).
    So a natural safety feature here is: stop prevention (or in general RPM guard). It can increase power shortly to start again, even if user picked too little power to spin, or something stopped the fan.

    Additionally PWM outputs can be used, for fans that allow it. Actually all of my old PC fans didn’t work with PWM, so I had to also make analog outputs (channels) for them at some point. I don’t know if it could be more universal, these channels require some other parts.
    So it can control analog fans (changing constant voltage) and PWM fans (changing modulated pulse width at medium frequency).

    Optionally, temperature is measured. It can be used as feedback to automatically set fan power. This is naturally useful if sensor is on (or near) the heating part which fan is cooling.
    Sure, this can be possible to do with some software, that came with PC motherboard, GPU or a separate program. But it may not work on Linux or have all of my custom features.
    During summer I had my fans set higher, also even did set them lower when I wasn’t using much CPU (e.g. playing games or building C++). So hopefully this feature will make controller do it now, not me.

    Since the display is 160×128 pixels, it can show graphs of RPM or Temperature over time. Even few smaller at once, but with less detail.

    ⌛Conclusions

    Well it was a cool project, not just with digital chips, I had to use transistors with other parts too. I’m glad that one of the boards I have unused got to do something everyday.
    I hope it will last long. After all, my old regulators were really basic and much easier to repair (which wasn’t needed).
    Surely this thing is heavy, probably has too many parts too, but it doesn’t matter. It’s not like my PC weight matters at all.

  • 2020-22 K.C.4 Controller ⌨️

    2020-22 K.C.4 Controller ⌨️

    ⏱️Overview

    This is my newest keyboard controller software (based on my previous one) used in my keyboard CK9 (upgraded CK6), running on Teensy 4.0 with a 2.8″ color LCD display (320×240, ILI9341 chip).

    📷Gallery

    Album with pictures here.

    ▶️Videos

    Here are videos of keyboard CK9, showing most of K.C.4 on its display:

    • View – Short video of keyboard and closeup at display.
    • Demos – Showing all demos (in auto mode): Plasma, 3D Polyhedrons with diagonals, Wave, Fire (meh), 2D waving CK Logo with shadow, and old Rain.
    • Features – A detailed look at features, no voice or commentary though. Editing mappings, sequences, testing etc.

    Link to my channel with all keyboard videos so far here.

    📂Sources

    My firmware sources are on github.
    It’s called K.C.4 (“Kacey”) simply from Keyboard Controller and 4 from Teensy version.

    The readme with all key features is visible on github. Here is more practical description.
    At end of page I wrote a comparison from my previous version (for Teensy 3.2) and quickly with other controllers / keyboards.

    📊Features

    The current code features are (and were mostly present in my previous K.C. version):

    • Display with menu, where you can edit everything possible.
    • Mapping (key binding).
      So which USB code will the physical key send to PC when pressed. There is a pick list with all common keys (and internal functions, sequences, etc) to choose from when binding. It has group colors and group filter for easier orientation.
    • Keyboard layout drawn on display.
      Shown when editing mappings (for currently chosen layer). Has a cursor to move around between keys. It’s also possible to jump to a key by pressing it.
    • Layers.
      If you hold a key, whole keyboard layout changes giving you other keys. Kind of like the Fn keys on laptop but much more useful and customizable. A common feature of custom controllers.
      Locking layers is also possible, either by lock/unlock key, tapping layer key fast or holding it for longer. Of course can be disabled and delay parameters are changeable.
    • Mouse keys.
      Keys that will move mouse, press mouse buttons or scroll mouse wheel. Also featuring acceleration with parameters for it and speed in GUI.
    • Sequences aka Macros.
      Basically any key combinations (for key shortcuts) and any sequences of key presses (for e.g. passwords). I am showing sequence previews where possible too, so when editing Mappings (for a sequence key), when picking a key from list or Testing pressed keys (if a key runs a sequence). I am also showing in sequences View, all mapped keys that run selected sequence.
    • Sequence commands are just a further extension.
      • They are special commands (beside sequence keys), that e.g. wait for few seconds (0.1s resolution), or change how slow the sequence will run (1ms resolution, useful e.g. for putty).
      • Others allow putting comments (for sequence purpose), and hiding sequence from preview (e.g. for passwords).
      • There is also a command to run other sequence(s) from this one. Also a repeat command that will do sequence (keys) continuously, until interrupted. This is e.g. useful e.g. if you want to watch a video faster, skipping parts with arrow keys after a short delay or take screenshots while watching etc. Normal keys can be used when a sequence runs too.
      • All mouse actions are available as commands too. So for example you can press a key (for a sequence) that will press button or move mouse etc. I have this way a mouse gesture done.
    • Internal functions.
      Keys to e.g. dim brightness, toggle GUI, toggle LED light, quit sequence, lock/unlock layer, change default layer etc. This a direct way, faster than adjusting parameters in GUI.
    • Testing and Setup pages.
      Useful when developing and to check if everything is working properly. Scan setup is advanced and adjust which strobe delay, scan frequency, debounce time I need. Matrix page shows the 18×8 keyboard matrix, with my anti-ghosting code working and any issues from too low strobe delay.
      It now also features X marks on keys that are available in matrix but not present on layout, this makes locating new extra keys very easy.
    • Demos and Game.
      Were already present in previous version and even on the first tiny display I used (128×64 mono). Since I have a display, and a powerful MCU, they show their drawing possibilities.
      They got extended to new resolution with few added extras. Best shown on videos, links below.
    • Clock.
      With date (uses internal RTC, needs 3V battery).
      Also showing Temperature, read from attached DS18B20 1-wire sensor (optional).
    • Statistics.
      Clock also displays (on its extended pages) keyboard use statistics:
      • Uptime.
        Time since power on or plugged in USB.
      • Late hour background.
        Will start slowly showing top of display orange at 22:00 and every 0:30 min going more visible, being yellow after 0:00 (midnight). This is to notify and motivate me to go to sleep when I sit too long at night.
      • Active time.
        I.e. how long I use keyboard without a break (at least 5 min, can be adjusted). Changes color from value.
        This is helpful to know if I’m doing something too long on PC. After all, it is recommended to take 5 min breaks every hour, it is healthy for spine and hands.
      • Inactive time.
        The opposite. Useful to know how long was I away from PC (keyboard). Also changes color when over 1 hour. Meaning I probably should have turned it off, to save power.
      • Press/min.
        Typing frequency, so how much key presses are done every minute. A colored value on left, going e.g. red at 120, yellow starting at 50.
        Also a second value below with total average since power on, with slowly changed value. So it is useful and directly corresponds to how tired will hands be. It’d be great to keep this value below 50, but sadly writing any text (e.g. chat, email etc.) or playing a game makes it go even above 150.
    • Graphs.
      As a part of clock, they show history of using keyboard (key presses/minute in the past hours). Second one is for temperature history. There are 320 points on display width and parameters for how often a value is added to graph.

    ⌨️Keyboard CK9

    I upgraded my 2018 keyboard CK6 with this bigger display and K.C.4 and it became CK9. I also added tiny extra keys, lots of them. Above Numpad, 2 rows of 8 or in other words 4 groups of 4. Surely will come handy for e.g. internal functions or could be extra F13-F24 keys for OS.
    The keyboard has visible tear on few keys already, well I use it since 2016 (was CK3 first). Nothing yet, compared to the 14 year old one (CK7/4/2).

    ✍️Motivation

    My previous version of KC and keyboards with it were quite useful and the 1.8″ color display was good too. The keyboard drawn on screen was minimal. Keys with one letter/digit/symbol had a 5×7 font, but 2 letters needed a tiny 3×5 font. It worked, but didn’t look great.
    So the new display is bigger 2.8″ and has about 2x resolution (320×240 vs 160×128).

    The main reason for this upgrade though was the new Teensy 4.0 with a MCU that runs at 600MHz. It seems to be the fastest one available (on a board with USB, ready to use). And is even way faster than all previous. I already didn’t like Arduino in 2014 when I got interested in MCUs (again), seemed like a stone age relic compared to Teensy 3, but today I can say they probably have computational power of a rock, when compared.

    The result is constant 45 frames per second almost always. This is what 600MHz MCU with SPI set at 60MHz for this display does, while using DMA for transfers and double buffered drawing (one buffer is being sent by DMA to display, while MCU draws new frame in second buffer, at the same time).

    ⚖️Comparisons

    Of course, there were many projects of using a big display with slow MCU even. A MCU not having enough RAM for screen buffer. But this means very low refresh rate (low Fps) and flickering (blinking when redrawn).

    There are few open source keyboard controllers, I think none of them even have a display, and some still use ATmega 8bit MCUs. Their requirements for program and RAM (memories of a MCU) are minimal, way lower than mine. And the price will be lower too. But the main flaw coming from it, is having to compile on PC and upload to MCU after any change. This is a big nope for me.

    📢Rants

    So for me, this is now the present (not the future anymore). And well honestly, whenever I see a custom keyboard picture I’m just asking: “where’s the display?”. In addition, seeing Cherry MX or any switches turns me away immediately.

    Because there is one more very important thing that is the light press modification. All my keyboards since 2005 have it and it’s just the default for me. Sadly all commercial keyboards are garbage in this matter and people continue to produce keyboards that have a tactile feel, 4mm travel and around 50 gram force to press. Well for me this is the middle ages era. This can cause injuries (Carpal Tunnel Syndrome). And I guess it feels awful for those having pain from using such keyboards.

    For my modding process (of reducing rubber dome keys press force and travel) pictures are in this gallery and I made a video of it recently (it is CK5).

    ✅Summary table

    For reference, here is a table with current status of all my keyboards, since start until present day:

    NameAssembly yearOriginal keyboardKeys actuation
    [gram force]
    Notes
    CK3 > CK6 > CK92016 > 2018 > 2020A4 Tech KX-10023 gCheaper, bit wobbly, but more keys
    CK2 > CK4 > CK72005 > 2016 > 2018Logitech Ultra X Flat33 gStiff foil, old, extra keys
    CK5, CK5b2015, 2020A4 Tech KV-300H9-18 gThe lightest foil
    CK12004Logitech Ultra X Flat25 gFirst, old, had extra keys,
    now only for testing, 1 row dead 💀
  • 2017-21 Build Console C#

    2017-21 Build Console C#

    ⏱️Overview

    BuildConsole (BC) is the program I created and developed at work*, using C# (syntax here), in WinForms.
    Specifically to visualize output from build process. It surely is my biggest and most useful C# project so far.
    Unfortunately I can not open source it’s code because of that*. But I can share my experience from this process.

    📷Gallery

    Screenshots here. Starting with latest version from 2021 and its features, then with older until first from 2017.

    ⚙️How it works

    At its core, BuildConsole replaces the Windows cmd.exe command prompt (terminal) and will run any command too.

    It does so, by creating a process and redirecting its output, error and input streams.
    For the core part, it was quite useful to browse ConsoleControl code and many stackoverflow answers as usual.

    The main needed part of creating process is located here with redirecting (all 3 RedirectStandard*).
    It is also using BackgroundWorker classes (e.g. outputWorker) that run on own threads and read those redirected streams, to show output immediately when it comes.

    Textbox

    I used the richTextbox control (included in WinForms) since the beginning. It turned out to be garbage for this purpose.
    It makes few easy operations really too difficult:

    • Centering view to a line not even possible.
    • Adding a text line, is slowing down the more lines it already has.
    • View always jumped a little (jittered) when adding lines.
    • Having a user selection while adding text was a PITA, got it almost working.
    • Had to be unfocused before browsing text above.
      Otherwise new added lines would jump to end (even if turned off).
    • Finding text needed a lot of code. Mark all was painfully slow.

    So I recently found and adapted BC to use the FastColoredTextBox control instead. Which is on the other side of spectrum. It is so feature packed (almost like a real IDE) that I probably only use 10% of it.
    Still, it is way faster at drawing text, has all needed features and even some extras already (like bookmarks). It needs using only fixed width fonts though (I used variable before). But it is understandable that e.g. selecting text (block mode too) was much easier to implement because of that.

    ✍️Motivation and rants

    Well everybody in company was using just cmd.exe to build (nearly all) projects, with a custom .bat file. I can’t post how it looked like exactly, but I can surely tell that at some point, it looked like a black and white TV noise. It happened when building with VxWorks started, using GCC (which is awesome). But here, it was outputting full build command, for each file, with all include paths too (like 8 lines of junk). In other words, it seemed like somebody was shoving a black and white sand at my face. Well I couldn’t even ?.

    About 6 months after I started working there, I was building a project very often, to test an upmerge of some stupidly outdated branch. This required to look for build errors in that white text sandbox. It is when I realized I seriously can’t look at this trash and I simply can make a program, that filters out and colors this junk (firstly errors).

    So after asking and getting approval, I started implementing it. Then after about 2 weeks I had a first working release. It was pretty basic, but already way more useful. It still had a couple of bugs, which I fixed later.

    Screenshot

    Now I can’t provide a real work example (also because of that*), so I’m including an artificial example on the screenshot (above). Output is similar to real and more general.
    The good part is that it has like 1 to 3 lines of each common message. Normally there are many similar lines on one screen, but only few unique. This way screenshot shows the whole process on one screen with already most of line types included.

    📊Features

    Here is a list of all program features from current version. Starting from basic, first implemented and ending with additional extras, added much later (not essential, but useful). I am describing them in place.

    🔨Basic

    • Changing font on Settings tab.
      Zooming already present, with Ctrl-Wheel or Ctrl-Num+
    • Unlimited buffer scrollback.
      cmd.exe has very small default value, and even doesn’t allow more than 9999 lines, in settings.
    • Settings in a XML file, saved in user folder.
      I’d say a standard thing. Holds both user set options and all line rules (find text, color, skip and more).
    • Combo boxes for user paths and commands.
      With buttons on left to add, delete, set as default.
    • Filtering (skipping) useless lines.
      There is a lot of rubbish, e.g. coming from MSBuild (also visible in Visual Studio), like:
      “Compiling…”, “Generating code…”, something up to date, lines with just “Microsoft Visual Studio” (a greeting commercial) and more.
      With a simple xml option to skip a line, the final output becomes cleaner and to the point.
      There is a textbox with last line present (just below console) that shows those skipped ones too.
    • Coloring lines
      By regular expression (RegEx), more info on its syntax here.
      • Later replaced (and extended) by simple find (String.Contains).
      • Advanced RegExes
        Use groups and replace (change) the incoming line (to make it cleaner and shorter).
        Still doing a simple string check first, to make the whole process faster.

    ⚙️Utility

    • Progress list. On right, it has just key build steps.
      Copied from output with time since start. It shows only 0:00 here because this test was fast.
    • Double click on a line in progress list jumps to it in console.
      This was pretty easy with FastColoredTextBox and it also centers (impossible and awful in richTextbox).
    • Find.
      Searching for text in console, with:
      find next, previous, mark all and clear marks.
    • Program icon turning green when idle, yellow when running, red when build has errors.
    • Saving current console output to a text file.
      Loading saved files into console, to view them later, in same colors.
    • Log file, optional.
      Auto incremented for more program instances.
      There are checkboxes for disabling line skip in log file or in console.
    • Tooltips with info text for nearly all controls.
    • Icons for most controls, also in menu.
    • Help menu with full documentation in about 10 chapters.
      Also Changelog and nice About dialog.
    • Opening VS solution and VxWorks with workspace
      By button (all with hotkeys), you could open the project in path quickly.
      There sometimes were more in one path, so new settings were added in xml.

    🛠️Advanced

    • Auto loading settings.xml file when it changed.
      Open by button on Settings tab, and on save in editor, program already loads it.
      Useful with many instances, all will do it. Also if one saves settings, other will load it too.
    • Queue.
      Ability to run a command in a number of paths sequentially. Done in settings.xml.
      Main thing here is that if a build fails in path the queue will quit, leaving the failing project path in combo.
    • Actions.
      Ability to start or kill a process, at command start, end or fail (build error).

    💡Observations

    So first, just as a warning, this is my point of view.

    There is a number of things I realized here, some I still don’t get and can only suspect.

    It is certain that I made an extremely useful tool. What bothers me here, is that nobody did it, in like 10 years. Well, I guess I’m the one guy who could create it so far and that is rare.

    Next, which is even more odd, some people still don’t use it. I can only suspect a few factors here, they:

    • Don’t know of it.
      It is obvious for me that even the best software (FOSS, well made and useful) will go unnoticed without promotion (or commercials) and spreading information about it. That’s why I am always announcing each new release in local emails and some also further.
    • Are too lazy to try.
      Sure all programs have a learning curve, but this one is easy and well documented.
      Sadly that can happen, even worse if it takes years. I guess I can’t really expect ability to change especially from people who work for too long in one place.
    • Are so addicted to old methods, that they can touch the future. Actually the present, for nearly 2 years. That’s for me even worse than laziness.

    ⏳Conclusions

    Whatever the case, it doesn’t matter that much.
    A software engineer has to deal with users. Sometimes even those who “didn’t even try turning it off and on again”.
    Also, developers need to balance listening to already users (wanting something) versus shouting at not yet users (to gain new ones).

    Lastly, I’m glad I could develop this tool, because otherwise I would hate building even more (now it is nice to look at, just old and inefficient). Also I’m glad if anyone found it useful (beside me).

  • 2018-19 K.C. Controller ⌨️

    2018-19 K.C. Controller ⌨️

    ⏱️Overview

    This is my own keyboard controller software used in my keyboards CK6 and CK7 (upgraded CK3 and CK4), running on Teensy 3.2 (or 3.1) with a color LCD display (160×128, ST7735 chip).
    It is continued in newer version with Teensy 4 and bigger display.

    📷Gallery

    Album with pictures here.

    📂Sources

    My firmware sources are here.
    I called it K.C. (aka “Kacey”) simply from Keyboard Controller. A catchy cool name for software is a thing, isn’t it.

    The readme with all key features is visible on github too. Here will be a more practical description.

    ✍️Motivation

    My previous keyboards CK3 and CK4 were quite useful.
    But there were few flaws that I wanted to improve. They had a very tiny display, sure it did the job, but wasn’t convenient to look at for longer. Since I based my code on existing kiibohd controller software, there were few problems. Any change in key bindings had to be done on PC, needed to build binary and upload it to MCU. That’s a long way to e.g. check if it’d be better if I swapped some keys. Not to mention doing it at work. Lastly, there were few bugs which I couldn’t spend more time trying to fix.

    So, it’d be better indeed to start writing my own code. And that’s what I did. Right now I can’t find a reason not to use my controller code. Sure, it was easier back then to get started, knowing there is an open source keyboard controller and it runs on Teensy 3.1, this is how I got into it. My code surely doesn’t have stuff present in kiibohd like NKRO support, keyboard LEDs animations and other fancy things I will likely never need. But it now does have features I wanted and it wasn’t that difficult to code them.

    📊Features

    So the code features are:

    • Display with menu, where you can edit everything possible (that I needed so far).
    • Key bindings (mappings), i.e. what USB codes will the physical key send to PC when pressed. There is a pick list with all common keys (and internal functions) to choose from when binding. It has group colors and group filter for easier orientation.
    • Keyboard layout drawn on display. Shown when editing mappings. Has a cursor to move around between keys, can also jump to key by pressing it.
    • Layers. If you hold a key, whole keyboard layout changes giving you other keys. Kind of like the Fn keys on laptop but much more useful and customizable. Surely a common feature in custom controllers (like tmk or kiibohd).
    • Sequences aka Macros. Basically any key combinations (for key shortcuts) and any sequences of key presses (for e.g. passwords). Not typing passwords myself, when my keyboard could do it, was my first reason when starting with keyboard controllers back then. Sadly even in kiibohd you couldn’t change them without rebuild and upload. This then was possible in my fork of kiibohd. To be convenient, I am showing (short) sequence preview where possible. So when editing Mapping (for a sequence key), when picking a key from list or Testing pressed keys (if a key runs a sequence). I am also showing in sequences view any mapped keys that run selected sequence.
    • Sequence commands are an even further extension. If you have an editor on display (basically a simpler editbox) one could put special commands (beside sequence keys), that e.g. wait for few seconds, or change how slow the sequence will run (useful for putty). Newest ones allow putting comments, useful if you have lots of sequences and want to rather see what it’s for, not what it will press. And hiding sequence from preview, useful if you don’t want to show important passwords on GUI.
    • Mouse keys, i.e. keys that will move mouse, press mouse buttons or scroll mouse wheel. Also featuring acceleration and even parameters for it and speed in GUI.
    • I now even have mouse commands with all mouse actions possible to add in sequences. Some stupid programs don’t allow everything using keyboard and specifically want you to click with mouse. But hey, now even this could be done automagically by my keyboard.
    • Testing and Setup pages. Those are quite useful when developing and in normal use to check if everything is working properly as intended. Scan setup is nice e.g. to check which strobe delay, scan frequency, debounce time I need. Matrix page shows the 18×8 keyboard matrix, with my anti-ghosting code working and any issues from too low strobe delay.
    • Demos and Game. Were already present in my fork of kiibohd. Now extended with new presets to color display. Best shown on videos, links below.
    • Clock with date (internal RTC, needs 3V battery) optionally also showing Temperature, read from attached DS18B20 1-wire sensor.
    • Internal functions, e.g. to dim brightness or toggle GUI, by keys on other layer.

    ⌨️Keyboards CK6 and CK7

    I then upgraded my 2016 keyboards CK3 and CK4 with bigger, color display (160×128 LCD, ST7735) and K.C. They now became CK6 and CK7. Apart from the new displays and my software, the keyboards are the same.

    The CK7 is the oldest one, comes from CK4, which in fact was done from CK2 (2006) and is now 12 years old… Still doing fine. Well this proves then, that cutting and gluing rubber domes is nothing that would decrease the lifespan of a keyboard. Even recently folded keyboard foil since CK4 works okay.

    ▶️Videos

    There are a few videos of my keyboard CK7, showing most of K.C. on its display:

    • View – Short video of keyboard and closeup at display.
    • Plasma – Quick and colorful show of presets of plasma fullscreen effect. It runs at 10-30 frames per second. Note that I overclocked Teensy 3.2 here at 120 MHz, HW SPI runs at 30MHz. My other keyboard CK6 has Teensy 3.1 at 144MHz, SPI at 24MHz, it gives about 1.5 Fps more here.
    • Demos – Showing rest of demos: 3D Polyhedrons with diagonals, Wave, Fire (not real) and the older ones: 2D waving CK Logo, Space, Balls, Fountain, Fonts.
    • Game – falling blocks (Sixtis), or my version of it. It has 11 game presets, generated blocks, possibly diagonal, with many parameters for custom games.
    • Features – A detailed look at features, no sound or descriptions though. Editing mappings, sequences, testing etc.

    Link to my channel with electronics videos here, just from my keyboards.

    ☑️Summary

    For reference, here is a table with current status of all my keyboards, since start until present day:

    NameAssembly yearOriginal keyboardKeys actuation
    [gram force]
    Notes
    CK3 > CK6 > CK92016 > 2018 > 2020A4 Tech KX-10023 gCheaper, bit wobbly, but more keys
    CK2 > CK4 > CK72005 > 2016 > 2018Logitech Ultra X Flat33 gStiff foil, old, extra keys
    CK5, CK5b2015, 2020A4 Tech KV-300H9-18 gThe lightest foil
    CK12004Logitech Ultra X Flat25 gFirst, old, had extra keys,
    now only for testing, 1 row dead 💀
  • 2015-22 Websites 🌎

    2015-22 Websites 🌎

    ⏱️Overview

    Here I gather my experiences with developing websites.
    Both this one, using WordPress and for Stunt Rally using CMS Made Simple. Both are PHP based and allow customization with CSS, HTML and PHP code.
    They are hosted on TuxFamily. For which I am very thankful.

    Stunt Rally website

    📜History

    It was released in May 2015. So 5 years later after my first game release in Apr 2010. Way to long probably. We had forum earlier, since Nov 2012, a bit late too.

    The website was started and put together by alket and finished by me. There were like 2 attempts earlier too.

    The deciding factor was finding TuxFamily (hosting without cost for CC and FOSS projects).
    Since I wanted to have a website, but didn’t want to pay for anything (neither hosting nor domain).

    Once we had a place, it was a matter of someone with experience creating the website. I had none yet, and at the time I was still very busy (developing, improving art, tracks) and didn’t want yet another distraction from that. But once I saw alket having put it together, I decided to style it and finish everything. It was also a nice learning experience.

    📊Features

    We used CMS Made Simple because it allows for more customization using templates and global content blocks.
    I wanted to have our tracks and vehicle browsers, which I once wrote using just HTML and JS. Nice small functional code, displaying images from github and statistics from XML files.
    But it is not FOSS, so I can’t recommend it and I will change to something else.

    We use DokuWiki for documentation. It is nice, not too big (like MediaWiki) and stores pages in text files not database. Editing pages is also good from what I remember.

    We also had a gallery nanoGallery3, it’s broken now. Since I’ve put a lot of screenshots (about 120 each release) and also same amount of development screenshots (total 1.8 GB, about 4200) on Picasa (Google Photos now), I wanted just a plugin that would display it. Worked well for few years.

    I also wanted a nice issue management for ToDo (sadly just my tasks at the time, I was again developing alone).
    It wasn’t probably that needed after all, but we installed Mantis BT (I used it before) and I customized it to my liking. Seems that it still can’t sort by priority on at start view, which I’d like.


    My website

    📜History

    Was released in Aug 2016 (if I remember), so more than 1 year later.
    After some experience with CMSMS for Stunt Rally I thought of making my own website and gathering my other projects on it.

    Someone recommended WordPress for it and I like it (is also the most popular).
    Probably my favorites features in it are that:

    • it auto updates itself,
    • allows installing and browsing plugins and themes directly in it,
    • and lastly the vast number of available plugins and themes available.

    ⚙️WordPress plugins

    Naturally it wouldn’t be that great without plugins (just like my Firefox).
    Here is a list of plugins I use now and what for:

    • Advanced Content Pagination
      To split longer posts into pages. Page breaks added manually where I want them.
    • Broken Link Checker
      Nice tool for automatic checking of website links, for wrong urls etc.
    • Child Theme Wizard
      For creating a child theme and letting me apply changes (in CSS and also PHP).
      When original theme gets updated, my changes will stay independently.
    • Classic Editor
      Restores the older post editor.
    • Collapse-O-Matic
      For those blocks you can expand (dynamic show/hide). Adds a shortcode for wrapping content.
    • Favicon Links (old)
      Adds those website icons before all links here.
    • Favicon XT-Manager
      To have my icon for website. Displayed before page’s title on a browser tab.
    • FooGallery (not using yet)
      For creating galleries in posts.
    • Native Emoji (old)
      Used for emoji and to add images for sections almost everywhere. Adds a drop down menu in editor.
    • Nimble Portfolio (old)
      For the gallery in projects, with dynamic filters. I had some issues but now it’s good.
    • TablePress
      For creating, editing tables and adding them in posts.
    • Table of Contents Plus
      To auto create those blocks at start with contents, from headings. Also dynamic, like expand blocks.
    • Theme Switcha
      To allow theme switching.

    👁️Observations

    I am only using free versions and I prefer as always FOSS. I don’t really like that commercial aspect of WordPress where most of stuff is just free beer. Meaning free to check out, see a lot of commercials in it, but available just to make you addicted and pay for better versions.

    There are of course few types of plugins (just like software):

    • Few big ones, very popular and existing for years.
    • Many abandoned, even when they were paid.
    • Good ones, that aren’t popular.
    • Few unpopular, and actually offering less, than the big ones that are open source.
    • And rare but my favorite type, those that are Open Source (e.g. TablePress) or turned into.

    There were (of course) many moments when I found something annoying, wanted more features, or browsed those endless plugins and couldn’t find any good, free one.

    But I’m glad I achieved all what I wanted. E.g. recently allowing users to switch themes.
    Since my default is dark, and some prefer white. I simply view every website in my dark theme, but I’m guessing most users can’t.

    I also installed a style to have dark admin theme. Then customized few colors for syntax and editor. Now I can view my website in original theme and have WordPress also dark. Before editor had white background.

    ⌛Summary

    I’d summarize it so: CMSMS is quite low level, you need to know HTML, a bit PHP and probably for more users with hierarchy. From what I saw, it has to be updated manually.

    WordPress is easier to use, nice to edit, and very popular. and with plugins can even have dynamic elements or most other need features. Huge plus is updates itself.

    There is also Joomla, I just quickly looked at, and it seems to me to be more for a platform of users to collaborate, very social.

  • 2009-18 Crystal AMP cAmp ▶️

    2009-18 Crystal AMP cAmp ▶️

    ⏱️Overview

    This is my audio player, that I implemented in 2009 (took about 2-3 weeks) and have been using ever since. Occasionally also developing it.

    It has the features I need, which were never present in any other players. And implementing them wasn’t a trouble.

    Its main purpose is to allow working with tens of thousands of files (on tens of tabs), while still being fun and a pleasure to use.

    📂Sources

    The code is here. With also downloads on Releases tab.

    Unfortunately only for Windows and using old coding style (C++03). Updated, newer version here.

    📊Features

    The list is long (as usual) and also has many helpers:

    🔨Basic

    • Playing all needed (by me) formats
      • WAV, FLAC, OGG, MP3, MP2, MPC, APE, WV, WMA
    • Playing Music files (modules, not MIDI)
      • MOD, XM, IT, S3M, MTM, UMX
    • Global Hot Keys
      With settings page to configure. Using Windows Hook.
    • Help page
      With all keyboard and mouse shortcuts listed.
    • Find
      Song name Searching, on all tabs.
      Keys for go to next, previous. Same as for bookmarks.

    🛠️Utility

    • Tabs
      With any number of tab rows and columns. I currently use 12 x 3.
    • Bookmarks
      Many levels (6), changing colors. Also for tabs.
    • Song Rating (-3 to +5)
      Visible as symbol on left and background in one line.
      Optionally, saved in filenames (at end, also with bookmarks). Stays, no matter where files are.
      No need to worry about playlist or when moving, renaming, updating, copying folders.
    • Rating Filtering
      Directly in playlist. It shows only songs rated in current range.
    • Visualizations
      Big, fast (60 Fps) and informative. Types: FFT, Oscilloscope and Spectrogram.

    📊Details

    • Informative Slider
      That isn’t just a plain block, but actually shows a preview of whole playlist.
      With:
      • Cursor and playing positions
      • View area
      • Bookmarks and search results
      • All songs rating preview
    • Time text coloring
      And useless zeros not displayed. It is quite useful.
      You can quickly see (on screenshot): longer songs, and how long are songs in albums, just from the colors.
      I have now about 10 colors for interpolation, every 1 to 1.5 minutes. Test mode with Ctrl-I.
    • FFT. Default small FFT uses 1024 points and in full screen 4096.
      Always 1 pixel line per 1 FFT point, no garbage smoothing slowing it down or wide bars with peaks.
      It uses Direct3D9 directly, with HLSL 2.0 shaders. So it draws using GPU like games, not CPU like old programs.
    • Colored bitmap fonts.
      Custom, for drawing text, from Crystal Font.
    • Fast and smooth display.
      Always achieving 60 FPS (would more, but limited by VSync).
    • Drop and insert.Normally done at cursor, with Shift at top, with Ctrl at end of playlist.
      Faster playlist managing through shortcuts.
    • Always 1 row per song (or folder).
      Showing song rating and bookmark level in just 1 line as background so you can still see as many as possible on screen.
    • Grouping for directories, automatic.
      With 3 display modes:
      • Directory
      • Directory / Parent
      • Full path on disk
    • Directory hiding or showing +
      Regardless of rating of songs inside.
    • Extended mouse areas.
      Song seek, previous/next buttons, playlist slider.
    • Options for keyboard song seek (seconds) and volume step (%) values.
    • Errors count on player, details in .log file.
    • Copy selected / all files to other path (as attribute copy in .xml) by F12.
    • 5 Font sizes (for playlist and others).
    • Whole views loading and saving.
      Window position, size, visualization etc.
      Quickly changing view with Alt-1, Alt-2, .. keys.
    • Full custom look, no title bar or buttons for window.
      Moving and resizing window with Shift-RMB and Ctrl-Shift-RMB.
      Stays in chosen place, not moved by accident and restored with view keys (Alt-1 etc).

    📜History

    I started with audio players by using WinAmp 2, about the year 2000 after moving to Windows 98. I stuck to its look and still see this 1 short column view as the one (and only acceptable) way of showing a list of song titles with their times. It doesn’t waste too much space to see a playlist. I never stepped out of the WinAmp 2.5 (or so) skins either.

    Later I moved to AIMP (2.5 I think, in 2008). It was somewhat better. After customizing the skin I got it to look cool (dark blue). The main advantage for me was that it could have tabs. After tweaking it (which shouldn’t be needed), I got it to show 7 tabs. More looked too tight and there was only 1 row possible.

    ⭐Rating

    Back then I also started using song rating, but I didn’t want to waste an additional line for that (showing half of tracks in playlist) and went for manually adding symbols to song names. That was very tedious.

    ✍️Motivation

    So firstly I wanted more tabs and rows with them. This should be just a matter of clicking buttons, to increase  /decrease rows or columns.

    Secondly, for me the idea for rating symbols in filenames was very good. Whenever I’d change directory, move, rename, copy or whatever, I’d still have my ratings saved. And wouldn’t need to care about playlist anymore too.

    This motivated me to code my own player which deals with both problems by itself. Also for future, to have any feature I wanted when I can code it.

    ⌛Conclusions

    Well 7 tabs quickly weren’t enough for me. My count gradually increased from about 21 in 2009, in 2016 reached 38 in 3 rows. I recently reduced them to 32.

    I’d say it’s the small details (and so easy to implement) that make me like it so much (and not even bother looking at any other players since then (except for a sensible chuckle)).

    Since a while I wanted to port it to GNU/Linux and did once convert most of it into SFML. At first it wasn’t stable and occasionally had weird bugs.
    But the project is working now with SFML, ImGui, and as cAmp2 here.

  • 1997 Last DOS Games 🚁

    1997 Last DOS Games 🚁

    ⏱️Overview

    Here I will gather 2 last games I made in DOS. Each of them also featured an editor, for creating (drawing) maps.
    Still in resolution 320×200 (256 colors) and in Turbo Pascal 7.0 with parts in Assembler. This was on PC with Pentium 120MHz. I tried 640×400 later, but it was too slow.

    🚗Car game

    📜History

    The first game I just called Porsche. Poor name, it’s a brand name, so it can’t be used. But I was a kid and had a model and a poster of such car.
    On the most bottom left screenshot there is a first, starting version of this game.
    This is what’s left. Very sadly, I have lost the final version (had no others) about 1 or 2 years after.
    But I won’t forget how we played it, in the summer of 1997 with elementary school colleague(s).

    📊Features

    Game was for 2 players only and had split screen. Cars were in center, map moved below. Similar way to my earlier 2 Planes game here.
    Maps had 3 sizes (square, in pixels): small (250 x 250), medium (450) and big (700). Due to only 640kB memory big maps didn’t start in IDE, so I could only test the game on medium.

    It was a simple, rally type driving with lots of sliding (especially in winter and autumn).

    The final game had 87 tracks in 7 sceneries: Forest, Jungle, Desert, Winter, Australia, Autumn, City (latest new: Mountain).
    About 18 of them were actually just circles, ellipses and rounded rectangles. These were real fun to play with many laps.
    I still have all our track prototypes drawn on paper. They lasted way longer than any of my PCs.

    There was an editor for creating tracks, where I would draw road:

    • straights and turns,
    • bridges or dips
    • jumps (car flew for a while without control, longer with more speed at start)

    Then place trees (also all of 9 types of vegetation at once), water, etc.

    There were also few graphic attractions like:

    • staying tire trails
    • dust behind cars (on deserts)
    • screen blur effect in autumn (with more speed), kind of like rain.

    Next, gameplay features were areas, with:

    • water
    • mud (slowing down)
    • grease (less control and random turning)
    • ice (no control)

    These were already present in my earlier game from 1996.
    Water puddles in autumn were even more slippery than the wet road.

    Then were some funny things:

    • stacks of tires – didn’t damage car, but bounced it back and sounded funny
    • blocks of hay – helping on road, or side, by slowing car down, e.g. before sharp turns
    • hedges – were along road, safe, didn’t bounce or damage car
    • sharp bushes damaging car (possible on road)
    • city tracks could have crosswalks with people (few pixels), you could smash

    Game featured sounds of course. The collision detection was quite basic (bad) but worked. The car just bounced back after hitting anything (trees and such), in the opposite direction it hit.
    We had simple damage slowing down cars. Tracks had repairing areas, car didn’t need to stop just drive over them.

    So the screenshots on left, with car in center, show actually the next version Porsche II, which was started later but never finished.

    🚁Shooter

    The second game, a top view scrolling shooter, again I poorly named Rambo II. Was meant to have similar jungle style to that movie.

    I did the basic start of game, 2 enemy planes, 3 weapons for player’s helicopter, animating water (palette), sparks on hit, and explosions.
    And the editor for map was quite good. I was drawing terrain levels, then few algorithms were adding noise, blurring few times to make it look like foliage (grassy hills). Then I could put rivers, with increasing width, starting from tiny streams. Rivers had auto added rocks on sides. On screen there are 2 types visible, clear blue and olive.
    There was also a separate tool, visible in the middle, just for putting enemy ships and picking their paths in places on the map. It was possible to move the map (in time) to show where ships will be.

    Once I showed this project in class (technical high school), I didn’t have to do anything, besides attending. It was very cool.

    ⏳Conclusions

    Since the loss (of Porsche with 87 tracks) was a result of my stupidity, I’ll gather the faults that led to it, with what I learned to do below:

    • HDD fail (the worst failing Seagate 1GB). I then even bought a second of same type (was cheaper) and it failed later too.
      Well today I’m checking for fail rates of HDDs before I buy and I don’t go just for the cheapest.
      For some time I made backups on CD/DVD/BR, some lasted more than HDDs. But now I don’t, recorders cost the same as HDDs. Eventually all HDDs fail, and I think I had maybe 2 every 5, lasting longer than I needed it. Now I have one HDD more, just for backup (of important data).
    • I made just one backup copy, on floppy disks, using a freaking self extracting RAR (binary exe). Without the 1st I can’t extract any later.
      I never used self extracting type after, and also forgot about RAR after I found out 7zip, which is also supported in DoubleCommander.
    • I have overwritten the backup, the first 8 of 23 parts. I shouldn’t ever do that. There were several ways to avoid this. Worst is that it was actually a suggestion from, well the stupidest teacher I had. The one who also said “you can overclock your CPU, no problems” and my motherboard died after. Later he even ended in jail for stealing huge money sums, also some from students.
      So yeah, as the saying goes: “never follow advice from people who you wouldn’t trade places with”.
    • I never made any copy of the source code during. It was 65kB for game and 68kB for editor.
      This is so small, that I should have copied it every day. Later I started just making archives often, from just my sources.
      And since I started with github I have repositories of my main projects there.
    • I would even loose everything from DOS (my projects in Turbo Pascal) with that stupid HDD, if I didn’t copy it all to my friend. I think it was my idea, so he could learn from it. He kept it and then I could restore it back.

    Finally, I used few concepts of this car game and many actual tracks in our 3D game (started 13 yeas later) Stunt Rally. And since Stunt Rally was really well made and its track count reached 176, I don’t miss my 1997 game so much (which took 2 or 3 weeks to make). While Stunt Rally had (over) 5 years of development, and I wouldn’t make it so only by myself.