This is the weekly thread to discuss what you’ve done recently and are working on this week.
Please be descriptive and don’t hesitate to ask for help, advice or other guidance.
Working on my highly opinionated linux distro: Bare Linux. It’s my take on what a lightweight distro should look like. Uses musl libc, suckless' sbase and some parts ported from OpenBSD. It’s not usable yet, but it can be bootstrapped from modern linuxes and is self hosting in a user namespace.
So last week I went to the local startup drinks event and I met someone that I thought could be a helpful business partner for growing an Octave-based business. I had coffee with him on Saturday. Turns out that he’s mostly interested in a startup-like model where you build once and sell infinitely often, whereas I am hoping more for a small business where we sell training, support, and development.
I’m not sure what to do. I guess we could try selling “cloud” Octave stuff (ugh, hate that word), but by my estimate there are no more than one or two million potential customers worldwide, i.e. Matlab users, and virtually all of them are already using Matlab, with some slowly moving to Python or R and a few adventuring into Julia (all of which is a good thing, down with Matlab!).
Thus, this week I’m going to be doing a bit more analysis of what we could do, talk about it with this guy, and see where we could go.
Plus the usual boring day job things so I can still have a salary in the meantime.
Been working on my text editor’s (I know, another one) internal buffer representation and interaction with the filesystem.
I’ve also been working on a tiny web app that’ll let you edit the files in the filesystem in a nice manner. You know, to be able to give to a client a flat-file database for the website’s content but for the client still be able to edit it with a nice user-friendly interface.
What sort of model or architecture are you using for that internal buffer representation? Is it similar to any other editors out there?
Yes it is similar to other editors' implementations, don’t wanna reinvent the wheel here, yet.
Mostly I’ve been playing with how it keeps track of the data in the file. Because one of the aims of the text editor is to be coded in 100% Node.js, I don’t have something like mmap(2). So I need to be careful in order to make sure the whole file isn’t loaded into memory all the time, since that will be slow.
So far the best solution I’ve come up with is to have one instantiable File object keep track of the filesystem file, so for example be able to ask it for line 5 to 7 and it not reading the entire file, just read what’s necessary. That’s for the relationship with the filesystem and it can be found on GitHub: https://github.com/noedit/file (still a WIP)
The File interface will also allow you to write the file, perhaps keep track of if it gets updated, thus re-read it, stuff like that.
Then, the editor’s server-side will have an instantiable Buffer object. This’ll keep track of where the cursor is, what is its File instance, provide methods for the editor to request certain lines, all the fancy schmancy stuff. The Buffer will most probably be using a gap buffer or something similar in order to keep track of unsaved changes and stuff like that.
Have spent the last 2 weeks thinking about this and working on this. I am completely open to suggestions. :)
You might enjoy https://www.cs.unm.edu/~crowley/papers/sds.pdf then if you haven’t seen it already.
Had not seen it. TBH PDFs aren’t my cup of tea. Though what did serve as a good resource was: http://ecc-comp.blogspot.mx/2015/05/a-brief-glance-at-how-5-text-editors.html
I’ll check out the PDF if I work up my courage for it. :)
Last week I talked about writing a bunch on Monday. I ended up totally distracted by my talk getting posted to Y Combinator News. The YouTube videos picked up by 3,500 views and I got some really nice responses, even if I spent the day watching ‘tail -f access.log’ and such. I did get to the email and outline later in the week.
Now that I have an outline, writing a book looks like a manageable amount of work (famous last words). But I’ve already spent months writing my talk, so I have a leg up. This week I’m going to import my talk content into the book outline and get a scale of the work. Depends most on how much of the stuff I cut for time makes its way back in, really.
To my great surprise my Lambda Jam proposal was accepted. So I’m heads down on “How To Use Real Computer Science in Your Day Job” now through July.
This sounds like a great talk. I’m looking forward to it! (Thanks for reminding me to register for Lambda Jam.)
Noisebridge shenanigans: I finished the very first version of my barcode scanning flow in Rust. Currently it claims the input device such that it other programs listening on stdin don’t receive its input, filters for valid ISBN13 numbers and prints those out to stdout. The bit I’m working on now is a small golang utility which will read these ISBNs, look for them using the OpenLibrary API and then store the book data in PostgreSQL. The final part is a small flask app which someone else in the space is writing which will display them in a searchable manner.
I’m also setting up some infrastructure for Freecon, which is a FOSS unconference event that a few of us at Noisebridge are hoping to put on in October 2015 in San Francisco. We’re very much at the planning stages, but I’m excited to see what we’ll put together.
Calandria: a game that uses the Minetest voxel game engine to simulate unix-like computers in an environment (inspired by Papert’s Mindstorms book) conducive to learning programming and other technical skills. This includes both a pure-Lua virtualized OS as well as a collection of block types that allow interaction with the OS to and from the game.
Added named pipes and replaced the simulated terminal last week.
Writing stripe-copy in Go, a cli tool for migrating Stripe objects between two different accounts.
v1.0 is almost ready, could use some testers if this is a thing that is useful to you.
Ultimately, I’d like for it to also let you import/export your account’s state into files, so you’ll be able to manage your Stripe plans and subscriptions and whatnot by editing a .yaml file or somesuch.
Coming to the end of a very big client project rollout (user friendly mobile HTML5 frontend to some of the more user hostile parts of SAP, hurrah) and blinking in the daylight a bit … I’ve got to catch up with some abandoned personal projects now. And spend some time with the kids.
Moved into new space. It’s nice, they’ve got food, but it kinda doubled my commute–and on a bike in Houston summer, that’s no bueno. This in turn means I have to wake up earlier, like by three hours, to miss out on morning heat–and then I’ve still got no idea how to avoid the heat going home.
Build system is still grumbling–friends don’t let friends do CI with Node on Windows. There, I said it. Also, I thought I’d be clever and add A records for our domain so we could stop manually keying in IPs–well guess what? No dice. The network here isn’t quite stable yet, and so I’m going to throw my intern at the router (DD-WRT ftw) and give them the fondest of wishes. :(
Intern and I finished drafting a waveform and alarm protocol over the weekend to compete (hah) with the HL7 IHE WCM–and the problem here is that, for the vendor we want to integrate with, we’re going to probably need to supply a working C# implementation inside of this week. Outside of office hours, because (naturally) other things are on fire. Oh, and they’ll probably still say, “meh?”
A brief rant on that:
Here’s the IHE WCM link: http://www.ihe.net/Technical_Framework/upload/IHE_PCD_Suppl_WCM.pdf
Now, I’m sure a bunch of smart people worked on this. But these chucklefucks have made several errors:
I could go on, and it’s terrible. The entire industry is looking over at the web and being like “Oh, golly, we should be buzzword compliant”! None of these fuckwits have used an API in anger. If they have, it hasn’t been in a resource-constrained startup environment. They do not know how to specify a simple system. It’s a gigantic hairball, and everyone who’s been in healthcare software more then three years should be put up against a shed and shot in the neck, for our sake and theirs.
To anybody here who ever is thinking “I know, I’ll change my company culture and product to try and encourage APIs and 3rd-party adoption (you know, like every successful startup in the last five years)”…don’t be surprised if management (especially if they aren’t developers by trade) at worst resists, at medium ignores, and at best just completely fails to give you any perceived support beyond “It’s a totally good idea!” and then proceeds to do nothing to help you except for riding your ass about “Is the API web enabled yet” and taking credit for something after it’s done.
Enjoying the fact that I quit my job and actually have some time to myself for the first time in 5 years.
And a UNIVAC I emulator.
Starting the 2nd week of my new job.
Last week was spent getting familiar with the code base and helping to tune the performance of our proof of concept Storm topology. This week will be more testing of performance in order to figure out what additional work needs to be done in that area ahead of a POC release later this month.
Additionally, I’m going to be spending lots of time reworking job descriptions and reaching out to everyone I know letting them now about what I’m hiring for and hopefully find some good people from that. Recruiting, its a pain, but I also love it because you get to meet and talk to a lot of new people, some of whom turn out to be really smart and interesting.
The most important thing of all: data modeling. I’m rewriting our internal data feedback service (e.g. this person’s name is not X, it’s actually XY) to be vastly more simple with a much more rigid model that emphasizes correctness. I’ve found that services that accept sloppy input tend to have sloppy code to fix it later, rather than just fixing it first or never accepting bad input. Not to mention, solid primitives are the basis of solid abstractions on top of them.
Speeding up our test runs! Currently we pay a 6-20 second cost any time we want to run a single test - Sails.js needs to require all of its dependencies, which is dog slow. I built a server which lets you invalidate/re-require any file, and run the tests on demand. We’re starting to run tests in under 1 second!
Using railstutorial to learn me some rails, and porting a small sinatra prototype to a better system.
Continuing with network shenanigans at home, having got the EdgeRouter Lite setup for the WAN & LAN successfully with IPv4 & 6 (6in4 tunnel sadly, but it works seamlessly from the local network) I then decided I should upgrade the unmanaged switch to a managed one and picked up a bargin on eBay, so when that arrives tomorrow (hopefully) I’ll be able to start playing with VLANs and some rate limiting on the guest Wifi network. Quite frankly overkill for what I need, but it’s fun to play with and has eeked out another 700kb/s or so from the fibre connection on average so that’s good.
Also back to playing with native SmartOS zones & ruby for some work stuff this week, which should be fun. And lots of cycling when the british weather allows.
Day job, and planning on refactoring haskell-fischbot.
Also maybe tweaking the generator for Tolkien Ipsum and writing the second part of my 3-part series on building a website from scratch.
I’m working on a public api for Libraries.io using https://github.com/cerebris/jsonapi-resources to follow the JSON API spec in an attempt to produce a standard interface for querying package manager data.