Sunday, December 27, 2009

microsoft got patent-trolled.

This is just insane. A Linux zealot I may be, but I feel for Microsoft in this case.
Patent law was intended to prevent a company from duplicating a better mousetrap without anyhow paying for the invention of that mousetrap. Patent law intends to prevent companies from ripping off the inventor. It is fairly certain in this case that Microsoft has paid engineers to develop a solution, which they did, without using anything whatsoever from i4i. Most likely before i4i showed up demanding the money, neither Microsoft nor their engineers have ever heard of i4i and their 'patent'. The patent covers storing text separately from its layout data. This is so trivial that any qualified software engineer would come up with it quicker than it'd take for him to read patent itself.
Programmers and software engineers are specifically selected&trained to be able to immediately 'invent' simple things on demand. Someone who can't immediately 'invent' this on spot wouldn't be working at Microsoft as software engineer.

Patent law is here to compensate inventors for their ingenuity - for creation of nontrivial things that wouldn't have existed for a while if not for the inventor. Patent law was never intended to let the 'first' expert who got a specific problem and straightforwardly solved it forbid others from independently solving this problem in the most natural and straightforward way imaginable.

The issue is that even the simplest solution could be presented as to appear very profound and mysterious to the totally clueless - just throw in a couple meaningless diagrams and other idiocies, and you get very nontrivial looking nonsense (see that patent, hiding triviality behind verbosity).
It is not understood by a court just how straightforward and retarded the patent is. The increased specialization results in perfect ignorance. It's perfectly equivalent to having 3 years old children for judge and jury - 3 years olds aren't stupid, but they do not know anything, they are not qualified to make any decisions on such case - and neither are adults whom do not understand the topic any better. Back in the day when patent law was introduced, the specialization was not so extreme as to prevent sensible trials; judge and jury could see if a patent is covering something totally straightforward.

Thursday, December 24, 2009

On topic of Linux immunity

It's actually quite easy to write malware for Linux, no harder than for Windows anyway (and 'not running as root' wont save you). Fortunately, whatever the reason, very few linux viruses get written in first place; maybe the would be virus writers productively contribute to open source software instead.

Wednesday, December 23, 2009

More on antiviruses.

Just look at this. They claim there's 15,000 new virus definitions each day. For windows. How comes there's less than 1 new virus per day on other systems, which have only maybe 10x smaller marketshare? How come open source antivirus software has orders of magnitude fewer new definitions per day yet is fairly effective? The world is not so huge for such a number of new viruses a day anyway. How the hell are they counting, what are they counting as distinct viruses? Server side polymorphics? If a clever virus makes new variation every time, specific definitions aren't useful, you need a clever solution that lets the virus run but catches it when it tries to replicate.
My best guess is that this number is not even a count, it's simply a number that they figure is the optimal number to display in the software and write in their releases for the purpose of maximization of their profits and for advertising of their brand new "whitelisting" approach which ain't gonna protect anyone but would probably generate a lot of profit for antivirus companies (say, I launch a new software product, how it's going to get whitelisted if people aren't running it because its not whitelisted? The typical solution to a chicken and egg problem is that you have to buy a chicken. Or an egg, plus incubator. Meaning if there's whitelisting, developers have to pay for certifications).

In my opinion, antivirus is a broken solution to a wrong problem. If you run non-trustworthy code - such as pirated software, keygens for pirated software, various "toolbars", etc. or if you run email attachment, no antivirus can protect your (windows) pc - it'll eventually be infected. If you have insecure network services, antivirus won't protect you - but a security update to a service could. If you keep everything up to date and you don't run non-trustworthy code, then you're as safe without antivirus. A general security tool which watches for changes in files could be quite useful. A specific blacklist is of little use - it cannot protect even from variations of old viruses. A whitelist is just a nuisance. Antivirus software is written in such a way as to maximize profits of antivirus companies, not as to minimize threats; virus signature lists are far superior for profit generation than general solutions; it is far better to autorun files from usb sticks and then sell antivirus software than to forbid autorun for writable or all media. Microsoft's response of tightening OS security is the only hope for Windows world.

Tuesday, December 22, 2009

RIP Amarok 1.4

Amarok 1.4.10 no longer works for me under mandriva (installed from old repository, into /opt/kde3 folder)... it simply doesn't scan collection.

Meanwhile, Amarok 2 is still completely unusable, even though you can get rid of the "context". It's just insane. Can't resize playlist to take up all the remaining space, cant drag-resize columns in lists, and so on (resizing columns with a slider, who the hell came up with this?! That's outright insane. Anyone with a sense would fix the list control to get drag-resizing of columns to work again rather than make slider dialog for that).
I'm switching to Exaile for final, i think. I promised to fix some bugs in it, then left 'cause i had no time... gonna get on it

Saturday, December 19, 2009

Are antivirus companies the main driving force behind virus writing?

I've always wondered why there is so many Windows viruses. Especially when I clean up friend's PC from malware. The number is on the order of hundreds thousands. An immense number of code lines. Awful lot of human effort. And when you think about it, the world is not so huge place. Naturally, some people suspect that some antivirus companies are somehow funding virus development, given that antivirus companies are the primary benefactors of virus development. This proposition, naturally, is commonly put down as an urban myth (no matter what).

I've figured some indirect but convincing evidence in favor of this 'conspiracy theory'. There's just far too many windows viruses and worms nowadays which replicate but do absolutely nothing besides slowing down the computer and saturating internet etc (so that antivirus speeds up the computer). Somehow, those viruses are the majority - viruses which actually do something like DDOSing a website, stealing credit card numbers, doing some evil as botnet, inserting obscenities into documents, and so on, are the minority - those worms are unusual, you read about them in the news. Even the botnets nowadays just sit doing nothing (Like conficker. A huge scare. It just penetrated into a lot of government facilities which it should not be able to penetrate into, which was quite seriously scary, and then did pretty much nothing except bringing billions into antivirus businesses).

This is very strange. That doesn't even look like vandalism or crime. Graffiti artists want their drawing to be seen; political vandals want to make damage to public property; criminals steal public property for scrap metal; all the IRL vandalism appears motivated, even if motivation is bizarre. There's always some driving force.
If you look at old dos (pre-windows) malware, nearly every virus did some original mischief - falling letters, animations and logos, inserted obscenities into the documents, wiped out hard drives, tried to say obscenities from PC speaker, messed with mouse cursor, and so on. Almost every 'harmless' virus did at least show a message about itself. There was some self expression, not unlike graffiti. You would expect most modern viruses to set something like goatse or 2girls1cup as desktop background, to scream from the speakers, to display political messages, to secretly record videos with webcam and upload those to youtube (particularly effective if combined with display of something nasty), and so on, a zillion possibilities. Indeed, that's what hackers do when they deface a popular website. But if you look at modern viruses, only a small fraction tries to do mischief or actually commit a crime. Majority seem to do nothing except supporting the antivirus manufacturers. There's almost no mischief and no graffiti. The viruses look like someone's boring daily job. Not like bored teens trolling. Okay, some nasty password stealers and such, those MAY be some criminal's daily boring job, but why harmless replicators don't even rickroll the user? (edit: actually there's a virus which rickrolls the users. It's on iphone!)

It seems to me that there is only one explanation: Development of windows viruses is nowadays heavily funded by antivirus companies - this at once explains why majority of viruses do nothing except replicating and generating scare, why amusing (when it's not your pc) virus pranks became rather uncommon, why there's very few Linux worms (mostly backdoors), and how it comes that antivirus companies 'detect' so many obscure viruses (which you would think user wouldn't notice) every day while being unable to respond promptly to real threats (which are extremely noticeable).

Antivirus company speakpeople would say that this is analogous to suspecting tire manufacturer of paying kids to knife the holes in tires. Well, firstly, that's an intentionally deceptive analogy. As matter of fact nobody's knifing tires in such a number as to sustain tire manufacturers; furthermore paying kids to knife the tires would've been far more dangerous and expensive, you can't outsource this to china or safely delegate it. That is why nobody suspects tire manufacturers, not blind trust that a big company would never commit a crime. They're making their profits by natural tire wear. Had they been making most of their profits from the tire slashing incidents, from unmotivated malice, then they would, in fact, be suspect (as the primary benefactors from the crime). The antivirus industry is more similar to heir inheriting billions from the rich uncle, who was killed by a car in hit-and-run near his house. Make that killed by a sniper shot - supposedly unmotivated sniper shot.

Secondly, as matter of fact, a lot of antivirus software is recognized to be fake - and the big brand antiviruses use pretty much same unethical tactics (popups telling you to upgrade, scaring you with numbers like '27 threats detected', reporting stuff like browser cookie files as threats, and so on) to generate revenue.

On the topic of trustworthiness of 'good guys'...
Putting aside small brand scareware, even the major 'antivirus' companies such as McAfee and Norton Antivirus engage in nearly fraudulent overcharging of credit cards of their customers (not outright illegal, but extremely close). If you did un-subscribe from Mc A Fee, they reportedly keep charging you the fee for 3 more months.
I certainly wouldn't trust such companies so much as to hold them above suspicion of virus development. There's certainly a plenty of ways to do this quite safely; e.g. a company could outsource virus identification to a separate company in a third world country, and this company in turn could hire a sweatshop of people and give 'em instructions vague enough that they could write the viruses in first place. Should this get discovered, the proxy gets blamed and liquidated, the sweatshop stays in place and keeps working (under different name). People whom were getting suckered into paying for antivirus still are getting suckered into paying for antivirus. People with a clue are 'outraged' but they would never have bought antivirus in first place.

I myself (I'm a Linux user) would not care about windows viruses and associated scareware at all if not for impact on the honest software developers. False positive rates of antivirus software are very high - the primary reason, i suppose, is that high false positives rate leads to increase in profits for antivirus companies - typical user tend to think that antivirus which found a virus is superior to antivirus which didn't find a virus. It appears as if some random short strings - which have nothing to do with any virus functionality itself and which appear in random software as much as in viruses - are consistently recognized as 'viruses' by design, resulting in credible virus scare for the customer. This is quite annoying for developers.

Sunday, December 6, 2009

Ted Chiang's What's Expected Of Us

I strongly recommend to read this brilliant story (if you haven't read it before).

Some minor commentary. Consider the Free Will Device, put next to the predictor. Free Will Device is actually entirely deterministic, and doesn't have any free will of its own. It consist of photocell which watches the LED on predictor, timer, which gets reset to 0 every time light hits photocell, and actuator which pushes the button when timer reaches 2 seconds. If predictor blinks within those 2 seconds, there won't be a button press, and if predictor doesn't blink, there will be a button press. That's fairly deterministic and if you had been given a box and told that it works as Predictor in this story, you're bound to try doing exactly this - setting your mind to press the button if LED was dark for several seconds, to check if it really works.
The laws of universe in this story would forbid you to press Predictor button 2 seconds after the start of experiment or flash of LED (rather than 1 second) but not forbid you to take egg out after 3 or 5 minutes of cooking depending on your decision whenever you want it hard boiled. That's not mere determinism; that would require some special malice on part of the universe, forbidding you to set your mind to make even a deterministic, predictable decision.

Tuesday, December 1, 2009

My view on 'crowdsourcing'.

Crowdsourcing is IMO much similar to common scam. Fraudsters are crowdsourcing they money. They make a business proposition which almost nobody would accept - to a large group of people. Very small percentage of whom make a decision mistake - i.e. get conned.
Same goes for most crowdsourcing. A crowdsourcer is making a business proposition - typically to write some software or make some design with non-guaranteed AND small pay - which almost nobody would accept (not even mythical people from 'third world'. Don't forget that both computer and internet connection are more expensive in developing countries). But with 'crowd' of hundreds thousands passing by, it is guaranteed that a few make decision mistake and accept. Bottom line is, both scammers and 'crowdsourcers' are profiting from rare psychological conditions and decision mistakes in a huge group of people.

Some crowdsourcing-like businesses could be different however. Innocentive, for example, where its mostly industrial chemistry, not programming, and rewards are quite big, good for few weeks work at $100+ per hour. Some of those problems might be nice for industrial chemist with relevant obscure expertise who can solve it quickly and win with no competition. I would call that expert sourcing; the industrial chemistry problems are of different league than programming and software design entirely and the spec work approach makes lot of sense when you really don't know if the problem is even solvable - and makes no sense what so ever if its mere matter of spending time. (I'm no chemist though sometimes I wish I were doing chemistry or physics for living)

Monday, November 30, 2009

Chicken feather hydrogen storage.

If this actually works, it is totally freaking awesome. Many fancy carbon structures can be formed by charring various organic wastes... even those that we don't know how to manufacture, e.g. fractal carbon structures.
Someone should try various bio materials for supercapacitors, in particular different kinds of charcoal.

Saturday, November 28, 2009

Horrible Hashes

Let's talk about djb2 hash function (which was a subject of topcoder contest, where it's choice rendered the contest far too trivial).

unsigned long
hash(unsigned char *str)
unsigned long hash = 5381;
int c;

while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */

return hash;
and another version which has
hash = ((hash << 5) + hash) ^ c;
The function itself is not bad for it's original use where very few lowest bits are used for bucketing in a hash table; but as a 32-bit hash, it stinks.

What's stupid is that if you search for djb2 on google, you see all sorts of people 'personally recommending' it as best and fastest simple hash, people trying to explain why it is good (when the answer is: it is not particularly good), people wondering why 5381 is better (it's not), people tracking the history of this "excellent" function, etc. All in all people presuming that 5381 and 33 got some special significance and are much better than e.g. 0 and 31.

What is so bad about it? For starters, even though the output of this function is 32 bits, not even for the 2 char alphanumeric ASCII strings do you have a guarantee for lack of collisions. In fact "cb" collides with "bC", in the version with addition, and "bA" collides with "ab" when using xor, just to name two examples out of hundreds. Each character except first provides only about 5 bits because that's how much you get out with *33.
That's not good. From a 32-bit hash, you would normally expect to get no collisions at all between 2 character strings, especially restricted to alphanumeric.
Most primes work no worse; you can use 257 and then your function at least will not collide on 2-character strings (it will still be crap though, especially if you use parts of hash; this doesn't need to be a prime, only needs to be odd and you ought to run code to select best for hashing some real data like list of all file names if you want a good number. I think 293 should be pretty good here). Furthermore, there are a lot of collisions between strings that differ by 2 characters, because 2 consecutive characters can be altered to keep same hash.

Got to give some credit though. In some very limited original usage (hash table of specific size, with specific key statistics, e.g. English words), which I do not know, and which you are highly unlikely to replicate, it may have been excellent. Or not too bad.

What is the significance of 5381 ? Apart from low 8 bits of 5381*33 (in the variation which has xor instead of add), it is pretty much totally irrelevant to collision resistance, it is just multiplied by 33n and added in. This function is pretty much as crap with start value of 5381 as with start value of 42 or 100 or 12345 - the only difference is that unexplained 5381 hints at some deep wisdom whereas 12345 does not.

All in all, you should not trust magical looking code. The best magical constants were selected for some very particular case which you know nothing about, by a method which you know nothing about, and are still most likely than not bad for whatever you want to do.
Do not trust internet advice or consensus either. Keep in mind that majority of acclaimed programming experts are experts at posting a lot of stuff online, being out to be noticed.
Keep in mind that majority of people in 'consensus' are simply repeating each other, and haven't devoted much brain time to thinking about the question (or the question they thought about may be a different question).

This is why science does not and cannot function by reference to authority, but only by reference to argument, to actual reasons, and why if no reasons are given you shouldn't assume that any exist.

edit: also, don't even get me started on "fast". If you want fast, you'd better do 4 chars at once, on a 32-bit machine.

edit: clarified on the version with + and version with ^, even though those have very similar properties.
edit: god damn that article sucked (I wrote it something like 8 years ago if not longer), rewrote a few bits.

Thursday, November 26, 2009

What's with all those design concepts?!

What's with all the infestation of internet with "green" design concepts that cannot work but win awards?
I mean designs such as
The amazing plaane of the future . (With a freaking wind turbine on the tail! You use wind turbine to power the engines with the energy of motion of airplane through air!)
Gravity lamp (debunked)
mp3 player powered by spinning finger in a hole.

The mp3 player one has not been debunked properly yet, but it is very similar to this lamp in that it utilizes common lack of intuitive relation of mechanical to electrical to sonic or light power.
Assuming hundred percent efficiency, headphones consume 20 milliwatts at max power, or 1.2 Joules per minute. 1 Joule is about the energy of 1kg lifted to height 10 centimeters. Spinning a finger in a hole is about the least ergonomic way to generate power; the smallest possible leverage in the least convenient way (and you can't spin player around the finger 'cause of headphone cable). Lifting 1kg to weight 10cm every minute by spinning finger in the hole is obviously out of question, unless you're doing it constantly. (Furthermore, the efficiency of mp3 player is far below 100% due to the power consumed by mp3 decoder).

All in all, a hand powered mp3 player, lamp, or other 'low power' appliance will need occasional but fairly vigorous spinning of a crank, squeezing, or vigorous shaking (e.g. during exercise). It would of course be very cool to power mp3 player by occasional turn of a finger, absolutely amazing in fact because such player would have to include a perpetual motion device, that's why this sort of stuff seems cool and amazing.

And while you're at it, forget about powering laptop by opening a lid or with power of keypresses - it is possible but such laptop a: won't have backlight, b: won't run any modern applications (think of having 1..10 mhz cpu , with the computational power of pc from 20 years ago), and c: but it would work for months on regular battery and could recharge by solar, rendering the whole keystroke power issue nill because solar panel is going to take less space.

On topic of energy saving measures, I limit ThePolynomial's fps to your display's refresh rate by default; this OpenGL feature doesn't seem to be supported on ATI under Windows (according to user reports, didn't test myself), which if true is really downright despicable behavior on AMD's part (they probably do it because of the few gamers whom would think ATI having 1000 fps and NVidia having 70 fps in games that syncs to refresh by default would make ATI look better, or some other silly marketing related reason for not implementing refresh syncing).

Wednesday, November 25, 2009

Multiplayer progress.

I've been working on multiplayer for my game for past few weeks, hence the gap in updates. Turns out good multiplayer is kind of difficult, and I'm somewhat behind my schedule, but expect updates soon.

Sunday, November 15, 2009

TopCoder: lying again.

background: TopCoder is a programing spec work business (spec work is called "crowdsourcing" nowadays). They also run some regular programming competitions (which are not work for hire), sometimes with okay problems, sometimes with so-so problems, sometimes with problems that 1/3 of participants can solve exactly. I competed there a little once in a while purely for self evaluation purposes - they do somehow have a big community, and there are a few good programmers on top to compete with.

Anyways, where was I... yes, TopCoder lying in their press releases.
It's interesting how a company can't learn a lesson that lying in public releases is not always a great idea. A while ago, they had hired some girl in china - she may have been a good choice for the job - I've no information about this - and then lied a shitton about her qualifications and achievements [see original TC's press release which was then echoed by girl's university] resulting in massive PR success followed by even more massive PR fail in the china, totally ruining girl's reputation. The lying, for a public release, was not very outstanding - just massive exaggerations, pretty standard for small company's public release, a small company has to look big, but it did ruin the girl's reputation 'cause of cultural misunderstanding, its not everywhere customary for a company to exaggerate how great their new hire is. On darker side, I bet they got her to sign their "affidavit" beforehand which explicitly forbids you from suing TopCoder for damages arising from this sort of misrepresentation of you. [you need to sign this at notary if you participate in competition and get a prize; that's quite serious. I won a prize at TopCoder once and asked for legal advice on their affidavit, a friend told me of that girl's story, which I remembered 'cause its really scary how individual could get chewed up by gears of commerce and spit out]

Recently, there had been a "NASA-TopCoder" contest with '25 000 $ in prizes'. It seemed a little strange.

The NASA-TopCoder Challenge will be the first time the TopCoder community of more than 220,000 software enthusiasts is utilized by the world's leading aerospace organization. Long-term human space missions such as those being planned for Mars, will require higher levels of pre-planning and more analysis of available data than ever before. Biometric modeling and simulation programs are algorithmically-intensive as flight surgeons explore and evaluate every possible medical scenario that might occur on long-term missions. In this experiment, competitors will develop algorithms to help NASA's flight surgeons make decisions involved with optimizing the contents of the medical supplies kit that may one day be carried onboard long-term space missions. The submissions will be compared with the results of an existing computer model that has simulated the expected medical occurrences and outcomes for various mission scenarios.

Under closer examination (I registered for the contest because I was rather curious and because invitation email didn't quite made it clear who funded the experiment), it turned out that it indeed was a business research experiment (25000$ from research grant from some business university were used to run 24 tiny contests in parallel for some sort of business research). Needless to say, there were no NASA representatives on contest forum answering the questions about problem or asking questions about solutions [correct me if any did show up since I lost the interest]. Nothing of this sort. Typical programming competition, with a typical competition problem that has only superficial resemblance to real requirements for real software. Very simple model - much simpler than your 'model' when you visit pharmacy and decide what to buy. In real life if you get a splinter under your skin, you will need tweezers to remove it. Then you can use hydrogen peroxide or you can use iodine, or other antiseptic, and if you don't treat the cut with antiseptic you might need to use topical antibiotic later to treat inflammation. That is not simulated in contest - the supplies are not ever interchangeable and medical conditions are not dependent on prior conditions and treatment (worse than that, them are totally statistically independent from prior conditions). It's absurd to think that contents of medical kit for a Mars mission would be based on such simplistic assumptions, so much more simplistic than the ones you'd make when you visit pharmacy. Yet participants would believe it because it's happier to believe you contribute something to space exploration.

Furthermore, interestingly enough, in the "community of more than 220,000 software enthusiasts", only about 1700 registered and only 400 participated in the contest.

As NASA source indicates, the truth boils down to this:
The competition originated when professor Karim R. Lakhani of Harvard Business School and professor Kevin Boudreau of London Business School invited NASA to provide a compelling technical challenge to monitor and analyze the results from an open innovation management perspective. Their research project is funded by grants from the London Business School M-Lab and the Harvard Business School.

, and naturally "topcoder asks for and gets a simple contest-style problem from NASA for use in their business experiment" is a whole bit less impressive than "NASA employs topcoder to solve something for human spaceflight".

Tuesday, November 10, 2009

Version 00h

Minor changes for more compatibility with various Linux distros, should work on ubuntu karmic now.

Sunday, November 8, 2009

Cutting a disk from aluminium...

So, I need to cut a disk from aluminium plate...

Various parts: pieces from a wooden box, motor and gears from canon i250 printer which I picked up for parts other day, outdoors plastic chair, transformer from very old tv for 7v power (printer's powersupply was missing), a paperclip, piece of file, drill bit.

It features a very advanced and hi tech design, with automatic pressure adjustment (when this thing jams, pressure on cutter decreases 'cause of pull on that rope). It's going to take a long while to cut through tho, motor isn't very powerful, but as long as I'm not spinning this by hand, I don't mind.

Side idea: with 3 old printers, you can make a neat CNC machine or even reprap machine. You'll only need to cut a thread onto the paper feeding rod, and use it to move the table. There's even a very precise position encoder here. If I find 2 more broken printers, I might make this.

Thursday, October 22, 2009

Another update.

Version 00g . I forgot to package some latest Linux libraries with 00f, which I had installed but which didn't make it into stable versions of most distros yet (also compiler update related). Thanks for the reporting!
In progress: I did raise requirements to GLSL 1.2 a while back - mostly to detect cards which really *cannot* run the game - and turns out some cards which can run polynomial do not have GLSL 1.2 . I'll try to make some fallback.

Now I only need some reports from Mac users ;-) .

Wednesday, October 21, 2009

Bugfix update.

Fixed 00f version bug, should work fine now.

technical: I found that GCC 4.3.3 has same problem except it crashes much less often, so I workarounded the issue by not using exceptions. From what I can see, thread local storage (which doesn't work in mingw) is used to store jump address for setjmp and longjmp.

mingw gcc 4.4.0 fails hard

As i just found out, gcc 4.4.0 for windows (mingw) really doesn't like threads. A well tested piece of code in The Polynomial which worked with gcc 4.3.3 no longer works with gcc 4.4.0 , presumably due to this bug . I use threading for interactive editing and for in-progress display of level fractal as it is being generated. Apparently, exception handling is not threadsafe in mingw/gcc 4.4.0 even with -mthreads. End result is, The Polynomial crashes when switching levels.
Thanks for reporting the crashes, I'm reverting to gcc 4.3.3 for now, the fix will be released soon.

Polynomial Update (00f).

Update. A lot of extra functionality:
  • Music
  • Lua scripting for levels (not used for anything really impressive yet, but stay tuned)
  • Mostly different sounds (tell me if you like them or not)
  • Improved sound sliders (exponential rather than linear)
  • User interface improvements. Automatically toggles to editor mode when you select editor panel. Instant view when you toggle levels.
  • Lot of bugfixes.
  • Maybe some new bugs (report them!)
The music is here mostly for test. It's being worked on.

Friday, October 16, 2009

Neuroscience and the law.

Just came across some rather interesting legal discussion about neuroscience and laws and responsibility and free will and brain disorders:

I think the 'problem' discussed - the collision between law and science, neuroscience in particular - is entirely specific to punitive justice and to religion disguising itself as atheism and reason.
Just look at the article. Typical punitive approach: pondering religious and philosophical questions like what punishment Herbert Weinstein deserves for killing his wife in the heat of argument while having a freaking cyst in the brain that he wasn't aware of - and even whenever him without the cyst should be kept responsible for actions of him with cyst. I'll say it right now I've no freaking clue what punishment he "deserves" and see no reason why such questions should even be considered. Idea of "deserving" itself is a root cause of most homicide - whereby murderer suddenly decides that victim "deserves" to die. There's nothing rational or logical about it.

On other hand, if you consider the laws as means to protection of people, all the questions which come up are factual rather than metaphysical, and the law perfectly integrates with modern science and technology. You need to consider what action would be best for everyone. The questions are whenever he's dangerous after treatment of cyst (which he also would be if cyst was irrelevant to the murder), that's neuroscience question. Whenever he has to be locked up anyway for sake of deterrence (probably not because its inconceivable that cyst in brain would be abused as common excuse), that's also a rational question, effectiveness of deterrence could be studied with statistical methods.

I were actually searching for articles about brain parasites (This article isn't really relevant to parasites). I find brain parasites which alter behaviour of the host - and especially the evolution - very fascinating (in the 'eww' way). I even blogged about 'em before.

Taking claims at face value, killing someone because of cyst in your brain, that sounds as horrible as becoming a zombie (and very plausible if cyst is substantially big and located in critical regions responsible for self control). Surely that's a lot of punishment in itself. Imagine your dog got infected with rabies, acute phase, too late for vaccination. You'll have to kill the dog due to lack of treatment, but you'd still be sorry and you'd rather treat the dog if possible.
Human nervous system differs a lot from dog's, so humans don't go on biting others when infected with rabies, because rabies is not evolved enough with humans. Yet, its not impossible in principle for a virus or other parasite to have that kind of result on humans.

Tuesday, September 29, 2009

More on hormesis.

A great article on the topic. Basically, the same argument.
The lowest dose of ionizing radiation is one nuclear track through one cell. You can't have a fraction of a dose of that sort. Either a track goes through the nucleus and affects it, or it doesn't.

Monday, September 21, 2009

Radiation hormesis: contradicts all we know about evolution, can be shown false with elementary physics and math.

See Radiation hormesis. This thing is on the rise (just like intelligent design), with potentially grave direct consequences if some nuclear regulatory body accepts this 'theory' and relaxes nuclear pollution standards - and similarly grave consequences if nuclear power opponents pick up the idea and use it their way, hints at which you can see in this wiki article ("In all likelihood, recognizing that low dose effects can't be predicted from high dose experiments would force a strengthening of public health standards, not their weakening, as hormesis proponents would argue.").

Putting aside that hormesis is just a new name for old bullshit (see quack medicines of early 20th century. Radium toothpaste, uranium ore teapots, you name it), there's outline of what is fundamentally wrong with "hormesis theory":

Firstly, according to the understanding of evolution, a wholly beneficial "defense response" does not need to be switched off in absence of ionizing radiation. Even more, the 'switch', even if present, very quickly goes away if it is not needed. For real biological examples of this see permanent tan in blacks (tan doesn't switch off in absence of light, because in tropics you always need tan), lactose tolerance in whites (lactose production doesn't switch off in adulthood). Those are just 2 most obvious examples, which are also examples of very quick evolution that happened recently in the history of homo sapiens. I'm sure there's a lot of more obscure examples in animals; I am not really a biologist.
(It's interesting that hormesis proponents love to refer to tan as example of defense response triggered by radiation. Well, used to. Hopefully, with election of Obama, whites will stop defining 'human' as something which produces melanin mostly in response to sunlight)

Secondly, humans today are exposed to about same level of radiation as in the past - or higher because of sealed homes and radon (in case you want to talk about cavemen, don't bother. Caves were never the primarily habitat of humans, nor are habitable caves well sealed. Bones are found in caves so much because bones preserve in caves a lot better than outside caves).

Thirdly, it wouldn't be a problem for living organisms to evolve to concentrate naturally radioactive elements, had those been so beneficial. Seriously, there's enough naturally radioactive elements around. Better yet, cells are producing some free radicals all by themselves without any ionizing radiation.

But okay, let's just follow less sophisticated of radiation hormesis proponents and speculate that radiation in small doses produces some chemicals that are required for some cell metabolism.
After all, cellular machinery being complex it seems very reasonable that cell's response to radiation would be nonlinear... or does it? A single cell wouldn't make good particle counter... it is, after all, very tiny, and rarely gets hit by ionizing particle or gamma ray photon. How bad of a Geiger counter a cell would be, you might ask? Turns out cell sized Geiger counter would be far worse than I would have thought.

Did you know that you have on order of hundreds times more cells in your body than you absorb ionizing particles in a year, at background radiation level? I didn't know, but fortunately it is quite easy and straightforward to calculate number of particles (of specific type) that your body absorbs when you get specific dose.
From the definition of Sievert, the general formula for number of particles for given dose is:
Number of particles = (Dose in Sievert / Q factor) * body mass / kinetic energy per particle
Background dose is 2.4E-3 Sievert per year. (
Let's take body mass as 80kg.
For 1MeV soft gamma ray photons (Q=1), the max number is:
N = 2.4E-3 J/kg * 80 kg /(1E6 electron volt) = 1.2E12
About hundredth of number of cells in your body, which is estimated as 1E14
Let's redo the calculation for Radon's alpha particles, of which you need much smaller number for same 'dose':
N = (2.4E-3/20 J/kg) *80kg / 6E6 electron volt = 1E10
That's some ten thousands times fewer alpha particles than there are cells in your body.
The cells which suffer impacts to the cell nucleus are even smaller percentage.
Alpha particles usually stop within a few cells. Gamma photons ionize when they get scattered, meaning that gamma photon doesn't just rip through your body ionizing stuff on its path, but delivers focal damage at few spots. The bottom line is, individual cell is very rarely affected by background radiation at all.

I hope it should be fairly obvious that there couldn't be any 'nonlinear' response of individual cell to such rather low probability of it getting struck by gamma or alpha particle during its lifetime. It either gets struck and has response, or it does not, and has no response. Probability is by definition linear. Only at the doses approaching 1 Sievert, a significant portion of your cells would be struck by ionizing particles [that's well in the 'glow in the dark' territory. Human's lethal dose is 3..5 Sievert], and cells could start actually responding to count of events per time. (It is indeed well documented that cells do exhibit defene response at doses approaching 1 Sievert. The response (cell division arrest) is in no way generally beneficial (if your cells stop dividing, you'll die when your existing cells wear out), but you might survive otherwise lethal dose if cells are not dividing)

Conclusions: The linear no threshold model is based upon understanding that cells respond to ionizing radiation in probabilistic way; the linearity does not come from any simplified assumption about organism or cellular machinery, but rather from how statistics and probabilities work. When you increase dose ten times over background, you do not increase dose to any cells by ten times. You're increasing the very small population of cells which suffer an ionization event in the nucleus, ten times, thus increasing ten times the population of cells that can turn cancerous. (actually, worse than that. You're increasing hundred times the population of cells which suffer two ionization events, and thousand times population which suffers triple ionization event. Quadratic or cubic dose response effect has not been observed, though. There's a lot of other sources of DNA damage besides radiation)

But what's about multiple cells, you might ask? Immune system and whatnot? Well, this is pretty much covered by evolutionary objection above. Try imagine evolved organism that would somehow measure level of radiation by monitoring a lot of cells, just to handicap itself when the level of radiation is at or below natural background - and 'unhandicap' itself on the level of say 10x natural background (which is still very low and not life threatening, but is also very unusual in nature).
Makes no sense whatsoever. That's no strawman; that's what it takes for organism to exhibit effect of radiation hormesis. Barring any possibility of direct beneficial effect, the 'beneficial response' to a stimulus is equivalent to detrimental handicap in absence of stimulus.

Furthermore, hormesis is just bad science. Studies are fraudulent - consisting of comparisons between populations without control for the age group and smoking. As typical in scientific fraud, research conclusions focus entirely on the non-scientific aspects such as safety policies, entirely ignoring the scientific implications (if the response is not linear, then you have to throw entire concept of dose out of the window. It is only the linear no threshold response model under which all kinds of ionizing radiation are equivalent (up to the scaling factor)). To put it very bluntly, there's all reasons to think that hormesis proponents are not merely mistaken, but are actively lying. A genuinely mistaken scientist explores the scientific consequences of his erroneous research. A fraudster, on other hand, focuses solely on promoting the policy changes which he wants to enact through his fraud, and shies away from the scientific implications of his research; for the science is interlinked, and scientific implications of fraudulent research would contradict a lot of other, seemingly unrelated experiments and knowledge.

Wednesday, August 26, 2009

Tiny Linux update.

The 00e version is same 00d from 15th august, except the Linux package now includes latest so that it can work on older distros which do not have compatible version of this library. Thanks to users for reporting the issue.

Saturday, August 15, 2009

Polynomial update.

Minor middle of the month update.

Gameplay: now the screen "glitches" in the old-tv way when you're being hit while having low health (not just when dead). Now you'll know when to run for your life. The backstory is that electromagnetic shield is down, and enemy shots are actually hitting your ship, causing your onboard sensors and computer to glitch.
The "insane" gameplay is more insane now (it is actually really hard to get score above 1000 on insane).

Bugfixes: fixed some crashes on old graphics cards.

System, all platforms: Migrated from ALUT to ALURE, added ogg loader libraries (but not music yet).

OS X platform: Now includes latest OpenAL version in the bundle, all because Apple's software OpenAL is crashing randomly in mixer thread.

Sunday, August 9, 2009

Bug in download page fixed.

Downloading of old version (for paid customers) sometimes served previously downloaded version (=latest) instead of requested version because of broken caching. Fixed and tested.

Monday, August 3, 2009

Drake's equation

I think that one's given far too much credit.
Parameters in it just do not correspond to any real, measurable quantities, and there's far too many assumptions.

Reality is very complicated. There is a wide variety of stars, some of them more variable than others (and thus more of hazard to life), with a range of lifetimes. There's wide variety of planetary systems possible. Some systems may be slow to develop intelligent life and may require long-lived, old stars - and some systems may develop intelligent life relatively quickly.
It could be that unusually large moon is a requirement - Earth got one, and we do not even know if irregularity of combination of moon&sun tides is absolutely essential or unimportant. Nor do we know how common are planets with large moons. Most curiously, looking from Earth, moon has almost same disk size as Sun - we don't know if that doesn't matter or is very important to development of culture.
It could be that Jupiter is very important for diverting comets and protecting earth from constant asteroid bombardment - if there was a dinosaur killing sized meteorite every 20 millions years, intelligent life might never have evolved on Earth (that's what Stephen Hawking thinks about it, and it seems quite reasonable). Some stars are poor in heavy elements, and life as we know it requires heavy elements. Position of star within the galaxy may matter a lot.

But, of course, Drake's equation has nothing of that. No, it just has abstract "planets within continuously habitable zone". Err. Our own orbit is not 'continuously habitable' for most animals larger than rat - because of asteroids and comets that intersect it once in a while - look at what happened to dinosaurs, and exact same thing would happen to us, should dino-killing meteorite strike tomorrow. Not to mention that solar variability results in ice ages. Such somewhat hostile but not too hostile environment may be yet another requirement for intelligent life.
It's not hard to imagine a habitable world where survival is too hard for anything big, and nothing intelligent ever evolves. It is not hard to imagine Eden without the apple, a world that is too perfect for life, where apes are never forced off the trees then forced to survive ice age. Would the competition between species compensate, leading to intelligence even on such very hospitable planets? Or would it not? We do not know. Worse yet we don't even know what factors we do not know. All what we know is that a planet with history identical to that of Earth's would result in human society - with no knowledge whatsoever as of how closely similar a planet needs to be to develop something else that also sends radio signals.

There is far more variables in reality than in Drake's equation, and those variables are not merely multiplied together, but are all inter-linked in very nonlinear ways (and its not probabilities that vary, but probability distributions). There could be probability of intelligent life on planets with huge moon, and another, lower probability for planets without huge moon - or it may just take longer for intelligent life to emerge without moon, requiring much older, lighter, earlier star - which may be poorer in heavy elements. There can be varying size moons. And then probability of having a planet with huge moon within habitable zone may depend to mass of star (which is linked to lifetime). You cannot meaningfully dissect that mess into half dozen abstract parameters that are just multiplied together. It's like dissecting a hologram - each piece will still be as complex as whole, unless you get to *really* tiny pieces.

Sunday, August 2, 2009

A huge number of screenshots.
(its not stage2, its staged2 which means screenshots staged for picking a few for website)

I also totally forgot that i shared album of my old CG renders, using Picasa. See it here:

Friday, July 31, 2009

Monthly Polynomial Update - version 00c


  • Arenas have names now.
  • Random selection of arenas for demo, instead of first 10.
  • Improved the 'Dynamic Reactor' effect. Now, bullets and explosions imprint onto background. You can also customize background's update speed.
  • Booster bonus (lets you fly 3x faster). [of questionable goodness though - it seem to make things feel smaller, for me :/]
  • Bonus icons improved.
  • 'Insane' is more difficult now (autoaim lasts less long, enemies shot faster and thus harder to dodge).
  • Added death effects - when you're killed, image 'loses synchronization', stretches, and/or whites out, in random combinations.
  • Free demo has 11 levels now (numbered 0 to 10), full has 33
  • Configuration stored in your home folder by default now (if you want to make portable install, see readme for instructions).
  • Various bugfixes
If you bought full version, click on "check updates" to get onto update downloads page.

Todo: I'm going to make a new gameplay video sometime soon.

Saturday, July 25, 2009

Polarized light in.... beetles

From BBC

Under left circularly polarised light, which matched the direction of the helices, the beetles appeared "super-green", because, as Dr Srinivasarao explained, "there weren't that many other wavelengths of light reflected back at you".
That's just amazing. (see the post below for less natural example of colors from polarization of light)

Saturday, July 18, 2009

Strain patterns in plexiglass.

Polynomial: I am still working on multiplayer, and there is not much to show off. I made a science video, though.

Using regular polarizing sunglasses as a filter (I do not have real polarizing camera filter).

How it works: Light waves are not like sound waves, but more like displacement waves in a stretched rope - the light "waves sideways". Usually light is waving kind of randomly, in all directions. When the light is waving in just one direction, that direction is said to be a 'polarization direction' for the wave. LCD displays emit polarized light, which is usually waving in approximately diagonal direction (I do not know if direction is same for all displays or just for LG displays); polarizing sunglasses only pass vertically polarized light. So when you look through polarizing sunglasses on LCD display, at right angle, no light goes through, because display gives out \ diagonal polarized light, and glasses at that angle only pass / polarized light.

Crystals of various sorts, strained plastics, and similar materials act in a very interesting way. The light waving along the stretch direction moves at slightly different speed in such materials, from the light waving orthogonally to the stretch direction.

If plastic's strain direction is at angle to the polarization direction, the polarization of light appears to flip as light goes through the plastic. Polarization of different wavelengths (spectral colours) of light flip at different rate as light goes through such material (it is flipping again and again). In result, for some wavelengths (colours) the polarization is completely flipped(flipped odd number of times) and the light passes through sunglasses, and for some wavelengths, the polarization is not flipped (flipped even number of times) and no light goes through. That's where colours in this video come from. The colours remind of soap bubble film, and indeed, the spectra of those colours is pretty much identical to thin film interference that you see in soap bubbles or a thin layer of oil/gasoline/etc on water.

For more precise details, see Wikipedia:Birefringence.

(By the way, LCD display itself uses flipping of polarization in liquid crystal (which is put under electrical strain rather than mechanical strain, i.e. electric field) to form the image, but I digress)

Todo: sometime I'm going to make better video with narration and pictures how polarization works.

For now, I recommend simply trying it yourself and showing it to some friends!
Just get some polarizing filter (I'd recommend linear, though circular will work. The polarization in material is actually flipping like horizontal, right circular, vertical, left circular, horizontal, right circular, and so on. Circular polarization is like swinging rope in circle pattern - a rotating wave moves through the rope). Stay away from those uv polarizing filters, those are probably totally irrelevant. You can also get polarized sunglasses, those are better for visual observation.

Actually, you can do this experiment even without buying any fancy stuff. Look in the reflection of display in piece of glass, at approximately 50 degrees angle. Tilt the glass to the side while maintaining reflection angle, until reflection becomes 'dark'. (I did not manage to get a good picture of this with my camera, due to lack of third arm, but it works very well). At some angle, only one polarization of light is reflected. That's why polarizing sunglasses help filter out reflections from water or ice - the glasses let other, orthogonal polarization direction pass, but I digress.

In fact you can even do that without LCD display. Light from blue sky (at the 90 degrees angle from sun) is polarized! So you can impress your friends by showing that off with piece of broken glass, and some plastic garbage. The hidden beauty of everyday things. (Practice first, the good angle might be hard to get right at first)

[BTW. As you can see, I'm still experimenting with ads. I'm very interested in efficiency of ads, naturally, as the time will come when I'll be possibly paying for ads for The Polynomial]

Wednesday, July 15, 2009

Amarok again.

Looking at it again, 2.1.1 seems somewhat better than 2.1 (a huge, massive, ground breaking improvement: you can disable context thats in the middle and gets in the way of drag)

[edit: installed 2.1.1 . How the fuck do I actually disable that damned panel and get 1 splitter here? A shame, such huge disappointment, I thought I was wrong in my rant. Paranoya: RIAA probably would love that context thing. ISP stores logs for a while and it can potentially be useful as evidence in a court case if they can get logs from isp. Not that I personally care but anyway. Pirates better watch out.]

Upcoming amarok 2.2 (with dockable dialogs, if those will work) look kind of promising on the video, even though the way features are listed (docking just last, not even 'last but not least') doesn't look terribly great if it is any indicator of views on usability or priorities.

What made 2.1 particularly annoying (and prompted lot of ranting everywhere, myself included) is that in case of Mandriva (and, I heard, Ubuntu), after routine update we just find 1.4.10 removed without any straightforward way to revert. I'd blame packagers if it was 'Amarok 2.0.2' or 'Amarok2 0.1' or something else labelled unstable - but as it is labelled stable, it is entirely reasonable for a distribution to have it default.
On Mandriva in particular, you need to get 1.4.10 from 2009.0 repository - you are not supposed to do this (and it may fail to work for people whom did install 2009.1 afresh. 2009.0 RPMs are not supposed to be used on 2009.1 install. It's a luck when that works).

All the problem stems from how "rewrite" retained the name but entirely lost what the name used to stand for. It is not "excellent player 2.1", it's "average player 0.1", and pretty much nobody wants to overwrite "excellent player 1.4" with "average player 0.1".

Link, see comments for how Ubuntu users generally feel about amarok 2

Amarok 2 sucks.

Amarok 2 (new version of a Linux music player) sucks just as much as old Amarok rocked. A lot of major functionality regressions, not to mention screwed up, less configurable user interface (as of 2.1, you can't even fully disable this stupid 'context' panel in middle, let alone use system skin).
That's really sad. It takes intelligence to fix or improve something that's broken or missing. Fixing other people's bugs is not easy, as well as addition of new functionality. Whereas fucking up user interfaces is very easy and every moron can do that; partial 'rewrites' with lot of regressions are relatively easy as well. So when morons take over when transmissible zombie-like insanity takes over the developers, naturally, there's always huge user interface redesign, lot of fixing of things that are not broken, and lot of regressions in functionality, all while nothing that's broken gets fixed. If I were more paranoid, I'd think KDE4 in general is being sabotaged, but as it is I think it's just got damaged by it's own popularity. (edit: Sorry for the harsh language, but that's how development looks from outside when there is a huge usability regression in a 'stable' release; I don't mean bugs and lack of support for various things [evidently ipods are supported now], I mean craziness like, for example, not reimplementing quite successful layout, but rather trying various totally weird stuff like putting 'context' in the centre, in the way of drag and drop path. Rewrites for new frameworks do not have to result in SO massive usability regression; there's no reason not to reimplement old layout at least until new layout is designed)

Instructions for getting Amarok 1.4 back, for Mandriva:
  1. Set up repositories for mandriva 2009.0 , via easyurpmi
  2. Install Amarok 1.4.10 through package manager
  3. As root, edit /etc/urpmi/skip.list , and add /^amarok/ to prevent auto'updates'.
Similar instructions may work for other RPM based distros.

Version bump.

Version bump to 00b (I improved the sales related scripts, so I can versionbump freely without going through 10-item checklist).
Check Updates button (in full version) should work as well.
Important changes:
  • Editor, by user request: In full version, you can now save images of any size (limited by video card). My 512MB geforce 9800 GT works fine all way up to 8192x8192 ; pretty much all cards that run Polynomial should allow that resolution, newer cards may allow even larger. Various glitches happen though when exceeding max resolution, that is to be fixed & workarounded.
  • Various small fixes, mostly for older cards.
  • Further reduced video memory usage.

Saturday, July 11, 2009

Even more fixes.

Added a workaround for Radeon 1950 (and possibly some other cards). If you have ugly pixelation issue, go to Visuals tab, then enable the workaround. With the workaround, it looks almost as good as normally on recent cards.

In other news, network multiplayer is progressing, but not ready for release yet.

Wednesday, July 8, 2009

Some more fixes.

Fixes for the above(i.e. below) - mentioned fixes. Shouldn't crash under Mesa 3D anymore, though i dunno how it looks, with pretty much minimal quality.
Important changes:

  • Fixed broken reverb (should sound lot better).
  • Fixed segfault in shipped openal-soft.
  • Fixed a bunch of segfaults on older graphics hardware, it should draw at reduced quality now.

Some fixes for Linux.

Updated the binaries but did not versionbump. Some fixes for crashes on certain Linux distributions.

Wednesday, July 1, 2009

Thoughts on Google PageRank and relevancy.

Firstly, pagerank is a great algorithm, when applied to a web not influenced by pagerank.

The problems however lie in how pagerank and relevancy ranking influence the Internet and its own input. Let's use my game The Polynomial as example. At the moment, the top result for "polynomial demo" is gamespot page about my game. These guys do not link to my website at all.
In result, some people whom searched for 'polynomial demo' do themselves link to gamespot instead of my pages even though they would prefer to link original author. That is turning high pagerank into form of self-fulfilling prophecy. It could well be how gamespot managed to get high pagerank and relevancy in first place. I cannot compete. I cannot pay for ad links to artificially inflate search engine ranks - and even if I could, I would not. I do not have time to bother reorganizing links on my website as to focus pagerank on a single page. Neither can most independent developers.
I do not mind gamespot much. They have nice user opinions about my game, and my game contains "get full version" button that is opening my page. I only wish they would play fair and link to original author, or not require registration for download.

In retrospect, I should have created a lot of well-interlinked pages covering all the expected keywords, but well. I'll try to think up something for the final release, as well as write an article about it if I have time.

Monday, June 29, 2009

Beware softonic scam.

I generally like to read reviews of my software. Reviews, critique, and user comments often provide important insights on the game, and I always look for the bug reports.

Today I found something unexpected tho. A 'positive' review where reviewer ('Softonic') tries to sell 'fast, virus free' download of polynomial::preview free. Without my permission. Wow. I found it flattering in a way, but not amusing. Others did, too.
Softonic offers 'free download' link, but how! With an non-apparent extra delay script[as to make 'slow download' indeed slow], they show a hotlink to a zip archive hosted by me. No permission was ever given to do any of that. And of course, softonic is a rather successful business (multimillion) from what I can see.
[if you want to see this crap, search for 'polynomial demo' in google. By the way, many other top finds neglect to link my website. This is no good. Those sites are also most likely to be linked. PageRank has severe problem in that PageRank itself influences it's input, creating a feedback loop]

edit: shortened to fit the blog style.

Page update.

Quoted some reviews from major gaming sites here. Thanks to everyone for reviewing it!
Also, there is a bit of problem with google analytics. Referring links strip parameters, so I can't access some of the reviews normally. I'll try to get them from access log.

Sunday, June 28, 2009

Bugfix update.

The downloads have been updated.

Update contains mostly fixes and workarounds for crashes on old cards. It should display message blaming the card rather than crashing, and in some cases, even draw something nice at lower quality.
Other notable fix improves save image behaviour on some cards, and --nosound option for Arch Linux which got some weird sound issue for one of users.
Thanks to everyone who reported bugs!

So far, most of non-bugfix work is focussed on multi-player which doesn't work yet, and relevant features. I may add some single-player stuff sometime soon too, but I really would want to finish multi-player first - it seems there's more interest in multiplayer than in campaigns and other SP features. Furthermore it would make sense to design campaigns to prepare user for multiplayer.

Wednesday, June 24, 2009


What I'm currently working on:

Bugfixes. There is always bugs on the first release, especially in the multi-platform software, and detection of such bugs is what preview is for.
Different graphics cards do things slightly differently as well. Some graphics cards are very old and have drivers that crash if game as much as sneezes in wrong direction. Of course, that all needs to be fixed - if a card cannot run the game, the game must gracefully display a 'card is too old' message, but it is surprisingly difficult to get right - it is even worse to show this message on cards which can run it.

Gameplay. That's it, campaigns, missions, attack/defend, online leaderboard, multiplayer.

In response to the critique of gameplay: At the moment, it is more of a game engine demo, and gameplay is necessarily classic and minimalist - that's also why it is called a 'preview', with emphasis on pre and view.
A lot of people like minimalist gameplay, a lot of people dislike it, and of course, when the game is finished it will include fancy missions&campaigns as well as minimalist option. I, personally, prefer retro-minimalism in games - Tetris style (or even codename MAT style), but I understand that preferences vary a lot.

Ahh, and as for thepiratebay. You're welcome to put the 'free' demo version here, if you want to. If you're hardcode fan, you can mislabel it as full to make a decoy, I don't mind (in fact I'd rather prefer if it takes more time to find torrent. It has not been pirated yet though so don't bother searching). Just don't put full here, when I add multiplayer, someone else would be using your on-line play token (embedded in the game) instead of you.

Tuesday, June 23, 2009

Whee! Temporary forums for The Polynomial!

There you go
Feel free to report the bugs, ask questions, and otherwise chat.

Things are a little too hot at the moment to set up forums on my own website - I don't want to risk bringing anything down here, especially the sales system.

Sunday, June 21, 2009

Updates, and some fun with google hot trends

The Polynomial: development goes on at usual pace. (That is to say it is progressing very quickly :-) ). I'm adding new gameplay features and working on online multiplayer, though multiplayer will take a while - it is very difficult to implement.
This doesn't make really cool screenshots yet. I'm planning on releasing a minor improvements update sometime soon, maybe end of the month - existing customers will have access to this update through "check updates" button. You can use "follow blog" thing on the right to be able to see updates easily.

I didn't build any new Stirling engine this weekend, and nothing broke in my computer, so no howtos.

Random Internet stuff:
Insanely huge starspot

Totally irrelevant Internet stuff:

I've been toying with google hot trends... there's a few trends of late:

Science vs religion - science is on decline:

IQ is on decline as well (haha):

Evil is rising, after decline:

I can't recall what was so horrible in mid 2008.

Thursday, June 18, 2009

Replacing dead fan on video card.

A fan on my video card (NVidia 9800 GT, by Innovision) died in a curious way - it fails to start in one position, so that every restart was like a round of russian roulette. It finally began crashing from overheating during work on ThePolynomial.
I replaced it with 1.5€ case fan:

held in place with rubber bands cut from old bike inner tube. Card runs colder than ever, and, surprisingly, with less noise.
If you do this, keep old fan for warranty.
Other options were:
a: send for replacement and wait 2 weeks. Not an option.
b: upgrade to something badass like NVidia GeForce GTX 295. Hmm. No good for keeping my game's system requirements low.
c: buy third party heatsink for ~70€ and void the warranty, a very bad idea as the GPU did overheat when fan broke.

edit: Corrections. My card did not have any box around it that would prevent such fix without voiding the warranty. I always buy no-nonsense computer parts.

Tuesday, June 16, 2009

Stirling engine.


It is a moving sculpture project built to raise eco awareness and stuff like that. (Well, it could be. In fact it was made out of boredom)

That's a really working low temperature difference Stirling engine built almost entirely from packaging trash - things that are manufactured just to be thrown away. No high tech trash (such as old hard drive parts). It is powered by cup of hot water underneath (the final version will be powered by the heat from lamp that is highlighting it).
Surprisingly, it spins at up to 120 RPM on fresh cup.
Low temperature difference Stirling engine has undeserved reputation of requiring expensive things such as nice bearings, graphite piston, and stuff like that.

How Stirling engine works: There is a plate in chamber. When the plate is high, air is in contact with bottom lid, which is hot. Air expands, pushing the membrane, turning the shaft, and moving the plate down. When plate is low, air is in contact with top lid, which is colder. Air contracts, pulling the membrane, and turning the shaft. See more info at


Top and bottom plates: can lids.
Piston: I used rubber membrane from broken gas heater. On second thought, should have used polyethylene from food packaging.
Chamber wall: cut from some plastic can.
Displacer: cut from styrofoam tray.

Rods, axis, and other mechanics: paperclips, 8 paperclips total.
Rubber tube: I only needed it for leak testing.
Spacers: pieces of wire insulation.
Low friction washers: cut from thin transparent plastic cover on some packaging.
"airtight" holes for displacer rod: just regular holes. With some liquid soap for sealant (it is sticky enough to hold enough pressure for it to be totally airtight). It doesn't matter - the leak area is very small, and leaks here, if any, are totally insignificant.
Glue: hot glue, applied using soldering iron.

'Flywheel' is temporary just to balance it and make sure it works. I replaced it with plain piece of thick copper wire.

Tools: needlenose pliers, wire cutter pliers, knife, pin, caliper, soldering iron (used only for applying hotglue), compass (the one that you draw circles with).

Keywords: Stirling engine, Carnot cycle.

Thursday, June 11, 2009

On the removal of adsense from blog.

edit: correction. It was pointed out to me in email that ads could work lot better if used in different way. I'll restart the experiment. I'm genuinely curious if I can get adsense to work sensibly and display something relevant to my posts. So far it appears totally bugged. Under a post, it displays ads relevant to another post.

The adsense experiment's over. The conclusion: almost nobody clicks on ads. It was generating mere cents per 1000 views (and large majority of visitors have ad-blocking extension, so I were making 1000 ad views per several thousands blog views). Why so? Because adsense displayed irrelevant nonsense.

Speaking of which. I believe, making any money from blog is only possible when your blog is about making money off blogs, and consists entirely of advertising - ads all over, and the posts of blog themselves are advertising the internet advertising companies. As it goes, the only easy way to make money is to scam the people whom want to easily make money, hehe.

Wednesday, June 10, 2009

Various mail i'm getting...

Did I mention I love getting fan mail? Makes me feel all important :-)

A particularly nice fan mail:
Hi! I absolutely LOVE polynomial! I have recommended it to all my friends, I hope to be able to afford to purchase the full version as soon as my budget allows. Kudos! this is absolutely the most beautiful thing I have EVER seen on a computer! (and i have been working with computers for 30 years!!) Wonderful job! Amazing!! keep it up!! WOW! (you have my permission to use this email (and my full name if you like) for promotional purposes!!!) (please do!)
--- Eric Otway.

Most of mail I'm getting, though, consists of fail-to-run reports on Intel's onboard graphics. Sorry guys, can't do much about it, but please keep sending so that I can compile some system requirements list.

Ahh, and other category of mail. About opensource release of The Polynomial or The Galaxy or something else. I always get a lot of those. Sorry guys, I can't do that until either a: Someone funds development of The Polynomial (and by funding I mean enough to pay my bills), b: I make ton of cash and don't care anymore, or c: I move on to other project. Either of those will eventually happen. You can make it happen sooner by helping me advertise The Polynomial.

Meanwhile, you can take care of my abandoned project Voxel World which I released as opensource a while ago. Set up the repository, get some maintainers, etc. (Caveats: Voxel World is written in pascal. Part of it was written when I was 16 years old. It needs cleanup)

Other news: The Polynomial page is down in stumbleupon ratings to 3 stars, from solid 5 stars it had before I released. Why, presumably because of thumbdowns from people with old graphics cards for whom it does not run :/ .
Fortunately, the art gallery page is at 4 stars and growing :-).

Monday, June 8, 2009

New page.

Polynomial / Art
Contains images rendered with Polynomial, in editor mode (game effects off).

Sunday, June 7, 2009

Recipe for cheap smug satisfaction (for linux).

1: read this article about a bug. Holy cow.
"At the international date line, whoops, all systems dumped and when I say all systems, I mean all systems, their navigation, part of their communications, their fuel systems. They were—they could have been in real trouble. They were with their tankers. The tankers – they tried to reset their systems, couldn’t get them reset. The tankers brought them back to Hawaii. This could have been real serious. It certainly could have been real serious if the weather had been bad."

"It was a computer glitch in the millions of lines of code, somebody made an error in a couple lines of the code and everything goes."
Its a wonder our world too isn't gone in nuclear war over a leap second or something, given such practices.

2: If you use 32 bit Linux, set time to 2038-01-19 03:14:00 UTC and wait 7 seconds (overflow). Alternatively, set whatever date windows overflows on. Guaranteed to glitch your pc a lot. Media player will skip, browser might lose cache, something might crash. I tried that back when I used 32-bit system, there was no major failure.
3: Enjoy your smug satisfaction that your pc doesn't fully phail when few lines out of million have a glitch, due to the clever ancient engineering practice known as memory protection.

Saturday, June 6, 2009

Website update, bugfix.

New website layout.
Also, fixed small bug in the editor's load (sometimes saved arenas did not load correctly), updated the downloads. Re-download as needed.

Friday, June 5, 2009

Updated release

Updated everything to the version with realtime editing. People whom bought preview can simply re-download from the link sent in email. Check updates button will work shortly soon too.

New feature: real-time editing.

Real-time view while editing, and natural number adjustment (feels like turning a knob).
Due to be released soon - check my site on Friday evening (European time).

You either spin your scroll-wheel over parameter, or you right-drag and spin the mouse in circles around it. Really great for adjustments.

If any VJs are interested - I can develop a customized version that would work with standard MIDI knob or slider board. Contact me to discuss the details and/or pricing.

Wednesday, June 3, 2009

Special thanks to...

(this post will be edited and updated as time goes by)

OpenAL-Soft maintainer (##openal on, nickname KittyKat or something similar) for making this excellent library and answering questions.
MiniCow on ##opengl for helping debug some MacOS X specific issues.
Camilla Berglund for GLFW, cross platform opengl framework I'm using.
Spring & SpringLobby teams for insights in development, and generally for showing that such project can be done.
Ben Woodhouse for glee . (OpenGL extensions library)
Developers of glc and recordmydesktop, free tools that I use for video capture.
Everyone who tests it and reports bugs.
Everyone who buys the full preview.
I hope I can fund some of these projects when the game breaks even.

For more details you can see library credits in included documentation.

Monday, June 1, 2009

Post-release updates.

I had minor screw-up with release on mac os x, fixed now.

Improved how it works on older macs, albeit older macs still don't draw it correctly (far too much bloom).

Saturday, May 30, 2009

Finally! Preview Release!

I decided to release it as is as "preview". Whoo! Get it there:
Main page | Free preview | Full preview

I'm dead tired after setting up contracts, configuring the sales system, and so on, then double and triple checking the system, so I'd rather leave huge announcements and advertising for tomorrow or even monday.

Also, I uploaded a new youtube video of me using built-in editor.

The Editor doubles as cool artistic tool on its own that you can use to create interesting images. Just imagine how you can use it to enhance your PhotoShop or Gimp artwork, how you can combine it with your 3D graphics. Possibilities are endless. In 2007, I made a really sweet valentine's day card with essentially same technology (except I didn't have any real-time viewer back then; it took 20 seconds to render a frame, whereas now it takes less than 0.005 seconds) and it was well liked.

When you get bored of playing, you can create your own beautiful things.

Friday, May 22, 2009

Some new screenshots.

I'm mostly polishing the game now for the release. Fixing minor glitches, improving gui, etc.
Screenshots of some new "arena" (made by tweaking old one, but looks cooler IMO):

Screenshot from the 'arena' editor:

The table specifies parameters to the attractor. Attractor is given by polynomials like dx=x*x*a+x*y+b+x*z*c+x*d+y*y*e+... same for dy and dz, and cells in table specify coefficients a,b,c...
On top, you can see the factors (xx, xy, xz, x, ...) that are multiplied by cells in table.
Looks intimidating? I myself have no clue what particular set of parameters will look like until I try it! Which, by the way, means that you could tweak it as well as I can even if you don't know how it works. Results depend to tastes, not to technical knowledge.

I rarely enter parameters by hand, though - the "next fractal" button tries a lot of different random parameters until it finds something that seems interesting. Sort of artist AI. Like any today's AI, it is somewhat stupid, but gives good starting point for tweaking parameters by hand.

Monday, May 18, 2009

Another HD video.

There we go.

Some freezes in video were caused by video capture tool writing to disk.

Note: there appear to be some problem with youtube at the moment. If this video keeps loading but does not start, skip to 5 seconds.

I still did not figure how to capture sound from OpenAL correctly.

Encoding used (on file that I uploaded. Youtube itself does re-encode it over again, at lower quality):
glc-play Polynomial64-5125-0.glc -o - -y 1 |mencoder -demuxer y4m - -nosound -ovc x264 -x264encopts crf=22:frameref=3:bframes=3:threads=5 -of avi -o output_x264.avi
Original resolution was 1280x720 , and resulting bitrate was about 1 megabyte per second.

Sunday, May 17, 2009

New explosion effect...

Added some geometric-shaped fireworks...

(looks much better ingame than in static image, obviously)

It uses random polyhedra for firework's shooting directions.

Testing youtube HD.

Uploaded a short video of The Polynomial (game) in action, mostly to test Youtube HD. A lot better than regular youtube, but I still don't like how it compressed.
Video codec is made to work well for regular videos, like people walking and stuff, not for weird math imagery...

In other news, I added plenty of new features and bug fixes, though them are not very visible in the video. You can see zoom (right mouse button zooms for sniping), and also some fancy firework explosion (which didn't show in youtube resolution very well). The game's progressing quite nicely. You can email me if you want to be notified of updates.

Ahh, and also. Many of you asked how it is played. Currently, like a space shooter - you fly around, shoot up red stuff, and collect green stuff. Though I'm working on several alternative gameplay styles (like exploring&collecting). Also, I'm thinking how to tie gameplay with scenery generation so that gameplay would also result in progressively more and more interesting scenery. Maybe, you would be collecting items that you find attractive and shot up items that you don't like, driving the evolution of shapes :-) .

Wednesday, May 13, 2009

Patterns (programming)

[skip this post if you're looking for news on my game Polynomial]

Design patterns remain to be a hot topic in programming. After much consideration, I decided to hop onto pattern bashing bandwagon with some hopefully original arguments.

First, what exactly is a design pattern in programming? Wikipedia: "a design pattern is a general reusable solution to a commonly occurring problem in software design." That's good, but watch out: "A design pattern is not a finished design that can be transformed directly into code".
That's it, pattern is like c++ template class or lisp macro or c# generic, but written in English and instantiated by hand. The very antithesis of reuse. Only in technical writing you can actually refer to some English description and thus reuse a pattern.
Manually duplicated functionality is bad. It beats having no functionality, but it is still far worse than truly reusable, finished design. You should try to find or make finished design rather than just duplicate things by hand. Maybe even switch to programming language which is expressive enough for such reusable solution, or if you're some real smart fella, invent your own programming language.

But if patterns are bad, what's about design pattern books, you might ask? Surely, those are written by people who know it all? [I don't think so, but well, I'll take that as true]

Thing is, the best selling programming books are not the technically best books. It is the book that makes you feel better about yourself that sells well. Design pattern books fail squarely in this category. You read such book, and you feel good and smart that you previously (re)invented many solutions to common problems; and it does not make you feel bad that you did not make your solutions truly reusable. And since it made you feel good you go on preaching, same as for bible or other religious meme.
Sure, the book can be very informative - after all it does contain list of solutions to common problems (which you might not even recognize as problems requiring a solution) - but those solutions are unfinished and are not reusable from programmer's perspective; you're better off with a library like boost that implements those things in reusable way.

The worst part is advice to new programmers, "do patterns". No. Use a language which is powerful enough to express solutions to common problems, so that those can be transformed directly to code; ideally, with libraries rich enough so that you won't have to reinvent wheels. Do pattern only when programming language does not permit you to reuse one solution.

To add real life example here. In my projects, I use "observers" a lot. Observer is something that watches a variable and is notified by changes. Long ago, my programs typically would have code that was observing keyboard state, other code that was observing textbox value, and so on. That's following observer pattern. When it started becoming a pattern, I made few template classes for data, events, and observers, and refactored most of the code, which allowed for greater flexibility and interoperability between components, as well as cut down the code size. I still use observers, but no longer as pattern - I just use observer and observable templates instead. [edit: by templates, I mean, specifically, C++ 'templates', a powerful language feature for writing that sort of stuff just once. Not some ctrl-c ctrl-v edit edit. If you're using C# you can use generics, if you're using lisp you can use "macros" (and do it in a zillion ways), and I heard even Java has generics now too]

Saturday, May 9, 2009

Wow, StumbleUpon is great.

Yesterday, I properly announced my game development for first time. Thousands hits on the website from stumbleupon, snowballing almost immediately.
Thanks for the nice response! It greatly boosted my confidence that the game is worth it, and improved the motivation. It is always a problem with such projects - after several months of work, when the work seems to go on and on, you invariably start losing confidence that you'll make it, start worrying about marketing, and so on.
It really looks like you could just work to make the product as good as possible these days, without wasting much effort on marketing, and just publish a page and people will come.

Just what the hell.

I normally do not post any political commentary here, but I'm going to make an exception. I was looking at various new anti-net neutrality legislations in Germany, said to be made "to help fight child pornography".
What the hell. You'd almost think they were lobbied into this by some 'child porn producers association', whom complained that online CP is hurting their profits. "Our determination to fight child pornography" my ass. What happened to determination to fight child abuse? It happens in real life, you need rather difficult investigation to identify the pedophile bastards, and you need to send in some police for arrest, as opposed to asking ISP to shut down something and afterwards pretending it didn't happen.
Censoring the Internet is just silly. It is like combating evidence for the crime(photos) rather than crime itself(child abuse). It is a distraction from real issue. It does not free any children from any basements.

Link to another dude's rant on same topic

Friday, May 8, 2009

New page on my website.

Added a page about my upcoming game.
Also added couple new levels to game, the nicest one looks like this:

Wednesday, May 6, 2009

More screenshots.

While manually fiddling with settings for environment generator for my upcoming game, I discovered some interesting-looking type of strange attractor.

It shows bifurcations right in itself. My understanding is that an roughly elliptical orbit drifts along the line, varying properties of the orbit itself, turning the chaos "on" and "off".

Also, public beta version of the game is coming along somewhere soon.

Monday, May 4, 2009


So, I've been working on sound support for my game. I couldn't find OpenAL EFX extension initializer, so I generated one myself using grep and awk. Here it is.
Use InitEFX() to initialize EFX extensions. You can also use HasEFX() in the code to check if EFX is supported (and has been initialized). After successful call to InitEFX() , you can use EFX functions which are listed in efx_proc_list.include.h (it declares function pointers in header by defining P macro, and defines and initializes them in C file) .