GeistHaus
log in · sign up

https://jacek.zlydach.pl/blog/feed.xml

rss
20 posts
Polling state
Status active
Last polled May 19, 2026 01:58 UTC
Next poll May 20, 2026 00:53 UTC
Poll interval 86400s
ETag "67811836-13240"
Last-Modified Fri, 10 Jan 2025 12:53:10 GMT

Posts

Blocking distractions with a Mikrotik router
Mikrotikprocrastinationproductivity
Quick tip on how to use a Mikrotik router to filter unwanted sites on select LAN devices, within specified time range.
https://jacek.zlydach.pl/blog/2020-05-25-blocking-distractions-with-mikrotik-router.html
Introducing Tracer - A Tracing Profiler for Common Lisp
programmingCommon LispLispperformancegamedev
A tracing profiler is a great thing to have, so I wrote one for Common Lisp. Or at least for SBCL, for now.
https://jacek.zlydach.pl/blog/2020-02-04-introducing-tracer-a-tracing-profiler-for-common-lisp.html
Static local variables in Common Lisp
programmingperformanceCommon LispLisp
How to make a Common Lisp equivalent of a C/C++ static variable, and when such thing is useful.
https://jacek.zlydach.pl/blog/2020-01-11-static-variables-in-common-lisp.html
Advertising is a cancer on society
advertisingmarketingcancerbeliefsprivacysurveillance
A detailed explanation of why I keep saying that advertising is a cancer on modern society.
https://jacek.zlydach.pl/blog/2019-07-31-ads-as-cancer.html
Algebraic Effects - You Can Touch This!
algebraic effectsprogrammingJavaScriptCommon LispLispScheme
The so-called "algebraic effects" aren't only theoretical work; a subset of it has been used in practice for decades. In this post, I'll show you where and how.
https://jacek.zlydach.pl/blog/2019-07-24-algebraic-effects-you-can-touch-this.html
Serving directories over HTTP with Emacs
EmacsEmacs Lisp
A handy utility for serving contents of files and directories locally, over HTTP, with Emacs.
https://jacek.zlydach.pl/blog/2018-05-29-serving-directories-over-http-with-emacs.html
Going far, going small
careerspacebiologybiotechNewSpace
An introduction to and rationale of my planned career pivot to spacetech and/or biotech.
https://jacek.zlydach.pl/blog/2018-01-06-going-far-going-small.html
Lisp, Raspberry Pi 3 and ditching Wordpress
Old blogwordpresswebmasterkaLispCommon LispEmacsorg-modeRaspberry Pihardware hacking
Few quick updates. I've been playing with Lisp and Raspberry Pi some more recently. I got an external TFT screen (a cheap Chinese one) to work and managed to fire up some lispbuilder-sdl example programs. You can see it in action in this YouTube video. By the way, setting that TFT screen up was a bit annoying and is something I plan to describe in full for posterity. Speaking of which, yeah, I got a Raspberry Pi 3. It's just like RPi2, except it has on-board Wi-Fi and Bluetooth - so it's much more convenient to use. SBCL still cannot into threads on ARM, so for now I recommend sticking to CCL, as previously advised. Oh, by the way, I made some bindings to WiringPi 2 for Common Lisp. Also, Nyan Mode got an update too (and there's an experimental click-to-scroll feature on the dev branch)! Now for the big news - I'm finally through dealing with Wordpress. I was planning to eventually ditch it one day and migrate to a simpler system of my own making (written in Common Lisp, of course!), but the recent hack I fell victim of made me convinced that the change must happen sooner rather than later. I'm not sure how the new blog / home site will look like, but I have some design goals:
  • Maintaining of original URLs of all archival posts. Cool URIs don't change, etc.
  • Efficiency. The blog itself will probably be handled by a static site generator (I'm exploring options at the moment). I don't see the reason to burn so much coal a Wordpress invocation does for what amounts to a bunch of static page with text and images.
  • Emacs-based management, via Org Mode in particular. I hope to reach the ability to write posts purely in Org Mode, and have them published straight from Emacs, automagically updating stuff like sitemaps and RSS feeds.
  • A decent support for storing essays and wiki-like-articles (that require versioning and easy viewing of change history as well as linking to old versions).
See you soon!
https://jacek.zlydach.pl/blog/2016-04-23-lisp-raspberry-pi-3-and-ditching-wordpress.html
Getting AltGr to run on Ubuntu under VirtualBox on Windows
Old blogWindowsporadyLinuxStumpWMUbuntuVirtualBoxkeyboardproblem
I need to dump this arcane piece of knowledge somewhere so it will get indexed by Google and maybe make things easier to find for the next person who has this problem. So you installed a Linux in a VirtualBox under Windows machine, and now your Right Alt (aka. AltGr) started to work like CTRL under Linux? Here's a quick solution that makes no sense whatsoever, but works. Go to the VirtualBox Manager window, open File->Preferences, and under Input tab uncheck the Auto Capture Keyboard option. Ta da, your AltGr should be working properly now. As a side effect, your Alt+Tab combo will stop working, being captured by Windows now. Also, make sure that when a VirtualBox pop-up shows up, asking you to capture keyboard, you click Cancel - otherwise AltGr will get back to being broken again until you "uncapture" input, by e.g. switching to host Windows system. Source: about an hour or two in total wasted on three different occasions to find this SuperUser answer. Now that it's fixed, I can finally get back to playing with StumpWM.
https://jacek.zlydach.pl/blog/2015-03-09-getting-altgr-to-run-on-ubuntu-under-virtualbox-on-windows.html
Lisp on Raspberry Pi 2, Part 1 - Setting Up
Old blogporadyrobotyLispCommon LispEmacsRaspberry Pihome automationhardware hacking
(As you might have noticed, I started writing some posts in English now. I've been meaning to do that for some, maintaining two language versions for each post, but this has proven to be too much work. So for now, posts that may be useful for a wider (international) audience will be written in English.) [trigger warning: Lisp] So recently I got myself a brand, new Raspberry Pi 2. It's the first time I'm playing around with such platform, so I'm still exploring the possible applications. And of course the, first thing I thought about is how to get a decent Lisp working on it. This series of posts will describe my experiences with the process of setting up a Lisp environment and using it for basic hardware development. For those of you who don't know, Raspberry Pi is a small computer based on ARM architecture, with storage provided via SD card and a bunch of general-purpose IO (GPIO) pins for interfacing with other electronics. It's two main features are low power requirements and being something between an Arduino and an actual PC. Setting up the Pi I don't want to go into too many details, as the process is well covered in various tutorials. What I did is, I took the SD card from my cell phone (Raspberry Pi 2 uses microSD cards instead of SD the previous one required) and flashed it with Raspbian, a Debian Linux derivative. I plugged a screen and a keyboard to it on the first run, and later just left it running headless attached to my home router, configuring the latter to always assign the same IP address to the Pi. Since Raspberry Pi is an ARM machine, my choice of Common Lisp implementations were limited. Fortunately, the two most popular (and the ones I like the most) implementations - SBCL and CCL - both support ARM architecture[1].[1] - There's also ECL (Embeddable Common Lisp) that apparently works well on ARMs, but I haven't looked at it in like three years, so I decided to skip it for now. I favour those two implementations because they are the most robust and performant of those freely available[2]. The conventional wisdom goes like this: SBCL is the best choice on Linux, and CCL is the best on Windows[3] and MacOS. But in case of Raspberry Pi, even though I'm running Linux, I ended up using CCL[2] - There're Allegro CL and LispWorks that are cool and professional and all, but I don't quite feel like shelling out money for it just yet. Also, I don't think they work on ARM. instead of SBCL, because the former has native threading support while the latter does not (for now). And threading makes all the difference - Raspberry Pi 2 has only 900MHz processor, but it's quad-core. You can really feel the speed gains coming from parallelism when doing any kind of interactive work. For the sake of completeness, I shall describe the installation of both implementations.[3] - Mostly because SBCL on Windows tends to crash and print messages about some Kitten of Death. SBCL There is nothing fancy in SBCL installation process - just go to the SBCL download page and download the newest build for the Linux ARMhf platform. Extract the downloaded file (tar -xvjf filename.tar.bz2, in case you don't remember ;)) and follow instructions from the INSTALL file. CCL Go to the CCL download page and fetch the newest CCL for ARM. Unpack it (tar -xvvzf filename.tar.gz this time ;)). You will have an armcl executable file, which is the CCL executable. However, if you go and actually run it, it may crash. If so, it means you'll need to rebuild the Lisp kernel for your platform. Go to the lisp-kernel/linuxarm directory. Make sure you have an uncommented line in the float_abi.mk file that says FLOAT_ABI_OPTION = -mfloat-abi=hard. Then, run make inside the lisp-kernel/linuxarm directory. After the compilation process finishes, you should have a working armcl executable. Working with Lisp on a remote machine Having a Lisp on a Raspberry Pi is a good excuse to learn how to develop a Lisp program remotely. This involves editing remote files on a local machine and executing Lisp code remotely. Since the best IDE for Common Lisp is Emacs with SLIME, let's see how this operating system editor can help us. Connecting to a remote Lisp First of all, you need to make sure you have fresh versions of SLIME on both your Pi and the machine you want to connect from. Use Quicklisp ((ql:quickload :SWANK)) on the former, and Emacs package manager (or direct download) on the latter[4].[4] - You could also install SLIME locally via QuickLisp. Do a (ql:quickload :quicklisp-slime-helper) and follow instructions from here. I've heard that this is *the* recommended way of installing SLIME now, but I haven't tested it yet. After that's done, you need to run a SWANK server in your Lisp instance and make sure you can establish a secure connection with it. A good way to approach it is to use SSH port forwarding. If you want to connect to your Lisp instance, establish an SSH connection with port tunneling, using a command like this:
ssh -L 8885:localhost:4005 user@raspberrypi
It's just a normal SSH connection, but additionally, it will securely map the port 8885 on your machine to the remote 4005 port. On the remote side, inside your Lisp image, run the following code:
(swank:create-server :port 4005 :dont-close t)
It's a good idea to run your Lisp under screen or tmux, so that you can leave the program running and only connect (with port forwarding) to the Raspberry Pi when you need to do actual development. When you've done all this, all that remains is to switch to your local Emacs instance and do M-x slime-connect and connect SLIME to the port 4005. You should be able to execute code on Raspberry Pi via Lisp REPL now. With SLIME connected, you'll also be able to use shortcuts like C-c C-c to dynamically evaluate any opened code inside the remote Lisp image. Editing code remotely Developing on a remote machine involves changing code on it. You may of course set up git repository and clone it on both local and remote machine, but doing commit-push-pull dance to move the code around is tiring. Fortunately, Emacs gives you a way to directly edit files on a remote machine. This feature is known as TRAMP (Transparent Remote Access, Multiple Protocols), and comes with Emacs by default. It allows you to edit files over various protocols as if they were just local files on your hard drive[5].[5] - It's primary use, however, seems to be editing files as a superuser. If you want to access a file with superuser rights, instead of launching a new Emacs instance with sudo, you can use TRAMP like this: C-x C-f /sudo:root@localhost:/ - at this point you will be prompted for your password and, after successful authorization, you can continue typing in the path of the file you want to visit. To use it over SSH with the Raspberry Pi, open the file using C-x C-f, but enter a path like this:
/ssh:user@raspberrypi:/
You will be then prompted for password, and after successful authorization, you will see that you're able to access remote device's file system. You can now open your remote file, and any changes you save to it will be written directly on the remote device. Emacs of course caches the established connection, so you don't have to give your password again to save data or open more remote files. Note however, that there's a caveat - after you leave Emacs idle for some time (like, half an hour or more) the connection timeouts, and it's easy for Emacs to get stuck trying to reconnect. It's a weird problem I don't have any solution for yet. There is a lot written about it on Emacs Wiki though, so make sure to check it out, and in the meantime, be prepared to kill Emacs after you're done with remote work. Using Lisp for something interesting So now that we have a working Lisp on a Raspberry Pi and a proper development setup, what interesting things can we do with it? Well, this post is already too long, so I will leave that for later - but as a little sneak peak, so far I've managed to run a webserver that exposes readings from internal SOC temperature sensor and external thermometer. Stay tuned for this and more lispy stuff on Raspberry Pi.
https://jacek.zlydach.pl/blog/2015-03-07-lisp-on-raspberry-pi-2-part-1-setting-up.html
Hacking the life-CAP
Old blogHumoruczuciaCAP Theoremrandom
(tekst czekał na opublikowanie sporo czasu; dopiero teraz udało mi się go jednak poprawić i dokończyć) [1] Przez "hobby" rozumiem tu zajęcie, które ma ogromną wartość dla danego człowieka ale nie jest jego głównym źródłem utrzymania; "związki" obejmują relacje romantyczne i rodzinne - dziewczyna, żona, najbliźsi krewni.Ostatnio Bambucza na łamach swego bloga przedstawił interesującą koncepcję pod nazwą "life CAP theorem". Zachęcam do przeczytania jego artykułu. W bardzo dużym skrócie, znany w kręgu bazodanowców CAP theorem mówi: "spójność, dostępność, odporność na podział - wybierz dwa". Life-CAP analogicznie głosi, "praca, hobby, związki - wybierz dwa"[1]. [2] Zabawna obserwacja - angielskie słowo cap oznacza górne ogranicznenie nałożone na jakiś zasób lub czynność.Bucza w swoim tekście sugeruje, że jesteśmy skazani na niewolnictwo wobec life-CAPa, który narzuca ograniczenie[2] na to, na jakich problemach możemy się skupić w życiu. Przychodzi mi jednak do głowy kilka innych podejść do tego problemu. Faktycznie wybierz dwa [3] Nie wydaje się to najrozsądniejsze z punktu widzenia wychowawczego, dlatego coraz więcej bogatych ludzi decyduje się na użycie swych zasobów do stworzenie dzieciom jedynie siatki bezpieczeństwa, równocześnie zachęcając je do przedsiębiorczości i zarabiania na siebie. A skoro już mowa o siatce bezpieczeństwa, to opcja wyrzucenia pracy z równania jest dostępna również dla ludzi na zasiłkach i w przyszłości, miejmy nadzieję, dla jak największej liczby osób. Jak to rzekł pewien mędrzec z HackerNews, No job is the goal. No money is the problem..Oczywiście można sobie dobrze radzić w życiu wybierając dwa z trzech. Większość[citation needed] ludzi zdaje się żyć w trybie "praca + związki". Znamy też historie ludzi, których wyborem było "praca + hobby". Wreszcie niejedno dziecko bogatego człowieka może spokojnie żyć wybierając "hobby + związki"[3]. Widać więc wyraźnie, że da się dobrze żyć nie walcząc z life-CAPem. Ale czy są jakieś metody na jego obejście? Zlej wybory ze sobą Czasem można zlać ze sobą opcje w life-CAP, redukując problem do prostego "wybierz dwa z dwóch". Świętym Graalem dzisiejszej zachodniej kultury jest praca będąca równocześnie pasją - jest to jednak dużo cięższe do osiągnięcia niż się wydaje (bez oszukiwania samego siebie) i wymaga czasu oraz mobilności społecznej. Inną opcją jest połączenie hobby i związków. W idealnej sytuacji Twój partner i/lub najbliższa rodzina dzieli z Tobą wspólną pasję. Ponownie, jest to czasochłonne do osiągnięcia, ale czasem można temu pomóc na drodze autoselekcji. Jako ekstremalny przykład na myśl przychodzą mi małe społeczności religijne, w których życie rodzinne i wiara są bardzo silnie ze sobą splecione, a członkowie takiego ugrupowania zwykle wiążą się wewnątrz niego. Wreszcie warto przyjrzeć się połączeniu w jedno pracy i związku. To występuje chyba głównie na studiach (s/praca/nauka/) i we wspólnie prowadzonej działalności. Ma szansę być bardzo spełniające, aczkolwiek problemy zawodowe mają poważną tendencję do przeciekania w życie osobiste. Oczywiście można być też Elonem Muskiem - zlać pracę i hobby w jedno, po czym wywalić związki i zająć się ratowaniem świata. Elon Musk (źródło: R. Kikuo Johnson via Bloomberg) PWM [4] Dosłownie "równowaga między życiem a pracą"; język polski jest jak zwykle taki nieporęczny...Typowy sposób radzenia sobie z life-CAPem to tzw. work-life balance[4]. Pewną ilość czasu alokuje się na pracę, a pozostały przełącza się pomiędzy hobby a związkami. W elektronice cyfrowej istnieje pojęcie PWM (Pulse-width Modulation) - jest to trick pozwalający uzyskać coś wyglądającego jak sygnał analogowy mając do dyspozycji jedyne wyjście cyfrowe. Stale i szybko przełączając się między stanem niskim i wysokim, "włączonym i wyłączonym" jesteśmy w stanie uzyskać coś, co przypomina sygnał analogowy - jego wartość regulujemy przez stosunek czasu spędzonego w stanie wysokim do czasu spędzonego w stanie niskim[5].[5] Prosty przykład - zapalanie i gaszenie światła; jeśli bardzo szybko przełączamy światło, to dla oka będzie wydawało się ono przygaszone - jasność zależeć będzie od tego, jak długo trzymamy je włączone a jak długo wyłączone w czasie tego przełączania; właśnie tak układy typu Arduino implementują regulację siły świecenia diodki. Słowem-kluczem występującym w poprzednich dwóch akapitach jest "przełączanie się". Co stanie się, gdy zastosujemy PWM do problemu life-CAP, zaczynając przełączać się wielokrotnie i bardzo szybko między dwoma stanami?
  • praca vs. hobby - Twój szef myśli, że pracujesz, a Ty jesteś zajęty robieniem czegoś pożytecznego
  • hobby vs. związki - Twój partner/rodzina czują się zadbani, a Ty jesteś zajęty robieniem czegoś pożytecznego
  • praca vs. związki - wykonalne chyba tylko jeśli pracujesz z rodziną/partnerem; nie wiem, czy zdrowe dla obu, ale w granicy jest to jak zlanie tych dwóch wyborów
Wiadomo, że mózg ludzki - tak jak i procesor - nie lubi ciągłych zmian kontekstu. Pracując w intensywnym PWMie można mieć jednak konteksty dwóch różnych rzeczy zawieszony "w powietrzu", zamieniając je ze sobą zanim któryś zdąży wyparować z pamięci krótkoterminowej[6].[6] Chyba. Tak mi się wydaje. Czytanie HackerNews w czasie pisania postów nie pomaga. Kolejną istotną rzeczą jest to, że partnerzy nie lubią jak się ich napędza PWM-em ;). Do wyboru są tu dwie opcje - albo trzeba tego PWMa robić tak szybko, że nie zauważą przełączeń, albo drogą selekcji związać się z taką osobą, która ten tryb pracy zniesie. Olać te wybory, dajcie Modafinil Wersja dla ambitnych i nietolerujących tego, że życie stawia przed nimi głupie problemy. Więcej komentarza nie trzeba. (i ze wszystkich dostępnych w tym momencie, ta chyba ta najbardziej mnie urzeka) Wersja patologiczna - PWM na wszystko Może na Modafinilu się tak da, aczkolwiek z zewnątrz będzie to wyglądało jak chaos z rękami i nogami, robiący wszystko na raz. Więc, Czytelniku, jakie są Twoje metody na life-CAP?
https://jacek.zlydach.pl/blog/2015-03-03-hacking-the-life-cap.html
Common Lisp and Docker
Old blognarzędziawebmasterkaLispCommon LispEmacsDocker
Recently I've been doing some web development in Common Lisp (and even getting paid for it!). I must say, I'm quite enjoying it (definitely more than the other language I usually earn my bread with, that shall remain unnamed). I'll be posting more about it soon. Lately, I've been using Docker to separate project components into containers, each with its own filesystem and isolated environment. I've modified some code I found around the web to create Dockerfiles for current versions of SBCL and CCL, the two popular open source Common Lisp implementations. They're quite rudimentary in their functionality - they only fetch the current (as of this post) version of Lisp and Quicklisp. I've decided not to put code that starts up SWANK by default - I believe enabling remote REPL access should be a decision of the project that is built on top of those Dockerfiles. Adding SWANK support is very simple though; just run this when you're starting your application:
(ql:quickload :swank)
(setf swank::*LOOPBACK-INTERFACE* "0.0.0.0")
(swank:create-server :port 4005 :dont-close t)
and map SWANK port when doing docker run:
docker run --name="your-app" -v `pwd`/src:/var/src -p 4005:4005 -ti -d yourname/app
and you can connect to it via M-x slime-connect straight from your Emacs. It's actually quite easy to bundle that in your own Dockerfile for your app. For SBCL, it could look like this:
FROM temporal/quicksbcl

ADD ./startup.lisp /tmp/startup.lisp

CMD sbcl --load /tmp/startup.lisp
EXPOSE 4005
Where temporal/quicksbcl stands for the name you gave for the SBCL container you built and startup.lisp is the file you use to boot up your application, in which you could put the SWANK start code from above. The code for CCL is very similar, so I'll leave it out as an exercise to the reader :P. Feel free to use and modify those Docker scripts as you wish. Since I'm not really good at Docker yet, those scripts could likely use some improvements. All issues and pull requests are welcome! And stay tuned for the upcoming posts about Lisp and web development!
https://jacek.zlydach.pl/blog/2015-01-14-common-lisp-and-docker.html
"Stała delta" w grach - prezentacja
Old blogTworzenie gierdeltastały krokfixed timestep
Dawno temu zdarzyło mi się popełnić artykuł o tym, jak pisać aktualizację stanu gry - pętlę główną i przyległości. Artykuł w szczególności skupiał się na tym, dlaczego dobrze jest korzystać ze "stałej delty" - wykonywać update'y fizyki/logiki z ustalonym krokiem czasowym. Jakiś czas temu przygotowałem też w ramach studiów krótką prezentację opartą o ten artykuł, którą dzisiaj przypadkiem znalazłem na dysku. Poniżej znajdują się linki do prezentacji oraz handoutu, który wydrukowałem i rozdałem wszystkim obecnym na sali. (prezentacja - PDF) (handout - PDF) Koncepcję drukowania handoutów i rozdawania ich słuchaczom prezentacji podkradłem od Edwarda Tufte, który wspominał czasami m.in. o korzyściach płynących z wysokiej rozdzielczości papieru i możliwości wyraźnego zobaczenia zdjęć/schematów z prezentacji.
https://jacek.zlydach.pl/blog/2013-11-01-stala-delta-w-grach-prezentacja.html
Więcej Nyan Cata w Emacsie
Old blogLispEmacsNyan CatPop Tart CatNyanmacsnyan-mode.elBuild Something AmazingEmacs Lisplulz5 minutes of Internet famevivim
Miło mi odkryć, że Javier Olaechea zainspirował się moim Nyan Mode i stworzył nowe rozszerzenie - tym razem dodające Nyan Cata do "znaku zachęty" eshell'a. Screen poniżej. Nyan Cat w prompt'cie eshell'a. (Github) Ponadto, zarówno Nyan Mode jak i Nyan Prompt są dostępne do instalacji w Emacs 24 za pomocą managera paczek** - tak, ze względu na ilość rozszerzeń, Emacs dorobił się w końcu własnego managera pakietów. Jak to mówią, świetny system operacyjny ;)., z repozytorium MELPA. Vimowcy, gdzie jest wasz Nyan Cat? ;).
https://jacek.zlydach.pl/blog/2013-08-13-wiecej-nyan-cata-w-emacsie.html
Usprawnij pracę z wyrażeniami regularnymi
Old blogporadyPHPregexpDebuggex
Ah, dawno nic nie wrzucałem ;). Chciałbym się dziś podzielić dwoma poradami związanymi z regex'ami (wyrażeniami regularnymi). Komentarze w wyrażeniach regularnych Szybkie pytanie: co dopasowuje poniższe wyrażenie regularne?
preg_match('/.*(?=.{6,})(?=.*\d)(?=.*[a-zA-Z]).*/', $something);
Myślę, że nawet wprawionemu w bojach programiście przetworzenie tego wyrażenia zajmie krótką chwilę. W praktyce wyrażenia regularne szybko robią się skomplikowane, ekstremalnie trudne w czytaniu i jeszcze trudniejsze w debugowaniu. Można jednak te problemy rozwiązać za pomocą odrobiny formatowania i dodania komentarzy.
preg_match('/^
            .*              # Match any number of characters...
            (?=.{6,})       # ... AND match at least 6 characters (lookahead) ...
            (?=.*\d)        # ... AND match one digit after any number of characters (lookahead) ...
            (?=.*[a-zA-Z])  # ... AND match one letter after any number of characters (lookahead) ...
            .*              # ... AND allow any number of characters later.
            $/x', $password);
Prawda, że czytelniej? Modyfikator x powoduje, że wszystkie niewyescape'owane białe znaki zostaną zignorowane, a wszystko od znaku # do końca linii zostanie potraktowane jako komentarz i zignorowane. O możliwości komentowania wyrażeń regularnych dowiedziałem się z artykułu Advanced Regular Expression Tips and Techniques. Zachęcam do jego przeczytania - jest tam więcej ciekawych porad, m.in. na temat callbacków czy nadawania nazw grupom. Debugger do regexpów Istnieje świetne narzędzie do analizy i debugowania regexpów - Debuggex. Wyświetla on strukturę wyrażenia graficznie, pozwalając na analizę krok po kroku. Spójrzmy na przykład z poprzedniej części tego posta: Prawdziwa potęga tego narzędzia objawia się przy bardzo złożonych wyrażeniach regularnych, jak na przykład:
^(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?:\w+:\w+@)?(?:(?:[-\w]+\.)+(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?::[\d]{1,5})?(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$
Polecam skopiowanie powyższego wyrażenia do Debuggexa. Z jednej strony widać wyraźnie, jak ten regexp działa i do czego służy; z drugiej strony, sekcja Some random matches pokazuje, jak dziwne rzeczy przejdą przez nie poprawnie. Uwaga o wydajności wyrażeń regularnych Jak zapewne wielu programistów, którzy swą przygodę zaczęli od programowania gier, jestem sceptycznie nastawiony do wszelkich rzeczy pracujących na stringach. W szczególności, regexpy mogą na pierwszy rzut oka wydawać się wysoce niewydajne - ot skomplikowane dopasowanie tekstu zapisane w formie tekstu. Z pewnością napisanie tego w formie normalnego kodu - acz dłuższe - musi być wydajniejsze, prawda? Otóż nie. Wyrażenia regularne są tak na prawdę programem - są (bardzo skondensowanym) opisem maszyny stanów, przez którą dopasowywany tekst stopniowo przechodzi, i jeśli uda się doprowadzić tę maszynę do stanu terminalnego, to dopasowanie jest uznawane za udane. Co to dokładnie znaczy? Polecam przyglądnąć się jeszcze raz rysunkom, które tworzy Debuggex - to dokładnie struktura tejże maszyny stanów. Taki system reprezentowany jest w programie w sposób bardzo wydajny; prawdopodobnie dużo wydajniejszy od naiwnego parsera, którego moglibyśmy napisać w niewielkiej liczbie linii kodu. Co więcej, niektóre języki programowania (jak na przykład Common Lisp lub Java) pozwalają prekompilować wyrażenia regularne - jeżeli spodziewamy się, że dane wyrażenie regularne będzie używane wielokrotnie w czasie działania programu, to możemy zbudować maszynę stanów tylko raz (w przeciwieństwie do tworzenia jej na nowo za każdym razem, gdy chcemy dopasować jakiś napis), a następnie używać jej wszędzie tam, gdzie potrzebujemy korzystać z danego wyrażenia regularnego. Są nawet języki, które kompilują regexpy automatycznie.
https://jacek.zlydach.pl/blog/2013-08-10-usprawnij-prace-z-wyrazeniami-regularnymi.html
Eseje Paula Grahama w języku polskim
Old blogwebmasterkaLispCommon LispesejePaul Grahamtłumaczenia
Jakieś dwa tygodnie temu udało mi się w końcu wypuścić projekt, nad którym pracowałem po godzinach już od dłuższego czasu, a w zamyśle miałem ponad rok - chodzi o tłumaczenie esejów Paula Grahama na język polski. Wstępnie przetłumaczonych jest 9 esejów (większość przez Asię, której pomoc jest nieoceniona); kolejne dojdą z czasem (wszelka pomoc mile widziana!). Wybraliśmy na początek kilka najbardziej charakterystycznych tekstów Grahama na cały przekrój tematów - jest więc coś ogólnego, tekst dla startupowców i fanów drukarek 3D, coś dla programistów, managerów oraz odrobina humoru :). Nie mam teraz niestety czasu na porządny press release, dlatego na razie wrzucę jedynie link - https://esejepg.pl. Jak skończy mi się sesja, to napiszę coś więcej - praca nad tym serwisem dostarczyła mi trochę ciekawych lekcji w zakresie webdevelopmentu, prowizorycznego hackingu oraz bycia tłumaczem. Stay tuned and keep reading :). PS. @Bambucha, ja wiem, że projekt jest Open Source, ale zdejmij proszę jego przypadkiem stworzony przez Ciebie mirror, bo ma już większy Page Rank niż oryginał, a nie posiada nawet wygenerowanych CSSów :P.
https://jacek.zlydach.pl/blog/2013-02-06-eseje-paula-grahama-w-jezyku-polskim.html
Hackerspace Kraków
Old blogKrakówHackerspace KrakówHackerspaceFabLabCNCdruk 3D
Od niedawna w Krakowie działa już Hackerspace! Przez jakiś czas nieformalnie, a teraz już jako oficjalna fundacja, Hackerspace Kraków (w skrócie, HS KRK) zaprasza wszystkich entuzjastów programowania i elektroniki, konstruktorów, designerów i wszystkie inne kreatywne osoby do wspólnego hackowania** - dla przypomnienia; haker nie jest osobą łamiącą zabezpieczenia komputerowe w niecnym celu; na takie osoby mówimy cracker. Hakerzy to wynalazcy, to ludzie, którym ogromną przyjemność sprawia kreatywność, tworzenie czegoś z niczego i robieni rzeczy z pozoru niemożliwych. Na temat istoty bycia hakerem i znaczenia słowa hacking wiele słów napisali Paul Graham i Eric S. Raymond. Patrz też hacker w słowniku Jargon File. Jeśli szukasz przykładów, myśl o MacGyverze albo Leondardo da Vinci.! Ale pewnie, Czytelniku, zapytasz - o co chodzi? Śpieszę z wyjaśnieniem. Hackerspaces Idea Hackerspace'ów jest w naszym kraju jeszcze dość mało znana, pomimo tego, że takowe jednostki działają już w Warszawie i Poznaniu. Nie ma jednej dobrej definicji by określić, czym jest Hackerspace, ale osobiście najbardziej lubię ilustrować go jako skrzyżowanie biblioteki publicznej z warsztatem. Jest to miejsce, gdzie leżą narzędzia (np. lutownice, spawarki, laserowe wycinarki czy drukarki 3D), które nie zawsze ma się w domu. Jest to miejsce, gdzie każdy kto chce - programista, elektronik, stolarz, designer, lub inny wykonawca - może przyjść i popracować nad swoim projektem w towarzystwie innych twórczych osób, które chętnie posłużą pomocą i podzielą się swoją wiedzą. Wreszcie jest to społeczność osób twórczych, które razem chcą coś budować, uczyć się nawzajem i zmieniać świat - lokalnie i globalnie - na lepsze. Po opisowej definicji czas na trochę konkretów. Na świecie Hackerspace'ów jest już ponad tysiąc(!); ich listę i informacje na ich temat można znaleźć na wspólnej, międzynarodowej stronie Hackerspaces. Niektóre z nich są potężne - przykładowo niemiecki c-base ma ponad 700m2 powierzchni! Hackerspace'y dysponują różnymi narzędziami i zajmują się wieloma rzeczami - jedne specjalizują się w elektronice, inne w programowaniu, jeszcze inne pracują z drewnem, jedzeniem, tekstyliami czy biochemią. Typowy HS zaczyna wyspecjalizowany, i wraz z napływem nowych członków rozszerza zakres działalności. Wszystkie są silnie związane z inicjatywami Open Source i Open Hardware. Środowisko Hackerspaces wyrobiło też już sobie swoje specyficzne zwyczaje; na przykład konkurs na wysyłanie cupcake'ów pocztą tak, żeby się nie rozpadły w transporcie. Logo Hackerspace Kraków
"Welcome to Hackerspace Kraków. The place where everything is made up and the points don't matter."
Krakowski HS działa już od wakacji 2012. Założyli go Maria Skrzypek, Mateusz Herych i Mirek Woźniak. Dość szybko wyrosła jednak wokół niego całkiem spora społeczność. Na początku zaczynaliśmy, jeszcze bez lokalu, z warsztatami Arduino. Były one bardzo udane, przyciągnęły sporo fanów, z których wielu stało się teraz aktywnymi członkami HSu. Niedługo później udało się ostatecznie zdobyć lokal. Formalnie więc, działamy od listopada, a oficjalne otwarcie planujemy zaraz po Nowym Roku. Fizycznie, Hackerspace Kraków mieści się przy ul. Radziwiłłowskiej 20/2 - w samym centrum Krakowa. Przez ostatnie miesiące lokal był intensywnie remontowany (przez członków HSu, własnymi siłami, w czasie wolnym**** - strasznie fajna zabawa; szlifierki oscylacyjne i opalarki są pr0!). Jest w nim mnóstwo miejsca - prawie 80 metrów powierzchni i cztery metry wysokości ***! Docelowo planujemy, by był on otwarty 24 godziny na dobę dla aktywnych członków HSu (jak tylko ogarniemy sprawę zamków), natomiast w ciągu dnia, gdy w środku jest ktoś "z załogi", zapraszamy wszystkich - nie trzeba być członkiem HSu, żeby móc wpaść i popracować!*** - przyszłe sekcje UAV oraz rakietowe HS KRK się cieszą ;). Instytut Mirakologii Hackerspace Kraków Czym się zajmujemy? Większość z nas to programiści i/lub elektronicy, stąd obecnie skupiamy się na "lekkich" projektach. Nie jest to jednak jedyny obszar zainteresowania - rozwija się też tu grupa zainteresowana... szydełkowaniem! HS był też współorganizatorem konferencji KrakDroid, która właśnie się odbywa. Jednakże głównym obszarem działań obecnie jest przyhackerspace'owy front drukarek 3D - budujemy ich aż 14, w tym jedną dla samego Hackerspace'a. O druku 3D (i Wallace'u, którego składam) napiszę w kolejnym poście; dość powiedzieć, że jest to fascynujący temat, i że HS KRK to najlepsze miejsce dla każdego, kto chce się zacząć tym interesować. Są też osoby chętne do wystartowania projektów związanych z frezarkami CNC i innym ciekawym sprzętem. Większość komunikacji odbywa się obecnie przez mailową grupę dyskusyjną. Planujemy niedługo uruchomić Hackerspace'owe Wiki z informacjami oraz Reddita na dyskusje - do tego czasu jednak trzymamy się Google Groups. Jeśli chcesz dołączyć do Hackerspace Kraków, to zachęcam do zapisania się na grupę i do aktywnego udziału! Śledź też bloga Hackerspace Kraków! W moim mieście nie ma Hackerspace'a :(. Szkoda :(. Ale nic nie stoi na przeszkodzie, żebyś go założył(a)! Dobry poradnik jak zrobić dokładnie to napisała niedawno Limor "Ladyada" Fried. Wystarczy, że znajdziesz kilka osób chętnych do hackowania razem z Tobą. Każdy istniejący Hackerspace (w tym nasz) chętnie pomoże poradami związanymi z zakładaniem takiego miejsca. Poza Hackerspace'ami Bardzo pokrewną do Hackerspaces inicjatywą są FabLab'y, Fabrication Laboratories. Od HS różnią się one tym, że są skupione na wytwarzaniu fizycznych obiektów za pomocą wycinarek, frezarek, drukarek i innych maszyn - chociaż tak na prawdę granica jest płynna, i nie zawsze wiadomo, kiedy coś jest FabLabem, a kiedy Hackerspace'm. W chwili obecnej powstaje też krakowski FabLab, ale jest to temat na innego posta, którego napiszę, jak będę coś o nim więcej wiedział :). A w międzyczasie, miłego hackowania wszystkim i zapraszamy do Hackerspace Kraków! Patrz także
https://jacek.zlydach.pl/blog/2012-12-15-hackerspace-krakow.html
Autostopem przez Informatykę
Old blognarzędziaporadyprezentacje multimedialneLispCommon LispEmacsvimHaskellJRS
Korzystając z dodatkowego ruchu sprezentowanego mi przez kogoś życzliwego na forum Informatyki Stosowanej (witam), wrzucę dawno zapomnianą prezentację z zeszłorocznej Nocy Informatyka, na której przemawiałem n/t Lispu, wszechświata i całej reszty.
https://jacek.zlydach.pl/blog/2012-11-19-autostopem-przez-informatyke.html
Jak ambitny jest Twój projekt?
Old blogHacker NewsstartupAIratowanie świata
W jednej z ostatnich dyskusji na HackerNews, poświęconej najbardziej ambitnym i przerażającym pomysłom na startupy, Eliezer Yudkowsky** - badacz AI znany m.in. z założenia LessWrong i świetnych tekstów n/t prawdziwej i sztucznej inteligencji (długa lektura, ale polecam; jedna z najsensowniejszych rzeczy, jakie w życiu czytałem). stworzył nową skalę ambicji, którą pozwolę sobie tutaj, przetłumaczoną, zacytować: Skala Ambicji Yudkowsky'ego**
Czy mógłbyś powiedzieć, gdzie najstraszniejszy i najbardziej ambitny przekonywujący pitch wypadł na poniższej skali?
  1. Zbudujemy następnego Facebooka!
  2. Zbudujemy następne Apple!
  3. Nasz produkt stworzy rozległe zmiany polityczne! Stworzy to poważną rewolucję ekonomiczną w przynajmniej jednym kraju! (Seasteading byłoby zmianą na tym poziomie gdyby zadziałało; udane stworzenie nowego kraju jest mniej-więcej na tym poziomie zmian.)
  4. Nasz produkt to następna broń jądrowa. Nie chcecie, żeby wpadła w niepowołane ręce, prawda?
  5. To będzie odpowiednikiem wynalezienia elektryczności, jeśli się uda.
  6. Stworzymy lekarstwo zwiększające IQ tworząc podstawową zmianę w warunkach bytu ludzkości.
  7. Stworzymy poważną, Drexlerowską nanotechnologię molekularną.
  8. Wgramy mózg ludzki do komputera.
  9. Zbudujemy rekurencyjnie samoulepszającą się sztuczną inteligencję.
  10. Wydaje nam się, że wiemy jak włamać się do komputerów, na których chodzi wszechświat.
** - nazwa nadana przez użytkownika ph0rque. Więc, jak ambitny jest Twój start-up? :).
https://jacek.zlydach.pl/blog/2012-09-13-jak-ambitny-jest-twoj-projekt.html
Wymieniamy ekran w Kindle 3
Old bloglife hacksporadynaprawaKindleekranhardware
Pewnego dnia pękł mi ekran od Kindle'a. Wynik tego wyglądał tak, jak na zdjęciu poniżej: Kindle z pękniętym ekranem; działa jedynie mały fragment wyświetlacza na dole.
(Oops...)
Złamany wyświetlacz uczynił urządzenie bezużytecznym. Ponieważ gwarancja już minęła, miałem do wyboru:
  • kupić nowego Kindle'a - 700-800zł
  • oddać go do serwisu na wymianę wyświetlacza - ok. 500zł
  • zamówić nowy ekran z Chin i wymienić samemu - ok. 150zł
Ostatnia opcja, oprócz znacznych oszczędności, niosła ze sobą najwięcej frajdy, więc na nią w końcu się zdecydowałem. Jak więc wymienić ekran w Kindle 3? Wymieniamy ekran Wystarczy pogrzebać odrobinę w Internecie, by znaleźć bardzo dobry poradnik wymiany ekranu oraz video pokazujące jak rozebrać urządzenie na części. Zgodnie z poradnikiem, krok pierwszy to zamówienie potrzebnego komponentu przez Internet. Rekomendowany portal Aliexpress był dużo tańszy od eBay'a. Kilka kliknięć i zlecenie złożone, nowy ekran leci sobie z Chin. Kraj ten znajduje się bardzo daleko od Polski, skoro przewidywany czas dostawy pocztą lotniczą wynosił 15-30 dni, jednak superszybkie samoloty wyrobiły się w 12 dni. Towar przyszedł zgodny z zamówieniem, ale zapakowany w pudełko po bliżej nieokreślonym odtwarzaczu MP5** - bez producenta, bez kodu kreskowego., sporą ilość folii bąbelkowej i taśmy pakowej. Mając już wszystko co potrzeba, można było przystąpić do pracy. Krok pierwszy to zdjęcie tyłu obudowy. Nie miałem otwieraka i nie chciało mi się szukać patyczków do lodów**** - tych akurat mam sporo, dzięki uprzejmości byłej pracowniczki osiedlowego Lewiatana ;)., więc poradziłem sobie nożem, ale nie polecam tej techniki - nawet cienkie ostrze jest zwykle zbyt grube i może zostawić ślady na obudowie. Chociaż wszystko jest tu na plastikowe zatrzaski, nie ma co się stresować - tylna część obudowy jest wytrzymała i ciężko byłoby ją uszkodzić. Po jej zdjęciu można przejść do kroku drugiego, czyli... Scary electronics!
(Straszna elektronika jest straszna)
...odkręcenia elektroniki od ekranu. Zgodnie z poradnikiem, należy wykręcić szereg śrubek, usuwając po drodze baterię i odczepiając przyłącze ekranu od płytki. Poniżej zamieszczam obrazek "pożyczony" ze wspomnianego poradnika; na żółto zaznaczono śrubki, które należy usunąć; na czerwono zaznaczyłem jeszcze dwie śrubki, które w moim przypadku wydawały się być konieczne do całkowitego odczepienia płytki od obudowy. Śrubki są małe i łatwo je zgubić; swoje trzymałem w plastikowym pudełku, ale jeśli komuś nie chce się szukać, to na niebiesko zaznaczyłem na rysunku dwie bardzo silnie magnetyczne powierzchnie, które przypadkiem odkryłem w czasie pracy :). Co odkręcić...
(Mała instrukcja co odkręcić)
Po udanej operacji odkręcania miałem w ręku przednią część obudowy z przyklejonym do niej ekranem. W tym momencie wystarczyło już oderwać ekran (siłą, to tylko klej) od obudowy i zamienić na nowy, przekleić gąbkę z tasiemki na starym ekranie na to samo miejsce na nowym ekranie, a następnie skręcić i złożyć całość. Co odkręcić...
(Kindle tuż PRZED wymianą wyświetlacza)
W trakcie składania Kindle'a do kupy okazało się, że nowy ekran się nie odświeża - na szczęście przyczyną była rozładowana bateria; po trzech godzinach ładowania wszystko działało już bez zarzutu. Nie licząc podładowania, cała procedura trwała około godzinę, z czego większość czasu zajęło odkręcanie kilkunastu małych śrubek za pomocą nie do końca pasującego śrubokręta****** - tego też nie polecam; główki śrubek są wytrzymałe, ale nie aż tak, by ich nie zepsuć jak się jest nieostrożnym. Na szczęście nie były mocno przykręcone.. Czego się nauczyliśmy? Dobrze jest poczuć, że nawet XXI-wieczne wysokotechnologiczne urządzenia da się, przynajmniej w ograniczonym stopniu, naprawić samemu. W Internecie pełno jest poradników i instrukcji naprawy przeróżnej elektroniki; są nawet całe strony temu poświęcone. Niektóre zabiegi wymagają większych umiejętności i specjalistycznego sprzętu, ale sporo rzeczy można zrobić samemu, przy praktycznie zerowej wiedzy elektronicznej. Wystarczy przestać się bać****.**** - Fakt, operujemy na sprzęcie za kilkaset, czy nawet kilka tysięcy złotych, ale w wielu przypadkach nie trzeba niczego więcej poza cierpliwością, systematycznością oraz opanowaniem. Podpisuję się pod Self-Repair Manifesto - samodzielna naprawa wiele uczy, oszczędza pieniądze i łączy emocjonalnie z naprawionym przedmiotem, który teraz jest już rzeczywiście unikatowy.
https://jacek.zlydach.pl/blog/2012-08-30-wymieniamy-ekran-w-kindle-3.html