pnathan: elephant bypasses fence to drink from pool (Default)
Looking though Hacker News, I see that Computer Modern was ported or something to the web. Perhaps half of the comments are rants about how Computer Modern doesn't fit current design style and fad.

I don't really get the hate - I've always viewed CM as a strikingly elegant and timeless font. In part, I suppose that's my perspective - I have several math books written in the 60s/70s - pre-TeX - where the book is literally typewritten, as in typewriter and monospace. Terrifically ugly, without a doubt. Further, after years of looking at fonts (& being a small bit of a font nerd when younger), I favor serifs. They look better, I think. More easy on the long-form eyes.
pnathan: elephant bypasses fence to drink from pool (Default)
One of the problems I've idly wanted to solve for a long time is the problem of automatic scheduling suggestion: you have a variety of things you want to do, but you don't know how to fit them all in.

Or, you have a variety of people wanting to find a meeting time, and have to poke around trying to find one that works. Blech!

I came up with a toy solver for that tonight using Prolog - it's over on a gist on my github account.

This particular solution aggressively leverages Prolog's unification facilities. First, I assert that a set of slots are available, then I have a query that determines available times.

In the available_times/3 predicate, it has three parameters - the first param (people being matched for) is a list pattern-matched into P1/PRest, then the timeslots. The head represents a person - we unify their availability, summoning the set of matching timeslots. Then, we move on down the list of people recursively with the Rest list. Eventually we terminate when the Rest list is nil. The key idea is that the Day & Time slots are being unified and the clauses in the query are *also* being unified. Therefore any solution for an individual person in the recursion chain is intersected with the solutions for the other people in the recursion chain; if there is an available timeslot found, it will be returned.

all_availability/2 is a mechanism to take a personlist and return a list of 3-tuples assigned to bag, using the findall/3 predicate.

It would be nifty to tweak this so that it was boosted to the point where, e.g., a list of classes w/ timeslots could be fed to it, then a set of possible class schedules spat out. Add on a prioritization scheme (must/may), a decent UI (Prolog's native CLI is awful), and this would be very useful.
pnathan: elephant bypasses fence to drink from pool (Default)
In Critters, it's very important to ensure that things work - no one wants their game to mysteriously break.

This is a technical discussion of the current plan - if you're not interested, you can skip this!

There are several basic parts of the Critters system: the database containing the information about the pets & accounts, the 'smart system' which updates the database regularly, the web server, and the web client. Right now, the database is pretty much done; the 'smart system' sort of works (mostly, I hope!), and the web server is "mostly" done. The client is about half baked though, and needs more work.

One key idea of engineering is the idea of "integration testing", where tests are run from start to finish on the product, verifying that components work together. In order to have a working client, we need to have a working server. I don't know that my client works unless the server works reliably. What I'm doing to test the server side of the code is building a "test client". This test client will be a library to talk to the server. Tests can be written with it (or, if I want, play the game on the command line).

The test client is under development right now. I'm writing it in Haskell, a language designed to be very exacting and catch errors. My plan is to release the source code of the test client publicly (Probably under a AGPL license). This way others can use it for example code (or perhaps use it for their own Critters client).

Anyway, back to the code!
pnathan: elephant bypasses fence to drink from pool (Default)
My major upcoming (side) project is Critters, a game I'm writing. It's design for mobile phones - specifically, the Firefox OS phone. Being as FirefoxOS is HTML5+JS for a front-end, this means that it will work on arbitrary browsers (which are relatively modern). The basic idea is a virtual pet game, but I plan to make it quite a lot more. In particular, I plan to build certain AI features in over time. Why is that? Well, I noticed that, hey, a lot of mobile phone games are kind of uninteresting; not much intellectual enjoyment.

So Critters is an exploration into what that will take. How much fun can you pack into a virtual pet game, anyway?

Well, the initial fun is going to be driven by Ridiculously Photogenic Pets. Primarily, my cat Amos. You'll be able to play with a virtual Amos at first. For someone who grew up playing Warcraft 2, Unreal Tournement, etc, this is pretty lane. So...

After the initial version is viable and spinning along, learned behavior will be the next key upgrade I'll make: how you interact with your pet will matter over time. Poke your cat? Eventually he'll be upset at you and not purr (& do other things)! The overall learned behavior ideal is to have behavior I never dreamt up showing up in your pet's actions. Pretty cool IMO.

Prosaically, the business model is going to be up-front payment + in-app purchase for add-ons for your pet(s). Fundamentally, I want to ensure that my user's interests for giving me money are aligned with me getting them a better game experience. Ads are such a poor experience in my experience!

On the sheer geek front, my plan is to publish the API and have an official specification. The official spec will be encoded as a Haskell CLI program. This way iOS, Android, and other applications can be created if someone really wants to make them.
pnathan: elephant bypasses fence to drink from pool (Default)
http://www.sec.gov/litigation/admin/2013/34-70694.pdf

Bad DevOps practice, along with basic SW engineering ignorance, lead to almost half a billion dollars directly lost.

Remember to ensure that you can roll forward and back from any point in your deployment system. Configuration must be controlled just as much as pure software.

ObjectiveC

Oct. 21st, 2013 07:50 pm
pnathan: elephant bypasses fence to drink from pool (Default)
Looking at ObjectiveC today. I don't think it's a bad language. A bit weird. The combination of run-time dispatch + compilation is a strange one. I gather that it was an originally a C preprocessor. This shows in odd ways, especially with the reference counter system. The function declaration/call syntax is, IMO, a bit of a disaster. Square brackets, colons, etc. I keep reading the square brackets as Lispy brackets, where the function comes first, rather than Smalltalk brackets, where the object comes first.

Semantically I fear that dereferencing a nil pointer will be a big deal; run-time type errors are something I expect will become a big deal in my future.
pnathan: elephant bypasses fence to drink from pool (Default)
Ever since I started learning to write software as a teen, at a certain point in the night, my mind would detach from the hustle and bustle of the day and I'd be ready to think of new projects. I'd start a project, work on it for an hour, then sleep would overtake me and I would have to rest. Often these projects haven't gotten anywhere. But there's something very exciting still, almost 20 years after learning to write QBASIC, about writing code and creating something out of nothing.
pnathan: elephant bypasses fence to drink from pool (Default)
Some fooling with bios hacking:

http://www.mitre.org/capabilities/cybersecurity/overview/cybersecurity-blog/copernicus-question-your-assumptions-about

...and that's not even interesting part. Seems to have a BIOS hypervisor, SDR functionality that bridges air gaps, wifi card removed.

— dragosr (@dragosr) @ragosr



note that dell & others make servers with out-of-band control (a.k.a. backdoor for malicious users) as a mechanism to automate command and control of datacenters. One person's efficiency-making tool is another's backdoor.

cl-linq

Oct. 13th, 2013 11:15 pm
pnathan: elephant bypasses fence to drink from pool (Default)
Building an in-memory query system isn't trivially easy, without even going to scale.

https://github.com/pnathan/cl-linq/blob/master/REBUILD.md
pnathan: elephant bypasses fence to drink from pool (Default)

Things I need.

  • Need distributed document store, encrypted.
  • Need easy encrypting file editing
  • Need easy key management/web-of-trust

Syndicate

RSS Atom

Most Popular Tags

Expand Cut Tags

No cut tags
Page generated Mar. 10th, 2026 02:28 pm
Powered by Dreamwidth Studios