This is the weekly thread to discuss what you have done recently and are working on this week.
Please be descriptive and don’t hesitate to champion your accomplishments or ask for help, advice or other guidance.
I don’t normally post in these threads, so I’ll cover a few months instead.
work: I spent 7 months at a PrettyBigCo that develops financial tools and it made me depressed. Sitting in a room with hundreds of people all day every day was making me physically ill constantly too which didn’t help things. I wasn’t able to attend the therapy sessions the NHS offered me (because they clashed with work lol) so I quit.
I’m moving to Helsinki mid September to join Umbra 3D. They have more meaningful work and don’t have an open plan office so that should work out better. I am a little worried I didn’t take enough time off, and that the stress of 1) moving to another country 2) with like two hours of daylight will leave me feeling like crap again.
!work: now I’m not encumbered by employment I can start fixing the issues in my open source projects that other people have noticed.
I also spent some time getting my game engine to compile on Windows. I’ve been trying to keep all the obviously platform specific code separate from my game code, but of course there was all kinds of less obvious crap, like the lack of err.h, windows.h taking my keywords (NEAR, FAR, ERROR which I was using as a replacement for err), and ming giving me stupid errors (e.g. undefined reference to '__gxx_personality_seh0' - which was fixed by disabling exceptions or thread-safe statics or something…). I would like to get some kind of networking in next, because I think that will make it feel much more like an actual playable game.
undefined reference to '__gxx_personality_seh0'
Finally, I’m in SF for the next three weeks. I’d love to get recommendations on what to do here!
Hey, congrats on getting more meaningful work. I wish you the best.
Graphics and 3D is fun! I’m glad you found something enjoyable to work on.
PM me if you can talk more about it, or if they’re looking for remote contract work. :)
Alcatraz is totally worth the hassle. Walk through GG Park to the ocean; it’s spectacular. Eat a burrito from Farolito at 24th & Mission. Check out the Marin headlands; the views from there are otherworldly. Head up to Twin Peaks – great way to see how small the city actually is. If you need to be down in the valley for any reason, be sure to drive 280, particularly in the morning.
If you like tech meetups (on meetup.com), SF is fill of them. Probably has a bunch just on 3d and graphics!
Some of my favorite things in SF from my visit this year, aside from the wonderful views, were going to Giants baseball games, City Lights bookstore, and the beer bars (Toronado and Mikkeller).
Writing a C API to my finite state transducer library written in Rust. The hope is to then write a Go binding and use it at $work.
There are some interesting challenges because certain parts of the API are generic. For example, building an FST takes anything that satisfies the std::io::Write trait, and ideally, the analogous interface in Go would take an io.Writer. Actually wiring this up seems a little tricky and probably involves writing a Rust implementation of std::io::Write in terms of C function pointers. I kind of worry that I might end up paying dearly for it if function calls don’t get inlined, but the only way to know is to experiment! Alternatively, I could take the cowardly way out and just specialize the interface to a few key types (e.g., writing to memory or writing to a file probably cover most of what you want to do).
Prepping for a presentation Wednesday night. I somehow need to present category theory and its relation to version control in under 30 minuets.
That sounds interesting - please share the slides after your talk if you can!
Grumpy me says there’s no real relation and you guys are trying to fit a round peg into a square hole. Category theory isn’t doing me a whit of good in trying to improve Mercurial. I need to understand a lot more about diff algorithms, bitkeeper’s weave structure, and delta compression methods.
Then again, I never really did like logic much and the part of category theory I find interesting is homological algebra. The kind of people who like computers more than math don’t care at all about homological algebra.
I’m finishing the tutorials for programming a simple “pong” game and a “super mario” game. Screen shot: http://imgur.com/a/wPWPq
They’re for the second season of my “learn how to program” video tutorials (in Spanish, though). I think of these as the videos I’d like to have watched when I was 12 and started to program. Back then we had tutorials in magazines, but kids today learn by watching video, which I think is awesome.
There’s not much material in Spanish which is down to earth and simple to learn, for kids, who usually have a short attention span. Many tutorials start by showing some slides on what an algorithm is… don’t get me wrong, I have a CS degree, but I don’t think that’s attractive for casual programmers. They can learn that afterwards.
I guess this would be an interesting discussion for the community: learn programming from first principles or from examples. Both have their pros and cons. My videos split the material in self-contained 10-minute videos; each targets a specific project which teaches you something but where learning is not the advertised goal.
Channel’s here, if you understand Spanish, I’d really appreciate some feedback. However, keep in mind that probably you, lobste.rs user, are not the target audience :)
No está mal. Vi unos minutos del primer video. ¿Qué te han dicho? Oye, es una pena que no se pueda conseguir un editor de texto de Python en castellano. Pero ni hablar, el video parece bueno. Quizás podría ser un poco más dinámico. ¿L@s chic@s a los que están orientados tus videos les agrada? ¿No pierden interés?
Parece que de momento hay un pequeño grupo de gente que sigue los vídeos y me deja buen feedback. En el capítulo final pedí que me explicaran qué les parecía y me dieran ideas para vídeos futuros, y la respuesta fue buena.
Sobre los chicos… de momento no tengo información. Es un demográfico al que no tengo buen acceso, espero que con el tiempo lo iré solucionando.
I’m working on my new time series DB called henhouse. I just added concurrent puts and gets and found a bug. I used deisgn by contract to implement the DB and am writing a post about how awesome DbC is compared to other things like TDD.
I’ll update this once I get the post up.
I’m very curious about this. Is there any material online regarding motivation, use cases, design?
In terms of the bug and Design by Contract I wrote about it here. I hope to convince my workplace to make it Free Software. It’s simple but maybe useful.
I didn’t find your argument for Design by Contract very convincing, despite the fact that I think contracts are very useful and important idea, sorry! It did get me wondering, though. Could we / should we, write contracts and use unit tests to test that the contracts work as expected? I’m not a TDD type of guy, but I do find unit tests extremely useful (I write them after the fact usually… bad me.). This maybe results in the best of both worlds – I can be sure that units won’t violate contracts in normal operation, leading to less crashes and more robustness, but I can also avoid catastrophic events and data loss as a result of heisenbugs, like those caused by race conditions like you faced.
My article addresses your question. You should write integration/randomized/fuzz tests to test your contracts. Unit tests are rarely needed. Why write unit tests by hand when you can write a test that generates tens of thousands of tests?
I think people often use the word “unit test” to mean “automated testing”.
If you look at the bottom of the article, you will see an example randomized test I used in my project. (written in perl 6 of all languages ;-)
You’re right, these are great alternatives, and integration tests can encode intentions and result in validations of correct behavior. These are definitely needed, regardless.
It’s been my experience, though, that unit tests find problems quicker than integration tests, and as a result they are useful to me. If they run quickly, it’s almost an extension of the compiler. When writing Go, I execute make test way more often then make by itself, because my unit test suite is lean and mean, and has enough coverage that all packages get compiled as well. Plus, I can easy test just the package I’m working on, etc.
But, to the point in your article, it’s often the case that unit tests are poorly implemented and don’t offer much benefit. I see this often with the TDD write test first strategy, mind you. It’s certainly the case that property based testing makes unit tests better, and should be used when possible. You call out QuickCheck in your article – are you advocating that those tests be done as integration tests? Or is there a mismatch in definitions of test terminology (this is all too common)? Thanks again for the article, it’s good stuff to think about and consider!
I just finished a simple web application that I started on at Elm Chicago’s workshop night last week; it’s called Idea Fight, and it’s designed to help me (and others) figure out which ideas should be implemented first.
I really enjoy working with Elm, and I thought that the algorithm to partially order a list of items was pretty fun to work on!
$WORK: Finding myself complaining a fair amount about certain engineering issues, not sure what to do about it yet.
!Work: Working on my in-person Golang training course materials, mainly the lab project (a networked/shared Roguelike) – trying to not get ratholed by dungeon generation and cool 2D sprite-based displays.
When you find yourself complaining about engineering issues, ask why things are done the way they are. Sometimes there’s a valid reason.
I found myself complaining about them a lot and I started realizing that I may have just been whinging. I stopped asserting that things were being done wrong and started genuinely asking how they could be done better. It works better. I still assert things are wrong at first, but I keep it to myself until I get over the initial feelings of annoyance.
When you find yourself complaining about engineering issues, ask why things are done the way they are. Sometimes there’s a valid reason.
Most of the time, reasons that might be invalid now were not invalid when decisions were made. Chesterton’s Fence, and all that.
And sometimes the reason is expedience, which I don’t think is a valid reason, but all I can do is point out problems. I’m reminded of the adage that you can’t test quality into a product.
Started reading through Types and Programming Languages.
I have started trying to write an implementation for all the languages discussed in the book in a wide array of languages, so far I have a Haskell implementation for the arith language and I plan to add an implementation in ocaml, rust, and go if I can get around to it (I have never written anything in ocaml or rust).
This week I also plan to read at least 2 papers, top of the pile (and carrying around in my bag) are How to make destructive updates less destructive and The next 700 programming languages.
I also hope to find time to work on my personal programming language [Icarus](github.com/mkfifo/icarus) - in particular the transformation phase from the intermediate form to my bytecode form.
I managed to get my small Pony documentation change landed, I need to look into a Pony bug I raised about some concerns I had on the String class useability - although a lot of my issues stem from my lack of familiarity with the Pony capability system.
Getting ready for school which starts on Thursday - goodbye to my FreeBSD desktop machine for a little while :‘(. I didn’t have the time or gumption to install a BSD on my laptop yet, so it’s going to be Linux for (at least) the first part of the semester.
Working a bit more on rewriting pep in scheme. It’s coming along - but still not usable (hoping to have it close by the end of this week). It’s definitely going to be easier to do string manipulation/extend with a plugin system/do meta stuff than with C.
Writing a post about what I think could be better in the world of open source personal operating systems for non-technical users. Only really sketching things out and writing a draft right now, but if anybody’s interested I’d love some input!
I’m helping my friend develop his IRCd in Perl. It’s not as terrible of a language as I thought it’d be!
I thought that too, then I looked at code I wrote a couple years later. What got me was that I even tried to write it cleanly!
Of course, I was young then…
My point being, check back in a little while. ;)
Perl 6, by any chance?
Perl 5. He’s using modern feature of Perl 5 though, so it isn’t too bad.
I haven’t done anything meaningful in Perl since 2010, but the language tends to get a bad rap. It’s easy to pick on, because it’s easy to write bad code in it. But, with some care, it can be very elegant, and very productive.
Debugging the Swift runtime. It’s a bit of a beast.
Which part are you debugging?
Calls into C code. In fact, most of the bits that go into the C++ part of the runtime. Happily, it appears to be just a calling convention issue.
Just completed a first working hack of training a Neural Network ATARI Pong agent with Policy Gradients from raw pixels with Tensorflow. Now, I’m trying to learn more Reinforcement Learning Theory, deciding between learning a little Elixir or Idris, and stressing out about how to keep Papers We Love Philly alive before the semester starts (any suggestions appreciated!).
$WORK: Week 2/Phase 2 of some interesting remote contract work with a couple of dudes who are a pleasure to develop with. Chatbots are kinda adorkable.
$FUN: Trying to finish my software rasterizer in time for the presentation I’m giving on it Thursday. I also need to finish to finish the slides and formulae I’ll be presenting with. Wish me luck.
I recently attended a talk about go which was really fun/interesting, and have decided to write my next programming project in it.
Otherwise, I’m working on practicing for programming interviews.
Got the game I’ve been re-creating (Get Ten) into a playable, though unpolished, slightly buggy state. You can inspect the source (it’s not the work I’m most proud of but it is functional) as well as try it out here: https://ember-twiddle.com/6dff2279c452a782983875c5f676238e .
It’s a bit of a big deal for me as it’s the first side project I didn’t abandon halfway through. I get big ideas, get really excited for a few weeks to work on them, then lose all motivation to continue. Perhaps like this, the key is smaller scoped projects?
I think I’ll pick another game to re-write in Ember, as it was fun to do. Suggestions for little number puzzle games welcome.
Working on an easily customisable & deployable mood board, that will show you your favourite Dribbble, DeviantArt, and etc. picks.
Practicing my OCaml by writing a cribbage trainer. Baby-proofing the house, in a panic, because Number One Daughter started walking around completely unasked. Trying to convince myself that Spark is worth learning. The usual. I cut a chunk of a finger off last week at band practice, so I can’t actually hold my pick until the wound heals, so no rock this week. Dammit.
Project house: more sanding away brown paint to reveal beautiful wooden features in my new (old) house. Also, renting a needlegun from Bob the Builder (seriously! That’s the company name!) to remove paint and render from our sandstone fireplace.
Work: just finished migrating our main Pg db to AWS RDS, and it went without a hitch. I’ll sleep a bit easier now that it’s no longer on metal we own, and has automatic failover!