I recently started running a Mastodon instance on my VPS. It took some doing, since I wanted to run it in docker and the documentation for running Mastodon in docker was incomplete or misleading in a few places, but I eventually got it up and running and talking to the fediverse. I’m excited to explore other technologies that make use of the fediverse, such as PeerTube and Pleroma.
I just finished EXO_encounter 667, my entry for the Lisp Game Jam, so I’m going to be writing up a handful of blog posts as a retrospective on what it’s like to write a short game in the love2d game engine with the Fennel programming language.
I’ve finished the core of my hardware and software Chip-8 emulator, running on an Atmega1284 MCU with an SSD1306 OLED display, buzzer, keypad and SD Card reader. Finally got a launch menu integrated, that allows me to give users options to select emulation quirks using the 4x4 keypad.
Now I just need to go back through the emulator core, double check and test the quirks and I’m ready to implement Superchip support. I’m also going to start looking at laying up the PCB for an initial run. My head says Eagle CAD, as that’s what I’m used to but my heart keeps telling me to use KiCAD. I can fit the emulator in the 1284, but I’m uhmming and ahhing about adding support for a BASIC interpreter, and I really need some external RAM to make the most of that. I’ve been looking at 64k modules, but I might leave that for a later iteration if I can get this to a steady state without the extras.
A single AA is 1.5v, you’re going to need at least 3.3v to run things properly (although I think I can get away with down to 2.7v). 3 AAs should get me 4.5v, which lets me cheap out a little on power management ICs (everything is 3.3v/5v tolerant), although I might use an MCP1702 3.3v LDO regulator.
For this version of the board 3 AAs will be fine, I’ll look at options for using 2x AA or possibly coin batteries with a step-up converter or boost regulator down the line when I’m ready to build a production version. A lot of people forget the original gameboy used 4 AAs.
I have a few things that I’ve been working on for the past 8 weeks:
data visualization project
ActivityPub implementation
working through Haskell Programming from First Principles
I’m in a rut where I’ve lost conviction about all three of these projects. I’m enjoying Haskell Programming from First Principles the most but I’ve been demotivated lately by the thought that I should be focused on applying technology in useful ways more than learning new technologies. I don’t have any immediate or practical need to learn Haskell. I don’t expect to use it professionally. I just think the ideas are pretty interesting. But I can’t escape the feeling that there’s something more important I could/should be working on. So I’m in a rut where I have some things I could work on this week but little motivation to work on them, and I’m not certain how to resolve this stalemate.
Would recommend to any developer who has a few months of mostly-free-time-ahead to dive deep into the Haskell world without regards to such concerns. Just a few months, then step back. Chances are high from numerous anecdotals including myself you’ll be a whole-new-developer in whatever “real-world languages” you come back to. Not in the ivory-tower over-abstracting sense either. Just in the sense of almost-deeply-instinctively circumventing the more subtle pitfalls of all non-purelyfunctional languages, and devising more-principled, less-convoluted designs. Maybe you won’t have that and maybe you’re already there anyhow — just saying, “chances are high”. In any event such time won’t be wasted and in your future real-world-work you will thank yourself for it, maybe even others (slightly less likely, nobody quantifies or detects infinite-numbers-of-troubles-avoided ;)
I really appreciate the recommendation. I’m not totally new to the concepts in Haskell. For example, I know the basics of and am comfortable working with algebraic data types. I too have found that learning these concepts strengthens and clarifies my thinking in other areas of programming. That’s a big part of what I enjoy about Haskell and functional programming in general.
FWIW, I don’t think I’ve ever really learned a language from a book. The examples / exercises usually feel too isolated and far-removed from the domains I work on.
I do have a ton of language books, but I use them more as references while I apply the language to some problem. That focuses what you need to know. Usually what I do is to find a bunch of 500-line code snippets in the language, and choose one to add a feature to.
I went through Real World OCaml a few years ago, and it was useful. But then I found an ocamlscheme project that I hacked on a bit, and that was a more useful learning experience. It wasn’t exactly practical, but I think it focused me on a few things rather than trying to ingest every concept in a book. There are still a bunch of things about OCaml I don’t know (and I think that is true for most people).
The Pareto rule generally applies – 20% of the language allows you to solve 80% of problems. There is usually a long tail of features for library authors (e.g. in C++).
I agree and support the principle here, which I think is that abstractions are best learned through application and experience. I like focusing on the language first and then using the language to solve a non-trivial problem. I get overwhelmed if I try to learn the syntax and core concepts while also trying to think of how to best express myself in that language. But I would never consider the language learned until the second step was taken and I had used the language to complete a real-world task.
Off to Frankfurt, Germany for a couple of nights to start the week. Last minute short break, mostly to experience another place in Germany and partly because my mate needs to get abroad occasionally. Looking forward to it, especially not having to touch a laptop for a few days.
Main project when I get home is sorting my wifi network out. Up until now it’s been a Ubiquiti AP-AC-LR doing the heavy lifting, I’ve just picked up an AP-AC-MESH to go alongside that but placement of them isn’t ideal currently. Need to pull some cat6 from the loft down through a bedroom closet to the hall to move one of them to the ground floor to see if that makes a big enough difference. (The goal is decent 5Ghz coverage in the main house & on the patio.)
Still working on my link aggregator, I got most of the voting system working, though I’m still tinkering on how to prevent people from voting twice. I wanted to start on the comments this week, most of it is already in the database, all that’s left is find a way to properly pull a comment hierarchy out of the DB and display it on the page. Ideally with the limitation that it allows setting a limit to both top-level and total number of comments. I also wanted to start integrating plugins to source threads and comments from reddit, lobsters and HN to test out the scalability of everything and prove that I can pull and push interactions from both sides.
On the side I’m investigating what stuff I need to do for the upcoming GDPR change, my expectation so far is that I need to reformat my Imprint and Privacy pages, probably outsourcing them to a separate domain so I can link it more easily from my other applications as well as sending mails to the users I have to inform them about what I collect on my services beyond the necessary (which is basically backups)
Continuing my bachelor thesis. The verification tool has problems with simplifying conditionals expressions when the head is a constant expression (from macros for example). I spent too much time for that on the weekend already (recursively checking a syntaxtree and converting it into a CFA while doing optimizations wouldn’t go in my head). I hope to finish it today and then start verifying some IP input queuing.
For that I have to see how to do the initialization the kernel usually would do during boot.
Not sure I can help with the Collaborative Software Trades, but the guitktk reminded me that there’s more I want to do with textual-based representations of non-textual things, such as diagrams. Just like PlantUML, Markdown, et al, use text to represent some (or mostly) non-textual things, but in a way that’s very different from, say, using XML or JSON to describe a diagram or richly formatted page, I’d like to extend that idea to GUI layouts (e.g., JavaFX-based interfaces), where a textual almost-WYSIWYG gets you 80% of the way there, and the other 20% can be done with some other mechanism.
I’m also doing the same for online quizzes/tests that’s uses Markdown-like syntax, but allows for embedded questions and grading.
Anyway, thanks for the ideas…even if the “trades” never happen, it’s kinda neat to see what other things people want in this realm.
I’ve not heard of JavaFX before. Does it work well?
I actually haven’t thought about the layout portion all that much. It’d be interesting if a PlantUML-like thing described UI, although I’ve never had UI large enough that having it would have made that much of a difference though. I almost went the other way with mostly manual placement of everything. (Its uglier, but faster.)
JavaFX is the replacement for the Java Swing GUI toolkit and it’s as good as any cross-platform GUI toolkit can be.
One of the nice things about a PlantUML-like layout is that it’s easy to version and see diffs. Also, a big problem that I see in complex layouts is the nesting structure, so if it could capture 60-80% of the use cases, it’d help a lot.
Oh, I thought JavaFX was some special UI describing language.
I don’t know if we’re talking about the same thing but PlantUML is pretty declarative and uielem might be interesting to you. The same idea can be wrapped around other UI toolkits. However, it isn’t WYSIWYG (but I prefer it to, say, trying to manually draw ASCII diagrams).
Aiming to keep my word and have a non-alpha release of Mitogen for Ansible out today. I don’t think anyone really cares, but slips have a habit of snowballing, so I’m forcing myself to the original crowdfunding schedule as much as possible.
Naturally it is the worst day to bump into a design problem in a task that should have taken 30 minutes, but also it was the most obvious day it would happen on :)
I’m glad I stumbled across your comment, this project looks really cool and is very useful to me, also recommended to my buddies at the org I volunteer for :)
Did a silly with a friend and speed-ran the design, build and deploy process for https://antiprise.io in 2 days. Crazy simple site (1 endpoint api lol), but was fun to do all the parts including billing, accounts, setting up servers, SSL, etc with a time constraint since it’s always so easy to handwave what goes into an actual deployed product. So unless people actually use it I’ll probably not code outside of $work. If people do actually use it, I’ll be really confused and I guess working on that!
Gonna do another speed run next weekend, but using pieces of this as boilerplate/starter.
Work: rewriting a major service for our production facility to keep track of orders coming out of Magento, conducting a few code reviews and design meetings, researching product and customer migration from mage 1 to mage 2, working on a small talk I’ll be giving in May about soft skills at a local code meetup.
Personal: editing a comedy show recorded on thursday, recording a show tonight, releasing super special episodes of my current podcast, working on some up beat cheery theme music for a friend’s podcast, hitting the open mics on Thursday.
Over the weekend I ported my clone of jwz’s xsublim from xosd to plain gtk. I’m probably going to refine it over the coming week, and test to see if it’s now portable to systems not running X.
I did some more work on my Sqlite insert performance testing with go and mattn’s wrapper. I found that ‘serializing’ inserts (using a mutex on the sqlite db connection) gave incredible performance increase. It’s not a meaningful benchmark, but I found that serial inserts in sqlite easily beats postgres.
I’ve decided to start working on my browser text game again with a full Java rewrite. Before, I was using Rails, but I was always stuck on finding how to do things and learning ruby as well. I felt like I was not accomplishing much and felt demotivated. So now using Spring boot and Java which I know both of them so I can concentrate on things I want to do. Still have some issues (which I didn’t think I would hit that fast), but it’s still fun :)!
Finally finishing up the work from the past few weeks, which basically means ironing out the remaining small bugs in Failover/Proxy/Certificate/PXC Manager.
Then, it’s back to majority client work (setting up a new HA environment with the above tools, and regular bug fix development on the app)
I’ve re-made my blog’s backend to reduce the mess that it was before (see my profile for the link if you’re curious ;) ), I’ve released my android application and I’ll work towards completion of a few small projects, like my devlog.
I recently started running a Mastodon instance on my VPS. It took some doing, since I wanted to run it in docker and the documentation for running Mastodon in docker was incomplete or misleading in a few places, but I eventually got it up and running and talking to the fediverse. I’m excited to explore other technologies that make use of the fediverse, such as PeerTube and Pleroma.
I just finished EXO_encounter 667, my entry for the Lisp Game Jam, so I’m going to be writing up a handful of blog posts as a retrospective on what it’s like to write a short game in the love2d game engine with the Fennel programming language.
https://technomancy.itch.io/exo-encounter-667
I’ve finished the core of my hardware and software Chip-8 emulator, running on an Atmega1284 MCU with an SSD1306 OLED display, buzzer, keypad and SD Card reader. Finally got a launch menu integrated, that allows me to give users options to select emulation quirks using the 4x4 keypad.
Now I just need to go back through the emulator core, double check and test the quirks and I’m ready to implement Superchip support. I’m also going to start looking at laying up the PCB for an initial run. My head says Eagle CAD, as that’s what I’m used to but my heart keeps telling me to use KiCAD. I can fit the emulator in the 1284, but I’m uhmming and ahhing about adding support for a BASIC interpreter, and I really need some external RAM to make the most of that. I’ve been looking at 64k modules, but I might leave that for a later iteration if I can get this to a steady state without the extras.
What’s the battery life?
I’d like to make something very similar to this, but no emulator. Just write fast atmega assembly.
I haven’t had it running on battery yet, but with some clever tickling of timers and the OLED I’m hoping to get about 48-96 hours on 3 x AA batteries.
No way to get it on 1 AA? I think 3 is too many :D
A single AA is 1.5v, you’re going to need at least 3.3v to run things properly (although I think I can get away with down to 2.7v). 3 AAs should get me 4.5v, which lets me cheap out a little on power management ICs (everything is 3.3v/5v tolerant), although I might use an MCP1702 3.3v LDO regulator.
For this version of the board 3 AAs will be fine, I’ll look at options for using 2x AA or possibly coin batteries with a step-up converter or boost regulator down the line when I’m ready to build a production version. A lot of people forget the original gameboy used 4 AAs.
I have a few things that I’ve been working on for the past 8 weeks:
I’m in a rut where I’ve lost conviction about all three of these projects. I’m enjoying Haskell Programming from First Principles the most but I’ve been demotivated lately by the thought that I should be focused on applying technology in useful ways more than learning new technologies. I don’t have any immediate or practical need to learn Haskell. I don’t expect to use it professionally. I just think the ideas are pretty interesting. But I can’t escape the feeling that there’s something more important I could/should be working on. So I’m in a rut where I have some things I could work on this week but little motivation to work on them, and I’m not certain how to resolve this stalemate.
Would recommend to any developer who has a few months of mostly-free-time-ahead to dive deep into the Haskell world without regards to such concerns. Just a few months, then step back. Chances are high from numerous anecdotals including myself you’ll be a whole-new-developer in whatever “real-world languages” you come back to. Not in the ivory-tower over-abstracting sense either. Just in the sense of almost-deeply-instinctively circumventing the more subtle pitfalls of all non-purelyfunctional languages, and devising more-principled, less-convoluted designs. Maybe you won’t have that and maybe you’re already there anyhow — just saying, “chances are high”. In any event such time won’t be wasted and in your future real-world-work you will thank yourself for it, maybe even others (slightly less likely, nobody quantifies or detects infinite-numbers-of-troubles-avoided ;)
I really appreciate the recommendation. I’m not totally new to the concepts in Haskell. For example, I know the basics of and am comfortable working with algebraic data types. I too have found that learning these concepts strengthens and clarifies my thinking in other areas of programming. That’s a big part of what I enjoy about Haskell and functional programming in general.
FWIW, I don’t think I’ve ever really learned a language from a book. The examples / exercises usually feel too isolated and far-removed from the domains I work on.
I do have a ton of language books, but I use them more as references while I apply the language to some problem. That focuses what you need to know. Usually what I do is to find a bunch of 500-line code snippets in the language, and choose one to add a feature to.
I went through Real World OCaml a few years ago, and it was useful. But then I found an
ocamlschemeproject that I hacked on a bit, and that was a more useful learning experience. It wasn’t exactly practical, but I think it focused me on a few things rather than trying to ingest every concept in a book. There are still a bunch of things about OCaml I don’t know (and I think that is true for most people).The Pareto rule generally applies – 20% of the language allows you to solve 80% of problems. There is usually a long tail of features for library authors (e.g. in C++).
I agree and support the principle here, which I think is that abstractions are best learned through application and experience. I like focusing on the language first and then using the language to solve a non-trivial problem. I get overwhelmed if I try to learn the syntax and core concepts while also trying to think of how to best express myself in that language. But I would never consider the language learned until the second step was taken and I had used the language to complete a real-world task.
Off to Frankfurt, Germany for a couple of nights to start the week. Last minute short break, mostly to experience another place in Germany and partly because my mate needs to get abroad occasionally. Looking forward to it, especially not having to touch a laptop for a few days.
Main project when I get home is sorting my wifi network out. Up until now it’s been a Ubiquiti AP-AC-LR doing the heavy lifting, I’ve just picked up an AP-AC-MESH to go alongside that but placement of them isn’t ideal currently. Need to pull some cat6 from the loft down through a bedroom closet to the hall to move one of them to the ground floor to see if that makes a big enough difference. (The goal is decent 5Ghz coverage in the main house & on the patio.)
Still working on my link aggregator, I got most of the voting system working, though I’m still tinkering on how to prevent people from voting twice. I wanted to start on the comments this week, most of it is already in the database, all that’s left is find a way to properly pull a comment hierarchy out of the DB and display it on the page. Ideally with the limitation that it allows setting a limit to both top-level and total number of comments. I also wanted to start integrating plugins to source threads and comments from reddit, lobsters and HN to test out the scalability of everything and prove that I can pull and push interactions from both sides.
On the side I’m investigating what stuff I need to do for the upcoming GDPR change, my expectation so far is that I need to reformat my Imprint and Privacy pages, probably outsourcing them to a separate domain so I can link it more easily from my other applications as well as sending mails to the users I have to inform them about what I collect on my services beyond the necessary (which is basically backups)
Continuing my bachelor thesis. The verification tool has problems with simplifying conditionals expressions when the head is a constant expression (from macros for example). I spent too much time for that on the weekend already (recursively checking a syntaxtree and converting it into a CFA while doing optimizations wouldn’t go in my head). I hope to finish it today and then start verifying some IP input queuing. For that I have to see how to do the initialization the kernel usually would do during boot.
I am working on packaging H2O HTTP/2 implementation to vcpkg, a cross-platform C++ package manager by Microsoft.
Last week
This week
Not sure I can help with the Collaborative Software Trades, but the guitktk reminded me that there’s more I want to do with textual-based representations of non-textual things, such as diagrams. Just like PlantUML, Markdown, et al, use text to represent some (or mostly) non-textual things, but in a way that’s very different from, say, using XML or JSON to describe a diagram or richly formatted page, I’d like to extend that idea to GUI layouts (e.g., JavaFX-based interfaces), where a textual almost-WYSIWYG gets you 80% of the way there, and the other 20% can be done with some other mechanism.
I’m also doing the same for online quizzes/tests that’s uses Markdown-like syntax, but allows for embedded questions and grading.
Anyway, thanks for the ideas…even if the “trades” never happen, it’s kinda neat to see what other things people want in this realm.
I’ve not heard of JavaFX before. Does it work well?
I actually haven’t thought about the layout portion all that much. It’d be interesting if a PlantUML-like thing described UI, although I’ve never had UI large enough that having it would have made that much of a difference though. I almost went the other way with mostly manual placement of everything. (Its uglier, but faster.)
JavaFX is the replacement for the Java Swing GUI toolkit and it’s as good as any cross-platform GUI toolkit can be.
One of the nice things about a PlantUML-like layout is that it’s easy to version and see diffs. Also, a big problem that I see in complex layouts is the nesting structure, so if it could capture 60-80% of the use cases, it’d help a lot.
Oh, I thought JavaFX was some special UI describing language.
I don’t know if we’re talking about the same thing but PlantUML is pretty declarative and uielem might be interesting to you. The same idea can be wrapped around other UI toolkits. However, it isn’t WYSIWYG (but I prefer it to, say, trying to manually draw ASCII diagrams).
Aiming to keep my word and have a non-alpha release of Mitogen for Ansible out today. I don’t think anyone really cares, but slips have a habit of snowballing, so I’m forcing myself to the original crowdfunding schedule as much as possible.
Naturally it is the worst day to bump into a design problem in a task that should have taken 30 minutes, but also it was the most obvious day it would happen on :)
I’m glad I stumbled across your comment, this project looks really cool and is very useful to me, also recommended to my buddies at the org I volunteer for :)
Finally implemented dependent record types in Pikelet! Now working on adding some simple support for pattern matching.
Did a silly with a friend and speed-ran the design, build and deploy process for https://antiprise.io in 2 days. Crazy simple site (1 endpoint api lol), but was fun to do all the parts including billing, accounts, setting up servers, SSL, etc with a time constraint since it’s always so easy to handwave what goes into an actual deployed product. So unless people actually use it I’ll probably not code outside of $work. If people do actually use it, I’ll be really confused and I guess working on that!
Gonna do another speed run next weekend, but using pieces of this as boilerplate/starter.
Work: rewriting a major service for our production facility to keep track of orders coming out of Magento, conducting a few code reviews and design meetings, researching product and customer migration from mage 1 to mage 2, working on a small talk I’ll be giving in May about soft skills at a local code meetup.
Personal: editing a comedy show recorded on thursday, recording a show tonight, releasing super special episodes of my current podcast, working on some up beat cheery theme music for a friend’s podcast, hitting the open mics on Thursday.
Over the weekend I ported my clone of jwz’s xsublim from xosd to plain gtk. I’m probably going to refine it over the coming week, and test to see if it’s now portable to systems not running X.
I’m continuing slow progress on a game I’ve been writing for the past year.
I did some more work on my Sqlite insert performance testing with go and mattn’s wrapper. I found that ‘serializing’ inserts (using a mutex on the sqlite db connection) gave incredible performance increase. It’s not a meaningful benchmark, but I found that serial inserts in sqlite easily beats postgres.
I’ve decided to start working on my browser text game again with a full Java rewrite. Before, I was using Rails, but I was always stuck on finding how to do things and learning ruby as well. I felt like I was not accomplishing much and felt demotivated. So now using Spring boot and Java which I know both of them so I can concentrate on things I want to do. Still have some issues (which I didn’t think I would hit that fast), but it’s still fun :)!
Finally finishing up the work from the past few weeks, which basically means ironing out the remaining small bugs in Failover/Proxy/Certificate/PXC Manager.
Then, it’s back to majority client work (setting up a new HA environment with the above tools, and regular bug fix development on the app)
I’ve re-made my blog’s backend to reduce the mess that it was before (see my profile for the link if you’re curious ;) ), I’ve released my android application and I’ll work towards completion of a few small projects, like my devlog.
I’m still hacking on FP. My current task is to split up a 674 line function into smaller functions that are more amenable to unit testing.