The French Republican Calendar episode of 'Revolutions' covers fairly much every aspect of user interface design and every potential pitfall and foible possible.
In fact, I think Mike's podcast is probably the TL;DR of most UI (and application) design books that are out here (and far more fun too).
Enjoy!
Ps.: I'm not sure why the designer eventually was guillotined, but, I'm also not overly surprised ;-D
Showing posts with label design. Show all posts
Showing posts with label design. Show all posts
Thursday, 21 May 2015
Wednesday, 31 December 2014
The Short Tourist's Guide to Memory Allocaters
There's ancient malloc().
And then there is glibc's malloc():
General:
A very good place to start is Mr. Golick's intro: Memory Allocators 101, then there is Mr. Luu's C tutorial, or even Doug Lea's dlmalloc. But, that's only the beginning of a very good, very long story.
Strategies (the very meat of this post):
There is an interesting survey on the different ways of writing a memory allocator, it's very informative (and well-written), and useful to know in general (even though it's a little old).
More Specific:
For even more pleasing (and productive) confusion, there's TCMalloc, Lockless and a short paper that compares glibc to the former and the latter.
Also notable is jemalloc, and they have a nice video too. Here's a neat synopsis of this toy.
Profiling:
TCMalloc has profiling inbuilt (via perftools), Lockless has some hooks and jemalloc has a heap profiler. If you want to check what glibc malloc gets up to, there's malloc_count, or, you can knit your own, using malloc hooks and struct mallinfo.
The Lockless site has some neat info on how to profile without a profiler, using gcc. (their article collection is also quite a good read [with a very special recommendation for the rather nifty 'Obfuscated Rogue' proggy <3 !]).
Happy alloc()-ing!
Ps.: Stuff I idly wonder about:
None of the above seem to take performance profiles of stuff as they run and then automate the conclusions.
There is probably a very good reason for it (there always is :-) --- but, I wonder what would happen if we had a wrapper that that 'kept score' and did test runs on the inputs it knows about and then swaps in different memory allocators on the next run, depending on what profiles match that particular usage pattern the best.
In other news, here's my sure-fire way of how to beat the backgammon world champion: you roll a double-6 to run home, and with the final checker, you put their 15th checker on the bar. EASY! ;-)
Obligatory New Years' Eve video... Ms Sophie is celebrating her birthday party. The only problem is that all her guests deceased 25 years ago, and so, the butler has to stand in... (scroll forward to 2:24 to start the actual sketch, but, in full length with the German intro, it still makes a nice ambience, even if you do not speak German ;-) the rest is, as they say, without words!
And then there is glibc's malloc():
A very good place to start is Mr. Golick's intro: Memory Allocators 101, then there is Mr. Luu's C tutorial, or even Doug Lea's dlmalloc. But, that's only the beginning of a very good, very long story.
Strategies (the very meat of this post):
There is an interesting survey on the different ways of writing a memory allocator, it's very informative (and well-written), and useful to know in general (even though it's a little old).
More Specific:
For even more pleasing (and productive) confusion, there's TCMalloc, Lockless and a short paper that compares glibc to the former and the latter.
Also notable is jemalloc, and they have a nice video too. Here's a neat synopsis of this toy.
Profiling:
TCMalloc has profiling inbuilt (via perftools), Lockless has some hooks and jemalloc has a heap profiler. If you want to check what glibc malloc gets up to, there's malloc_count, or, you can knit your own, using malloc hooks and struct mallinfo.
The Lockless site has some neat info on how to profile without a profiler, using gcc. (their article collection is also quite a good read [with a very special recommendation for the rather nifty 'Obfuscated Rogue' proggy <3 !]).
Happy alloc()-ing!
Ps.: Stuff I idly wonder about:
None of the above seem to take performance profiles of stuff as they run and then automate the conclusions.
There is probably a very good reason for it (there always is :-) --- but, I wonder what would happen if we had a wrapper that that 'kept score' and did test runs on the inputs it knows about and then swaps in different memory allocators on the next run, depending on what profiles match that particular usage pattern the best.
+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+
Happy New year everyone!!!
Tuesday, 16 September 2014
Om Nom Nom.
I'm having a tough time.
I signed up for the Coursera Automata Class, and it reminds me of the Schraraffenland Fairytale: to get to the fabled country where delicious fried birds fly into your mouth and pralines grow from bushes, you have to eat your way through a mountain of pumpernickel.
Om nom nom.
(I will probably need to take this class twice, once for the measure, once to sink in)
File under:
(Maybe I should make this into a t-shirt ;-)
I'm also reading through 'The Linux Programming Interface' book and I'm now starting to cycle down into re-reading the chapters and doing the exercises [(I'm half-way through the book in the first sitting, time for some action), and whilst I'm having fun learning the basics, maybe you would enjoy refining your systems programming jutsu at the same time and heckle a beginner in style ;-)]
If you want to pile in, mail me.
Music I'm listening to:
(this is probably more 'ye olde jazz head stuff' -- but if you spool forward a bit to 10:35, you find some easier listening. That said, Michel Petrucciani is just wonderful. Yeah, some stuff is wild, but it always has soul(and much jump). Lots of it.)
Finally, my latest culinary foible is 'sharpening carrots':
See it in action:
I signed up for the Coursera Automata Class, and it reminds me of the Schraraffenland Fairytale: to get to the fabled country where delicious fried birds fly into your mouth and pralines grow from bushes, you have to eat your way through a mountain of pumpernickel.
Om nom nom.
(I will probably need to take this class twice, once for the measure, once to sink in)
File under:
'And you do Addition?' the White Queen asked. 'What's one and one and one and one and one and one and one and one and one and one?' 'I don't know,' said Alice. 'I lost count.' 'She can't do Addition,' the Red Queen interrupted.
Through the Looking-glass
(Maybe I should make this into a t-shirt ;-)
I'm also reading through 'The Linux Programming Interface' book and I'm now starting to cycle down into re-reading the chapters and doing the exercises [(I'm half-way through the book in the first sitting, time for some action), and whilst I'm having fun learning the basics, maybe you would enjoy refining your systems programming jutsu at the same time and heckle a beginner in style ;-)]
If you want to pile in, mail me.
Music I'm listening to:
Finally, my latest culinary foible is 'sharpening carrots':
See it in action:
Stuff the resulting peel with anything! Om Nom Nom :-)
{{{ Life is good! }}}
{{{ Life is good! }}}
Saturday, 1 February 2014
Making Shape
Francis Roads explains making good shape like this:
Now that I'm starting be be semi-fluid in javascript and I'm wrestling a small octopus in form of a 2000 line script of a toy I'm creating as I'm figuring things out, I'm finding out just how good my 'making shape' jutsu is... (sometimes good, sometimes woeful...:)
The term is usually employed where there are two or more moves that achieve a given objective. The goad shape move is the one that not only achieves the aim, but gains some other advantage, which may, however, be small and intangible at the time. The player with an understanding of good shape has a short cut to finding the best move in many situations. In a game free of gross blunders the accumulation of small advantages from good shape will decide the outcome.Of course Francis wasn't talking about programming there, but I think that programming is very similar to the game strategy he was describing.
Without further ado, therefore, here are my criteria for a move to qualify as good shape:
- It maximises liberties
- It maximises eye-making potential
- It keeps options open
- It influences as much of the board as possible
- It denies the opponent good shape
Now that I'm starting be be semi-fluid in javascript and I'm wrestling a small octopus in form of a 2000 line script of a toy I'm creating as I'm figuring things out, I'm finding out just how good my 'making shape' jutsu is... (sometimes good, sometimes woeful...:)
Monday, 6 January 2014
μηδέν άγαν {nothing in excess}
One of my (very patient) mentors made the following very true observation about me:
By the way, designing features based on speculation is usually not a good idea. (...) Maybe there's a bug report in our tracker requesting such functionality? If not, perhaps you don't need to worry too much about that scenario.
I have a habit of assuming the worst case and then try to create something that (hopefully) solves for the entire range of problems/issues that might occur.
This sounds like it's a good thing, and sometimes it is, at other times, it isn't, because the sky is not about to fall.[1]
I've been thinking why that is so. and my best guess is that this probably a function of OO coding on the MUD, where anything and everything can cause surprises, because things interact whilst interactively interacting.
If you've ever replaced 20+ players lives, stats, xp points and equipment because your fun toy caused a chain reaction that you hadn't considered... you get extra careful after the umpteenth time ;-D
Contact me for a great deal on a used pair of bullet proof sandals.
[1] From the Omega game:
(you walk into the establishment)
By the way, designing features based on speculation is usually not a good idea. (...) Maybe there's a bug report in our tracker requesting such functionality? If not, perhaps you don't need to worry too much about that scenario.
I have a habit of assuming the worst case and then try to create something that (hopefully) solves for the entire range of problems/issues that might occur.
This sounds like it's a good thing, and sometimes it is, at other times, it isn't, because the sky is not about to fall.[1]
I've been thinking why that is so. and my best guess is that this probably a function of OO coding on the MUD, where anything and everything can cause surprises, because things interact whilst interactively interacting.
If you've ever replaced 20+ players lives, stats, xp points and equipment because your fun toy caused a chain reaction that you hadn't considered... you get extra careful after the umpteenth time ;-D
Contact me for a great deal on a used pair of bullet proof sandals.
-=-=-=-=-=-=-=-
[1] From the Omega game:
(you walk into the establishment)
Rampart Healers. Member RMA.
a: Heal injuries (50 crowns)
b: Cure disease (250 crowns)
ESCAPE: Leave these antiseptic alcoves.
b: Cure disease (250 crowns)
ESCAPE: Leave these antiseptic alcoves.
(you hit ESCAPE)
OK, but suppose you have Acute Satyriasis?
Sunday, 22 December 2013
Ye cannae change the laws o' physics!
This is being sold as 'new technology' that retains the same 'airwatts' and saves energy.
I'm nowhere near as good as these guys, I just make humble glass fairy wands to decorate my houseplant collection, tiny sculptures and some pretty glass beads to wear. I bought the Herbie because it's a one knob operation that gives me a pinpoint flame and a serious flamethrower in one easy turn. I like clear borosilicate for it's ice-like appearance and soft glass for it's lovely colors.
Also, the herbie has a pilot flame, so I can use a foot pedal to save on air, oxygen and propane, since a lot of the time in glass blowing is spent letting the glass 'coast' and that doesn't need a flame, just patience to let the glass find it's own shape. It's a little bit like programming in that sense, you code some stuff and then it magically takes shape as you think about what you just created :-)
It's all about the process.
Tuesday, 17 December 2013
Mmh, Lemonade!
Note that this recording is a 'direct cut' -- one band, one take, directly cut onto the LP die. No tape, no cutting, no remedial sound engineering, just proper handmade stuff --- what you hear is exactly what there was!
Saturday, 14 December 2013
The UNIX command line explained simply for UNIX experts
Seasoned UNIX users and developers of software often forget how mindbogglingly complex their creations are, because they use and work them every day, and --- it's just ever so obvious, right?
Why do newbies and even experienced users have such difficulty in grasping the timeless elegance and simplicity of a well-formed UNIX command line?
Well. Allow me to put you, the expert, into the newbie's position for a moment :)
In the UK and Australia, there exists a particular fiendish form of crossword puzzle: the cryptic crossword.
Here is a classic example of the type of mystifying clue such a puzzle offers:
Example taken from The Guardian crossword of Aug 6 2002, set by "Shed", found in the Wikipedia explanation of Cryptic Crosswords.
Ps.: Brit and Aussie geeksters who are crossword fiends will of course not be fazed at this attempt to demonstrate the users' head space, and I'll wager that at least one of them will now probably feel inspired to set a cryptic crossword with UNIX clues :-)
Why do newbies and even experienced users have such difficulty in grasping the timeless elegance and simplicity of a well-formed UNIX command line?
Well. Allow me to put you, the expert, into the newbie's position for a moment :)
In the UK and Australia, there exists a particular fiendish form of crossword puzzle: the cryptic crossword.
Here is a classic example of the type of mystifying clue such a puzzle offers:
- 15D Very sad unfinished story about rising smoke (8)
- 15D indicates the location and direction (down) of the solution in the grid
- "Very sad" is the definition
- "unfinished story" gives "tal" ("tale" with one letter missing; i.e., unfinished)
- "rising smoke" gives "ragic" (a "cigar" is a smoke and this is a down clue so "rising" indicates that "cigar" should be written up the page; i.e., backwards)
- "about" means that the letters of "tal" should be put either side of "ragic", giving "tragical"
- "(8)" says that the answer is a single word of eight letters.
Example taken from The Guardian crossword of Aug 6 2002, set by "Shed", found in the Wikipedia explanation of Cryptic Crosswords.
Ps.: Brit and Aussie geeksters who are crossword fiends will of course not be fazed at this attempt to demonstrate the users' head space, and I'll wager that at least one of them will now probably feel inspired to set a cryptic crossword with UNIX clues :-)
Friday, 22 November 2013
Ruby Koans Meditation
Even if you never ever plan to code in Ruby, do check out the Neo Ruby Koans meditation.
It is the cutest, most fun programming course I've ever took.
But be sure to study the Tao of Programming first.
Thus spake the novice programmer:
``It is time for me to begin.''
Thursday, 31 October 2013
This task only takes 2 minutes!
...but if that 2 minute job occurs 1000 times, it's 33 man hours.
That's only 100 users doing the same thing 10 times each.
If you have 1000 users who need to do this once every day at work, that's 200 times per person per year, or 6 1/2 hours per year per person, and per 1000 users this is 6666 hours or 277 full 24 hour days or 833 8-hour work days, days, or 4 employee years (@200 days per year) + 33 days.
So the 2 minute task is quite the time (and money) sink!
That's only 100 users doing the same thing 10 times each.
If you have 1000 users who need to do this once every day at work, that's 200 times per person per year, or 6 1/2 hours per year per person, and per 1000 users this is 6666 hours or 277 full 24 hour days or 833 8-hour work days, days, or 4 employee years (@200 days per year) + 33 days.
So the 2 minute task is quite the time (and money) sink!
Subscribe to:
Posts (Atom)

