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?

33 comments

  1. [10]
    timo
    Link
    I've been reading the source code of Tildes, trying to understand it. Looked through the issues, made my first Merge Request and it got merged :)...

    I've been reading the source code of Tildes, trying to understand it. Looked through the issues, made my first Merge Request and it got merged :)

    https://gitlab.com/tildes/tildes/commit/275276da00fa14b6dff73a04c1606df4965fc67a

    9 votes
    1. [7]
      milkbones_4_bigelow
      Link Parent
      Awesome! I'm hoping to do the same in the coming days. Do you have any advice on where best to start?

      I've been reading the source code of Tildes, trying to understand it. Looked through the issues, made my first Merge Request and it got merged :)

      Awesome! I'm hoping to do the same in the coming days. Do you have any advice on where best to start?

      5 votes
      1. [6]
        timo
        Link Parent
        Definitely read https://gitlab.com/tildes/tildes/blob/master/CONTRIBUTING.md An oversimplified explanation: The main code is in this folder:...

        Definitely read https://gitlab.com/tildes/tildes/blob/master/CONTRIBUTING.md

        An oversimplified explanation:
        The main code is in this folder:
        https://gitlab.com/tildes/tildes/tree/master/tildes/tildes

        • Python files control the background logic
        • Jinja templates control what is displayed

        So if you need to change something on the topic page, you go to https://gitlab.com/tildes/tildes/blob/master/tildes/tildes/templates/topic.jinja2. You try to find what and where you need to add/remove/change something. You can then search the Python code to see where this template gets used. Python passes data to the template and the template gets rendered into HTML, which is what you see on the site.

        How I got there, was by looking at a few beginner friendly issues and tried to see if I could find where the code change needed to happen. Then see if you can actually make the change. It takes some time to actually figure out where to look, but don't let that stop you. Understanding a new code base is always a challenge :)

        I'm by no means an expert, but let me know if you need any help.

        6 votes
        1. [5]
          milkbones_4_bigelow
          Link Parent
          Hey @timo, thanks to your advice and the excellent documentation I was able to (without much bother) make my first contribution today. Unfortunately I wasn't able to get vagrant to watch for...

          Hey @timo, thanks to your advice and the excellent documentation I was able to (without much bother) make my first contribution today. Unfortunately I wasn't able to get vagrant to watch for changes which was a little bit frustrating; unsure what's going on there. I had to run vagrant reboot(analogous to vagrant halt && vagrant up). Did you run into a similar issue?

          Otherwise, it was painless, everyone's been super willing to offer helpful advice where required. Looking forward to continuing to contribute moving forward :)

          4 votes
          1. [3]
            Deimos
            Link Parent
            Yeah, I think there's something wrong with the new version of gunicorn where it isn't picking up changes and automatically reloading the code any more. I've had the same issue recently but I...

            Yeah, I think there's something wrong with the new version of gunicorn where it isn't picking up changes and automatically reloading the code any more. I've had the same issue recently but I wasn't sure if it was just something on my machine. I'll definitely look into it more now that I know it's affecting others too, so thanks for confirming that. You don't need to fully reboot the vagrant box to manually get it to update though, you can just SSH into it (with vagrant ssh) and run sudo systemctl reload gunicorn.service.

            And thanks for getting involved and submitting the merge request! I'll try to review it in the next couple of days.

            2 votes
            1. [2]
              milkbones_4_bigelow
              (edited )
              Link Parent
              Awesome, thanks so much (I thought it must be an issue on my machine too). As for the MR, Tildes is a really great project, I'm just pleased to be able to contribute. Thanks too for the interim...

              Awesome, thanks so much (I thought it must be an issue on my machine too). As for the MR, Tildes is a really great project, I'm just pleased to be able to contribute. Thanks too for the interim fix re gunicorn/vagrant. That's helpful.

              1 vote
              1. Deimos
                Link Parent
                Alright, I decided to figure this out today and it looks like the new version of gunicorn stopped reading some configuration from the location I was enabling the auto-reloading. This commit fixes...

                Alright, I decided to figure this out today and it looks like the new version of gunicorn stopped reading some configuration from the location I was enabling the auto-reloading. This commit fixes it, so if you update to the newest Tildes code, run vagrant provision on your machine, and then reboot the VM, the reloading should be working again.

                2 votes
          2. timo
            Link Parent
            That's awesome! :) I didn't have any problems with vagrant, everything changed automatically.

            That's awesome! :) I didn't have any problems with vagrant, everything changed automatically.

            1 vote
    2. vivaria
      Link Parent
      TIL about negative lookbehinds and lookaheads. Thanks!

      TIL about negative lookbehinds and lookaheads. Thanks!

      3 votes
  2. mrbig
    Link
    Had to stop studying Python for a while to make a website for my mother’s company. Unpaid work but putting me in the world has its perks. A good opportunity to really learn Flexbox and CSS Grid....

    Had to stop studying Python for a while to make a website for my mother’s company. Unpaid work but putting me in the world has its perks.

    A good opportunity to really learn Flexbox and CSS Grid. Bootstrap is too messy for my taste.

    7 votes
  3. tindall
    Link
    I'm currently working on a Rust library to support the RN2903 package at the heart of the LoStik wireless communications platform. LoRa (a 433/915MHz Long Range chirp spread spectrum standard) is...

    I'm currently working on a Rust library to support the RN2903 package at the heart of the LoStik wireless communications platform. LoRa (a 433/915MHz Long Range chirp spread spectrum standard) is something I've wanted to work with for a while, and specifically I'm interested in building open source MAC standards - a point-to-point version LoRaPP and a site-return-broadcast version LoRaSiBR - that can provide an alternative to LoRaWAN which is in my opinion unnecessarily complex and limited.

    5 votes
  4. [3]
    envy
    Link
    I pilfered a javascript version of pacman and have been modifying it with my son to teach him rudimentary programming concepts. I created a couple of custom maps that can be edited via Atom, along...

    I pilfered a javascript version of pacman and have been modifying it with my son to teach him rudimentary programming concepts.

    I created a couple of custom maps that can be edited via Atom, along with altering the number of lives so that the pacman is almost immortal.

    We also changed the pacman, sometimes pacman is pacman, sometimes the pacman is my head, and sometimes the pacman is his head. The death sequence animation was the most fun, and I still bust up every time I see the crazy faces my son made to indicate the pacman was dying.

    5 votes
    1. [2]
      HoolaBoola
      Link Parent
      Oh man, I love this! Your son will probably remember this for a long time, too!

      Oh man, I love this! Your son will probably remember this for a long time, too!

      1 vote
      1. envy
        Link Parent
        yup, it also bypasses his mums "games are bad" filter.

        yup, it also bypasses his mums "games are bad" filter.

        2 votes
  5. rmgr
    Link
    I just ordered a PineTime dev kit to learn how to work with embedded systems. This should be fun!

    I just ordered a PineTime dev kit to learn how to work with embedded systems. This should be fun!

    4 votes
  6. [5]
    seizethegoddamngap
    (edited )
    Link
    I've been finding and adding self-hosted web apps to my homeserver for the past couple years. The latest was Firefox Sync Server, which I'm successfully syncing to 4 clients and have moved...

    I've been finding and adding self-hosted web apps to my homeserver for the past couple years. The latest was Firefox Sync Server, which I'm successfully syncing to 4 clients and have moved entirely off of Chrome. I'm also self-hosting matrix-ynapse/riot-web with a bunch of Tulir's Mautrix plugins/bots, NextCloud, LibreNMS, my Dad/Brother's coffee website, Splunk, Adminer, and FunkWhale. NextCloud syncs (up to) 110GB of files to all of my devices, including a KeePass database. Having that database automatically update any time I make a change has been a godsend.

    Additionally, I have two Pi-Hole instances, one on the same home server as all of the above, and another on a RPi 3 B+. Both are setup as recursive DNS server's w/ Unbound.

    (EDIT: Added some links and additional apps.)

    4 votes
    1. [4]
      asymptotically
      Link Parent
      Do you host all of that on the same machine? I've been migrating a few of my services to different boxes because it all got a bit much for my poor cheap VPS. How do you handle conflicts? I noticed...

      Do you host all of that on the same machine? I've been migrating a few of my services to different boxes because it all got a bit much for my poor cheap VPS.


      NextCloud syncs (up to) 110GB of files to all of my devices, including a KeePass database

      How do you handle conflicts? I noticed that KeePassXC has a built-in way to merge two versions of a database, but I'm not sure how to automate that.

      2 votes
      1. [3]
        seizethegoddamngap
        (edited )
        Link Parent
        I do. The server is a Dell PowerEdge C1100 w/ dual Xeon L5520's, which gives me 8 cores/16 threads, and 72GB of RAM. As soon as I save up, though, I'm going to make a Ryzen 3900x server. 4 more...

        Do you host all of that on the same machine?

        I do. The server is a Dell PowerEdge C1100 w/ dual Xeon L5520's, which gives me 8 cores/16 threads, and 72GB of RAM. As soon as I save up, though, I'm going to make a Ryzen 3900x server. 4 more cores/8 more threads, the single core Passmark score is triple the L5520's, and it should actually reduce power consumption.

        How do you handle conflicts? I noticed that KeePassXC has a built-in way to merge two versions of a database, but I'm not sure how to automate that.

        I have KeePassXC automatically saving after every change. I'm not quite sure about how the Nextcloud clients work, but once it detects a change, it (almost) seamlessly syncs the new file to the server, which pushes the updated file to the rest of the clients. Sometimes things get wonky and the Nextcloud client will detect a 'conflict'. It'll save a local-only copy of the database and append the date/time to the new file name. I don't have merging or conflict resolution automated, but when it comes to my passwords that's okay, I'd rather fix them manually.

        5 votes
        1. [2]
          asymptotically
          Link Parent
          Wow, that sever is a lot beefier than mine. Since you're keeping it at home, what's your home internet connection like? Do you get multiple IPv4 addresses? I guess it's not too big of a deal since...

          Wow, that sever is a lot beefier than mine. Since you're keeping it at home, what's your home internet connection like? Do you get multiple IPv4 addresses?


          I guess it's not too big of a deal since you probably don't modify your password database very often. If I did, I'd probably switch to pass and version it with Git.

          2 votes
          1. seizethegoddamngap
            Link Parent
            I'm getting ~450/20 via Spectrum, but my neighborhood is hopefully getting fiber soon, which means I'll probably get the 1000/400 package. I only get one dynamic WAN IP, but I'm using Dynamic DNS...

            I'm getting ~450/20 via Spectrum, but my neighborhood is hopefully getting fiber soon, which means I'll probably get the 1000/400 package. I only get one dynamic WAN IP, but I'm using Dynamic DNS via ddclient and Google Domains to keep everything URL-reachable. NGINX reverse-proxy's almost everything, which is how my family's coffee company website is reachable.

            I also have a Windows laptop running "headless" as my Plex/torrenting server.

            4 votes
  7. milkbones_4_bigelow
    (edited )
    Link
    I'm working on a mac menu bar app (full stack python made possible by the rumps library) to add tracks playing on WFMU to Spotify. I'm also working on functionality to subvert the recommendation...

    I'm working on a mac menu bar app (full stack python made possible by the rumps library) to add tracks playing on WFMU to Spotify. I'm also working on functionality to subvert the recommendation algorithm with further reaching but within bounds recommendations. I suppose it's a harder problem to solve computationally but I'm not strictly interested in music like the music I'm currently listening to. It's much more nuanced than this in reality. Probably not the right thread for this but does anyone else feel similar?

    3 votes
  8. emdash
    Link
    I got distracted from my business this week to focus on building a Paw Dynamic Value extension to retrieve a specific value from a database. The tokens I use to verify a user and organization in...

    I got distracted from my business this week to focus on building a Paw Dynamic Value extension to retrieve a specific value from a database. The tokens I use to verify a user and organization in our applications are not accessible from the client (rightfully so), which means Paw has no way to know what the value of the verification token is when submitting a Verify User/Organization HTTP request.

    Unfortunately for me, I've encountered several limitations in the Paw extension interface that prevent me from implementing this as nicely as I'd like. Paw utilizes Safari's JavascriptCore engine instead of running something like a containerized Node.js environment, which means I have no access to libs like fs and net, which tools like node-postgres need to work—after all, it's not usual to try and interact with a database in a browser environment!

    The solution to this appears to be extremely hacky: run a DB access server on some local address, and have my Paw extension make HTTP requests to that to retrieve the value I need. Yuck.

    3 votes
  9. cmccabe
    Link
    I have posted on tildes before about my interest in the history of public access unix systems and in the future of the non-commercial internet. My project recently has been to set up and run a...

    I have posted on tildes before about my interest in the history of public access unix systems and in the future of the non-commercial internet.  My project recently has been to set up and run a free Linux server for people interested in learning about and practicing command line skills and shell programming in a collaborative social environment.  It's an opportunity for me to both support the non-commercial internet and to level up my sysadmin skills.

    Although users can publish web and gopher content to the web, most activity is internally focused.  And most tools for user interactions are built by the users themselves.  There is a user-designed shell blog (called "shlog"), a command line chat program, a git-based bulletin board, and a few other novelties.  I am currently working with a couple other users on a distributed link aggregator as well.  A cool part of most of these tools is that they are built on a decentralized architecture -- user content is stored in each user's home directory and aggregated into a view by client tools.  Because most of these tools are internally focused, it gives people a place to play with computer and internet technology without broadcasting everything to the entire world.

    The technical side of this project for me, again, has largely been about leveling up on sysadmin skills.  I started the system on a Debian VPS and have recently moved to Arch.  I'm now running an nginx web server, a gophernicus gopher server, postfix for email, and various other security and other configurations and services.  Although I'm philosophically not a fan of systemd, there is no denying its importance, so this has also been an opportunity for me to learn more about it.

    "Are you having trouble with anything?"  Not trouble exactly, but one of the challenges (in the good sense of the term) is resource minimalism.  The VPS is tiny and will stay that way intentionally, so a theme of the system has been about doing as much as possible with as few resources as possible.  The fun part of this is, as many of you may know, is that text-based computing is lightweight, so the system isn't nearly approaching any limits yet.

    This is intended to be a long-term project so maybe I'll post again if anything notable happens.  (And if anyone is interested in joining, just PM me. The system is new and has a small user base, so there is a lot of room for more members.)

    3 votes
  10. moocow1452
    Link
    Re: Unsubscriber, it worked, I think? The day after I still got a lot of email, and I went through manually Unsubscribed, but then I still got email and apparently it may take up to 10 days to...

    Re: Unsubscriber, it worked, I think? The day after I still got a lot of email, and I went through manually Unsubscribed, but then I still got email and apparently it may take up to 10 days to properly Unsubscribe for reasons. So I dunno, it did get me less email, but that might have been because I did it manually.

    Also of note, there's an at work Hackathon for trying to make a Trello drone fly around with a voice assistant, using the provided web tools or C API. I'm off Friday, so it's another 5 hours I would be spending at work, but hopefully I can spin it into a raise. I mentor through FIRST Robotics, so I think I can make something happen.

    2 votes
  11. drawkcab
    Link
    I put together some Python code the other night because I'm looking to purchase and AMD 3950X and did not find a Now In Stock monitor for Microcenter. This gave me an excuse to learn a bit about...

    I put together some Python code the other night because I'm looking to purchase and AMD 3950X and did not find a Now In Stock monitor for Microcenter. This gave me an excuse to learn a bit about Beautifulsoup4 and also the Twilio Python API so that my script can send me a text when the CPU is in stock. I expanded the code to be able to look through all Microcenter locations for any number of products...though I don't know if all product pages will work. It's basic but a fun way to try some new libraries. It's command line only and now real use case outside of meeting my own personal need to poll for product availability.

    2 votes
  12. Moonchild
    Link
    I am attempting to do a 64-bit port of cyclone, which was doing safety before it was cool. I've managed to build a copy of the compiler under 32-bit, which was no small feat. Unfortunately, I'm...

    I am attempting to do a 64-bit port of cyclone, which was doing safety before it was cool.

    I've managed to build a copy of the compiler under 32-bit, which was no small feat. Unfortunately, I'm having difficulty bootstrapping, and have already had to make some manual modifications to the autogenerated c code. The main problem is, the automatic c binding generator seems to be unable to parse stdio.h (and a couple of others, but that's the main one). There are stubs for the minimal interface that the compiler needs, but the parser generator wants more.

    2 votes
  13. tlalexander
    Link
    I’ve added four 4k cameras to my off road robot and I’m learning to write a gstreamer plugin to process the data. I’m going to collect a bunch of data, hand label the images, and run pixel wise...

    I’ve added four 4k cameras to my off road robot and I’m learning to write a gstreamer plugin to process the data. I’m going to collect a bunch of data, hand label the images, and run pixel wise image segmentation on the images. That will let me detect and follow trails. I will also use structure from motion techniques to estimate the 3D depth of the scene. The real trick will be getting a good frame rate! Some pictures of the system and output are on my website here:
    https://reboot.love/t/new-cameras-on-rover/

    2 votes
  14. valac
    Link
    I'm working on beefing up my home lab setup so I can maybe make some vulnerable VMs to provide back to the community, and on the side of that side project, starting to write an updated version of...

    I'm working on beefing up my home lab setup so I can maybe make some vulnerable VMs to provide back to the community, and on the side of that side project, starting to write an updated version of cewl to scrape websites and generate possible account passwords based off of the content. I have a really shitty version of the manipulation engine sketched up in python3 so far and it's been sitting on the back burner :(

    1 vote
  15. asymptotically
    Link
    I'm currently writing a library to decode, encode, and verify cryptocurrency wallet addresses. I was really impressed by Bitcoin's Bech32 encoding scheme. It would be cool if this was adopted...

    I'm currently writing a library to decode, encode, and verify cryptocurrency wallet addresses.

    I was really impressed by Bitcoin's Bech32 encoding scheme. It would be cool if this was adopted outside of the cryptocurrency space too, I think it would be great for encoding something like a Tor onion address.

    1 vote
  16. archevel
    Link
    I've been plodding away at getting elm 0.19.1 running on my Raspberry Pi. Unfortunately there's no precompiled binary for ARM. This has led me to dive into installing haskell and trying to figure...

    I've been plodding away at getting elm 0.19.1 running on my Raspberry Pi. Unfortunately there's no precompiled binary for ARM. This has led me to dive into installing haskell and trying to figure out how to build cabal-install from source. There's been lots of small issues, e.g. version mismatches of base libraries, leading me to install other versions of ghc than 8.2.2 which was indicated in a blog post to be needed when installing elm 0.19.0.

    So after getting to the point of having ghc 8.4.4 and a working cabal-install on the Raspberry Pi I try try to build elm... only to discover that elm requires the time-1.9 haskell library which conflicts with the requirements of the ghc I have installed! Aaaah software dependencies, it is almost as easy as naming and cache invalidation ;)

    Armed with a little bit better knowledge of ghc/cabal, I now have to rebuild cabal-install, but to do that I need a newer version of llvm! One step forward two steps back...

    1 vote
  17. joplin
    Link
    For some reason, I've become obsessed with Penrose tiling. So I've implemented a couple different apps to generate tilings. The first does a recursive search, laying down a tile, then laying down...

    For some reason, I've become obsessed with Penrose tiling. So I've implemented a couple different apps to generate tilings. The first does a recursive search, laying down a tile, then laying down another following the edge-matching rules, etc. until it gets to a point where it can't lay one down. Then it backtracks and tries again.

    Next I implemented the much easier method of inflation/deflation where you start with a tile, generate a tile that contains that tile, etc. This is fast and easy for a small area but it makes it difficult to pan around and expand the area covered by tiles.

    Finally, I implemented the pentagrid method which was difficult to find information on. All the info is either mathematical papers, or descriptions by people who leave out important little bits, or describe important steps sparsely. I eventually got it working, though, and it's pretty cool! I still need to label the edges after generating the rhombs so I can convert them into darts and kites or pentagrams and pentagons. But I'm having a lot of fun with it.

    1 vote
  18. sky_Pharaoh
    Link
    Just been working in RStudio for some data projects.

    Just been working in RStudio for some data projects.

    1 vote