17 votes

What programming/technical projects have you been working on?

This is a recurring post to discuss programming or other technical projects that we've been working on. Tell us about one of your recent projects, either at work or personal projects. What's interesting about it? Are you having trouble with anything?

15 comments

  1. [3]
    FireTime
    Link
    Anyone remember pandora time shifting from way back? For a while I had been thinking of building a modern version for Youtube Music. The idea was to record tracks that I had listened to and save...

    Anyone remember pandora time shifting from way back? For a while I had been thinking of building a modern version for Youtube Music. The idea was to record tracks that I had listened to and save them to my library incase the platform, license holders, or whatever else decides to revoke access. More recently I found the ytmusicapi repo that gives a python API access for both user playback but also tools for navigating playlists, albums, and artists without needing to scrape pages. This combined with yt-dlp I grab my playback history every 30 minutes and check for new tracks. If something new is found it dumps them into a data base work list and kicks off downloading the respective albums from those tracks. It also grabs the album art and saves into Artist/album folders. Just added embedding metadata into the files using music-tag rather than just relying on the folder structure to improve file IDing with my player. I wrapped it in a basic python docker container and runs on my Unraid server.

    7 votes
    1. [2]
      0xSim
      Link Parent
      This post is sorely missing a repository link :p

      This post is sorely missing a repository link :p

      1. FireTime
        (edited )
        Link Parent
        Cleaned it up a little to be some what legible and made it public on my repo here.

        Cleaned it up a little to be some what legible and made it public on my repo here.

        2 votes
  2. [3]
    moocow1452
    Link
    Currently I’m working on porting SDL to Playdate. And by working on, I mean that I have no idea what I’m doing. I’m using this branch that I found for a port attempt that was brought up to speed...

    Currently I’m working on porting SDL to Playdate. And by working on, I mean that I have no idea what I’m doing. I’m using this branch that I found for a port attempt that was brought up to speed with this pull request and running it with the described “hack” of a make file attached in the pull to get around support not being added and the official build hard stopping when the compiler doesn’t have multithreaded support.

    Makefile
    HEAP_SIZE      = 8388208
    STACK_SIZE     = 61800
    
    PRODUCT = gnu.pdx
    
    SDK = ${PLAYDATE_SDK_PATH}
    ifeq ($(SDK),)
    	SDK = $(shell egrep '^\s*SDKRoot' ~/.Playdate/config | head -n 1 | cut -c9-)
    endif
    
    ifeq ($(SDK),)
    $(error SDK path not found; set ENV value PLAYDATE_SDK_PATH)
    endif
    
    SRC = \
    	SDL/src/stdlib/SDL_malloc.c \
    	SDL/src/main/playdate/SDL_playdate_main.c \
    	SDL/src/SDL.c \
    	SDL/src/SDL_assert.c \
    	SDL/src/SDL_dataqueue.c \
    	SDL/src/SDL_error.c \
    	SDL/src/SDL_hints.c \
    	SDL/src/SDL_log.c \
    	SDL/src/audio/SDL_audio.c \
    	SDL/src/audio/SDL_mixer.c \
    	SDL/src/audio/SDL_wave.c \
    	SDL/src/audio/SDL_audiocvt.c \
    	SDL/src/audio/SDL_audiotypecvt.c \
    	SDL/src/audio/dummy/SDL_dummyaudio.c \
    	SDL/src/atomic/SDL_atomic.c \
    	SDL/src/atomic/SDL_spinlock.c \
    	SDL/src/cpuinfo/SDL_cpuinfo.c \
    	SDL/src/events/imKStoUCS.c \
    	SDL/src/events/SDL_clipboardevents.c \
    	SDL/src/events/SDL_displayevents.c \
    	SDL/src/events/SDL_dropevents.c \
    	SDL/src/events/SDL_events.c \
    	SDL/src/events/SDL_gesture.c \
    	SDL/src/events/SDL_keyboard.c \
    	SDL/src/events/SDL_mouse.c \
    	SDL/src/events/SDL_quit.c \
    	SDL/src/events/SDL_touch.c \
    	SDL/src/events/SDL_windowevents.c \
    	SDL/src/file/SDL_rwops.c \
    	SDL/src/joystick/SDL_gamecontroller.c \
    	SDL/src/joystick/SDL_joystick.c \
    	SDL/src/joystick/virtual/SDL_virtualjoystick.c \
    	SDL/src/joystick/playdate/SDL_sysjoystick.c \
    	SDL/src/power/playdate/SDL_syspower.c \
    	SDL/src/power/SDL_power.c \
    	SDL/src/render/SDL_d3dmath.c \
    	SDL/src/render/SDL_render.c \
    	SDL/src/render/SDL_yuv_sw.c \
    	SDL/src/render/software/SDL_drawpoint.c \
    	SDL/src/render/software/SDL_blendfillrect.c \
    	SDL/src/render/software/SDL_blendline.c \
    	SDL/src/render/software/SDL_blendpoint.c \
    	SDL/src/render/software/SDL_drawline.c \
    	SDL/src/render/software/SDL_render_sw.c \
    	SDL/src/render/software/SDL_rotate.c \
    	SDL/src/render/software/SDL_triangle.c \
    	SDL/src/sensor/playdate/SDL_playdatesensor.c \
    	SDL/src/sensor/SDL_sensor.c \
    	SDL/src/stdlib/SDL_crc32.c \
    	SDL/src/stdlib/SDL_getenv.c \
    	SDL/src/stdlib/SDL_iconv.c \
    	SDL/src/stdlib/SDL_qsort.c \
    	SDL/src/stdlib/SDL_stdlib.c \
    	SDL/src/stdlib/SDL_string.c \
    	SDL/src/stdlib/SDL_strtokr.c \
    	SDL/src/libm/e_atan2.c \
    	SDL/src/libm/e_exp.c \
    	SDL/src/libm/e_fmod.c \
    	SDL/src/libm/e_log.c \
    	SDL/src/libm/e_log10.c \
    	SDL/src/libm/e_pow.c \
    	SDL/src/libm/e_rem_pio2.c \
    	SDL/src/libm/e_sqrt.c \
    	SDL/src/libm/k_cos.c \
    	SDL/src/libm/k_rem_pio2.c \
    	SDL/src/libm/k_sin.c \
    	SDL/src/libm/k_tan.c \
    	SDL/src/libm/s_atan.c \
    	SDL/src/libm/s_copysign.c \
    	SDL/src/libm/s_cos.c \
    	SDL/src/libm/s_fabs.c \
    	SDL/src/libm/s_floor.c \
    	SDL/src/libm/s_scalbn.c \
    	SDL/src/libm/s_sin.c \
    	SDL/src/libm/s_tan.c \
    	SDL/src/thread/SDL_thread.c \
    	SDL/src/thread/generic/SDL_syscond.c \
    	SDL/src/thread/generic/SDL_sysmutex.c \
    	SDL/src/thread/generic/SDL_syssem.c \
    	SDL/src/thread/generic/SDL_systhread.c \
    	SDL/src/thread/generic/SDL_systls.c \
    	SDL/src/timer/SDL_timer.c \
    	SDL/src/timer/playdate/SDL_systimer.c \
    	SDL/src/video/SDL_blit.c \
    	SDL/src/video/SDL_blit_0.c \
    	SDL/src/video/SDL_blit_1.c \
    	SDL/src/video/SDL_blit_A.c \
    	SDL/src/video/SDL_blit_auto.c \
    	SDL/src/video/SDL_blit_copy.c \
    	SDL/src/video/SDL_blit_N.c \
    	SDL/src/video/SDL_blit_slow.c \
    	SDL/src/video/SDL_bmp.c \
    	SDL/src/video/SDL_clipboard.c \
    	SDL/src/video/SDL_egl.c \
    	SDL/src/video/SDL_fillrect.c \
    	SDL/src/video/SDL_pixels.c \
    	SDL/src/video/SDL_rect.c \
    	SDL/src/video/SDL_RLEaccel.c \
    	SDL/src/video/SDL_shape.c \
    	SDL/src/video/SDL_stretch.c \
    	SDL/src/video/SDL_surface.c \
    	SDL/src/video/SDL_video.c \
    	SDL/src/video/SDL_vulkan_utils.c \
    	SDL/src/video/SDL_yuv.c \
    	SDL/src/video/yuv2rgb/yuv_rgb.c \
    	SDL/src/video/playdate/SDL_playdate_events.c \
    	SDL/src/video/playdate/SDL_playdate_framebuffer.c \
    	SDL/src/video/playdate/SDL_playdate_video.c \
    	main.c
    
    ASRC = # setup.s
    
    # List all user directories here
    UINCDIR = SDL/include
    
    # List all user C define here, like -D_DEBUG=1
    UDEFS =
    
    # Define ASM defines here
    UADEFS =
    
    # List the user directory to look for the libraries here
    DINCDIR = SDL/include
    
    # List all user libraries here
    ULIBS =
    
    CLANGFLAGS = -DPLAYDATE=1 # needed for SDL2
    
    include $(SDK)/C_API/buildsupport/common.mk
    

    When I try to run this with make, I get this error.

    Output
    user@user-reks:~/Projects/VVVVVV/third_party$ make
    detected_OS is "Linux"
    mkdir -p build
    mkdir -p build/dep
    mkdir -p `dirname build/SDL/src/joystick/playdate/SDL_sysjoystick.o`
    /usr/bin/arm-none-eabi-gcc -g3 -c -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -D__FPU_USED=1 -O2 -falign-functions=16 -fomit-frame-pointer -gdwarf-2 -Wall -Wno-unused -Wstrict-prototypes -Wno-unknown-pragmas -fverbose-asm -Wdouble-promotion -mword-relocations -fno-common -ffunction-sections -fdata-sections -Wa,-ahlms=build/SDL_sysjoystick.lst -DTARGET_PLAYDATE=1 -DTARGET_EXTENSION=1  -MD -MP -MF build/dep/SDL_sysjoystick.o.d -I . -I . -I /home/user/Downloads/PlaydateSDK-2.4.2/C_API -I SDL/include SDL/src/joystick/playdate/SDL_sysjoystick.c -o build/SDL/src/joystick/playdate/SDL_sysjoystick.o
    SDL/src/joystick/playdate/SDL_sysjoystick.c: In function 'PLAYDATE_JoystickUpdate':
    SDL/src/joystick/playdate/SDL_sysjoystick.c:54:9: error: 'pd' undeclared (first use in this function)
       54 |         pd->system->getButtonState(&current, NULL, NULL);
          |         ^~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:54:9: note: each undeclared identifier is reported only once for each function it appears in
    SDL/src/joystick/playdate/SDL_sysjoystick.c: At top level:
    SDL/src/joystick/playdate/SDL_sysjoystick.c:198:5: warning: initialization of 'const char * (*)(int)' from incompatible pointer type 'int (*)(int)' [-Wincompatible-pointer-types]
      198 |     PLAYDATE_JoystickGetDevicePlayerIndex,
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:198:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.GetDevicePath')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:199:5: warning: initialization of 'int (*)(int)' from incompatible pointer type 'void (*)(int,  int)' [-Wincompatible-pointer-types]
      199 |     PLAYDATE_JoystickSetDevicePlayerIndex,
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:199:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.GetDeviceSteamVirtualGamepadSlot')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:200:5: warning: initialization of 'int (*)(int)' from incompatible pointer type 'SDL_JoystickGUID (*)(int)' {aka 'SDL_GUID (*)(int)'} [-Wincompatible-pointer-types]
      200 |     PLAYDATE_JoystickGetDeviceGUID,
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:200:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.GetDevicePlayerIndex')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:201:5: warning: initialization of 'void (*)(int,  int)' from incompatible pointer type 'SDL_JoystickID (*)(int)' {aka 'long int (*)(int)'} [-Wincompatible-pointer-types]
      201 |     PLAYDATE_JoystickGetDeviceInstanceID,
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:201:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.SetDevicePlayerIndex')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:202:5: warning: initialization of 'SDL_JoystickGUID (*)(int)' {aka 'SDL_GUID (*)(int)'} from incompatible pointer type 'int (*)(SDL_Joystick *, int)' {aka 'int (*)(struct _SDL_Joystick *, int)'} [-Wincompatible-pointer-types]
      202 |     PLAYDATE_JoystickOpen,
          |     ^~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:202:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.GetDeviceGUID')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:203:5: warning: initialization of 'SDL_JoystickID (*)(int)' {aka 'long int (*)(int)'} from incompatible pointer type 'int (*)(SDL_Joystick *, Uint16,  Uint16)' {aka 'int (*)(struct _SDL_Joystick *, short unsigned int,  short unsigned int)'} [-Wincompatible-pointer-types]
      203 |     PLAYDATE_JoystickRumble,
          |     ^~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:203:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.GetDeviceInstanceID')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:204:5: warning: initialization of 'int (*)(SDL_Joystick *, int)' {aka 'int (*)(struct _SDL_Joystick *, int)'} from incompatible pointer type 'int (*)(SDL_Joystick *, Uint16,  Uint16)' {aka 'int (*)(struct _SDL_Joystick *, short unsigned int,  short unsigned int)'} [-Wincompatible-pointer-types]
      204 |     PLAYDATE_JoystickRumbleTriggers,
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:204:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.Open')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:205:5: warning: initialization of 'int (*)(SDL_Joystick *, Uint16,  Uint16)' {aka 'int (*)(struct _SDL_Joystick *, short unsigned int,  short unsigned int)'} from incompatible pointer type 'Uint32 (*)(SDL_Joystick *)' {aka 'long unsigned int (*)(struct _SDL_Joystick *)'} [-Wincompatible-pointer-types]
      205 |     PLAYDATE_JoystickGetCapabilities,
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:205:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.Rumble')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:206:5: warning: initialization of 'int (*)(SDL_Joystick *, Uint16,  Uint16)' {aka 'int (*)(struct _SDL_Joystick *, short unsigned int,  short unsigned int)'} from incompatible pointer type 'int (*)(SDL_Joystick *, Uint8,  Uint8,  Uint8)' {aka 'int (*)(struct _SDL_Joystick *, unsigned char,  unsigned char,  unsigned char)'} [-Wincompatible-pointer-types]
      206 |     PLAYDATE_JoystickSetLED,
          |     ^~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:206:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.RumbleTriggers')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:207:5: warning: initialization of 'Uint32 (*)(SDL_Joystick *)' {aka 'long unsigned int (*)(struct _SDL_Joystick *)'} from incompatible pointer type 'int (*)(SDL_Joystick *, const void *, int)' {aka 'int (*)(struct _SDL_Joystick *, const void *, int)'} [-Wincompatible-pointer-types]
      207 |     PLAYDATE_JoystickSendEffect,
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:207:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.GetCapabilities')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:208:5: warning: initialization of 'int (*)(SDL_Joystick *, Uint8,  Uint8,  Uint8)' {aka 'int (*)(struct _SDL_Joystick *, unsigned char,  unsigned char,  unsigned char)'} from incompatible pointer type 'int (*)(SDL_Joystick *, SDL_bool)' {aka 'int (*)(struct _SDL_Joystick *, SDL_bool)'} [-Wincompatible-pointer-types]
      208 |     PLAYDATE_JoystickSetSensorsEnabled,
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:208:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.SetLED')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:209:5: warning: initialization of 'int (*)(SDL_Joystick *, const void *, int)' {aka 'int (*)(struct _SDL_Joystick *, const void *, int)'} from incompatible pointer type 'void (*)(SDL_Joystick *)' {aka 'void (*)(struct _SDL_Joystick *)'} [-Wincompatible-pointer-types]
      209 |     PLAYDATE_JoystickUpdate,
          |     ^~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:209:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.SendEffect')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:210:5: warning: initialization of 'int (*)(SDL_Joystick *, SDL_bool)' {aka 'int (*)(struct _SDL_Joystick *, SDL_bool)'} from incompatible pointer type 'void (*)(SDL_Joystick *)' {aka 'void (*)(struct _SDL_Joystick *)'} [-Wincompatible-pointer-types]
      210 |     PLAYDATE_JoystickClose,
          |     ^~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:210:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.SetSensorsEnabled')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:211:5: warning: initialization of 'void (*)(SDL_Joystick *)' {aka 'void (*)(struct _SDL_Joystick *)'} from incompatible pointer type 'void (*)(void)' [-Wincompatible-pointer-types]
      211 |     PLAYDATE_JoystickQuit,
          |     ^~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:211:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.Update')
    SDL/src/joystick/playdate/SDL_sysjoystick.c:212:5: warning: initialization of 'void (*)(SDL_Joystick *)' {aka 'void (*)(struct _SDL_Joystick *)'} from incompatible pointer type 'SDL_bool (*)(int,  SDL_GamepadMapping *)' {aka 'SDL_bool (*)(int,  struct _SDL_GamepadMapping *)'} [-Wincompatible-pointer-types]
      212 |     PLAYDATE_JoystickGetGamepadMapping
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    SDL/src/joystick/playdate/SDL_sysjoystick.c:212:5: note: (near initialization for 'SDL_PLAYDATE_JoystickDriver.Close')
    make: *** [/home/user/Downloads/PlaydateSDK-2.4.2/C_API/buildsupport/common.mk:149: build/SDL/src/joystick/playdate/SDL_sysjoystick.o] Error 1
    

    Going to assume that error: 'pd' undeclared (first use in this function) is pretty key, I’m assuming that I’m not referencing the Playdate SDK correctly unless SDL references a PD elsewhere. Do I need to specify the SDK files in include specificly?

    4 votes
    1. [2]
      caliper
      Link Parent
      Did you see this in the issue? That would be my starting point. Sounds like an awesome project!

      Did you see this in the issue?

      This requires an imported pd_api.h from the pd sdk that must be included in order to build, what is the best way to provide this?

      You should create a file docs/README-playdate.md that has any information needed to set up the build environment and run applications. Having a step of setting up include paths or copying a required header is fine.

      That would be my starting point. Sounds like an awesome project!

      1 vote
      1. moocow1452
        Link Parent
        Took another crack at this, the individual files needed to have extern PlaydateAPI* pd appended to them to reference the pd_api. I can get it to generate libraries, but when using the makefile...

        Took another crack at this, the individual files needed to have extern PlaydateAPI* pd appended to them to reference the pd_api. I can get it to generate libraries, but when using the makefile provided, it core dumps because the main.c wasn't provided and I best guessed. I think that now that libraries are there, we can get going on some basic ports and merging with the intended buildflow? Anyway, here's what I got so far if you want to follow along. https://github.com/ericlewis/SDL/pull/4

  3. skybrian
    (edited )
    Link
    I’m still playing around with using the fast-check library to fuzz-test Keeper, the link-sharing forum software I’m writing. Today, I asked ChatGPT to write a function to generate a set of unique...

    I’m still playing around with using the fast-check library to fuzz-test Keeper, the link-sharing forum software I’m writing.

    Today, I asked ChatGPT to write a function to generate a set of unique values for testing. (For example, in a test, I might want to have several arbitrary, unique usernames.) The code that it gave me didn’t work at first, but by asking questions, I was able to learn things about TypeScript that I didn’t know. (Have you ever heard of distributed conditional types? Apparently that’s a thing.)

    Here’s the transcript. I think it’s a good example of how ChatGPT gets things wrong but you can still learn from it. I suppose expert TypeScript programmers wouldn’t get anything out of it, though?

    TypeScript generics go very deep. I think the practical limit is how bad do the type errors get? It’s probably not worth being too precise about the type in most cases.

    Edit: after actually trying to use the code, I found more errors.

    3 votes
  4. alxjsn
    Link
    Started working on what I’m calling an SMS portal to the internet. Basically just want to have access to internet tools like directions, yelp, chatgpt, web search, etc from a dumbphone. I plan on...

    Started working on what I’m calling an SMS portal to the internet. Basically just want to have access to internet tools like directions, yelp, chatgpt, web search, etc from a dumbphone. I plan on making it a public service eventually.

    3 votes
  5. [3]
    xk3
    (edited )
    Link
    Over the past few days, I've been spending some time extracting tables from PDF documents published by the U.S. Department of State with statistics about the issuance of Immigration Visas. I've...

    Over the past few days, I've been spending some time extracting tables from PDF documents published by the U.S. Department of State with statistics about the issuance of Immigration Visas.

    I've been wanting to make a "git-scraping" project for some time so I'm glad I was able to find something that I was somewhat interested in. It was fun to refresh some of my R knowledge too.

    Related links:

    2 votes
    1. [2]
      elight
      Link Parent
      Somehow would've expected uscis

      Somehow would've expected uscis

      1. xk3
        (edited )
        Link Parent
        U.S. Citizenship and Immigration Services (USCIS) does not issue visas. USCIS belongs to the Department of Homeland Security (DHS). The National Visa Center (NVC) is the part of the Department of...

        U.S. Citizenship and Immigration Services (USCIS) does not issue visas. USCIS belongs to the Department of Homeland Security (DHS). The National Visa Center (NVC) is the part of the Department of State (DOS) that performs some pre-processing tasks for visas on behalf of U.S. embassies.

        All US visa applicants (non-immigrant and immigrant) undergo consular processing so it makes sense that the DOS is the one that is tracking and publishing the statistics. Adjustment of Status allows some nonimmigrant visas (issued by U.S. embassies) to be used when applying for permanent residence (and a few Visa Free asylum seekers). Of course, it is more complicated than that...

        That being said, I think USCIS does a better job of publishing DOS policies.

        edit: in some sense you are correct. There is potentially a better source for the data that I am interested in. I didn't catch the note at the bottom of this page:

        The Report of the Visa Office does not contain information on these categories:
        Refugees entering from abroad or asylum-seekers in the United States or
        Non-numerically controlled visa categories for people in the United States who are adjusting status (getting a green card or becoming a permanent resident) through the United States Citizenship and Immigration Services in the Department of Homeland Security (USCIS).

        But this information seems to contradict the visa categories. Immediate relatives of U.S. citizens are not subject to numerical limits. I assume these limits are the same as "non-numerically controlled". Certain classes of visas are only allowed for Immediate Relatives of U.S. Citizens (eg. IR1, CR1). The data in the Report of the Visa Office includes these visa classes. Odd. I guess the important qualifier in that note is "in the United States"--although to be in the US in the first place you would need to first get a non-immigrant visa (which is included in the report) or not have a visa (visa free or unauthorized border crossing).

        You are correct to point out that the Office of Immigration Statistics (OIS, under DHS) includes data for these people who fall through the cracks

  6. zoroa
    Link
    Getting comfortable writing Rust This isn't the first time I've written about trying to learn Rust on Tildes, and truthfully I haven't made it very far. I learned most languages I comfortable with...

    Getting comfortable writing Rust

    This isn't the first time I've written about trying to learn Rust on Tildes, and truthfully I haven't made it very far. I learned most languages I comfortable with at school or at an internship; environments where all I had was time to pour into learning. Rust is one of the first languages I've tried to learn since I got out of school. The other was Kotlin, but I haven't been able to brute force learning Rust as I did Kotlin. Something about try to having limited time outside work to internalize Rust's ownership model, its patterns (e.g. Composition over Inheritence) and its idioms all at once hasn't been working.

    So I decided this week to start from scratch and try to approach this systematically.

    I've been working through https://rust-exercises.com/ , and have found it pretty valuable so far.

    2 votes
  7. mihaitodor
    Link
    I keep contributing to a Golang project for streaming structured data at scale called Benthos: https://benthos.dev

    I keep contributing to a Golang project for streaming structured data at scale called Benthos: https://benthos.dev

    1 vote
  8. sparkle
    Link
    I recently found myself hyper fixated on the Dreamcast VMU. After some research (i.e., reading large portions of the 778 page internal development manual) I'm even more fascinated by it and now I...

    I recently found myself hyper fixated on the Dreamcast VMU. After some research (i.e., reading large portions of the 778 page internal development manual) I'm even more fascinated by it and now I want to try and build a hardware emulated version on a microcontroller like an ESP32. I think being able to add in WiFi/BT connectivity could be really fun (the original method of "mating" two VMUs to play games was cool on paper but awkward in practice) as well as upgrade to a proper backlit OLED and I've always been drawn to the time when coding was an exercise in creativity because you only had 512 BYTES of RAM to play with. And most of that wasn't even directly available.

    The documentation is surprisingly complete and I've started mapping out my registers and some of the processor instructions. I've also gently dismantled an old controller to create a breakout cable so that I can plug my hardware into the connectors on either another VMU or into the memory slot on another controller.

    I do wish I could find some of the old assemblers and other coding tools that Sega published but a lot of the hobby enthusiast sites that hosted them have just disappeared. I have not yet strolled through the internet archive to look for them though, I'm hopeful they still exist somewhere in there.

    And yes, the VMU has been implemented well enough in various emulators and there are third party hardware ones as well, but I don't think anybody has tried emulating the hardware before. It's an 8-bit CPU and I figure that if NES/Gameboy can be emulated on an ESP32, something like this should be possible too. Besides, I've never explored a project quite of this caliber and I think it'll prove to be a fun learning experience.

    1 vote
  9. text_garden
    Link
    I made a joypad controlled software drum machine with a very flexible timing system. Each lane of the sequencer has its own clock, a multiple of a base clock that ticks once per measure. Each lane...

    I made a joypad controlled software drum machine with a very flexible timing system. Each lane of the sequencer has its own clock, a multiple of a base clock that ticks once per measure. Each lane also has an arbitrary length sequence, so the sequencer allows both polyrhythmic and polymetric programming. For each step in a sequence, you can set a trigger velocity, and also the number of triggers that should appear in the step.

    Here's a video of the current state

    Next, I'll probably add individual time skew to each track, so you can make some tracks play a bit ahead or after others. Because all timing related matters are based off of a single phase accumulator, you can simply add an offset to this to get shift the timing.

    The long term goal is a self-contained music system with the drum machine and a couple of instances of a synth. It's built with Zig and SDL2.

    1 vote