Easy KiCad PCB panelization with kicad-util

There are multiple panelizers available for KiCad, but only one is suitable for easily placing multiple oddly-shaped PCBs onto a panel: the kicad-util panelizer.

You simply place the PCBs next to each other and draw lines between them on the Eco1.User layer. Then run a kicad-util command voila; the lines are transformed into mouse-bites.

Unfortunately, kicad-util is not compatible with the updated PCB format of KiCad 6, so the drawn lines are not converted to mouse bites anymore.

Luckily, a merge request contains the fix, but the kicad-util creator is not available anymore. Although the contributor created his fork, the .jar file is not recompiled, so the fixed version is still quite inaccessible for most users.

Given the above, I recompiled the fixed kicad-util version with the mvn package command and made the .jar file available. I use it as:

java -jar ~/bin/kicadutil.jar pcb -f=myboard.kicad_pcb panel --inset=0 --hole=0.35 --pitch=0.7 --width=2.5 --fillet=1

WooCommerce / WordPress fejlesztot keresunk reszmunkaidos tavmunkaban

WooCommerce / WordPress fejlesztot keresunk reszmunkaidos tavmunkaban az Ultimate Hacking Keyboard webshop tovabbfejlesztesehez.

Szia! Mi vagyunk az Ultimate Gadget Laboratories Kft., egy innovativ startup, es az Ultimate Hacking Keyboard billentyuzetet fejlesztjuk, gyartjuk es ertekesitjuk. 100%-ban magyar tulajdonu ceg vagyunk es Magyarorszagon gyartjuk a billentyuzetunket.

Monda Laszloval fogsz dolgozni, aki az UGL alapitoja es vezetoje, es akkor jelen hirdetes irojakent at is terek egyes szam elso szemelyre. En magam is fejleszto vagyok, de manapsag inkabb fejlesztesi vezetokent es cegvezetokent tevekenykedek, igy egyre tobb feladatot, peldaul a webshop fejleszteset is delegalnom kell.

A webshopunk mar jol mukodik, de folyamatosan fejlesztjuk. A fejlesztesek elsosorban backend, masodsorban frontend jelleguek, reszben inkrementalis javitasok es reszben jelentosebb funkciok hozzaadasa.

Peldanak okaert, a user dashboard-ban kell egy olyan feature, amellyel a vasarlok megvaltoztathatjak a termek parametereket, amig a rendelesuk be nem sorolodik gyartasra.

Egy masik szukseges feature, hogy a webshop inkrementalis szallitasi koltseget szamoljon fel, ha egy vasarlonak fuggo rendelese van, amit meg nem szallitottunk ki, es kozben uj rendelest ad le.

Tobb, a fentiekhez hasonlo feature-re szuksegunk van, amelyekkel uzleti folyamatokat automatizalhatunk, es minimazalhatjuk az operativ teendoinket, tehat hatekonyabban mukodhetunk.

A webshopunk fejlesztesehez keresunk lehetoleg hosszu tavra kompetens fejlesztot, aki melyen ismeri a WordPress/WooCommerce API-kat, onalloan tud dolgozni, es torekszik az igenyes, karbantarthato kod irasara.

A sajat fejlesztesu pluginjaink es a hozzajuk tartozo feladatok privat GitHub repokban vannak tarolva. Nalunk nincsenek hataridok, de a tapasztalataim alapjan erdemes lenne legalabb havi 10-20 orat foglalkozni a projekttel, mert az alatt erdemben nem lehet haladni.

Ha erdekel a fenti lehetoseg, dobj egy emailt a laszlo.monda kukac ultimategadgetlabs pont com cimemre, amelyben kerlek ird le a relevans kompetenciadat, projectjeidet, rendelkezesre allo idodet es fizetesi igenyedet.

Elore is koszonom jelentkezesed!

My Wear OS watchface

Not long after purchasing my Huawei Watch, I got a bit obsessed about finding the perfect watchface. I was looking for a modern yet functional watchface.

I found WatchMaker quite early on, and was blown away by the vast amount of watchfaces and customization options it offers. After browsing through thousands of watchfaces, I found the ChristiaanDigital watchface which I liked a lot, but it still wasn’t exactly what I was looking for.

Given the customization options of WatchMaker, I started to tweak the ChristiaanDigital watchface, and eventually ended up with my own CDM watchface.

Upgrading to a smartwatch was definitely worth it. I’m not completely satisfied with Wear OS, but it’s a huge leap forward compared to my previous non-smart watch.

I wish Google didn’t ditch Hangouts on Wear OS, and it’d be great if fitness tracking just worked automatically. On the hardware side, it’d be awesome if more manufacturers offered watches featuring sapphire glass, as I won’t purchase anything else due to potential scratches and breaks.

Hope you found my watchface useful. Enjoy your smartwatch!

Introducing Ultimate Hacking Keyboard

I’d like to take the opportunity to show you the trailer video of the Ultimate Hacking Keyboard, a high-end mechanical keyboard of which I’m the lead developer. Our keyboard is going to be kickstarted soon so you’re more than welcome to share it, follow us and subscribe to our list to get notified when our campaign starts. See you on UltimateHackingKeyboard.com! Cheers!

Introducing WordPress static blog generator

Over the years I’ve read a fair number of blogs some of which suddenly disappeared which saddens me because those were valuable resources. I think many geeks swear on self-hosting their blog because of the advanced customizability and control over every single aspect of their blog. I cannot blame them because I’m one of them.

The problem is that this way your blog isn’t very resilient. What happens if you get hit by a train? That’s right, your bank account will eventually get depleted and your hosting provider will shut down your server, making your blog vanish. You may say that I’m being absurd talking about death but if you consider your blog your legacy just as I do then you should also be concerned.

After all this mumbo-jumbo let me introduce you WordPress static blog generator. According to my knowledge this is pretty much the most convenient way to back up your WordPress posts, pages and comments as static HTML pages which you can easily browse and push to GitHub Pages, preserving your blog for eternity.

DXF to SVG to KICAD_PCB converter

Recently, I’ve written dxf2svg2kicad, a highly polished online DXF to SVG to KICAD_PCB converter which I’m very proud of. To be explicit this tool converts:

  • DXF to SVG
  • SVG to KICAD_PCB (used by KiCad EDA)
  • DXF to KICAD_PCB

Speaking to the technical-minded, my tool runs 100% on the client side and I used lots of cutting-edge web technologies to make it happen. You’re welcome to check out the code on GitHub.

Nowadays I simply publish my work on GitHub and rarely blog – I’ve created this post solely for SEO purposes because given the usability of my tool Google should rank it higher.

How to rule remote shell sessions with tmux and mosh

If you’re like most ssh users when your connection breaks it’s bad news for you. Not only do you have to reconnect but your session gets destroyed and you have to make all the moves to restore the previous state. This doesn’t have to be that way. I’d like to say some words about two tools that solve these problems in the most elegant way possible.

tmux

tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached.

In the world of tmux there are windows and panes within windows. You can think of tmux windows as workspaces on the desktop that are aligned in a horizontal manner. It’s like having a number of virtual monitors next to each other each running different shell sessions. You can move across these windows as desired. With the use of panes you can split individual windows horizontally and/or vertically as desired, each pane housing a different session. This is pretty useful for tailing various log files in different panes and monitoring them at once.

You simply have to run the tmux command to create a new tmux session. Once a session exists upon reconnecting over ssh you have to invoke tmux attach to reconnect to your already existing session.

If you’re like me you may want to use tmux by default upon ssh’ing to servers. To make this happen you have to include export LC_TMUX_SESSION_NAME=yourusername into your ~/.bashrc and wrap scp on the client side and invoke tmux automatically on the server side. On a related note you can also take a look at my tmux.conf which I believe defines more intuitive shortcuts than the default configuration.

There are a number of alternatives to tmux that I’d like to list starting with the most powerful towards the least powerful. GNU Screen is yet another terminal multiplexer but its feature set, usability and configurability is rather limited compared to tmux. dtach is like a minimalistic tmux featuring one pane inside one window and it only provides a minimal set of options. Finally, with the use of the nohup command you can make your (typically long-running) script immune to hangups and hence it can survive ssh disconnects.

mosh

Remote terminal application that allows roaming, supports intermittent connectivity, and provides intelligent local echo and line editing of user keystrokes.

mosh is the other piece of the puzzle leading to the remote shell nirvana. After apt-getting mosh on the client and mosh-server on the server instead of invoking ssh yourserver.com invoke mosh yourserver.com. From this point on you don’t have to worry about reconnecting to ssh or having to wait for the server to echo back your characters anymore.

My bias lighting setup

It should be no news for any well informed geek that bias lighting is good for your eyes. I’ve just recently implemented my setup which was surprisingly easy to put together. It only needed a self adhesive LED strip, an AC adapter, a switch and some wires. Click on the album below for your viewing pleasure!

bias-lightingClick to see the album

Caching static server-side resources the easy way

Static resources are static because those never change thus always should be cached forever, right? Well, more often than not some of those files eventually change in which case the files in question must be renamed to be updated by the client which is a pain, especially if you use revision control (which you should).

Lately I came up with a new way to cache static server-side resources as efficiently and effortlessly as possible. Consider the following nginx configuration fragment:

From this point on you can reference a resource like http://yoursite.com/images/background.png as http://yoursite.com/static/1/images/background.png to be cached forever which you can change to http://yoursite.com/static/2/images/background.png in case the contents of this file gets updated. Alternatively, instead of incremental numeric values you may want to use the hash of the current Git commit or any other identifier.

Wifi is not designed for seamless switchover

A while ago I embarked on the quest of extending wifi coverage to our whole backyard.

Having a venerable ASUS WL-500GPv2 sitting at the front side of the house, my natural approach was to place another access point (AP) near the back side of the house which would cover our whole backyard. That is, in theory. As it turns out in reality things are a little bit more complex.

After installing the AP I was getting complaints from my sizeable user base (my sister and my mother) that the connectivity of their smartphones and tablets got shitty beyond imagination. After investigating this problem I realized that upon entering the house from the backyard wifi devices connected to the AP and as they moved towards the front of the house this connection stayed alive despite the router having a much stronger signal level at this point than the AP did. I even set up a multiple-AP (roaming) network configuration as suggested but the same thing was happening, only that I couldn’t see right away which AP I was connected to.

wifi-switchover-fail

I was dumbfounded by what I saw. I assumed that wifi devices always (re)connect to the AP with the strongest signal level. Wouldn’t this be the Right Thing to do, after all? Well, not so much.

The first problem is switchover lag. Wifi is not GSM. With GSM you can travel through the country, move across dozens of cell towers without noticing a thing. With wifi, switchover lag is noticable and is highly unwanted when using streaming applications, especially VoIP.

The second problem is deciding when to switch over. The hardcoded client policy is to switch over when the current AP becomes totally unreachable. Another policy could be switching over as soon as there’s another AP in the vicinity with a slightly stronger signal level. This wouldn’t be optimal either, however. Just imagine being located right between two APs and taking some steps back and forth and back and forth. That’d result in lots of unwanted switchovers. I guess manufacturers could put two wifi transceiver into each device to solve this issue but it probably wouldn’t justify the price and this method would draw excess battery power.

Given that clients implement a hardcoded switchover policy let’s see what could we do on the server side. A buddy of mine who worked as an admin at an ISP suggested using RouterBOARD appliances with which one can specify a dB treshold below which the appliance disconnects the relevant clients so those clients can switch over to another AP in the vicinity. Unfortunately, such uber feature is out of reach for most and I don’t know about any other devices implemeting this feature, not even OpenWrt.

So what did I end up with? My buddy also suggested placing my router to the attic and ditching the AP. Now the overall coverage is better than it used to be. It’s not perfect but the signal is almost always within reach on our property. As a rule of thumb one should place the wifi router to the highest and most central location. I’m pretty happy overall, althought a wireless-N MIMO router would probably boost signal levels like crazy but I’m in savings mode right now and I don’t wanna spend a ton of money on an ASUS RT-N66U Dark Knight until it’s totally justified.