Hacker Newsnew | past | comments | ask | show | jobs | submit | throwaway2046's commentslogin

I've used proot in the past but it crashed often, I'm interested in finding other rootless chroot-like projects.

w64devkit is an absolute joy to use, and I'm surprised that it's still not widely adopted by devs. Extracting a single ZIP archive to get a complete POSIX environment on Windows with all kinds of build tools is nothing short of impressive, and it even supports Windows XP! (minus CMake and a couple other tools)

> Just dynamically link against the oldest glibc you want to support.

Just the other day I tried running an older binary and it failed with a glibc error, despite it being linked to a glibc version that's barely 5 releases behind the one on my system. So maybe glibc isn't backwards compatible after all...


Or maybe you misunderstood the error message.


Or may be not.


    > Even if you use OpenGL you still need to write shaders.
Not in OpenGL 1.x


OpenGL 1.x is older than the hills.


It is also the simplest and most widely available one[0], working from decades old PCs to whatever is latest one, not only from the official drivers but also 3rd party implementations[1] that target other lower level APIs for environments where there isn't an official implementation.

[0] on open platforms at least

[1] it most likely wont be a 100% compliant one (even SGI had trouble on that front :-P) but in practice it'd be usable


Where does it say that the OS was vibe coded?


It doesn't, because nothing has been released, and nothing will for months. However, since literally everything else in the author's Github account is from Claude, it's a fairly safe assumption that this is too.


I had someone call my unreleased product slop. It’s the cool thing to do apparently.


Excellent write-up. Does anyone have the source of the background image shown in the last screenshot?


It's the background image for the Overgrowth theme in Acmlmboard 2.5, an old niche forum software. Here is a preview of the theme on one of the remaining boards running it: https://board.kafuka.org/?theme=overgrowth

You can also find it as the background image in the retro zone of my website, which is made to look like said theme from Acmlmboard: https://voxelmanip.se/retro/ I thought it would be very fitting to use as the wallpaper when I wanted to take the screenshot. :)



Looks interesting... Is there an equivalent encoder that can be used with this to generate VHS footage purely in software?


There's this: https://codeberg.org/fsphil/hacktv

It's not "VHS footage" though, but it can generate all kinds of analog video signals, some of which my decoder can decode.


Could you provide a link to your project?


The server is down, but I copied the C code to here

  #include <math.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  
  #define TAU (6.283185307179586476925286766559005768394)
  
  static unsigned char head[16];
  static float fopt[127];
  static int iopt[127];
  static float*tab;
  static float*buf;
  static float y,i,q,v,phase;
  static int n,s,width;
  
  #define R(a) ((a)>=0?buf[a]:0.0)
  #define C(a) (tab[((a)+iopt['t']+(int)fopt['m'])%iopt['t']])
  
  int main(int argc,char**argv) {
    fopt['1']=0.966882;
    fopt['2']=0.623557;
    fopt['3']=-0.274788;
    fopt['4']=-0.635691;
    fopt['5']=-1.108545;
    fopt['6']=1.709007;
    iopt['y']=12;
    iopt['i']=iopt['q']=24;
    fopt['y']=12.0;
    fopt['i']=fopt['q']=24.0;
    fopt['l']=-11.0;
    fopt['h']=92.0;
    fopt['c']=0.009574;
    fopt['s']=0.8;
    fopt['a']=fopt['m']=fopt['p']=fopt['f']=0.0;
    fopt['t']=12.0;
    iopt['t']=12;
    iopt['v']=0;
    iopt['z']=0;
    fread(head,1,16,stdin);
    width=(head[8]<<24)|(head[9]<<16)|(head[10]<<8)|head[11];
    for(n=1;n<argc;n++) if(argv[n][0] && argv[n][1]=='=') {
      iopt[argv[n][0]&127]=strtol(argv[n]+2,0,10);
      fopt[argv[n][0]&127]=strtof(argv[n]+2,0);
    }
    buf=malloc(width*sizeof(float));
    tab=malloc(iopt['t']*sizeof(float));
    if(!buf || !tab) {
      fprintf(stderr,"Allocation failed\n");
      return 1;
    }
    while(fopt['m']<=0.0) fopt['m']+=fopt['t'];
    while(fopt['p']<=0.0) fopt['p']+=fopt['t'];
    if(!iopt['v']) iopt['v']=(3*iopt['t'])/4;
    for(n=0;n<iopt['t'];n++) tab[n]=sinf(fopt['f']+TAU*((float)n)/fopt['t']);
    fwrite(head,1,16,stdout);
    if(iopt['z']) for(;;) {
      if(!s) y=i=q=fopt['a'];
      n=fgetc(stdin);
      if(n==EOF) break;
      n=(n<<8)|fgetc(stdin);
      buf[s]=v=(fopt['h']-fopt['l'])*((float)n)/65535.0+fopt['l'];
      fgetc(stdin); fgetc(stdin); fgetc(stdin); fgetc(stdin); // unused input channels
      y+=v-R(s-iopt['y']);
      i+=v*C(s)-R(s-iopt['i'])*C(s-iopt['i']);
      q+=v*C(s+iopt['v'])-R(s-iopt['q'])*C(s+iopt['v']-iopt['q']);
      // Red
      v=fopt['s']*y/fopt['y'];
      n=(int)fmax(fmin(v*65535.0,65535.0),0.0);
      putchar(n>>8); putchar(n);
      // Green
      v=fopt['s']*i/fopt['i'];
      n=(int)fmax(fmin(v*65535.0,65535.0),0.0);
      putchar(n>>8); putchar(n);
      // Blue
      v=fopt['s']*q/fopt['q'];
      n=(int)fmax(fmin(v*65535.0,65535.0),0.0);
      putchar(n>>8); putchar(n);
      // Alpha
      putchar(fgetc(stdin)); putchar(fgetc(stdin));
      if(!(s=(s+1)%width)) fopt['m']+=fopt['p'];
    } else for(;;) {
      if(!s) y=fopt['a'],i=q=0.0;
      n=fgetc(stdin);
      if(n==EOF) break;
      n=(n<<8)|fgetc(stdin);
      buf[s]=v=(fopt['h']-fopt['l'])*((float)n)/65535.0+fopt['l'];
      fgetc(stdin); fgetc(stdin); fgetc(stdin); fgetc(stdin); // unused input channels
      y+=v-R(s-iopt['y']);
      i+=v*C(s)-R(s-iopt['i'])*C(s-iopt['i']);
      q+=v*C(s+iopt['v'])-R(s-iopt['q'])*C(s+iopt['v']-iopt['q']);
      // Red
      v=y*fopt['c']/fopt['y']+i*fopt['1']*fopt['c']*fopt['s']/fopt['i']+q*fopt['2']*fopt['c']*fopt['s']/fopt['q'];
      n=(int)fmax(fmin(v*65535.0,65535.0),0.0);
      putchar(n>>8); putchar(n);
      // Green
      v=y*fopt['c']/fopt['y']+i*fopt['3']*fopt['c']*fopt['s']/fopt['i']+q*fopt['4']*fopt['c']*fopt['s']/fopt['q'];
      n=(int)fmax(fmin(v*65535.0,65535.0),0.0);
      putchar(n>>8); putchar(n);
      // Blue
      v=y*fopt['c']/fopt['y']+i*fopt['5']*fopt['c']*fopt['s']/fopt['i']+q*fopt['6']*fopt['c']*fopt['s']/fopt['q'];
      n=(int)fmax(fmin(v*65535.0,65535.0),0.0);
      putchar(n>>8); putchar(n);
      // Alpha
      putchar(fgetc(stdin)); putchar(fgetc(stdin));
      if(!(s=(s+1)%width)) fopt['m']+=fopt['p'];
    }
    return 0;
  }


Inspiring to see the couple accomplish this and in the early 2000s no less. Wishing them all the best. If you haven't already, watch the animated short film[1] by Zombie Studio. It was my introduction to this case before reading the article.

[1] https://vimeo.com/1092249009


I just watched the short and I'm not a fan. I understand that they are trying to make a point and the presentation is great, but the way they paint the social worker and the judge (who, based on the story, seem to be a cool dude) feels so far away from the facts as to be entirely made up.

Also, the Vimeo web player in Android sucks so much. This is in no way related to the previous point, but I couldn't not bring it up.


I see what you mean, but ultimately the video shows both the social worker and the judge were on the couple's side, despite the first impression... The social worker was painted as this very bureaucratic person who follows the rules to a tee, while still being sympathetic to the couple's situation. And the judge was painted as the intimidating figure with the final say, who eventually rules in favor of the couple and gives the child a permanent home. I agree with the other commenter who said the story was too good to be true, so the film making some artistic decisions for dramatic effect doesn't sound too bad.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: