HN user

pickledcods

477 karma

xyzzy@rockingship.org

Latest showcases: https://rockingship.org https://xyzzy.github.io https://rockingship.github.io

Posts8
Comments97
View on HN

Location: Netherlands, Leiden

Remote: Remote, hybrid, on-site, depending on distance

Willing to relocate: No

Skills: Bare metal, Bootloaders, Cryptography, Embedded, Debugging, Distributed, Event driven, Firmware, Fullstack (frontend leaning towards backend), Hacking, High performance, Image processing, Optimizing, Pattern recognizing, Porting, Protocol analysers, Real-time, Research, Reverse engineering, Schematics, Troubleshooting, Thinking outside the box

Technologies: AJAX, API, Arm, Assembler, AWS, C/C++, CSS, Eagle, HAL, HTML5, HTTP, Javascript, Joomla(+internals), JSON, JTAG, Linux(+internals), MicroChip, MPI, MySQL, Node.js, PHP, REST, RTOS, Spidermonkey(+internals), SSL, StarCluster, SGE (Sun Grid Engine), TCP/IP(+internals). WebWorkers, X11, XML, Zend(+Internals)

Résumé/CV: Available upon request

Email: xyzzy at rockingship dot org

30 years in the tech industry with 9 years of education specializing in software and hardware as embedded and full-stack engineer.

This entry inspired me to write this javascript implementation to test my high-speed GIF encoder, which I used for animations in the pre-canvas era. It needs keyboard arrows to navigate.

https://xyzzy.github.io/jsFlightSim

I tried to reverse-engineer the code to understand how the model in the simulator worked, only it raised more questions than answered. I did uncover that the author had flight simulator writing experience, so the mechanics were truly obfuscated. Carl, amazing piece of craftsmanship, tipping the hat!

  Location: Leiden, Netherlands
  Remote: Yes
  Willing to relocate: Possibly
  Technologies: Full-stack, embedded, javascript/c/c++, linux
  Résumé/CV: On request
  Email: xyzzy@rockingship.org
With 50 years of experience, strong communication spanning all levels of organisation with a wide audience and a solid understanding of software and hardware. Listening, out-of-the-box thinking, inspiring others. Front-end, back-end, API, database, operating-systems, drivers, embedded, audio/video, codecs, micro controllers, firmware, debugging, electronics and soldering. The whole is more than the sum of the parts as provides architectural oversight.

For all you QR enthusiasts!

I upgraded the site generator to create even better visual QR codes, it now even can produce a QR in a QR. Enter the gift code "WELCOME" and use it for FREE.

Seeing many application areas for (near) photo realistic QR codes I thought I could invest full-time into it and make it sustainable. I was hoping it would have an organic attraction and build a user-base. After 28 days being online Google Search congratulated me that it was clicked 15 times at average position 60. How does that compare? My visitor count is on average less than 1 per day.

How do I get more people or businesses interested. Does this technology have opportunity to continue investing in? Where should I focus on? Or, is the industry shifting away from QRs, making it wiser for me to focus on other ventures?

  Location: Netherlands, Leiden
  Remote: Yes, 
  Willing to relocate: Temporary yes, Permanent no
  Technologies: Linux, Javascript, C/C++, HTML/Canvas, PHP, MySQL, Embedded
  Résumé/CV: Upon request
  Email: xyzzy AT rockingship.org
50 years experience, 9 years software and hardware education, 80-ies whizz-kid, hacker. reverse-engineer, optimisations, linux minded, multi-architecture, quick learner. Front-end, back-end, API-endpoints, full-stack. Also into developing custom toolchains, custom distributions, bare-metal development, porting. Familiar with how thing work from the moment the system powers up. Good in finding and fixing nasty bugs.

Started with creating multi-tasking basic for Apple2 in 70ies, developed Multi-player games on TOPS20 in 80ies, Inspired by Inmos transputer, worked on operating systems, designed kernel debugger and implemented TCP/IP in 90ies. Designed Raspberry-Pi/Arduino like system in Taiwan in 00ies, life work: fractal logic, capturing essence of information in fractals, calculating with fractal structures in 10ies, 2D-scanline/paintbrush video encoder in 20ies. Recent projects: UWB indoor positioning system using DWM1000, Upgraded qrpicture.com for HD visual QR codes, Apache fail2ban module.

Showcases: https://xyzzy.github.io/ (personal), https://rockingship.github.io/ (fractal related)

Found this:

   Because it's simply available as an option. National Geographic is licensed and marketed differently in Korea, so it's just sold as a regular brand in normal retail outlets. It's not really necessary to reach for sociological explanations when it's just random gear you pick up at eMart that happens to have the NG brand. See also brands like Jeep, Ttoma, Discovery Expedition, etc.
Like out of season Christmas and nursery rhymes in Asian elevators, but now with a toxic brand?
Mastermind Solver 3 years ago

This was my 1996 IOCCC entry, a mastermind solver. Key features are that it is a one-liner (no macros) and everything is coded using for-loops.

   char*p,*q,*r,s[50000];int i,j,k,l;main(){for(r=s,i=10000;i--;r++)for(j=i+3211,k=4;k--;*r++=48+j%10,j/=10);for(;puts((k=r-s)?q=r-5:"?"),k&&k-5;)for (scanf("%d",&k),p=s;p-r;){for(i=j=0;j-16;p[j%4]|=l=!(p[j%4]-q[j/4])?i++,64:0,j|=l/17,j++);for(j=0;j-5;i+=!((*p++&=63)-q[j++])*9);for(;k-i+9&&j--;*--p=*--r);}}
You think of a 4 digit number, the code tries to guess it. You give it 2 digit answers for red and white.

Both projects stem from the same root, TXT=EXE. However, both branch in totally different directions. One says "any printable goes" whereas the other says "only the smallest subset (preferably also for ASCII art) goes", mainly being being “0123456789acemnorsuvwxz”.

These are two different projects with different design goals and challenges. Tom's built a compiler around it, I created a bootloader that consists of only MUL and XOR.

I don't understand why I feel that I have to defend myself, I thought hackers love these kind of projects, yet it seems I got cancelled.

A true innovation would be to combine both projects. One that inputs source code plus an image and outputs ASCII art that runs like a program.

Yes, like many others. That's why I upped the ante by stating "numeric and lowercase characters only". And with the glyph differences between them also create a "hidden" image.

Editted: What you reference to is a compiler and something completely different.

This begs for the challenge: How would a program look like if the opcodes it could use exclusively consists of ASCII characters?

This has been a niche programming challenge which was popular before I knew it existed, so I upped the ante by using alpha-numeric only.

The usable opcodes where practically IMUL and XOR with severe limitation on registers and offset. But with them I managed to create a random number generator that magically outputs fragments of codes at the location where the next instruction would be located. This would snowball adding more opcodes/functionality as it unrolls into a complete application.

It felt like the instruction set was so restricting and that the designers of the instruction set deliberately mapped the most critical instruction to make this possible to the opcode values. This has made me wonder what the considerations were to select which binary byte value to match with the instructions. if MUL/XOR were mapped differently, this project most likely would not have existed.

Synchronicity in overdrive:

  https://xyzzy.github.io/smile/README.html

Counting down with signed ints:

  for (int i=max-1; i >= 0; --i) 
Counting down with unsigned ints (also works for signed ints):
  for (unsigned i=max; i--; )

Splash is an alternative approach to traditional top-left to bottom-right scanline image/frame rendering. It sorts the pixels of a frame in order of significance, and paints them guided by weighted rows and columns. The longer the rendering, the higher the detail, making it highly tolerant against data corruption. A full frame is lossless, truncated frames are lossy. Splash shines in it’s lossyness.

Inspiration: The fractal zoomer rendering engine of my other project [https://rockingship.github.io/jsFractalZoom] wondering how it would be with real-world imagery instead of procedural generated content, and how I believe my brain perceives movement: you pay attention first to areas with heavy contrast changes because they are most likely caused by moving things.

Explanation by example:

STARSHIPS:

14 second clip with high contrasts and lots of movement in different directions. Top video show frames from the a 1212x510 input source and rendered top-left zig-zag to bottom-right. Each frame contains 618120 pixels, Splash takes 618120 self-chosen pixels spread over 6 frames and paints them in the bottom video. Top and bottom both have identical pixel data rates.

[https://rockingship.github.io/splash-media/starships/starshi...]

GTA:

Lets explore the extremes by assuming there is data corruption and only the first 1% of the frame was recoverable. Left is Splash and what it’s continuous paintbrush rendered. Right would be the traditional first 9 scanlines of the input making if effectively unrecoverable. To give traditional at least a fighting chance, the frame is downscaled 100 times to 90x50 and upscaled again to original 900x506.

[https://rockingship.github.io/splash-media/gta/gta-sbs-1800x...]

FFMPEG:

The project includes a patch for ffmpeg [https://rockingship.github.io/splash/20230313-splash_codec.p...].

I would like an app that handles the functioning of my paid product locally without internet access. The product was sold with strings attached that was not mentioned.

Loading any framework script not hosted on the site the app originates is the same kind of leak as the facebook pixel. jquery gets my IP, access time and referrer. They can cross-site track me over all pages that load their scripts.

I also use frameworks scripts, only I host them locally to counter this kind of leakage.

Have you checked the trackers and data loggers build into that app that directly or indirectly call home when you interact with your lights?

I have an aquarium and I use a water quality tester when I suspect something is wrong. Before it was a colour stripe you have to compare with a reference printed on a package. Now it uses a camera and matches the color better for a better analysis. However, that app calls home directly to JBL, so they are building a profile on how I abuse my fish because every time it logs, it logs a bad situation. It also leaks the usage to jquery, google and crashlytics without notifying me or asking my consent.

TUIs 4 years ago

Absolutely this. Minimal setup debugging using gdb in TUI/sourcecode mode, optionally over ssh.

I have a 4k monitor and at first bumped my head into many walls because of the excruciating bad or missing font size/selection support. Tried literally all the desktops and file managers.

Ended with Mate/Xfe, both with amazing and consistent font support. Redshift for time dependent colour temperature is also worth mentioning.

I would like to read, but get a page full about checking my browser and that I need to do a CAPTCHA, which won't load because I have disabled javascript as I initially do not trust unknown sites.

Do not forget the notes on dup2(). It's about the automatic closing of newfd before it gets replaced. I've bumped into this situation several times, that is why I'm mentioning it.

  SYNOPSIS
   int dup2(int oldfd, int newfd);

  NOTES:
  If newfd was open, any errors that would have been reported at close(2) time are lost.
  If this is of concern, then the correct approach is not to close newfd before calling dup2(),
  because of the race condition described above.
  Instead, code something like the following could be used:

   /* Obtain a duplicate of 'newfd' that can subsequently
      be used to check for close() errors; an EBADF error
      means that 'newfd' was not open. */

   tmpfd = dup(newfd);
   if (tmpfd == -1 && errno != EBADF) {
       /* Handle unexpected dup() error */
   }

   /* Atomically duplicate 'oldfd' on 'newfd' */

   if (dup2(oldfd, newfd) == -1) {
       /* Handle dup2() error */
   }

   /* Now check for close() errors on the file originally
      referred to by 'newfd' */

    if (tmpfd != -1) {
       if (close(tmpfd) == -1) {
           /* Handle errors from close */
       }
   }

I design sites and this is exactly what is happening. This is also partly to cater for all the different screen sizes, and partly because zooming and DPI are broken beyond repair. W3 broke it first by specifying in CSS 2.1 that DPI is fixed 96dpi, then freedesktop botched HiDPI, and browsers made it even worse by trying to fix it with window.devicePixelRatio and implementing it badly by lying about screen sizes, especially on mobile. And not to mention sites that abuse viewports.

Ctrl +/- does not zoom, it changes the fontsize and devicePixelRatio.

Using a base size (the font size) and scaling everything relative to that using em solves many problems. Sites handle this differently and it is getting progressively worse, confusing screen readers.

https://www.quirksmode.org/blog/archives/2010/04/a_pixel_is_...

https://fronteers.nl/congres/2012/sessions/a-pixel-is-not-a-...

https://developer.mozilla.org/en-US/docs/Web/API/Window/devi...

First impression is that the new layout gives way better overview on the history and evolution. Nice colour coding/styling and I was like: Yes! that's the way to go. Opposed to the old style which felt like a wall-of-clicking and a pain in the finger.

Then I opened one of the old articles and saw one of the most amazing thing seldom seen in release note: actual imagery visually supporting "New Features / Enhancements", and I was like: Wow! if your doing that, then you are proud of what your are doing and what you have achieved. ... and you are going to throw that all away ?!?!?