HandCash handles require trust and are insecure

September 22, 2018

The HandCash wallet has recently become a popular Bitcoin Cash wallet in large part thanks to their $handle concept. It’s basically a username you use instead of the normal Bitcoin Cash address, similar to how domain names abstract away IP addresses. For example instead of sending BCH to my address bitcoincash:qr6nm0wrkqata3klatmeuzqkjjvu725rkslzsahs8f you can instead send it to $treeman. Much more user friendly, right?

Third party trust

However there are problems. The $handle to address mapping is kept on the wallet developers’ own centralized servers. This means they could reroute all payments to any handle to some other address (unless the sending wallet has already cached the address).

This is a huge risk and central point of failure which in my opinion doesn’t belong a decentralized payment system. When you pay to a $handle you’re basically trusting them not to steal your payment and that their servers are secure. The whole point of a cryptocurrency is to remove reliance on a third party which is reintroduced by $handles.

They’ve said they’ll open up the handle API so other wallets could use them but we should instead come up with a decentralized username system. Or try to find other ways of communicating addresses instead of having to type them in manually. For example via NFC (which HandCash also has) or QR codes (which have been used since forever).

A side note on the trust issue: the HandCash wallet itself is also closed source. I would never use a closed source wallet to store my coins and neither should you.

No checksum or identification

What happens if you type $treman instead of $treeman? You will send your payment to someone else.

The Bitcoin Cash address has a checksum built in, similar to credit card numbers, social security numbers and virtually everything else you usually type in by hand. For good reason since it’s very common to fat finger and mess up. This isn’t something handles can provide.

Instead of checksums some systems they require confirmation with the receiver’s identification. For example Swish, a popular Swedish payment system, allows you to send a payment connected to a phone number. They then display the receiver’s name before you confirm the payment.

You could think it’s possible modify handles to do something similar. Maybe I could attach my name to $treeman so you know you’re sending it to me? But where Swish uses Sweden’s national identification system BankID Bitcoin Cash should be a permissionless and trustless system. There is nothing preventing someone from attaching my name to $treman and pretending to be me. The problem is similar to look-alike domains which is fundamentally hard to solve in a decentralized handles context. Compare it with normal addresses where it’s practically impossible to generate look-alike addresses.

Conclusion

While I like the idea of simplifying addresses and making them more user friendly there are large problems with HandCash handles. Having to trust a third party for handle resolution and them being less safe to type makes them much less secure than normal addresses and should only be used for small amounts.

Instead we could focus on alternatives to avoid having to type anything at all. For example QR codes, NFC or bluetooth could help bridge the gaps. The one example where I still find friction is when sending coins from my desktop wallet to my phone wallet which I work around by copying my address and saving a email draft and visually inspecting it before sending.


Posted in: Cryptocurrency.

Bitcoin Cash needs a Specification

July 30, 2018

I’m not a Bitcoin developer, I’m just some guy looking in from the outside. Lately there’s been a bunch of heated debates between the different Bitcoin Cash developer teams. Something that stood out from all the noise was problems with communications and a lack of specification for new proposals. Thinking about it there’s no specification at all.

A full specification

Since Satoshi released the Bitcoin protocol it’s been specified by the reference client and Bitcoin Core is still referred as such. It’s argued that this is by design as it would avoid accidental hard fork splits if a bug would deviate from the consensus rules. The drawback is that a flaw could bring the whole network down.

After the split to Bitcoin Cash there’s no longer a reference client. Instead there are several different clients that follows the consensus rules. This makes the network more durable as it’s less probable that a flaw could exploit all clients and instead the risk for an accidental hard fork is higher since clients may have small bugs in their consensus rules. Therefore a lot of importance needs to be placed on making sure the different clients use the same consensus rules and bugs there are discovered.

This makes the lack of a specification baffling. It’s easier to find higher level bugs in a specification and clients can focus on implementing the spec instead of trying to match their implementation with each others.

It also makes it harder to create new clients. Today the best option is to just fork the code of an existing implementation and modifying it. Of course this includes importing all technical debt and potentially crappy implementations to your client. It also constrains you to use C++, if you want to create a new highly-reliable client using Erlang then you have a bunch of reverse engineering and converting to do.

Therefore there should be a full specification of the Bitcoin Cash protocol. It should be so complete you should be able to create a new client with the spec as a reference without having to read the code of other implementations.

Improvement Proposals

It’s hard to develop software with a single team and harder to develop software with multiple teams. It’s much harder if improvements and changes doesn’t come with a specification and essential details can only be found by examining reference code implemented in an unfamiliar code base.

In the case of consensus changes this is very dangerous and small but important implementation details are easily missed. It not only makes the changes harder to implement for the different developer teams but it’s also much harder to do security reviews for. Importantly it makes discussions, feedbacks and reviews of the changes themselves difficult for the different developer teams.

Even optional features, like block relay networks, would benefit. Otherwise we’ll run into issues like some clients implementing Xthin and others implementing Compact blocks instead due to missing specs and design flaws. It would be much better if all clients would work together and utilize the same infrastructure.

Due to communication challenges between teams perhaps it might be time to collectively work on Bitcoin Cash Improvement Proposals, similar to the BIPS of Bitcoin Core, where features could be discussed? Naturally all proposals should require complete specs.

It’s of course not this straight forward in practice. There will always be discussions, both internal and external, in other channels but it’s still important to have a public process like this where feedback and scrutiny can be collected community wide.

It would be hugely beneficial for the development of Bitcoin Cash if the different developer teams could agree on some common process.


Posted in: Cryptocurrency.

OP_RETURN based tokens are fundamentally flawed

July 28, 2018

Two new Bitcoin Cash token solutions have recently been suggested:

Both are improvements over Tokeda as they allow permissionless transfers. However all commit to OP_RETURN which unfortunately is fundamentally flawed.

No true SPV wallet support

Despite claims of being “SPV friendly” true SPV wallets cannot validate the transactions. Instead they need choose between

  • Reduced SPV wallet security
  • Use light wallet based validation
  • Trusted 3rd parties validation

In some combination. The whole point of SPV is to gain transaction security without trust and without validating the whole (or parts of) the chain. This removes the bases of SPV security in some ways and to be frank calling them “SPV friendly” is disingenuous.

I am also confused over scaling concerns for on-chain proposals while they’re missing for proposals that suggest turning SPV wallets to light wallets. It’s frankly much, much easier to grow the blocksize and let the few miners and full nodes handle the brunt work than to require SPV wallets to collect, scan or store more data. Functioning SPV wallets is the key to (trustless) scaling in Bitcoin Cash and must be treated as such. Of course we must assume popular tokens may be used proportional to BCH so they have the same scaling requirements.

Alternative consensus model

Since OP_RETURN can contain both valid and invalid token transfers full nodes are used to keep track of all tokens. Put in another way instead of miner consensus we have consensus by full nodes. Or as reddit user insette eloquently put it:

muh full node IS the consensus

Why does it matter? Well what happens when nodes disagree? Naturally this problem is what Bitcoin originally solves with POW, often referred to as Nakamoto Consensus. For example if there’s a security issue or bug in one wallet/node implementation a silent consensus divergence can occur. Compared to a Bitcoin hard fork this may not be immediately evident.

How should upgrades be done? What if the issuer wants to reverse some transactions and releases their own OP_RETURN interpretation implementation? What if this happens to several tokens, how should we follow the consensus of everything at the same time? If a divergence does happen how can we decide which state is correct? “The issuer decides” isn’t good enough since two users may have had problems trading amongst themselves.

Not to mention malicious actors who can try to attack the network in various ways. Defrauding users or destabilizing the network is much easier with shaky consensus.

Fear of the Hard Fork

What is this, 2017? Arguments that a Bitcoin Cash token scheme should avoid consensus changes are exactly like the arguments that brought us SegWit instead of a regular blocksize increase. I thought we were past things like that.

Yes changes needs to be done carefully but let’s take a step back. We’re talking about foundations for tokens potentially worth a whole lot of money. Great care must be used regardless of solution. Suggesting to rush an off-chain solution because a hard fork one can’t be ready this autumn is disingenuous and irresponsible.

Conclusion

Work on these proposals probably started a while ago and people are understandably reluctant to set them aside, nobody wants their work to be wasted (I don’t believe it is but it may feel like it if it’s not adopted). Yet I think token schemes based on OP_RETURN is a dead end and we should focus our energy on miner validated and fully SPV capable tokens. Thus far only GROUP fits the bill.

To once again quote Counterparty contributor insette:

But I’m just saying, there are technical reasons why OP_RETURN protocols suck, and there are also technical reasons why Ethereum doesn’t suck.


Posted in: Cryptocurrency.

Bitcoin's security isn't binary

July 28, 2018

I’d like to address a misconception that’s at the core in many Bitcoin discussions lately: Bitcoin’s security isn’t binary. In fact security in general isn’t black and white. It’s a trade-off being secure enough for your threat model vs the cost and feasibility of your protection.

Consider having your front door locked for example. You could consider your home secure if your door is locked and insecure if it’s open but that doesn’t say what you’re secure against. It’s missing context. It might prevent opportunistic thefts but a more determined attacker could instead break a window, pick the lock of the door or simply break down the door itself. Maybe you live in a neighborhood with lots of thefts and you might want an alarm system, a dog or iron bars over your windows.

At the same time it might not be practical to go all out and get the best protection possible. You might not want to give up your life and move to a bunker where your friends can’t visit and a private security force may be slightly too expensive.

In practice locking your door is good enough for many people. Some people do more and there are many options for them including private security for celebrities. That’s okay since threat models and feeling of security is different for everyone. This is the case for Bitcoin as well. Some sell houses for Bitcoin and have high security requirements while others sell coffee and have less. Unfortunately people, including developers, don’t acknowledge that Bitcoin is more fine grained than “secure” and “insecure”.

Double spend protection & Confirmations

An essential security feature of Bitcoin is double spend protection. It solves it using Proof-of-Work where each block containing a set of transactions is expensive to make and each block build on the previous block. If you want to reverse a transaction to double spend it you need to redo the work of all blocks until you find the transaction. This makes a transaction deeper in the blockchain, with more confirmations, more secure than one with less confirmations since an attacker would need more work to reverse it.

This maps well to different security requirements. One confirmation is good enough for small value goods but exchanges might want to wait six confirmations instead, which has been the default recommendation for the paranoid a while.

A double spend attack was used in the wild to reverse transactions 22 blocks deep in Bitcoin Gold in May. Bitcoin isn’t as easily attacked since there’s not enough mining power mining other coins that can simply be temporarily rerouted for the attack but it demonstrates the attack nicely.

At the time of writing a miner is rewarded 12.5 BTC for each block found, approximately $80 000. For an attack to be worth it the double spends need to outweigh the costs of leaving out potential mining profits. This makes all but very large sums safe enough to accept with a single confirmation.

If you want to learn more I heartily recommend the whitepaper which is quite easy to read.

0-conf

Transactions without a single confirmation, abbreviated 0-conf, by definition aren’t included in the blockchain and don’t get the double spend protection confirmed transactions do. That makes them completely insecure and should never be used, or that’s what some opponents tell you.

Firstly all physical goods purchased online have an inherent delivery delay. The worst that can happen if you accept a 0-conf transaction that gets double spent is you have to cancel the order. Instead if you wait for a confirmation, which on average takes 10 min but might be up to an hour, you introduce an annoying wait time for your customers.

But what’s really annoying is when you want to buy things in physical stores. It might be okay to wait for a confirmation email for some online purchases but it’s completely unacceptable to have to wait 10-60 min for your coffee until your transaction is confirmed (this example is always brought up). Someone could indeed double spend and steal a coffee. That’s bad but it’s actually not too different from what already have today. VISA allows charge backs up to 120 days and charge back fraud is a common problem for merchants. If you accept cash you risk getting counterfeit bills and you always run the risk of plain old shopliftig.

Some claim it’s very easy to double spend 0-conf. Here’s a tweet from Core developer Peter Todd:

Why opt-in RBF doesn’t change zeroconf security; its already trivial to send an easy to doublespend tx.

That’s only true if you naively accept 0-conf. There are strategies you can use to minimize the risk of a double spend which defeats trivial double spend scripts Peter is referring to. For example:

  • Silently sample random nodes to increase the confidence that the transaction has been propagated through the network
  • Wait a few seconds and look for double spends
  • Require a fee that’s probable to be accepted in the next block
  • Use external identification like security cameras or ID cards to dissuade fraud
  • For high risk transactions instead wait for confirmations

Research on how to improve 0-conf is ongoing. See for example:

With these heuristics accepting 0-conf is a viable alternative for some merchants. It’s not completely secure but it’s not completely insecure either. After all the competition isn’t much better and the benefits are huge, waiting a couple of seconds vs 10 min. It’s also completely up to the merchant’s discretion if she wants to use it or not.

Despite this Bitcoin Core developers have treated 0-conf as insecure and have adopted policies that actively makes it worse. Full blocks, where all transactions compete in fees to be included, makes 0-conf unreliable because fees cannot be predicted with confidence. In December fees grew to $60 but it simply wasn’t a priority to increase the block size so one can assume full blocks fits the developers’ plan for Bitcoin and 0-conf does not.

They also adopted RBF in the Bitcoin reference client Bitcoin Core. It’s a convenient method to alter the fee and outputs of an unconfirmed transaction. As it’s implemented in the reference client miners and wallets naturally supports it. In other words they made double spending more user friendly than before instead of adopting policies that would make 0-conf more secure “because it’s already insecure”.

SPV & full nodes

Jonald Fyookball wrote a good article on SPV security, I suggest you read it if you haven’t already.

In short an SPV wallet avoids the need to download and store the whole blockchain just to be able to send and receive transactions. Basically all mobile wallets work this way. An SPV wallet is indeed less secure than a full node but it’s not completely insecure (again, security is on a spectrum).

What an SPV wallet does for you:

  • Ensures your transactions are in a block
  • It tracks the Proof-of-Work of the blocks, i.e. follows the longest chain

What it doesn’t do for you:

  • Validates transactions inside a block

This means a miner can create a block with transactions that sends any number of coins from any address. That sounds bad, but realize that:

  1. You can only fool the SPV wallet if you provide the longest chain
  2. The miner must pay the POW cost of creating the block(s)

So to fool you the miner must, at least temporarily, outproduce the rest of the network. This isn’t possible in the long run if the core security assumption of Bitcoin holds: that a majority of miners are honest.

But it’s theoretically possible and thus businesses like exchanges and payment processors would still want full nodes for the extra security. Satoshi agrees:

Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification.

Most SPV users are normal people who mostly use wallets to pay for things (SPV wallets are just as secure for the sender). If everyone had to download the whole blockchain just to use Bitcoin on the phone then I’m afraid Bitcoin wouldn’t be practical as a payment system at all.

Despite SPV wallets being quite secure running a full node is presented as a requirement for everyone. Core developer Luke-Jr doesn’t even consider SPV wallet users “actual users”:

Running a full node makes you an actual Bitcoin user

Here’s Luke-Jr’s response to the question “Should I use a full node as my main wallet?” on the bitcoin stackexchange:

If you’re not using a full node for your wallet, you’re not using Bitcoin, and won’t get the benefits Bitcoin provides over fiat currency. You might as well be using PayPal in that case, except with a random anonymous person in place of a regulated company…

So, always use a full node.

That everyone should use a full node is used as an argument against raising the 1MB block size limit because there may be some people somewhere who can’t store or download the data required. Despite this making Bitcoin unable to scale past 7 tx/s and fees of $60 pricing out the very people who have the most difficulty running full nodes.

Hard forks & SegWit

A common defense in these discussions is “But always prioritizing security over all else is good”. Except it’s not consistently prioritized.

I bring you the case of SegWit, a solution to the transaction malleability problem. Jaqen Hash’ghar wrote a great article (2016) of the whole ordeal. I recommend it although it’s a bit long.

To make a long story short SegWit was deployed as a soft fork instead of a hard fork. A hard fork would have been cleaner but it requires all nodes to upgrade and people must agree with the change otherwise the coin would have split into multiple coins (like the Bitcoin and Bitcoin Cash hard fork split). This was deemed extremely unwanted since consensus would be hard to get (maybe there’s some parallels to the black and white security approach but that’s not the point I’m trying to make).

Instead a soft fork circumvents the problem by allowing nodes to continue working as before except they won’t recognize the new features. This was used to implement SegWit as a hack where non-upgraded nodes will view segwit transactions as anyone-can-spend transactions.

Peter R gave a good talk of why this is a theoretical security regression (slides):

This regression was pointed out by others like Peter Todd:

In its current form, segregated witnesses makes validationless mining easier and more profitable than the status quo, particularly as transaction fees increase in relevance.

Granted it’s only a theoretical weakness that probably won’t cause any problems, but it’s a clear example of a binary thought process that in this case doesn’t prioritize security.

Conclusion

There are many examples where features of Bitcoin are discarded as “insecure” without a nuanced discussion about risks and rewards. This binary thinking is actively harmful and must be called out.


Posted in: Cryptocurrency.

2017 in Review

July 28, 2018

In contrast to previous years I haven’t kept up with the blog. For good reason I’d say since we got a child in October! It really alters your perspectives and other things suddenly feel a little less important and of course there’s less time to do other stuff.

A little late and incomplete perhaps but at least I’ll try to have an unbroken streak of reviews.

2017 Non-Geek Achievements

  1. Got a kid!
  2. Wrote 6 blog posts.

2017 Geek Achievements

  1. Picked my first lock.
  2. Studied a little Korean (haphazardly…).

2016 Failures

  1. No hobby programming.
  2. Didn’t read enough books.

Plans for 2018

  1. Take care of Veronica and Isidor.
  2. Parental leave.
  3. Move to a house in another part of the country.
  4. Write some more.
  5. Read some more.
  6. Train some more.

Posted in: Yearly Review.

Top ten activities that make me happy

June 24, 2017

Recently we finally moved out of our old apartment and into a new larger apartment and it’s awesome. It’s no more than a year old and feels very fresh compared to the old one. It’s also larger with an extra room, dishwasher (!) and closer to the city centrum and everything is basically better. The move also showed me just how easy it is to collect stuff and things; I had a lot of things hidden away in a small storage room/closet in the old apartment.

Now I like to buy stuff, I like to collect things and I love the feeling of opening packages and the smell of “new”. But when looking at the amount of forgotten stuff I have you’ve got to wonder: how much happiness do you get from the stuff? And what actually makes you happy?

This is what I believe (rightfully or wrongly) to be the top ten activities that makes me happy, in no particular order:

  • Do stuff with Veronica (walk, talk, …)
  • A calm regular evening with Veronica
  • Training (currently BJJ and power lifting)
  • Play games (boardgames, cardgames or computer games)
  • Hang out with friends
  • Make things
  • Solve problems
  • Eat and enjoy good food and drinks
  • Read books, manga or other stories
  • Watch quality tv series, movies or other videos (includes streams of different kinds)

These activities notably do not require a large amount of stuff or money. Maybe it’s a good idea to prioritize these things instead of collecting more stuff.


Posted in: Life Hacking, Goals.

Habits to start

March 9, 2017

I haven’t been feeling quite as forward or as energetic lately. There are no set plans, habits or goals for this spring and I don’t have a clear vision of what to do currently but it also feels… fine? Maybe I will cruise in a lower gear for a while and rev up when my mood changes. In the meanwhile I have habits I’d like to cultivate sometime.

Daily Habits

  • Headspace either on mornings or evenings
  • Read a book ~15-min before sleep
  • Flashcards with Anki for example
  • Listen to talk to me in korean podcast
  • Cold shower

Weekly Habits

  • Study BJJ videos/instuctionals
  • Study korean (workbooks etc)
  • Hobby project a little every weekend

Posted in: Life Hacking, Goals.

(Fake) Bittman Chinese Chicken

January 23, 2017

Lesson 6! I went to Cervera and bought a holder to allow me to steam chicken.

I broke the recipe on multiple fronts: chicken wings instead of chicken breasts, mushroom soy instead of tamarin, roman salad instead of baby bok choi (where the heck do you find that…) and I even forgot to season with salt and lemon… But the chicken itself turned out really well. Still got a 7 from both me and Veronica.

Next time I will use actual chicken breasts and I won’t forget the salt. As usual I will include something more, more salad perhaps.


Posted in: The 4-Hour Chef, Food.

Zucchini Crabcakes

January 22, 2017

With a tiny bit more planning I made a dinner out the lessons 4 and 5 as the crabcakes were only supposed to be an appetizer:

Crabcakes: Surprisingly delicious. Both me and Veronica gives them a 7.
Zucchini: While I thought they passed Veronica said “Zucchini is not my thing” and promptly gave it a 2. Yikes.


Posted in: The 4-Hour Chef, Food.

Coconut Cauliflower Curry Mash

January 17, 2017

It’s time for lesson 3. I made the mistake of not planning for something to augment the mash with, but a simple salad had to do:

It was okay. Girlfriend gave it 5/10 and I gave it a 6/10, a higher rating would be possible if there was something else to eat it with.


Posted in: The 4-Hour Chef, Food.

The 4-Hour Chef: Scrambled Eggs

January 14, 2017

I’ve been listening to The Tim Ferriss Show a while now and he and his guests often inspire me to make changes and start doing new things. I got introduced to Josh Waitzkin’s excellent The Art of Learning and the meta skill of learning has since then fascinated me. So when I got wind of Tim’s book about learning (and coincidentally also about cooking) I managed to get it for Christmas.

The 4-Hour Chef contains a framework for learning a new skill fast. Exactly what that entails, or if it even works, I might get into another time. For now I will focus on doing some of the cooking lessons in the book. I will do the basic lessons and then reevaluate if I should continue, if I even make it that far. Anyway he suggests to photograph and document the food you make and so I present to you the Scrambled Eggs I made this morning:

It was actually very good. Seasoned with Onion (should have been garlic!), Cumin and Mint.


Posted in: The 4-Hour Chef, Food.

2016 Read Books

December 27, 2016

Yeah so I managed to not read a single fiction book this year. To compensate and make myself feel better I’ll add in some new mangas I’ve read, but I may may have missed some.

Fiction

Crickets

Non-Fiction

  1. Getting to Yes
  2. Relax into Stretch
  3. Thinking, Fast and Slow
  4. 59 seconds
  5. The Hard Thing About Hard Things
  6. The Design of Everyday Things
  7. Winning Through Intimidation
  8. Programming Phoenix

Manga

  1. Death Note
    Reread.
  2. Ghost in the Shell
  3. Tokyo Ghoul
  4. The Promised Neverland
    Might be my current favourite? Simply amazing.
  5. Kingdom
    Reread.
  6. Grand Blue
  7. Onani Master Kurosawa
    Don’t let the title put you off, it’s a surprisingly deep manga.
  8. One Punch Man
  9. My Hero Academia
  10. Tokyo Ghoul and Tokyo Ghoul:re

Posted in: Read Books.

2016 in Review

December 27, 2016

See the previous reviews.

2016 Geek Achievements

  1. Placed 2nd in Linköping’s Regional in Netrunner.
  2. Won a couple of smaller Netrunner tournaments.
  3. Got Veronica to play Game of Thrones with us. She beat us and she loved it!
  4. Programmed a little bit of Elixir and a tiny bit of front end web development.
  5. Built a custom keyboard.

2016 Non-Geek Achievements

  1. Got engaged.
  2. Achieved 1-Dan in ITF Taekwon-do.
  3. Started training Brazilian Jiu-Jitsu with Veronica.
  4. Got in to the habit of doing powerlifting 2-3 times a week.
  5. Read 8 books and 10 mangas.
  6. Wrote 10 blog posts.
  7. Played a bunch of Pandemic with Veronica and others. Very good co-op boardgame.
  8. Got other boardgames, among others: Food Chain Magnate and Terraforming Mars.
  9. Went to Prague with Veronica, very nice vacation.

2015 Failures

  1. Didn’t read enough books.
  2. Practically no hobby programming.

Plans for 2016

  1. Take care of Veronica.
  2. Go on vacation with Veonica, possibly a couple of smaller ones.
  3. Learn how to cook.
  4. Learn more korean.
  5. Train more.
  6. Prioritize personal develoment.

Posted in: Yearly Review.

Autumn 2016 Goals Retrospective

December 17, 2016

Earlier this year I set out some goals I wanted to accomplish this autumn. I accomplished a few things and I failed others.

Exercise and Health

  1. Eat more strict LCHF for 1 month ok
  2. Train BJJ or MMA for 1 month ok
  3. 2 months of lifting at the gym ok
  4. Powerlifting
    • 100 kg deadlift 5x5 ok
    • 75 kg bench 5x5 failed
    • 85 kg squat 5x5 ok
  5. Side split with both feet besides the yoga mat failed

Hobby Projects

  1. Build a 3x3 LED cube ok
  2. Go through Programming Phoenix and Programming Elixir partly
  3. Construct a custom keyboard ok
  4. Create a usable budgeting tool on par with my currently used system failed

The only habits I successfully started was to take daily D-vitamine supplements and I went to the gym three times a week, on average.

Lessons learned

While I did accomplish a few things I did not complete them all. I failed the bench press as I overestimated how much I could take, which is understandable as I didn’t really know where my baseline were. In the future I would need to get that before throwing numbers around. I didn’t increase the side split as I never got in the habit of proper stretching, maybe because I wished to but I didn’t really want to achieve it. The hobby programming again got left behind as I just didn’t have the energy left after work to motivate myself.

I guess I will try to do something similar next year, but then be more selective of my goals and focus more on the habits, the process, than of the goals themselves. The ones I did accomplish were easier and had a clear path to victory (go train X times).

As far as the habits go I never outlined a strategy for actually starting them. It goes without saying that I would fail almost all of them. I’m currently trying to start meditating via Headspace and the strategy I have now is focus on one goal at a time and when I’ve accomplished it 21 times I consider it ingrained and I can focus on the next one.


Posted in: Life Hacking, Goals, Habits.

Doing some online Personality tests

December 11, 2016

For some reason I’ve done a couple of personality tests the last month, mostly to satisfy my own curiosity.

The Braverman Test

Inspired by Charles Poliquin’s visit on The Tim Ferriss Show I tried out the Braverman test to determine my neurotransmitter type. The point Charles makes is that the type of training most suited to you is determined by your neurotransmitter type, which can be found using the Braverman test.

This is my result:

  Dominant Nature     Deficiencies
Dopamine:       28          2
Acetylcholine:  22          3
GABA:           28         11
Serotonin:      20          8

I couldn’t find any good references to what the ranges mean but I think it means I have a balanced dominant nature and slight GABA and Serotonin deficiencies. According to this article I’m an Earth type:

The earth-type athlete has a balanced neurotransmitter profile — they are stable and consistent. These are the guys and gals that show up to the hill every day ready to go. They are well-rounded athletes and thrive on stability, consistency, and routine. They are very sensitive to variations in routine; and if they partied too hard the night prior, you will hear about it and their performance will suffer.

While earth types can stay on the bike or board for a full season without needing to switch things up, they need to vary intensity and volume in their approach. This means going on longer, mellower rides for a couple weeks and then going on shorter, balls-to-the-wall ventures for a little while, striking a balance that won’t lead them to burn out. Too much intensity and volume at the same time will lead to straight exhaustion.

Which seems to match my experience well. Going forward I will continue with the same routine focusing on 4 big exercises (squat/bench/chins/deadlift) but I will have a 3-4 week period focusing on volume followed by 3-4 weeks focusing on heavier more intense training.

What Charles says about Earth types also rhymes well. Especially the part about cold and sleep:

If you overtrain an Earth person, they’ll come down with a cold. They are generally very particular about the quality and quantity of their sleep. They are the ones who will piss and moan during a squat workout about missing an hour of sleep.

ADHD

My girlfriend Veronica came home one day from work after a seminar about ADHD. At first she was drawing parallels to her students but it ended with her drawing parallels to me. I’ve had this imagine in my mind about a kid with ADHD who can’t control what to say, can never be still and acting out but that’s not necessarily true.

I tried to fill out a test (Swedish) and reading about ADHD online. It seems everything fits really well, for example:

  • Hard to finish tasks.
  • Difficulty to remember appointments, meetings and other things. I’m constantly looking for my slippers, keys and other stuff.
  • Avoid starting a task requiring a lot of thought. I’m always procrastinating.
  • I can’t sit still without touching, poking or working with something. It’s even really hard to watch a TV show (even if I love it) without doing something at the same time. This is a really big problem for me.
  • Constantly feeling overactive.
  • I’ve always had problems doing careless mistakes, especially when doing “easy” or “boring” tasks.
  • Hard to keep concentration on people when they’re speaking.
  • I’m sensitive sound, overly so.
  • Problems falling to sleep, it’s hard to relax even when I’m tired.

And many other…

Now it doesn’t really mean anything. It won’t change who I am or anything but it certainly explains a lot about why I do things and why I’m uncomfortable with things others seem to have no problem with. In the end it’s opened my eyes a bit and made me think about what I do more which is great.

Asperger

After talking about ADHD at work we naturally discussed other disorders like psycopath and asperger. I’m fairly sure I’m not a psycopath, I do feel empathy and remorse and I don’t think I’m especially egoistic nor exhibit overly antisocial behavior, but I may be a bit further on the asperger spectra.

For fun I tried out an aspergers test and I scored a 28. According to the site that means:

26-31 gives a borderline indication of an autism spectrum disorder. It is also possible to have aspergers or mild autism within this range.

As I don’t recognize myself, and Veronica agrees, I don’t think I have autism or asperger but I still scored higher than I was expecting.


Posted in: Life.

Building the GH60

October 12, 2016

I’ve finally completed my first custom made keyboard. I’m still missing stabilizers and some smaller screws to hold it all together but I’ve been using it the last days and I thought I’d share.

The hardware

Several years ago I joined the geekhack forum and I joined in a few group buys. I ordered some cool keycaps and I also entered the GH60 Group Buy which sold plates, stabilizers, PCBs and switches so you can build a more minimalistic keyboard. Unfortunately the group buy crashed and burned and it’s long overdue with the creators vanishing and leaving the group buy with not enough money. I did get my two PCBs and my switches but I’m still waiting for my plates and stabilizers… Which may never arrive.

I did source a 60% plate from massdrop and I used Cherry MX Green switches which is a harder clicky cherry variant.

Pictures

My beautiful solder job:

You can see the plate mashed between the switches and the PCB:

A full view of the switches from the top:

The beautiful keycaps:

The white doesn’t shine through at all when you’re at the keybord, the photo isn’t representative.

Firmware

I tried out both the tmk_keyboard and qmk_firmware for my keyboard. qmk is basically the same as tmk but with extended features (which I don’t think I’m currently using?).

The code is available on github: https://github.com/treeman/qmk_firmware

Dependencies:

dfu-programmer
avr-binutils
avr-gcc
avr-libc

And then to flash the firmware press the reset button on the PCB and do:

make
dfu-programmer atmega32u4 erase
dfu-programmer atmega32u4 flash <gh60_layout.hex>
dfu-programmer atmega32u4 start

I’m currently using a fairly standard qwerty layout and I’ve moved down Escape in place of Caps Lock as I use Vim at a daily basis. I’ve also included a function key which if pressed will allow F1-F12 and arrow keys. Holding down Caps Lock (now Escape) also works as a function key. Holding caps lock works remarkably well, I can see why many Emacs users remap it to Ctrl.

Then I use the rightmost modifiers, which I’ve never even pressed?, to set up a numpad layer and a mouse layer. The mouse layer doesn’t work well however… Not enough control over the movement sadly.

#define BASE 0
#define FUN 1
#define NUMPAD 2
#define MOUSE 3

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    /* 0: Default layer
     * ,-----------------------------------------------------------.
     * |  `|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|BSP|DEL|
     * |-----------------------------------------------------------|
     * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|     |
     * |------------------------------------------------------|    |
     * |Esc/Fn|  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|  \|Ret |
     * |-----------------------------------------------------------|
     * |Shif|   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /| Fn|Shift |
     * |-----------------------------------------------------------|
     * |Ctrl|Gui |Alt |          Space         |Alt |    |Mous|NPad|
     * `-----------------------------------------------------------'
     */
    KEYMAP_HIETALA(
        GRV, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSPC, DELETE, \
        TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,            \
        FN4, A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,BSLS,ENT,        \
        LSFT,NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,FN0, RSFT,       \
        LCTL,LGUI,LALT,             SPC,                  RALT,NO,  FN3,  FN1),
    /* 1: Function layer
     * ,-----------------------------------------------------------.
     * |Lr0| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|   |   |
     * |-----------------------------------------------------------|
     * |     |   | Up|   |   |   |Hom|PgD|PgU|End|PgU|   |   |     |
     * |------------------------------------------------------|    |
     * |      |Lef|Dow|Rig|   |   |Lef|Dow|Up |Rig|PgD|   |   |    |
     * |-----------------------------------------------------------|
     * |    |   |   |   |   |   |   |Hom|PgD|PgU|End|   |   |      |
     * |-----------------------------------------------------------|
     * |    |    |    |                        |    |    |    |    |
     * `-----------------------------------------------------------'
     */
    KEYMAP_HIETALA(
        FN2,F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, TRNS,TRNS, \
        TRNS,PGDN,UP,  PGUP,TRNS,TRNS,HOME,PGDN,PGUP,END ,PGUP,TRNS,TRNS,           \
        TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,LEFT,DOWN,UP  ,RGHT,PGDN,TRNS,TRNS,TRNS,      \
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,HOME,PGDN,PGUP,END ,TRNS,TRNS,TRNS,TRNS,      \
        TRNS,TRNS,TRNS,               TRNS,               TRNS,TRNS,TRNS,TRNS),
    /* 2: Numpad
     * ,-----------------------------------------------------------.
     * |Lr0|   |   |   |   |   |   |   |  *|  *|  *|  -|  +|   |   |
     * |-----------------------------------------------------------|
     * |     |   |   |   |   |   |  -|  7|  8|  9|  +|  +|   |     |
     * |------------------------------------------------------|    |
     * |      |   |   |   |   |   |  .|  4|  5|  6|  ,|  ,|  /|    |
     * |-----------------------------------------------------------|
     * |    |   |   |   |   |   |   |  0|  1|  2|  3|  .|   |KP Ent|
     * |-----------------------------------------------------------|
     * |    |    |    |                        |NLCK|    |    |    |
     * `-----------------------------------------------------------'
     */
    KEYMAP_HIETALA(
        FN2, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PAST,PAST,PAST,PMNS,PPLS,TRNS,TRNS, \
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,P7  ,P8,  P9,  PPLS,PPLS,TRNS,           \
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PDOT,P4  ,P5,  P6,  COMM,COMM,PSLS,TRNS,      \
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,P0  ,P1,  P2,  P3,  PDOT,TRNS,PENT,      \
        TRNS,TRNS,TRNS,               TRNS,               NLCK,TRNS,TRNS,TRNS),
    /* 3: Mouse mode
     * ,-----------------------------------------------------------.
     * |Lr0|   |   |   |   |   |   |   |   |   |   |   |   |   |   |
     * |-----------------------------------------------------------|
     * |     |   |MUp|   |   |   |   |   |   |   |   |   |   |     |
     * |------------------------------------------------------|    |
     * |      |MLe|MDn|MRh|   |   |MLe|MDn|MUp|MRg|   |   |   |Bt1 |
     * |-----------------------------------------------------------|
     * |    |   |   |   |   |   |   |ScL|ScD|ScU|ScR|   |   |  Bt2 |
     * |-----------------------------------------------------------|
     * |    |    |    |          Bt1           |    |    |    |    |
     * `-----------------------------------------------------------'
     */
    KEYMAP_HIETALA(
        FN2 ,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
        TRNS,TRNS,MS_U,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,            \
        TRNS,MS_L,MS_D,MS_R,TRNS,TRNS,MS_L,MS_D,MS_U,MS_R,TRNS,TRNS,TRNS,BTN1,        \
        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,WH_L,WH_D,WH_U,WH_R,TRNS,TRNS,BTN2,       \
        TRNS,TRNS,TRNS,               BTN1,               TRNS,TRNS,TRNS,TRNS),
};

const uint16_t PROGMEM fn_actions[] = {
    [0] = ACTION_LAYER_TAP_TOGGLE(FUN), // Fn momentary or toggling.
    [1] = ACTION_LAYER_TOGGLE(NUMPAD), // Toggle numpad.
    [2] = ACTION_LAYER_SET(0, ON_BOTH), // Back to base layer, safety escape.
    [3] = ACTION_LAYER_TOGGLE(MOUSE), // Toggle mouse layer.
    [4] = ACTION_LAYER_TAP(FUN, KC_ESC), // On hold trigger Fn overlay. On tap act as esc.
};

Naturally things will change but this is what I’m rolling with for now.


Posted in: Keyboard, Computer, Goals.

Weekend Tournaments

September 6, 2016

This weekend was filled by playing cards. On Saturday I hosted a small Game of Thrones tournament and on Sunday the local Netrunner community hosted a small summer kit tournament.

Game of Thrones

We’ve had a similar tournament once before when me and my girlfriend invited two of our friends and had a small 4 person tournament. The last time I was the only one with any cards and I had made 4 decks which we then drafted. Quite surprising to us my girlfriend Veronica the tournament and even admitted it was a fun experience. This time one of our friends Filip and I had practiced a bit and we even went to a regionals before while Veronica hadn’t played at all since the last tournament and the other friend barely knew the rules.

The tournament was a success and we had a good time. I managed to eek out a win against Filip but extremely surprisingly Veronica managed to beat us all once again. I’m still in shock and I’m still not sure how it all happened… Again. But I’m very proud of her of course! And this time she exclaimed how fun it all was, several times during the day! I’m sure it was fun killing, burning and killing us some more

Netrunner

Before this tournament I and after my latest tournament report I actually had two more tournaments; the regionals in Linköping and the ANRPC finals I qualified for. I was going to and actually stated a writeup but I was kind of tired of card gaming in general at that time. I simply had played too much. In the regionals I just barely made the cut and somehow ended up 2nd. For the ANRPC finals I did the classic error of taking two completely new decks and predictably crashed and burned. I did log the runner and corp decks for the regionals but didn’t for ANRPC, they were a classic Dumblefork and some sort of rush Argus.

This small 6 person tournament was the perfect thing for me to reinvigorate my interest in netrunner. I had a great time.

With MWL destroying the runner love of my life and with asset spam being rampant I was forced to choose a new runner. CtM punished me hard on jinteki.net so I decided to pack the hate. I was very close to choosing a killing corp but I decided to try to change my corp deck which went quite well during the regionals.

I did a ton of mistakes when I played and especially my corp wasn’t feeling all too great but somehow I managed to win the tournament! We also streamed the games I think 3 out of my 5 games got streamed. They should be uploaded to Youtube in time.


A small LED Cube

August 26, 2016

As a follow up of my hobby project goals this autumn I have now completed the smallest goal there. I got started a little with soldering by constructing a small 3x3x3 LED cube.

Although extremely hard to see in this picture it actually worked without a hitch! It’s not the prettiest job ever but it was quite meditative to work with actually. Now I’m just waiting for the plate to arrive so I can start working on my keyboard.

Oh and the reward for accomplishing this subgoal was to go to black belt academy, a Taekwon-do training camp last week. I like the idea of having clear goals and rewards to work against.


Posted in: Life Hacking, Goals, Hardware.

Goals for Autumn 2016

August 12, 2016

Every once and a while I like to redo my priorities and set new goals for myself.

I recently read the book 59 seconds which among other things presented a way of structuring goals I will try out. In short you should divide your main goal into 5 subgoals with a date of completion, a reward upon completion and you should specify why and how you can accomplish it. You should describe the main goal and also list the benefits for completing the goal and for best effect you should also go public with your goals.

Exercise and Health

The goal is get stronger, get more energy and in general get a more healthy lifestyle.

  1. Eat more strict LCHF for 1 month

    I can achieve this because I’ve done it before. The problems are when there are unhealthy snacks available but focusing on how bad I feel after giving in. Focusing on better alternatives like dark chocolate, wine or various meet will help.

    This will be achieved by: Aug 28
    The reward will be: Massage

  2. Train BJJ or MMA for 1 month

    Me and my girlfriend are planning to try out BJJ together. If she likes it continuing with it should be easy for me to continue training. If not I will continue with either BJJ or MMA as I’m pretty hyped to explore some other martial arts styles which hopefully will offset the potential motivation problem.

    This will be achieved by: Oct 2
    The reward will be: Gi or training gear

  3. 2 months of lifting at the gym

    I will go to the gym 3 times a week during lunch and buy salad next door for lunch and I will train for ~45 min. It’s something I’ve done before and I felt good about it. The biggest problem here is to get in the habit and after that it should run smoothly.

    This will be achieved by: Oct 30
    The reward will be: New training shorts

  4. 100 kg deadlift 5x5, 75 kg bench 5x5, 85 kg squat 5x5

    I have reached comparable results before and with dedicated training I should be able to go beyond previous results. By getting in the habit of going to the gym reaching these weights and reps should be straightforward. One problem is that I might be planning to train too much but by not training to failure but for more energy and focusing more on consistency should alleviate that issue. Another one is that my grip is very weak after the injury but even before that. It can be combated with the grip trainer at work.

    This will be achieved by: Nov 27
    The reward will be: undecided

  5. Side split with both feet besides the yoga mat

    I’ve had a problem with my groin for who knows how many years and it’s time toget a routine to combat it. The theory I have now is that I’ve been far too eager and I’ve started training too hard too fast. By focusing less on the high kicks in Taekwon-do and training other styles more and by not pushing myself during the stretching sessions the pain should recede slowly. The plan is to use limbering or very light stretching every day and once a week focus solely on stretching. Here again the issue is to get in the habit but I would really love to be able to train fully without pain. The goal is just a slight increase in flexibility which I’m using to get a concrete goal to aim for.

    This will be achieved by: Dec 25
    The reward will be: undecided

Benefits

  1. Happier about myself.
  2. More energy in my life.
  3. Remove the dissatisfaction I’ve had the last years about not having exercised enough.

Hobby Projects

The goal is to get going with some hobby projects.

  1. Build a 3x3 LED cube.

    The goal is to get started with soldering. Should be a small project and an hour here or there should be enough to see it through.

    This will be achieved by: Aug 10
    The reward will be: Taekwon-do training camp

  2. Go through Programming Phoenix and Programming Elixir

    I think I want to learn more about web development and I’ve heard a ton of good stuff about Phoenix and Elixir. I’ve had a lot of problems completing sideprojects before but going through books hasn’t been that big of an issue.

    This will be achieved by: Sep 15
    The reward will be: New wallet

  3. Construct a custom keyboard

    Too long have I had two GH60 PCB and a bunch of keycaps lying around. I’m still missing a plate but with that (and possibly stabilizers) I have all that it takes to finalize it. The soldering and the assembly shouldn’t be too though and a custom keyboard is something I’ve wanted for a long time. I’ve had problems finishing side projects but if I get all parts I should be able to at least start the project. With it started and with all parts on my desk I should be forced to finish it.

    This will be achieved by: Nov 30
    The reward will be: Netrunner world championship decks

  4. Create a usable budgeting tool on par with my currently used system

    I’ve been using a fairly crap spreadsheet to track my expenses and loosely track my investments into cryptocurrencies and I had an idea to create a website to track them and to budget for the upcoming months. It serves a practical use but it’s also an excuse for me to learn Phoenix, Elixir and general web development. That’s a fairly powerful motivator but it may not be enough. By making it an explicit goal and a deadline hopefully I will finish this one. The danger here is that the deadline is too far away and that I don’t prioritize the project.

    This will be achieved by: Dec 20
    The reward wil be: Extra investment in cryptocurrencies

Benefits

  1. Expanded knowledge is good both for my profession and to satisfy my own curiosity.
  2. The satisfaction of completing projects and creating things is wonderful.
  3. I’ve been wanting a custom made keyboard for a long time.

Habits to start

I’ve been using Habitica (previously HabitRPG) to help establish habits and it’s been working wonderfully well for me when I’ve used it. For a couple of months I’ve had a break from it but I will try to use it again to try to establish a few habits.

Daily habits

  1. Exploratory limbering once a day
  2. Cold shower once a day
  3. Grip strength every day at work
  4. Read a book 15 min every day (before sleep)
  5. Anki flashcards every day (occassional refill)
  6. Take D-vitamin supplements

Weekly habits

  1. Gym 3x a week
  2. Martial arts (BJJ/MMA) 2x a week
  3. Isometric stretch once a week

Posted in: Life Hacking, Goals, Habits.

Slackware installation notes

July 29, 2016

It seems like it’s been a yearly recurrence reinstalling slackware from scratch. This time it happened during my vacation when I was mucking around with trying to compile erlang with wxWidgets support and somehow a make clean started to remove / and I only noticed it too late… Not sure how it happened but I had changed things in the make and config files. Oh well no data lost just annoyances.

This process was done with Slackware 14.2 and roughly details what I’ve done so I can retrace my steps in the future.

Up and running

Booting

Even with only a laptop with windows installed hope is not lost. The almighty alien has a great tutorial creating an usb boot loader from windows. At first I tried to extract the contents of usbboot.img using IZarc but it reported it as empty but Winimage worked fine. The rest went smoothly.

Partitions

I used a split of /, /usr/local/, /home. The partitions on my laptop looks messy as I’ve kept some factory windows partitions.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        50G   27G   21G  57% /
devtmpfs        2.9G     0  2.9G   0% /dev
tmpfs           2.9G  1.1M  2.9G   1% /run
tmpfs           2.9G  688K  2.9G   1% /dev/shm
cgroup_root     2.9G     0  2.9G   0% /sys/fs/cgroup
/dev/sda5        50G   93M   47G   1% /usr/local
/dev/sda7       148G  2.0G  139G   2% /home
/dev/sda2       187G   88G   99G  48% /mnt/win
cgmfs           100K     0  100K   0% /run/cgmanager/fs

Wireless

Can be found in /extra/wicd in the slackware release.

installpkg ...
chmod +x /etc/rc.d/rc.wicd
/etc/rc.d/rc/wicd start
wicd-curses

sbopkg/slackpkg

Use slackpkg to update official Slackware packages.

slackpkg update
slackpkg update gpg

The vast majority of packages I install can be found on Slackbuilds. Many unnamed dependencies can simply be found here. sbopkg makes it a lot easier to use.

Environment

To quickly get up and running use xfce and startx.

Both fish and neovim can be installed from slackbuilds. Make sure to set fish as login shell as well as the default shell for both root and user.

dotfiles

Store https://github.com/treeman/dotfiles in ~/dotfiles and symlink from there as needed.

Xmonad

Install ghc and cabal-install from slackbuilds and then use cabal to install the rest:

cabal install cabal-install
cabal install xmonad
cabal install xmonad-contrib

Use sbopkg to install conky (make sure to manually include lua support) and nitrogen.

Clone https://github.com/robm/dzen and edit config.mk, choose option 7 (XPM, XFT, Xinerama). I’m not 100% I need to do it for the laptop or if this only was needed to support Xinerama but I did it this way anyway.

When started use lxappearance to set a prettier look for firefox and other gui. See previous post about prettifying fonts.

Dev

Perl

Use cpan as root whenever missing packages are found:

cpan install CPAN
cpan install Modern::Perl
cpan install DateTime

Blog

The blog uses Hakyll.

cabal install missingH
cabal install hakyll

Also setup ~/.s3cfg to allow syncing.

Phoenix

  1. Download the erlang-otp slackbuild and find the latest version.
  2. Install latest Elixir from source.
  3. Follow the installation guide and install the dependencies.

Posted in: Slackware.

Long Term Goals Update

July 18, 2016

During my vacation I suddenly got a bunch of “life crisis” type thoughts in an almost panic inducing intensity. They were mostly thoughts about not having accomplished anything and that the future looks bleak and meaningless and it’s not worth to do anything. As usual they are mostly illogical and they usually subside fairly quickly. But they got me thinking of what I want to do with my life and what some of my larger goals are. Making yearly reviews is a great way of combating the “I haven’t done anything” thoughts.

I’ve written about some long term goals before. Let’s revisit them.

  • I want to have kids (No change)
    Still the most important long-term goal.
  • Write a Book (No change)
    Having written a book feels like a big accomplishment I’d like to have on my list.
  • Contribute to a popular open-source project (Completed)
    I made some contributions to rust in 2014.
  • Black belt in Taekwon-do (Completed)
    Yes! I achieved 1-Dan this June.
  • Write my own Programming Language (Abandoned)
    It would be cool to write my own programming language, but in the grand scheme of things this doesn’t feel as important. I’m just not motivated enough to start up it as a big project.
  • Own a Snooker table (Abandoned)
    Looking back this looks like a fairly stupid materialistic goal. Snooker is awesome but does it really warrant being one of my long term life goals? Not a chance.

One can argue about the definition of a long term goal vs a short term goal. Generally it’s something I wish to have on my list of stuff I’ve done during my life.

I would also like to add two new goals I’ve been thinking about lately:

  • Learn a new language
    And I don’t mean another programming language, maybe Korean or Finnish.
  • Freedom over my work/life balance
    I think this is a big point for me. I value freedom very highly and I see no bigger gain than to have control over your work.

What I should do is to expand on my goals and think about why I want them and how I should accomplish them. For now though this quick overview is enough to calm down my anxious thoughts.


Posted in: Life Hacking.

Recent experiences with Netrunner tournaments

March 31, 2016

After a bit of a hiatus after the Winter Kit Tournament the 16th January I participated in three tournaments during February - March. After each of these tournaments I started a writeup of them but they fell off my mind a bit but consider this my break with my blogging hiatus.

Store Championship Örebro

After more than a month with no Netrunner I was stoked and in high spirits as we went to the friendly meta of Örebro the 20th Feb. I decided to try out two of the currently most popular decks: bootcamp glacier is here to stay and The 2-Armed Ice Feast (sometimes called Dumblefork) and I don’t think I made any changes to the decks at all. I’ve always liked Blue Sun so I was excited to try a competitive variant and I loved the “Looking 4 Job” variants of Whizzard before.

On to the games. We were only 8 people and I was matched up against Niclas who used practically the same decks as I did. I was quite nervous as he’s pretty awesome and he basically smashed me in both games. The second game I faced a relatively new players where I won the games comfortably and the third I lost two fairly close games against Peder’s MaxX and NEH FA (he did play better though). The last games I won another close Whizzard game but lost my corp game due Apocalypse (From Nasir!) catching me with my pants down.

I found out the hard way that the bootcamp glacier wasn’t the easiest to pilot (as suggested in the comments) and the dumblefork deck didn’t play the same as the previous Whizzard decks I’v played. Serves me right playing new decks on a tournament.

In the end I finished second to last, officially my worst tournament placement, and I must admit I was quite disappointed. I’d like to think I don’t care about loosing, but I think that’s wrong, I very much want to win and I do play Netrunner competitively when I do go to these tournaments. Another thing which made my disappointment a lot worse was that I missed out on the wonderful Leela Playmat. Maybe I’ll get another shot at it during the Store Champ in Linköping but for that I should probably do myself a favor and prepare a bit.

But I did get 3 copies of our lord and saviour Jackson Howard!

ANRPC Qualifier Örebro

Only a week later we went to yet another tournament in Örebro. This time it was a player organized tournament where the top 3 qualified for a finals tournament in Stockholm but there were a ton of other things to win as well.

As this seemed to a quite competitive event with players coming in from Stockholm and the surrounding area and considering my poor performance from last week I had lowered my expectations a lot. I had set my sights on simply not getting crushed and as long as I put up a good fight I’d be happy.

As the decks the previous work out for me (I can hardly fault the decks) I decided to go back to my Noise build which has served me well before. The tweaks I did to the build after the most wanted list was simply to cut a clone chip and the shards. I decided to throw in a Trope as an attempt to prevent running out of cards. During the day it was only useful once and as of this writing I’m leaning more towards BigBoy Noise with Levy/Peddler/Inject. I complained a bit (half jokingly) about missing the kill from my corp deck during the previous weekend and I got inspired by the Canadian Graveyard deck d1en used to win stimhack league with. I made some tweaks using other shells and I was good to go!

During this week I also tried out http://www.jinteki.net/ which is an unofficial online version of the game. There has been other clients (OCTGN) but I’ve always been reluctant to use them as I didn’t want to spend too much time playing… Well that’s done and I’m caught now. The interface is quite good if you already know the game and I used to practice with the decks a little bit and they seemed to perform ok.

I also got my friend Filip to come to his first tournament this weekend after we played a couple of games to refresh the rules during the week. I’m still pretty impressed as he basically agreed to come even without knowing the game basically at all. I gave him a standard Foodcoats list (minus global food, no dupes) and a vamp Jesminder. Sadly he didn’t win any games but the opposition was tough and he didn’t go to time and he said he had fun (apparently as he has now bought a core and some expansions!).

The Games

After the tournament I made some notes about the games I played but they aren’t super exhaustive and it’s been a while since they happened, but here’s a quick summary at least. There were 5 rounds without a cut and some of my games were streamed (but I haven’t seen them uploaded yet).

Round 1 Got a bye. Sigh. Sure I want to win but I want to play (and win) more… At least Frida (who didn’t participate) played a game with me to ease my pain, thank you! I also think my prospective opponent arrived just as we was starting our round, but I got the bye anyway.

Round 2 As I had apparently won my first round I got to face fellow Linköping player Harald and on stream for the first time! I distinctly remember looking at my shaking hands at the beginning of the games. Turns out I get nervous playing Netrunner on stream, scared of making mistakes and dumb plays. These games I didn’t mess up too badly as I managed to kill the too passive runner with the combo Hiro/Neural/Ronin and as Noise I got a good start against his NEH fast advance allowing me to close out the game.

Round 3 Played against a Chaos Theory who siphoned me down, won the psychich field psi game (dodging the kill) and checked all my advances/unadvanced cards. I was too greedy installing a Hiro after the runner clearly checked everything. Noise has a pretty good matchup against RP and he did get a pretty good setup, but so did I and I sat back and milled challenging the remote during advance (caprice foiled me) but I stole enough from R&D and archives to win shortly after.

Round 4 Second game on stream and I faced another accomplished player. I got a great start as IG against his Whizzard and I managed to keep up my assets and my money. I started to score out as he was a bit too passive but I ended the game with my new favourite combo Hiro/Neural/Ronin dodging the I’ve Had Worse. Then I faced EtF, my most dreaded opposition against Noise. After he made an opening remote I ran it, clicked through the Turing and trashed(!) the Adonis. Then I tried out my luck with Medium but no such avail and after that he rushed me out. In retrospect I handled the game very poorly… I’d like to watch the video whenever it’s available but hopefully it’s not too cringeworthy.

Round 5 Still on the top table and my third streamed game I faced off against another player I know is very good. This time it was my turn to play against a Noise with my IG, which was a first. I don’t really remember the game (need videos!) but I think he got a lot of accesses and I remember feeling he should have seen enough to win the game. We even checked the deck if I had enough agendas in there (most hidden in R&D) but alas I got the win by running him out of cards. Then I faced another NEH FA. I think I got a good start with some medium action and I got clot online but he managed to claw back. At the end of the game a small crowd had assembled as we slowly went to time. During my turn I milled, checked archives (up to 5 points) and made a last ditch attempt at HQ and finding the 1/5 chance for victory. Two from my view intense games and I’m looking forward to the video, if not to see the games from the other perspective.

Somehow I managed to win the tournament and apparently I’m going to play in the Stockholm finals, which is great because it means more Netrunner! I still feel like I don’t deserve it as I got an unnecessary bye the first round… The guy who got punished for coming late actually came in 3rd in the end, which is pretty baller, and it makes me feel a little bit better at least.

Winter Kit tournament in Linköping

Originally planned to be a store championship but as the dates collided with other store champs in the area we couldn’t get enough players we moved it forward. As it happens I had bought a winter kit so we used it as prize support for a 7 people tournament Mars 12th.

Filip didn’t get enough of netrunner the last time but the decks I provided didn’t really fit his aggressive play style. So I gave him a modified Fury Road deck (which is also a variation of what d1en used) an all out Blue Sun Kill deck (Government Takeover/Punitive/Cerebral/Janus/Scorch/) to better fit his playstyle. We also play tested them a little before the tournament.

I was planning to bring my standard Noise and a fast advance Order of Sol deck to the Store Championship as a bit more competitive decks, but after the tournament was changed to a winter kit tournament I opted to try out something else. Pitchfork is a cool deck and I don’t play that much Shaper so it seemed like a good idea to try it out (modification to allow Filip to get his Fury Road deck). A couple of months ago I tried a slightly janky/stupid/awesome Biotech kill deck I had lots of great fun with so it was time to play some fun jank!

This time I got another of my friends, Erik, to come to his first tournament. Some time ago I convinced him to buy a core set and he put it to use during the tournament and he said it was more fun than he was expecting!

I don’t have any notes from this tournament but there were a few moments that stood out. “Why do you play THAT card” when I flipped a Data Mine and in general heads were shaken that day which was great fun. The best thing was a turn 2 corp win against andromeda who made dirty laundry on psychic field on the 3rd click… and I won the psi (always choose The Brewery). I played Filip and he played great, he even got a Government Takeover scored as I was too afraid to run it (I still won though) and as runner he keyholed me to death and won that game.

In the end the game I lost against Filip was the only game I lost and so won my second winter kit tournament and I got my Corroder alt art. Erik also won two games so hopefully he has also seen the light and will return to our next tournament.


Posted in: Gaming, Netrunner.

Netrunner Winter Kit Tournament Linköping

January 16, 2016

After quite the hiatus from Netrunner I had a chance to join a tournament here in Linköping with 14 participants. The number of players has grown a lot since the previous tournament which is really great.

As I really wanted to win the wonderful Day Job playmat I went with two of the best decks I could come up with. I went with the Noise deck I’ve been playing a while which has been performing really well. I was expecting a lot of EtF so I was on the verge on playing a classic Looking 4 Job Whizzard deck but I switched to Noise just before the tournament as I’m more comfortable with it but I also find it more fun to play Noise than anything else. As for the corp I had played a little Foodcoats since it dominated worlds and it has felt extremely solid overall.

Tournament structure

We did 4 rounds of swiss without a cut, even though I was personally hoping for 5 rounds. The more games I can play the better it is, I just love to play you know. As usual you get 2 points for each game you win and 1 point for a timed win.

Round 1: Dan, Reina/Sync

vs Reina

He got me low on credits early but I played it slow and slowly but steadily accumulated enough credits to build rez enough ice and score out. Foodcoats destroyed the game.

vs Sync

I was really scared of Sync as Noise is weak against tags and I don’t run any meat damage protection. But I got a nice start and got a few points lead but he still managed to score out some astro counters and I carelessly gave him a Quantum Predictive Model so he got up to 5 point. Luckily I had set up the shard combo with utopia and hades shard I maged to score out with them the click before he would have won.

Generally I need to be more mindful of quantum predictive model. I actually think it’s a really good agenda in this type of deck.

4 points, 2-0

Round 2: Johannes, Leela/Haarpsichord

vs Leela

I was really, really poor in the beginning of the game and I had trouble getting my campaigns to stick. I made the really big mistake of trying to rush out an Accelerated Beta Test but I was too poor and too scared of Legwork and The Maker’s Eye after bounce to do it. In the process I had blocked Breaker Bay Grid from my campaigns which made the game really slow… I think I could have won in the end anyway but he got through my remote twice by forcing through an Ichi. Well played by him but I feel like I should have done better.

vs Haarpsichord

A bit rushed on time and super scared of 24/7 News Cycle I got a fairly good grip in the beginning with a Lamprey lock and I stole a couple of agendas early. Unfortunately I accumulated two News Team and nullified my lead. I still managed to find a couple of agendas to have the lead.

In the turn I went through a Gutenberg and took a tag (which I could have avoided with Faust) and gave him a Quantum Predictive Model while I was on 4 points. If I had just broken the sub I would have gone up to 5 points and I had a Hades Shard with at least one 2 pointer in the archive… Once again I need to be more mindful of taking tags. Still had more points and got the timed win.

5 points, 3-1

Round 3: Henrik, Noise/Blue Sun

vs Noise

Etf got set up well and the runner didn’t do anything useful at the start and I got set up really well economically and I was quite safe. Game ended early due to a faceplant into Assassin with only 2 cards in hand and I had a ton of money.

vs Blue Sun

I knew Henrik ran an Accelerated Diagnostics combo deck and I was again scared of dying to Scorched Earth with my not having any protection. But I got a lot of HQ and R&D accesses by trashing two Spiderwebs and an Assassin and I managed to ping away some kill pieces. He drew a lot with jacksson and managed to end up with all three copies of scorch in archives and I finally won by a Medium for his whole R&D.

9 points, 5-1

Round 4: Fredrik, Kate/EtF

The last game of the tournament and I and Fredrik were the top dogs. As I had one timed win but Fredrik did not so I had to win both games to win the tournament. Tough task as Fredrik is a very solid player.

vs Kate

I was a little flooded in the beginning but I didn’t get punished for it and after that I drew really good. I managed to stick the campaigns in the remote and I had a ton of money basically the whole game. Fredrik security nexus kate and I managed to get two 2-points early and I didn’t draw any agendas in the midgame when he was set up with his monster rig.

At the end of the game I had built up a 4-Ice remote and a 5-Ice R&D. He hit me with an Escher which felt quite awful as he had a bunch of R&D interfaces but it turns out my super taxing ice and R&D luck saved me. Foodcoat can and will make extremely taxing servers it turns out…

vs EtF

Fredrik ran a sort of Team Sponsorship fast-advance/rush EtF which I wasn’t looking forward to all that much. But luckily he didn’t draw a lot of economy and I managed to keep him down economically by a combination of lamprey and forcing him to rez ice. I also sniped an early 2-pointer by clicking through an eli and breaking a marcus with Faust, which felt really good admittedly. Overall I managed to keep up a ton of pressure on him even though I didn’t find aesop’s until fairly late.

I really felt in control the whole game and the game ended as a timed win for me. The only bigger mistake I recall is one I did on my last turn in the game where I installed a cache and then ran on the remote server thinking I could beat the ash trace just to plant into a Turing. At this point I was already at 5 points and what I could have done is walk through R&D 2 times by taking assassin to the face to maximize my chances of getting a regular win.

12 points, 7-1

The results

I was a bit down after loosing points in the second round but I managed to recoup very well in the end. I felt I had some really good in some key matches and my decks served me very well. I will probably try some other corps but I may still continue playing Noise even after the most wanted list.

In the end I managed to win the whole tournament which I didn’t really expect. I was hoping to do well but I wasn’t expecting it.

As my prize I naturally chose Day Job. The Ice Wall participation prize was great as well. I’m a little sad I didn’t get the Corroder one as I think it looks really good, but you can’t get everything in this world.

Was a good tournament and everyone were once again awesome! I’m already planning for the next one!


Posted in: Gaming, Netrunner.

2015 Read Books

January 1, 2016

I didn’t read a lot of books in 2015, but the books I did read were pretty damn good.

Fiction

  1. A Song of Ice and Fire: A Dance with Dragons - George R.R. Martin
    Reread.
  2. A Knight of the Seven Kingdoms - Gearge R.R. Martin
  3. The Skin Collector - Jeffery Deaver
  4. Best Served Cold - Joe Abercrombie
  5. The Heroes - Joe Abercrombie
  6. Red Country - Joe Abercrombie

Non-Fiction

  1. Lessons In The Fundamentals Of Go - Kageyama Toshiro
    A great Go book for beginners. Pretty though but very good.
  2. The Richest Man in Babylon - George S. Clason
  3. Money: Master the Game - Tony Robbins

Posted in: Read Books.

2015 in Review

January 1, 2016

Previous reviews: 2010, 2011, 2012, 2013 and 2014.

2015 Geek Achievements

  1. Finished my university studies and got a Master in Computer Science.
  2. Discovered a new boardgame love: Android Netrunner.
  3. Finished top 4 in my first Netrunner Store Championship.
  4. Won a small local Netrunner tournament.
  5. Completed my master thesis about recommender systems.
  6. Participated in the 48 hour game making competition Ludum Dare 33 with Groar.
  7. Actually styled this website a little bit.
  8. Achieved 12-kyu at online-go in Go.

2015 Non-Geek Achievements

  1. Took the kids to TKD competitions.
  2. Achieved 1-Kup in Taekwon-do.
  3. Started working at Configura where I spend my time doing systems programming in their homegrown language CM.
  4. Read 9 books.
  5. Wrote 26 blog posts.
  6. Played a bit of A Game of Thrones: The Card Game (second edition).
  7. Got new boardgames: Istanbul (very good), Homesteaders (really underrated) and Aquasphere (quite ok).

2015 Failures

  1. Read far too few books.
  2. Did not build my custom keyboard.

Plans for 2016

  1. Take care of Veronica.
  2. Achieve 1-Dan in Taekwon-do.
  3. Construct a custom keyboard.
  4. Read more books.
  5. Play more card games.

Posted in: Yearly Review.

Establishing Habits with Habitica

November 21, 2015

I have used Habitica the last 18 months to organize my habits and things I want to get done. I believe it all started with an amazing book called The Power of Habit which describes the amazing benefits habits can give, both in the context of your own life but also in business. The argument is that habits is the basis for success in whatever area you might be interested in. For me exercise and finishing school were the big driving factors. Even though I was fairly unmotivated with school the last year I managed to get in the habit of regular study and I also used Habitica as my TODO list which basically pulled me through the writing of writing my master’s thesis.

After I finished school and started working at Configura I’ve sadly been neglecting Habitica a little bit. I still used it every day but a lot less ambitiously than previously, it basically turned into checking off the few still relevant dailies. But I’m now feeling motivated again so I’ve collected new habits I want to do and I’m using Habitica to help me achieve it.

Habitica is an RPG game where you level up after you complete habits, dailies or To-Dos. The idea is to do real life actions and log them in the game to collect gold, pets and levels. It’s a simple idea and it doesn’t sound like much, but for me the added goals has made it lot more effective than simply writing in a notebook or similar.

With the gold you collect you can buy better gear or buy custom rewards. My idea here is to add things I want to buy or things I want to do there but I haven’t really used it as much before so I’m not sure how effective it’ll be.

I’m a serial procrastinator and a technique I’ve used with some success is to have some items on my To-Do list which looks important but really aren’t. When I procrastinate I actually try really hard not to do something even to the point that I do other things instead! So these important looking items acts as honey pots for the procrastination. For example the item “Register .bit domains” has a perceived importance cause I want to have one and I really should get one soon… But in reality it’s no hurry as they are not useful in the general sense and I can easily postpone it a month or even a year or two.

In the general I’ve gotten a lot of usage out of the To-Do list but in practice you could accomplish the same with pen and paper. The more interesting parts are “Habits” and “Dailies”. They both refer to real-life habits but dailies in Habitica are things you’re supposed to do every day, or on a set of days in the week, and habits are items with positive or negative interactions.

These were the main focus of my reorganization and to further the immersion factor I used emoji and I renamed them to be more RPG like so for example “Take D-Vitamins” became “Health Stims” and “Read” became “Lore”.

My main focus has always been on the dailies, I never click habits regularly. But adding a habit as a daily with the intent of doing it every day is a really effective way of making sure I complete it regularly. The risk is of course that you mark it as completed anyway, but luckily I only do it very rarely. As you get both a boost and an additional “Perfect Day” stat I feel very incentivized to complete all my dailies. You also get a streak counter for each daily and I feel really bad about breaking a big streak.

What follows is a rundown on some of the habits I’m trying cultivate:

  1. I’m trying out the Wim Hof Method which I found through a podcast. I basically do a set of breathing exercises every morning and I also do some stretches in the morning.
  2. As I’m very stiff I want to try to do isometric stretches a couple of times a week.
  3. I recently started following Talk To Me in Korean as I want to learn Korean. I use it conjunction with Anki a flashcard program for spaced repetition. The habit I want to establish is to practice a little bit every day.
  4. As I love to read but I’m also very bad at making time for it I’m trying to make it a habit to read 15 minutes before I go to sleep.
  5. Brushing my teeth and taking D-vitamins are perfect things to add. I’ve been pretty good at doing it and I’ve had a couple of months long streak of doing them but sadly I’ve forgotten to report it to the site so the streak has been broken…
  6. I listened to a podcast with Pavel Tsatsouline just yesterday and it got me really inspired for going to the gym. I will try to follow the 80/20 Powerlifting routine:
    Only do 3 exercises; deadlift, squats and bench. Always 5 sets with 5 repetitions.
    Tuesday: Heavy squats
    Thursday: Heavy bench, light squats
    Saturday: Heavy deadlift, light bench
    The original program had another component: Competition. I’m not sure if I want to do that though…

Now this is just the general idea. I’m well aware that this may crash and burn but if I successfully do at least half of these things (historically I’m well above that) I consider it a huge accomplishment for me.


Posted in: Habits, Life Hacking.

Stereotypes

October 14, 2015

I read a great essay or article about stereotypical programmers called The Little Printf. I really couldn’t do it justice so do yourself a favor and go read it. It touches on several types of programmers or rather traits of programmers I recognize in my surroundings and also sadly a bit in myself. I can especially relate to the programmer who’s always chasing the new hot technology or the one who’s collecting cool but unread programming books, although I’m not doing it for the street cred.

And then there’s the e-sport fan who watches other play game instead of playing them and again I’m guilty.

The comic is from http://www.loadingartist.com/.


Posted in: Life.

Netrunner Summer Tournament Linköping

September 18, 2015

There was another Netrunner tournament this Sunday with 8 entrants. We had two new legal data packs with Old Hollywood and The Universe of Tomorrow so a lot of new things were tried. I heard a rumor that a full playset of both Aesop’s Pawnshop and Wyldside were available so I decided to not take my jankiest ideas and play Noise and Blue Sun. The Noise build was practically unchanged from what I’ve played previously. The Blue Sun was a new glacier build with space ice and the new agendas Hollywood Renovation and The Future is Now. I wanted the threat of scorch and I also threw in two snares for extra spice.

Swiss

With 8 players we did 4 rounds of swiss, without any cut.

Match 1: Dan, Valencia/Haarpsichord

vs Valencia

I tried to push a Hollywood Renovation early, but it was snagged with blackmail. It was a big gamble which unfortunately didn’t pan out. This was a kinda large mistake, but in the end it didn’t matter. I got my huge ice up and running and I forced him out of my servers. I made a big play with Hollywood Renovation where I fast advanced a The Future is Now with the 5th and 6th advancement tokens and the game was basically over from that point. I think I flatlined him in the end, but that’s more of a symbolic victory as I could have just as easily scored out.

vs Haarpsichord

Super close, he had scored a lot of points and I was sitting with clot. In the end he installs 3 new remotes, one behind an ice. I push through the ice to steal the first agenda and I imp the second one (now the Imp is without counters). So I install another program, trashing the imp, then trashing the third remote with the imp. All new remotes were agendas. After this my victory was clear as a run on archives sealed the deal.

4 points, 2-0

Match 2: Harald, Haarpsichord, Haylee

vs Haarpsichord

I felt like I was behind the whole game, but so did Harald. In the end I managed to snag another very close win, but I’m not sure how that happened. All my Aesop’s were in the bottom of my stack but somehow I managed to steal/imp enough to make up for it. What decided things was a Clot hidden on my street peddler, which he overlooked. Without it I should have lost the game.

vs Haylee

I allowed some accesses to R&D, but mostly no big damage was done. Then I sealed the game up and the win was basically clear. I had a public support ticking down but we ran out of time so I got one point for being up to 6 agenda points. Maybe I could have played it faster to get the victory on time, but I don’t know.

7 points, 4-0

Match 3: Henrik, NEH, Chaos Theory

vs NEH

I got set up fairly well and I managed to trash a sansan early. I had clot and everything was going alright. I hit a Snare in a remote which took me off guard a bit. The turn after he made another remote and I contemplated running on it, I did have imp tokens after all, but I decided it was fine to possibly allow him a single agenda. Big mistake as I installed cards down to 3 cards in hand and I died to a breaking news and scorch. For some reason I was convinced he was running the fast advance version, or some kind of nearpad, but the reality is I played too fast and didn’t consider everything properly. Live (or die) and learn I guess.

vs Chaos Theory

After I rezzed an Archer on the remote it was basically game over as he couldn’t break it with the exception of datasuckers/parasiters, which quickly got used. I iced up my centrals with huge space ice and I could simply score out and win. He tried a big Vamp play against HQ, but on the last click and with a tag he died against double scorch after taking down my curtain wall.

9 points, 5-1

Match 4: Johannes, Haarpsichord/Ian

vs Haarpsichord

A blistering game where he rushed out agendas and I tried to punish/steal with Imp. The game slowed down when I had a Clot on board and I pushed up to 6 points. A run on archives with a Jackson reshuffle and then triggering Utopia shard sealed the deal.

vs Ian

We laughed about our decks being super late game focused and he stayed true to his words and he installed a ton of resources, three Gang Signs and two HQ interfaces. I was kinda agenda flooded but I managed to push them out in Archives with double Jackson. The game was decided in a funny way I think, even if I misplayed it quite a bit (I blame tiredness or something!).

I had Hollywood Renovation with a bunch of advancement tokens, The Future is Now in a naked remote and one Snare and one Scorch in my hand. So I advanced Hollywood Renovation 3 times and scored it. He hit a Snare but nothing else with all his accesses. Then I scored The Future is Now and fetched my second Snare from R&D, which he accessed and died to. Naturally the correct play would have been to advance Hollywood Renovation twice, score The Future is Now and fetch the Snare. Now if he hits a Snare I can just scorch him on my last click.

13 points, 7-1

The results

The self critic in me keeps on thinking about the lost game and the game which went to time, but some small part of me tries to point out that things actually went well. I felt fine in all games and it never felt hopeless in any game. I did take “better” or more serious decks and the other guys joked about my very serious decks, but it’s fine. I did accomplish my goal and I even won the tournament, yay!

I managed to achieve my goal and I got to choose a playset of Aesops! I also got a couple of Swordsman and a new deckbox. It’s a little bit sad that I declined the Femme Fatale alt-art as it’s preeetty… But maybe next time.


Posted in: Gaming, Netrunner.

Netrunner ID draft Örebro

August 29, 2015

I entered an ID draft tournament in Netrunner hosted in Örebro and this is a brief overview of what happened. Disclaimer: My memory is a little bit fuzzy and the events may or may not correspond to what actually happened.

The draft

The idea was to randomly sort all entrants and in turn each chooses an ID which nobody else can choose. When everyone has chosen an ID the procedure continues in reverse order. This means you can choose either corp or runner early and leave the other until later.

I got the 5th spot and Geist, Nasir, RP and NEH was chosen before me. If the goal was to do well I should probably have chosen a strong corp like Blue Sun, HB or possibly PE but I had just started playing Noise and I was loving every second of it so that was my choice. It was a little bit boring perhaps as it wasn’t a new ID I had to come up, but I had no idea of what I actually wanted to play with as corp so I simply delayed that decision. When it was my turn again most actually good corps had gone and I could choose between Titan, Harmony Medtech, Argus and Biotech (and some others…). Recently some popular Titan lists had popped up on netrunnerdb so I took that one.

This is the drafting result:

Frida unfortunately did not attend the actual draft and she had to pick both runner and corp last.

With Wayland and Jinteki being relatively popular I was thinking of adding I’ve had worse to Noise… But in the end I decided to be ballsy and skip all that. And no plascretes. But I thought with some careful play and Imp/Utopia shard I could manage. Instead I went with the no frills 3 Aesop/3 Cache low economy approach which I’ve found is perfectly fine. I slotted 2 Hacktivist meeting as the local playgroup in Linköping insisted on running Cerebral static and Manhunt and maybe others would do weird stuff with currents as well? This is the Noise deck.

The Titan build is basically the popular Atlas Shrugged with Beanstalk replacing Subliminal messaging and an extra Crisium Grid for the relative increase of criminal. In testing the corp deck performed okay… But never amazing. Noise performed consistently whenever I didn’t just die against Jinteki due to… Jinteki stuff.

The matches

When we arrived at Örebro the basement already full of Magic gamers is already hot and things would only get worse. I didn’t get enough sleep and I’m already tired but still pumped to play some Netrunner! The tournament features five rounds of swiss without a cut.

Match 1: Yoshi, Reina/Blue Sun

vs Reina

Hedge fund, beanstalk, install ice over HQ. Runner installs things, runs on R&D and misses. I sea source-scorch second turn as he has 2 (or 3?) cards and I feel a bit bad about it. Unfortunately silly wins and losses like these happens sometimes.

vs Blue Sun

He gets a great start with ice and money. I’m having trouble setting up and I can’t find D4v1d before he can retrieve his oversighted Curtain Wall. I’m too scared/incapable of stealing his agendas as he’s rushing them out. When I finally get my Imp going on HQ he already has a scored atlas with two tokens and he scores out a hostile in a flash. I made a mistake of not installing a clone chip as I had a clot in my heap and I maybe should have been more aggressive but overall Yoshi outplayed me.

2 points, 1-1

Match 2: Dan, TWIY/Whizzard

vs TWIY

Dan is from Linköping, same as me, but I haven’t actually played him but I knew his was a variation of the Midseasons/Psychographics rush deck. I play very carefully and builds up while he takes money. He gets a bunch more money and I continue milling and building. I’m waiting for him to start scoring out and I go through a Tollbooth and imps away an NAPD contract, but he never gets the astro train going while I sit back milling with clot ready. The game basically end when he never scores out and I get a mill victory.

vs Whizzard

He trashes my sansans but I get some points scored. The game goes a bit long and we’re almost going to time. I think I could have won by rezzing an Archer against his faust when he doesn’t have enough cards to continue the game, but I stress out and for some reason I don’t rez it. Later he finds a 3-pointer for the win from HQ. I guess I took the risk as he could have just as easily hit a Snare and loose.

4 points, 2-2

Match 3: Johannes, Harmony Medtech/Geist

vs Geist

I’ve played against Johannes a lot so I know his deck and he knows mine. I get an excellent start with 3(!) Quandary protecting HQ, R&D and my remote. I manage to tax out his breaking and entering breakers as I score out with the help of sansan. Annoyingly Forger prevented me from scorching him more than once but in the end I manage to score out behind 2x barriers and a Quandary as he had basically exhausted his breakers and clone chips.

vs Harmony Medtech

I got set up with Noise fast and controlled the game from the start. He scored out a Nisei but I was never really worried. I made a stupid move of running archives when I had just trashed a Cyberdex and later I ran it again! But in the end my start was just too good and I won by pounding HQ with Lamprey, Imp and parasites.

8 points, 4-2

Match 4: Magnus, Nisei Division/Valencia

vs Nisei Division

I’ve never played Magnus but I know he’s a very good player so I’m really nervous to play him. He installs over R&D and remote and does a hedge fund. I install a lamprey and imp and run HQ… Just to hit a Snare. Sigh. I thought about it but I figured it wouldn’t be a big deal, but it was. I don’t shake the tag as I don’t have any resource installed and he scorches me. Huge misplay from me and now I’m trying not to tilt too hard.

vs Valencia

I have a fairly bad starting hand which I keep… For some unknown reason. He’s very aggressive and he gets a medium dig going but misses. I don’t care about it too much and continue trying to score/finding my pieces. He does another big medium dig through a Grim, paying 3 + 1 cards for it and another ice, and hits a Snare on his last click, with two cards left in hand. I have a jackson out so I click to draw two cards and find the scorch for the win.

Funny how both games ends in basically the same way. I’m still a bit upset about the way I lost but it feels a little bit better that I could pull out a win against such a good player, even if it was a lucky one.

10 points, 5-3

Match 5: Frida, Argus/Silhouette

vs Argus

I know Frida loves meat damage so I play very carefully. I get a good start and I imp a bunch of things from R&D while milling a healthy amount. She scores out a couple of 1-pointers but I’m milling very fast and she’s not threatening me yet. When she goes up to 5 points I have as much money as she has so I make a run on archives (I also have an installed Utopia Shard) and take the win.

vs Silhouette

Again I get a good start and I get a Crisium grid on HQ to stop siphon. She doesn’t find her breakers and I get a hostile scored followed by the atlas train.

14 points, 7-3

Final results

I won 7 matches, 4 with Titan and 3 with Noise. Surprisingly my corp faired better than my runner which can partly be explained by the two lucky flatlines I got. But overall it felt a lot better than during testing. Perhaps it’s because I’ve never played a rush deck before and the style takes a little getting used to? Then I got the silly scorched loss with Noise which really shouldn’t happen if you play as you should. But mistakes happen. I’m quite glad I managed to avoid tilting though.

Generally with Noise I feel if the corp doesn’t push scoring windows hard you’re always in control of the game. Even then it’s difficult without a secondary win condition like scorch or midseasons. This is what Yoshi did with Blue Sun so very well where I really felt behind the whole game, but perhaps I was being too cautious.

Overall I’m quite pleased with my result all things considered. This is the final results after the five rounds of swiss:

There were quite a lot of prizes available and after the three victors took theirs this is what took home as my 4th place:

I wanted to have a full playset of aesop’s, especially as I really love Noise, but the mat feels a little more special. I still want the alt-arts though, hopefully I can get them from somewhere else.


Posted in: Gaming, Netrunner.

Groar

August 23, 2015

Download
Linux 64bit Windows

So I actually finished Ludum Dare 33. I can’t believe how hard it was to actually make something! It continues to amaze me what fantastic stuff everyone manage to make in just 48 hours. This is what I came up with for the theme You are the Monster. Yes I couldn’t come up with a name until submission… So I just took the first admittedly bad one…

Groar

Controls
W A S D moves and H J K L shoots. Escape quits the game.

Timelapse (dual screen)

Timelapse (single screen)

Source
https://github.com/treeman/ld33


Posted in: Games, Ludum Dare.

Life and Shields

August 23, 2015

Time is running out! At least the more technical parts are mostly done. The ships have an acceptable AI, they have rechargeable shields and they can now even be killed. Currently the game is far too easy, but it’s starting to look a little cooler at least.


Posted in: Ludum Dare.

Bullets and AI

August 23, 2015

The game is still far from being an actual game but some progress has been made. I fixed most of the collision detection problems and I’m now trying to make some sort of AI working for the ship. It’s a bit hard and time consuming and I don’t know how to make things good.

Maybe some time I need to focus on actually making graphics as well?


Posted in: Ludum Dare.

Fun or Frustration? Ludum Dare 33

August 21, 2015

One of my goals this year was to participate in a Ludum Dare. I have cleared up my schedule, negotiated with my better half and everything is set up for epicness.

At first the idea was to make a game in rust, even tough I basically haven’t used it in almost a year, but when I tried to set things up (yes today) it was extremely frustrating. Not so much that I couldn’t write rust code but more that documentaion for the game engine I used was lacking. In the end I decided to skip it as I couldn’t get sound to work.

In a bit of a hurry I went back to what I’ve used before. I still couldn’t get the sound to work but I’m suspecting faulty sound libraries in my linux setup.

As usual I will do it by myself. The goal is to make a simple reasonably complete game. The source code will be on github where I have a small code skeleton which I can use as a starting point.


Posted in: Ludum Dare.

Mailto: links with FastMail in Firefox

August 13, 2015

You can change the application to handle mailto: links in Firefox in Preferences -> Applications. The problem is that you can’t input custom urls and some email providers, like hotmail or fastmail, aren’t supported. I managed to fix it with the plugin MailtoWebmails. It annoys me that a plugin is needed, but there it is.


Posted in: FastMail, Firefox.

rustc: error while loading shared libraries: librustc_driver

August 12, 2015

I had installed and used rust already but today I fired it up and received:

rustc --version
rustc: error while loading shared libraries: librustc_driver-7e44814b.so: cannot open shared object file: No such file or directory

I’ve seen this before… I thought modifying LD_LIBRARY_PATH in my shell was enough, but no. According to the bug report the problem is with ldconfig.

Edit /etc/ld.so.conf and add /usr/local/lib to it then run ldconfig to update the cache. Now everything works again.

rustc --version
rustc 1.3.0-dev (4b4119d5c 2015-07-29)

Not sure why it appeared again though.


Posted in: rust, Slackware.

Moving to FastMail

August 10, 2015

About two years ago after Lavabit’s shutdown I searched for a replacement email provider. For some reason I settled on eumx which I used since then. Yesterday I got an email saying the recurring billing could not be renewed as I had my old credit card registered and it got me thinking of moving on. I wasn’t particularly unhappy but I had some annoyances. Their webmails’ were a bit obnoxious to use but I could live with it. Something more alarming is that they don’t use ssl consistently. I remember I pointed out this to them but at the moment it’s not fixed (or the error has returned).

Whatever. FastMail often gets mentioned as a Gmail alternative and I decided to use them. Their webmail feels very, very good and it’s also possible to pay with Bitcoin! This actually marks the first real purchase I’ve made with bitcoins and it was all very painless.

It was easy to migrate my mail from eumx by using their migrate service from IMAP ssl.eumx.net. Migrating from Gmail gave me more trouble as Gmail denied me access. After creating an app specific password I finally made it work. For more help see https://www.fastmail.com/help/receive/migrate.html.

Registering my own domain was very easy with the instructions. I could not find instructions to setup DKIM specific for loopia, but it was easy enough to figure out.

In a subdomain mesmtp._domainkey set a TXT record with the value of the public key found in Advanced -> Virtual Domains -> DKIM signing keys. You can check the settings with dig:

$ dig mesmtp._domainkey.jonashietala.se TXT

; <<>> DiG 9.9.3-P2 <<>> mesmtp._domainkey.jonashietala.se TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29301
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;mesmtp._domainkey.jonashietala.se. IN	TXT

;; ANSWER SECTION:
mesmtp._domainkey.jonashietala.se. 3600	IN TXT	"v=DKIM1\; k=rsa\; 
    p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpqEJlGriDgRE6qjys7e424xv5K9LAJrvTQ8/K8Lj4h

Where you should see the public key. After the settings have propagated the Set field under DKIM signing keys should change from [] to [*].

I’m also trying out two factor authentication with Google Authenticator. Although FastMail implements it in a strange way, using a base password and then appending the OTP from the authenticator. It’s a bit annoying but it works I guess.

Overall FastMail seems very good, the little I’ve used it, and it might be worth taking a look at.


Posted in: FastMail.

Drawing a self portrait

August 8, 2015

Drawing is hard. I’d like to improve though. Here’s a self portrait I tried to draw in Krita. I’m really slow so I stopped a bit before it really was finished.

Obviously I’d like it to be a bit better, but I’m still a little happy about the glasses and the eyebrows. The mouth and nose is ugly though.


Posted in: Drawing.

Gruvbox Syntax Highlighting for Pandoc

August 4, 2015

Recently when I reinstalled Slackware I decided to restyle my workspace as well. I settled on gruvbox with neovim and using the generalized package I also styled my terminal.

Then on a whim I wanted to restyle this site. When I built it I kinda left it without any styling at all, I guess the thinking was that it works and I can just tweak it later. Well it’s been more than 2 years now and I never got around to it. I guess what bothered me the most was the fact that I had a really crappy styling syntax highlighting and styling of code. So I decided to change it.

I couldn’t find any reference to highlighting pandoc styled like gruvbox, so I tried to emulate on myself. I use the darker one in neovim and in the terminal, but for the web page I used the lighter one:

code, pre { background-color: #f2e5bc; } /* Hard contrast */
code.sourceCode span.kw { color: #9d0006; } /* Keyword red */
code.sourceCode span.dt { color: #b57614; } /* Datatype yellow */
code.sourceCode span.dv { color: #8f3f71; } /* DecVal purple */
code.sourceCode span.bn { color: #8f3f71; } /* BaseN purple */
code.sourceCode span.fl { color: #8f3f71; } /* Float purple */
code.sourceCode span.ch { color: #4070a0; } /* Char purple */
code.sourceCode span.st { color: #79740e; } /* String green */
code.sourceCode span.co { color: #928374; font-style: italic; } /* Comment medium */
code.sourceCode span.ot { color: #427b56; } /* OtherToken aqua */
code.sourceCode span.fu { color: #79740e; } /* Function green */
code.sourceCode span.re { color: #af3a03; } /* Region marker orange */
code.sourceCode span.er { color: #9d0006; font-weight: bold; } /* Error red */
code.sourceCode span.al { color: #9d0006; font-weight: bold; } /* Alert red */

This works with the highlighting-kate package which is what pandoc, and therefore Hakyll, is using.

Additionally to get nicer spacing and font these styles are used:

code {
    font-family: Consolas,"Courier New",monospace;
    font-size: 0.9em;
    padding: 0.2em;
    line-height: 1.3;
}

pre {
    word-wrap: normal;
    overflow: auto;
    padding: 0.6em 1.0em;
    line-height: 1.3;
}

pre code {
    padding: 0;
}

Currently I’m happy with the result and you can view the source of this site at https://github.com/treeman/jonashietala.


Posted in: Webpage.

Installing Krita on Slackware 14.1

August 3, 2015

This is a guide on how to build Krita on Slackware 14.1. This is based on this guide for linux.

  1. removepkg calligra
  2. Install some dependencies from Slackbuilds.

    gsl
    libgexiv2
    libpqxx
    pstoedit
  3. Get Krita.
    The original guide recommends building in ~/kde4 but I moved i to /opt/kde4.

    mkdir -p /opt/kde4/build /opt/kde4/src /opt/kde4/inst
    cd /opt/kde4/src
    git clone git://anongit.kde.org/calligra.git
  4. Configure and build.
    There’s a problem with tifflib. (My version is Krita: 2.9.6 (gitb804a35), you may or may not run into this problem).

    Change /opt/kde4/src/calligra/krita/plugins/formats/tiff/kis_tiff_converter.cc from

    #if TIFFLIB_VERSION < 20111221
    typedef size_t tmsize_t;
    #endif

    to

    typedef size_t tmsize_t;

    Then we can build

    cd /opt/kde4/build
    cmake -DCMAKE_INSTALL_PREFIX=/opt/kde4/inst /opt/kde4/src/calligra \
        -DCMAKE_BUILD_TYPE=RelWithDebInfo -DPRODUCTSET=KRITA
    make -j5
    make install -j5
    Where X in jX is 1 + # processors. The build process is quite slow.
  5. Add /opt/kde4/inst/bin to PATH and /opt/kde4/inst to KDEDIRS.
  6. Register krita to the system kbuildsyscoca4, but worked for me without it (I don’t use kde).

And launch with krita.


Posted in: Krita, Slackware.

fish_update_completions in Slackware 14.1

August 3, 2015

I’ve been trying out fish shell lately. A cool feature with fish is that it can automatically generate completions by parsing the installed man pages by running fish_update_completions.

Unfortunately this is what I got:

Traceback (most recent call last):
  File "/usr/local/share/fish/tools/create_manpage_completions.py", line 963, in <module>
    file_paths.extend(get_paths_from_manpath())
  File "/usr/local/share/fish/tools/create_manpage_completions.py", line 894, in get_paths_from_manpath
    proc = subprocess.Popen(['manpath'], stdout=subprocess.PIPE)
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

The solution for me was to install man-db from Slackbuilds and add /opt/man-db/bin and /opt/man-db/sbin to PATH to get fish to find the command manpath. The dependency for man-db is undocumented but it’s a known issue.

During the installation I got several strange errors error: cannot run C compiled programs which I have no idea why they came up. Eventually by retrial I got it to work.

Curiouly enough fish couldn’t parse several of the slackware specific man pages. I manually made completions for exlodepkg, installpkg, makepkg, removepkg, slackpkg and upgradepkg which can be found at https://github.com/treeman/dotfiles/tree/master/.config/fish/completions. Of these removepkg was the real motivator as natively it didn’t autocomplete installed packages. I added the rest more for the sake of completeness. These are not super great and I’m not sure if anyone else will find it useful. I might consider trying to add them to fish later.


Posted in: Slackware, fish.

Slackware update

August 2, 2015

The last time I (re)installed Slackware I documented what I did. Somehow I managed to really bork my installation and I decided to go through with a larger reinstallation once more. This is a log of some things I did differently.

Kernel

Before installing the kernel it’s nice to check the GPG signature of the downloaded packages. With the kernel GPG signature we can simply do:

wget linux-XX.tar.xz
wget linux-XX.tar.sign
unxz linux.tar.xz
gpg --verify *.sign

When making oldconfig yes "" | oldconfig saves time.

Slackpkg

I didn’t use this tool previously, but it can be used to update the official Slackware packages. Just remember to update the gpg signature as well.

slackpkg update
slackpkg update gpg

I didn’t take the plunge to slackware-current just yet, I might do it at a later time when I feel I have a lot of unused time (will I ever?), but it’s easy to update selected packages.

slackpkg upgrade git

Will only update git for example.

Perl

I did some strange things here, the one which worked was simply as root:

cpan install CPAN
cpan install DateTime
...

Slackbuilds with sbopkg

Slackbuilds works well but can be cumbersome. sbopkg is a great little tool which makes downloading and installing much easier.

Hakyll and xmonad

This gave me a lot of problems. At first I installed xmonad and xmonad-contrib from slackbuilds and I tried to install Hakyll from cabal, but conflicts ensued and they couldn’t really work together.

I tried to move cabal out from my home director, but didn’t find a very satisfactory solution and in the end I just gave up.

The first thing to do is to install ghc from slackbuilds. Then install the Cabal lib and cabal-install from https://github.com/haskell/cabal/releases (they are in the same lib).

Then install a newer version of ghc from their prebuilt binaries at https://www.haskell.org/ghc.

There I got the error that libtinfo.so.5 couldn’t be found. This was solved by symlinking to libncurses with ln -s /lib64/libncurses.so.5 /lib64/libtinfo.so.5.

Then we can install things with cabal as a regular user:

cabal install cabal-install
cabal install hscolour
cabal install missingH
cabal install hakyll
cabal install xmonad
cabal install xmonad-contrib

If you get the error:

pandoc-1.15.0.6 failed during the configure step. The exception was:
user error ('/usr/bin/ghc' exited with an error:
/usr/lib64/ghc-7.8.4/unix-2.7.0.1/libHSunix-2.7.0.1.a(execvpe.o): In function
`pPrPr_disableITimers':
execvpe.c:(.text+0x300): multiple definition of `pPrPr_disableITimers'
/root/.cabal/lib/x86_64-linux-ghc-7.8.4/unix-2.7.1.0/libHSunix-2.7.1.0.a(ghcrts.o):(.text+0x0):
first defined here

Try rerunning cabal install cabal-install and then try to install hakyll again. This shouldn’t happen with an updated ghc though.

From source

  1. fish shell
  2. neovim (xclip from slackbuilds)
  3. rust (nightly build)
  4. dzen2 (edit config.mk and use Xinerama, XPM and XFT)

If you get

rustc: error while loading shared libraries: librustc_driver-7e44814b.so:
cannot open shared object file: No such file or directory

it’s because rust installed it in /usr/local/lib which is not in the default search path. Can add /usr/local/lib to LD_LIBRARY_PATH or issue ldconfig /usr/local/lib for instant gratification.

Perl6

This can be done with everything as regular user.

git clone https://github.com/tadzik/rakudobrew ~/.rakudobrew

Add ~/.rakudobrew/bin to path. Then we can install package manager panda and VM moar:

rakudobrew build moar
rakudobrew build-panda

Then with panda we can install modules:

panda install Task::Star
...

Postgres

Install from slackbuilds. Check readme! After installation, to allow for no password for postgres (useful for pure local) alter /var/lib/pgsql/9.4/data/pg_hba.conf

and add the line

local   all     postgres    trust

before all other configurations.

Missing

This time I’m having trouble with getting sound working in Skype. To be continued… Maybe.


Posted in: Slackware.

Preventing Firefox from creating Desktop directories

August 2, 2015

With a fresh firefox installation I found that it kept creating a ~/Desktop directory. But I found how to turn it off.

Edit ~/.config/user-dirs.dirs to

XDG_DESKTOP_DIR="$HOME/"
XDG_DOCUMENTS_DIR="$HOME/"
XDG_DOWNLOAD_DIR="$HOME/"
XDG_MUSIC_DIR="$HOME/"
XDG_PICTURES_DIR="$HOME/"
XDG_PUBLICSHARE_DIR="$HOME/"
XDG_TEMPLATES_DIR="$HOME/"
XDG_VIDEOS_DIR="$HOME/"

I had XDG_DESKTOP_DIR="$HOME/Desktop" which made a Desktop folder all the time.


Posted in: Firefox, Slackware.

5 Years at Linköping's University

July 22, 2015

I recently finished my master’s degree (civilingenjör or civil engineering) at Linköping’s University. At first it felt like 5 years would be an eternity, but in hindsight it was over in a flash. my gut feeling is that I haven’t learnt or done anything of note, except you know actually finishing my degree, but if I sit down and think about it I have done some things. Actually quite a lot of things.

First year

I moved to Linköping with my girlfriend and it was quite an adjustment as we both moved from our parents and to a city where we practically knew nothing and no one. But we managed fine and while we never went out to parties or went to other student events we found some friends. I also started ITF Taekwon-do after a few months.

There weren’t too much to do in school. The focus was on foundation math courses, mostly things I had already done but needed refreshing, and on introductory programming courses which weren’t challenging at all for me.

Second year

During the second year I felt the courses were harder and more interesting than the first year’s courses. The courses in Combinatorial Optimization, Data Structures and Algorithms and Linear Algebra were fun and new for me. I also took an extra continuation course in Linear Algebra which was interesting.

When I started the university I thought I would like electronics and hardware construction, but the courses from the first year were really not interesting at all. Even when making the transition from analog to digital I didn’t care for it at all. But it all changed when we started actually building things with digital circuits.

At first we had an introductory course where we built digital clocks and counters. You were supposed to have prepared a design sketch for the labs, but me and my partner for some reason never did it, and so we were always running late in the labs. I remember one very fun, or horrible, occasion where we had struggled a lot with one lab and we had spent almost the full 4 hours until we finally completed it with maybe 10 - 15 minutes left. Filled with relief we started taring apart what we so painstakingly had built. When done we realized we had one part left where we were supposed to use the circuit we just destroyed… Luckily we could use the circuits another group had made, but it was a painful lesson in always reading the descriptions and prepare for the labs in advance.

The digital circuit labs were followed by a digital project of our own choice. We designed a processor which could run the Core Wars 88 standard and we simulated it on an FPGA.

This is the main block schema for the processor:

And here is a small video of the simulation in action:

The project was interesting as it was an outlet for our creativity and it touched on several different areas. Processor design, hardware debugging (!) and I wrote a redcode assembler for our CPU and a microcode compiler.

The behaviour of the processor is controlled by microcode which basically is a set of control outputs of 0s and 1s. For example our processor has 18 outputs consisting of a total of 39 bits (uPC_addr is internal).

game FIFO IR ADR1 ADR2 OP M1 M2 mem1 mem2 mem3 mem_addr ALU1 ALU2 ALU buss PC  uPC  uPC_addr
 00   00  0   00  00   0  00 00  00   00   00    000     00   0   000 000  00 00000 00000000

To make things easier, instead of manually editing each 0/1 line we introduced a DSL which then the compiler turns into microcode lines.

For example the microcode is described in our DSL:

; Startup, check if we're in game
        jmpS $GAME                              ; Execute game code only if we're running
        jmpO +0                                 ; Infinite loop if we've recieved game over, reset to break it

; Clear memory contents
        ALU = 0                                 ; Load 0
        ALU1 -> buss, buss -> OP, buss -> M1, buss -> M2, buss -> PC
:CLRMEM PC -> mem_addr                          ; Look at PC
        OP -> mem, M1 -> mem, M2 -> mem         ; Clear it
        ALU++                                   ; Incr
        ALU1 -> PC, jmpZ $LOADP                 ; If 0 we're done looping
        jmp $CLRMEM                             ; Else continue
...

And is then compiled into VHDL code:

signal mem : Data := (
    -- Startup, check if we're in game
    "00000000000000000000000000000000000011000110011", -- jmpS GAME(33)
    "00000000000000000000000000000000000101000000001", -- jmpO +0(01)

    -- Clear memory contents
    "00000000000000000000000000110000000000000000000", -- ALU = 0
    "00000000010101000000000000000100010000000000000", -- ALU1 -> buss, buss -> OP, buss -> M1, buss -> M2, buss -> PC
    "00000000000000000000110000000000000000000000000", -- PC -> mem_addr
    "00000000000000101010000000000000000000000000000", -- OP -> mem, M1 -> mem, M2 -> mem
    "00000000000000000000000000100000000000000000000", -- ALU++
    "00000000000000000000000000000100010001100001001", -- ALU1 -> buss, buss -> PC, jmpZ LOADP(09)
    "00000000000000000000000000000000000001000000100", -- jmp CLRMEM(04)
...

The redcode assemblers job is to transform a warrior (a piece of redcode) into a binary object file which we can then send to the FPGA for execution.

For example this warrior:

step    EQU 417
init    EQU 1337
size    EQU 9

        JMP start           ; boot jump as we can't specify PC in the middle T.T

src     DAT 0               ; src pointer
start   MOV #size, src      ; setup src pointer
copy    MOV @src, <dst      ; copy self
        DJN copy, src
        SPL @dst            ; throw a pc there

        ADD #step, dst      ; space out a bit
        JMP start           ; make a new copy, yay!

dst     DAT #0, #init       ; dst pointer

end

Compiles to:

$ ./assembler jonas-replicator.red -r
0000000000001001
000000000100000000000000000000100000000000000000
000000000000000000000000000000000000000000000000
000000000001010000000000000010010001111111111111
000000000001101100011111111111100000000000000101
000000001001000000011111111111110001111111111101
000000001010100000000000000000110000000000000000
000000000010010000000001101000010000000000000010
000000000100000000011111111110110000000000000000
000000000000010100000000000000000000010100111001

With the --verbose tag the format can be examined:

$ ./assembler jonas-replicator.red --verbose
0000000000001001  00 09  ; Number of rows (9) jonas-replicator.red

   pad    OP  A  B  pad     A op      pad      B op
00000000 0100 00 00 000 0000000000010 000 0000000000000   00 40 00 02 00 00  ; JMP  start           (2)  0(0)
00000000 0000 00 00 000 0000000000000 000 0000000000000   00 00 00 00 00 00  ; DAT  0               (0)  0(0)
00000000 0001 01 00 000 0000000001001 000 1111111111111   00 14 00 09 1f ff  ; MOV # size(9)  src       (-1)
00000000 0001 10 11 000 1111111111110 000 0000000000101   00 1b 1f fe 00 05  ; MOV @ src(-2) < dst      (5)
00000000 1001 00 00 000 1111111111111 000 1111111111101   00 90 1f ff 1f fd  ; DJN  copy(-1)  src(-3)
00000000 1010 10 00 000 0000000000011 000 0000000000000   00 a8 00 03 00 00  ; SPL @ dst            (3)  0(0)
00000000 0010 01 00 000 0000110100001 000 0000000000010   00 24 01 a1 00 02  ; ADD # step(417)  dst      (2)
00000000 0100 00 00 000 1111111111011 000 0000000000000   00 40 1f fb 00 00  ; JMP  start           (-5)  0(0)
00000000 0000 01 01 000 0000000000000 000 0010100111001   00 05 00 00 05 39  ; DAT # 0(0) # init       (1337)

If you’re interested in the project you can read more on github.

In addition, or as a prerequisite, to this awesome project we also got an introduction to 68k assembly and to computer architecture which was very good.

This year me and a friend also made game in the Java programming course called Grand Thief Arto. Not the greatest of games but it was still fun to make it. I also became a mentor in discrete math for the first year students which was a fun and easy way to earn a bit of extra money.

Third year

This year we continued with some more advanced courses. We had some project oriented courses with some theory about how projects should be run and then a practical part where we made some software for an actual company. The overall idea the course idea is great, to get some real world experience and to get some interaction with an actual company, but the execution was very much not so.

For example in the middle of the project one of our project members were supposed to be exchanged with another member from another project. The motivation was that “in the real world this could happen, so you need to always be prepared” but that’s just stupid in my opinion. Firstly you don’t get fired and just booted from the team very often, but you get an advanced notice and you have some time to prepare the team, yourself and your eventual replacement for the move. Secondly it adds a very real sense of dread and nervousness for everyone involved. I happened to really like all members in the project and I was very worried to be switched out. Turns out I was the one who had to change project. I was very upset and I didn’t click nearly as well with the new team and I thought the experience really sucked and I became demotivated.

Another thing which was quite bad was the extreme focus on documentation. The whole first 2-3 months were supposed to be a planning stage and the actual implementation was supposed to be done the last 2-3 months. But large parts of the implementation stage were also spent on documentation, or rather writing documents because the course demanded it and we never had any use for the majority. The funny thing is that most of the project theory was spent on motivating why the waterfall development model wasn’t suited to software development, but what did the project degenerate into? Even despite our best efforts, we tried to implement an iterative development as our customers didn’t really know what they wanted, but we were foiled by course planners.

A much better project was the Robot project where we created an autonomous robot! There we poked around with hardware and lower level programming in C.

Debugging this… thing… was quite an experience.

I continued to be a mentor in discrete math and I joined Team Obelix which organized student visits to different companies. I won the “best CV” award given by Ericsson, I won some things in the local programming competition IMPA and I had a great course in operative systems where we used Pintos. I took an extra course in Graph Theory which was quite different from other math courses but very interesting. Additionally I took a Programming Languages course at Coursera, also quite nice.

This summer I also had my first real programming job which was a summer internship at Configura and I had a really good time and we replaced their triangulation software.

Fourth year

The courses from the previous years were all mandatory, with the exception of some extra courses I took, but for the 4th and 5th year I could choose my own profile and what courses to take. I spent quite a lot of time thinking about which courses I wanted to take. In the end I’m quite happy with my selection but there are many interesting courses I had to say no to. The main profile I targeted was the Programming and Algorithms profile.

In hindsight these are my favourite courses during the year:

  1. TDDD48 Automated Planning
  2. AAPS Advanced Algorithmic Problem Solving
  3. TDDB44 Compiler Construction
  4. TATA54 Number Theory
  5. TDDC17 Artificial Intelligence
  6. TDDD56 Multicore and GPU Computing
  7. TDDA69 Data and Program Structures (SICP)

I didn’t find the compiler course as fun as I had initially thought. The theory part wasn’t very interesting but the lab part was really, really good! All in all it still was a very fun course. The AI courses (Automated Planning and Artificial Intelligence) were great and AI is an area I’m very interested in. During this time I also took an online course in Machine Learning via Coursera by Stanford University. Number Theory is another maybe niche area in mathematics which I found interesting.

I continued doing some programming competitions as can be seen in UVa which enabled my to go to NWERC 2013 in the Netherlands. Ultimately I’m not super good at these competitions but it was still a great experience. Netherlands (or specifically Delft) was great. In the Multicore and GPU Computing course there was a parallel sorting contest which I and my lab partner managed to win. The goal was to create a sorting routine on the CPU with the best sorting performance. Oh and I also went through the classic book Structure and Interpretation of Computer Programs or SICP in a course. Very excellent book!

During the summer I also took part in IDA Summer of Code 2014 where I contributed to rust. I also had my second summer job at Configura:

Fifth year

At the end of my fourth year I had grown a bit study tired. I had thought the summer jobs would have helped a bit but although the summer jobs were amazing it might have been better to take a bit of a holiday, which I did not do at all.

But the real issue wasn’t me getting sick of studying, although I was a bit unmotivated, but I was fast approaching a burnout. It never got so serious that I became apathetic but it was pretty bad for a while. The last semester in my 4th year I only did 27 hp (30 hp is the target value) and the first semester in my 5th year I only managed 24 hp. I had accumulated extra points so I finished the university with 308.5 hp, of the required 30 hp, but I was less effective the last 1.5 year or so than usual.

I might write more about my burnout in another post, but I did three main things to get out of it. The first thing I did was to start CBT (Cognitive Behavioral Therapy or Kognitiv beteendeterapi in Swedish). The second was to continue with things which made me happy and more importantly gave me more energy. Basically I started exercising more regularly. And the third thing I did was to scale down on my ambitions and focus on taking care of myself, this is the reason I didn’t study 100% the first semester.

In the end I think I managed to get rid of the worst effects of the burnout and I managed to finish my studies. I was also a mentor in discrete math for a fourth time. I didn’t complete a ton of courses as the whole last semester was spent on writing my Master’s thesis but I did complete a great course in cryptology and one about logic programming in Prolog.

The cryptology course was especially good as it even introduced Bitcoin and the way the blockchain worked. Big kudos to that! I was aware of Bitcoin before but I wasn’t aware of the implementation details.

All courses

For reference this is the list of courses I completed. It surprises me at least to see how much I’ve actually done these years.

I started two extra courses which I never finished:

  • TAMS15 Mathematical Statistics, first course
  • TATA49 Geometry with Applications

The statistics course was started during my first year, but I finished a similar in my later years and the geometry course was taken as a fun extra course but I later decided to skip it.

First year

  • TATA41 Calculus in One Variable 1
  • TATA42 Calculus in One Variable 2
  • TATA65 Discrete Mathematics
  • TDDC10 Perspectives to Computer Technology
  • TDDC66 Computer Systems and Programming
  • TDDC67 Functional Programming and Lisp
  • TDDC68 Imperative Programming and Ada
  • TSEA22 Switching Theory and Logical Design
  • TSTE58 Electronics
  • TTIT02 Foundation Course in Mathematics

Second year

  • TAOP33 Combinatorial Optimization, Introductory Course
  • TATA24 Linear Algebra
  • TATA53 Linear Algebra, Honours Course
  • TATA61 Multivariable and Vector Calculus
  • TDDC36 Logic
  • TDDC69 Object Oriented Programming and Java
  • TDDC70 Data Structures and Algorithms
  • TDDD60 Interactive Systems
  • TFYY68 Engineering Mechanics
  • TSEA43 Digital Project Laboratory
  • TSEA47 Computer Hardware and Architecture, part 1
  • TSEA49 Computer Hardware and Architecture, part 2

Third year

  • TAMS27 Mathematical Statistics
  • TATA50 Transform Theory
  • TATA64 Graph Theory
  • TDDB68 Concurrent Programming and Operating Systems
  • TDDC93 Software Engineering Theory
  • TDDD09 Software Engineering Project
  • TEIO27 Technology Based Entrepreneurship
  • TFYA68 Physics
  • TGTU50 Visits to Industry
  • TSDT18 Signals and Systems
  • TSEA29 Microcomputer, Project Laboratory
  • TSKS10 Signals, Information and Communication
  • TSRT12 Automatic Control Y

Fourth year

  • TANA09 Numerical Algorithms in Computer Science
  • TATA54 Number Theory
  • TD1077 Advanced Algorithmic Problem Solving
  • TDDA69 Data and Program Structures
  • TDDB44 Compiler Construction
  • TDDC17 Artificial Intelligence
  • TDDD14 Formal Languages and Automata Theory
  • TDDD20 Design and Analysis of Algorithms
  • TDDD48 Automated Planning
  • TDDD56 Multicore and GPU Computing

Fifth year

  • TDDD08 Logic Programming
  • TDDD38 Advanced Programming in C++
  • TGTU49 History of Technology
  • TQDT33 Degree Project - Master’s Thesis
  • TSIT03 Cryptology

Posted in: Life, School.

Failed mime type for Krita

July 8, 2015

I thought Krita worked fine… Until I tried to save. Krita crashed whenever I tried to save (or open) a file and gave the error:

Could not find mime type "application/x-krita"

Turns out if you reinstall the package shared-mime-info which comes natively with Slackware the problem goes away.


Posted in: Slackware, Krita.

Offset coordinates in Krita with Xinerama

July 5, 2015

I recently bought an Intuos Manga drawing tablet recently, because I got this fix idea that I want to learn how to draw. And what better way to do it than with a drawing tablet, while satisfying my need for new things?

With little experience I boldly set forth and I found a lovely and free drawing program Krita. I’ve used photoshop earlier but it’s just so expensive and Krita seems like a good replacement. Inkscape is another good alternative for vector graphics.

To install Krita you need KDE, which should come preinstalled with Slackware. If you’re like me and decided to skip it you can install it with

slackpkg install kde

I had some trouble installing Krita, but ultimately this guide with cats worked when I also changed krita/plugins/formats/tiff/kis_tiff_converter.cc from

#if TIFFLIB_VERSION < 20111221
typedef size_t tmsize_t;
#endif

to

typedef size_t tmsize_t;

which I filed as a bug report over at KDE.

More troubling was the fact that drawing on the canvass was offset using dual screens with Xinerama. It worked fine in both Inkscape and Gimp and even on the gui controls. The problem went away if I switched to only a single screen. Now this is a common problem with Xinerama and Krita.

I did not manage to solve it using Xinerama, the bug is still unfixed. It works perfectly if instead of Xinerama RandR is used to setup the dual screen layout. I managed to set it up thanks to the excellent arch linux wiki.

The final result for me is to add this to .xinitrc and use a simple xorg.conf:

xrandr --output DVI-I-3 --mode 1920x1080 --pos 0x0 --rotate left --output DVI-I-2 --mode 1920x1080 --pos 1080x480

And Krita (and Inkspace, Gimp, …) works perfectly.

My full workspace setup is on github.


Posted in: Slackware, Krita.

Netrunner Spring Tournament

May 4, 2015

There was another, smaller, netrunner tournament about a week ago. I was looking forward to a very casual setting but there were also some guys who came from… Västerås I think, but I’m not sure. We managed to scrape together 9 people at least, and I didn’t notice anyone bringing anything super janky.

Runner is my Achilles Heel and so I decided not to make any big changes, I brought a more aggressive Leela deck with desperado and security testing. I know it should be a good deck as other people has won many tournaments with variations of it, but I’m feeling a bit less confident with it anyway.

My corp deck is a super fun deck with Industrial Genomics which had performed very well during testing but I’m still worried. My feeling is that it’s still the most janky corp deck in the tournament.

The tournament format is a simple swiss, with no playoffs.

Match 1, Bye

I came here to play netrunner, not to watch other people play netrunner… The 1 hour wait was quite boring to be honest.

4 points and I’m the lead! It feels sad though.

Match 2, Henrik Etf/Kate

vs Engineering the Future

So I play my friend Henrik again. I know his decks inside out, and he knows mine. It’s a bit fuzzy, but I don’t think I got a super terrible start. I try to keep his money low, but failing. I try to get some accesses, but I find nothing. He scores and I bounce and try to put some pressure but I fail. Somehow I’m locked out of all servers without any money and I lose 0-7.

Well played Henrik, well played. Still 4 points.

vs Kate

So I get set up and I get my money rolling. I score out an NAPD and a Fetal I believe, but we’re a bit low on time. I score some agendas and he’s finding nothing. He has a fairly good rig out, but he can’t get anywhere fast. But time is called and I win on time.

Time is my biggest enemy. 5 points.

Match 3, Fredrik NEH/Leela

vs Leela

Ah my trusty corp matchup. I’m in control the whole game and I get my asset economy set up. He makes the mistake of not trashing anything or running archives so I manage to get rich as a troll. He’s richer for a time with ~40 credits from clicking Kati every turn, but it doesn’t really matter when I rezz 2x Ashigaru on HQ and Tollbooth/Susanoo/Tsurugi on my scoring server, naturally with Ash or Caprice for protection.

I can score out quite comfortably. 7 points!

vs Near-Earth Hub

This is another one of these runner games where I have no idea what I’m doing wrong, but I’m severely locked out, without any money and the corp just crushes me.

The start is quite bad, no desperado and no security testing leaves me quite poor. He’s got 2 pieces of ice in front of HQ, the outermost unrezzed, I have some breakers and a little bit of money and I gamble with a Legwork but he rezzes a Tollbooth. Drats. I knew he had at least a Beale but also an Astroscript he scores out. This was a huge misplay, I should have either built up or focused on trashing his assets.

In the end the astrotrain rolled me quite hard with 3 astroscripts scores in rapid succession. I knew I should have built a shaper/anarch with Clot. Still 7 points.

Match 4, Harald Etf/Hayley

vs Hayley

A stealth Hayley deck. As against Fredrik I get my asset economy online but he’s pressuring my R&D a lot harder, luckily not finding anything. To combat stealth I stack sentries like a madman with 2x Cortex Lock and one Tsurugi over R&D and Susanoo and another Tsurugi over my scoring server. The tax is very real, both in credits and in clicks via net damage. I score out a couple of agendas and I’m ready to score out for the win, but the game ends after a desperation run on R&D with only 2 cards left - and a Snare.

Corp deck is fantastic, although I need to play it a bit faster. 9 points.

vs Engineering the Future

Finally I’m having a good start! I score an early agenda and add some pressure. He forces a score and I bounce ice on HQ and Account Siphons him down. I’m very much about to win, but my mortal enemy the time has decided to come visit me again, and I get a timed win.

Now this is how the feeling of playing runner should be! 10 points.

Summary

It seems I wasn’t the only one having trouble with running, as 22 victories came from the corps (15 AP, 3 flatlines, 4 timed) compared to the 10 runner victories (9 AP, 1 timed).

Anyways it appears like I did fairly well, even though the bye gave me a huge point boost and my 2nd place feels quite undeserved. Here are the final standings:

I never played Daniel, but it appears he crushed everyone this day. Well done!

While I didn’t win and I missed out on the playmat, I did get alt-arts of both Popup-window and Gordian Blade. Mmmh pretty! I especially like the popup-window art!


Posted in: Gaming, Netrunner.

Geekhack Toxic

April 9, 2015

I came back to Linköping yesterday and I had a package waiting for me to pick it up. What could it be?

With a crummy mobile phone photo I give you my TOXIC keycaps mounted on my trusty old das keyboard:

Woooo. If only my GH60 could arrive some time this decade…


Posted in: Computer, Keyboard, New Stuff.

CS:GO AWP Nerf

April 6, 2015

When this man opens his mouth, truth comes out.

If I ever make a game and I want someone to balance it and I had the money, I would hire Thorin.


Posted in: Gaming.

Netrunner Lindhska Store Championship Örebro

April 2, 2015

After the awesomeness during the previous store championship, I decided to go to the store championship at Lindhska Bokhandel in Örebro.

I brought a modified version of the same corp I used the last time, a Blue Sun kill deck and a new runner with Leela Patel. See the links for cards and some card choices.

The tournament was a 26-player one, at least that’s the number I heard, with 5 rounds of swiss followed by a double elimination bracket. 7 players from Linköping went, again I think but I’m not sure if that’s the correct number.

Swiss

Match 1, Tennin/Reina

vs Tennin

Memory is a bit fuzzy here. I think I got off to a good start, but somehow the corp stabilized and we went into a long slog of a game. For some reason the corp managed to score out before I could find the final agenda.

It certainly felt like I could have won the game, but I’m not sure what I did wrong. Might be that I wasn’t comfortable with the deck and played too aggressively. 0-2

vs Reina

Again I don’t remember the specifics. We had very little time and I manage to score out an agenda, so I get a timed win.

Still, corp felt great and I was in control, 1-2.

Match 2, RP/Chaos Theory

vs Replicating Perfection

Ah RP. Actually the first time I’ve played against the id, but I had a pretty good idea of how to approach the game. I scored an early agenda but I’m slowly getting locked out. Then he makes a pretty big misplay - he flips a naked remote and he wants to score, but it’s Nisei MK II instead of a 3/2 agenda and now he’s flustered. I apologize and I score the Nisei and I remove the Enhanced Login Protocol.

Still, he’s not out of the game. I run indexing but he hid a Jackson in a remote, stupid mistake! I manage to same old thing indexing again and I score another agenda and I place another agenda as the 5th card. I carefully count the cards and I manage to score the winning agenda, before being locked out of the game.

The opponent said he’s only played a week… Still played pretty good I’m very glad for that victory. 3-2

vs Chaos Theory

Another quick corp game. Snare last click into scorch for a simple victory. His inexperienced lost him the game there.

5-2 and feeling better.

Match 3, RP/MaxX

vs MaxX

We’re 6 players from Linköping and 2 from Stockholm at the top. Sadly I’m facing David, also from Linköping and we’re on our way to knock each other down.

The game is slow, very slow. I feel in control and take it slow and easy. Scoring some agendas when I get them, but not drawing all that much. MaxX runs out of cards and runs a Levy. Somehow he runs of cards again and I know I’ve won.

I have no idea how this happened, but we actually went to time, during our first match! Maybe it really was an intense game or maybe I was just tired or hungry… But anyway it happened. I manage to set up a win-win scenario for me during my second-to-last turn. Either he lets me score out or he runs the remote and let me sea-source scorch him to death (he had a hand size of 3 due to an early Cerebral Overwriter). He cooses the second option.

7-2

Match 4, NEH/Whizzard

vs Near-Earth Hub

This was by far the most stressful/exciting game of the day for me. I get a bad hand and I mulligan… Into a much much worse hand. No economy, no nothing. The corp scores an early astroscript, this isn’t looking so good… I do something, I can’t remember, then he sets up a remote with one advancement counter on. Curious, it’s probably an NAPD, but sadly I can’t get in and score so I’m gearing up for a next turn combo.

Sadly, it’s a Project Beale, worth 3 points and he’s got an astroscript token. From bad to worse, much worse. I desperately run his hand and his remote. Oh no, he’s got a scorch on top of R&D and he’s got a Data Raven protecting HQ. Luckily I’ve got a plascrete so I go tag-me with a Legwork, finding nothing. He’s using Jackson to draw like mad.

I run another Legwork with a same old thing through the Data Raven and I find two agendas and I get in some single-accesses on R&D. Lady luck isn’t smiling for long though as he draws and install-advance a remote. Surely an NAPD, which I’m too poor to get at.

My only hope is R&D and I have two interfaces out so I can access 3 cards. If I can bounce the NAPD I might still have a chance. The first card is a.. NAPD which I can’t steal. The second is a Breaking News so I bounce the advanced card now sitting on 5 agenda points.

I’m too poor to get the NAPD and the next turn I get Scorched to death.

The game was practically over from the terrible start, but I almost managed to steal a win. I got praise from the opponent but I can’t stop but think that I should have had a few more credits for that NAPD…

7-4, feeling the pain.

vs Whizzard

Another id I haven’t played against. He tried, and was successful for a while, with killing my oversighted curtain walls and keeping my economy low. But still, I managed to score out two the cleaners and putting more and more pressure as I gradually build up my economy lead. I think I hit a shattered remains as well.

The game ends with me advancing the winning agenda, he tries but cannot access it or any other agenda, and I score for the win.

Again corp is feeling absolutely great. 9-4

Match 5, EtF/Kate

This time I’m faced up against Henrik, my buddy from Linköping who knows my decks and I know his decks. Sadly it appears this is the battle for top 8.

vs Engineering the Future

During practice I felt very confident with my Leela deck and I get a great start scoring two 3/2 agendas. Not thinking more about it I try to build up a bit and getting ready to score the winning agenda as I know he has a few 5/3.

But things are not shaping up that way. I try to keep is economy low but he manages to get two adonis campaigns up and running and he hits two large GRNLD Refineries. Probably a huge misplay by me to allow that to happen. With his economy up he gets some nice taxing servers up and my aggressive running has not paid off at all. He’s all set up and I practically have nothing.

My last hope is an indexing through a Janus I know is there. By my counts I’m only 2 or 1 credit off from making two succesful runs through R&D in the hopes of scoring out, but it’s not meant to be. I’ve already accumulated 3 brain damage from previous (too aggressive) encounters.

With great play he manages to score out and win. Well played. 9-6

vs Kate

Again I’m having difficulties to recall the specifics of the match. I know I managed to hit one shattered remains to stop his drip econ for a while. I manage to score an agenda but time is running out.

I have a 5/3 agenda which I’ve already advanced twice. I literary have my whole hand full of kill cards: 1 snare, 1 sea-source, 3 scorch and 2 punitives and with more money I’m just waiting for him to make a run. I decide to fake the agenda as the almighty 9/6 Government Takeover agenda and I advance it up to 7 in the course of two turns. In hindsight it might have been better to score it out as a 5/3, but that’s not what I did.

So sitting at 7 advancement counters Henrik decides to… Not run it! Instead he runs my hand twice, the second time he imps my sea-source. Sigh.

So the game ends with me winning on time, somehow it feels a bit frustrating as I had so much control the whole game, thinking how can I loose? Turns out, with some bad luck and some good runner decisions it’s quite possible not to win.

10-6.

The Cut

As Henrik and I had the battle for the last place into playoffs, which I lost, Henrik makes the cut on 11 points and we’re a bunch of other players with 10 points. Huge congrats to Henrik as he really did play better than I did.

Summary

Once again I’m amazed by the friendliness of the Netrunner community. Everyone was really nice and friendly. I joked around a bit with some guys and girls I’ve never even met before, which is no small feat with a very shy and introvert person such as myself. I got a ride all the way from Linköping to Örebro and the guy with the other car even came and asked me if I wanted to come with him earlier as I got knocked out. As it happens I stayed and watched some of Henrik’s and Fredrik’s matches.

As for the games themselves I’m super happy with my corp deck which practically went undefeated during the tournament. I felt quite comfortable to win both the games where I got a timed win from.

The runner deck however I’m not super happy with. It felt slow and low on economy and just a bit awkward. Some of the problems can be attributed to good corp play: I didn’t land many good account siphons which made my economy quite bad and they played around Leela’s ability quite well. Ice up centrals at least twice and don’t score out agendas on the last click.

But mostly I think I didn’t play the runner deck right, I wanted to play more aggressively than maybe you’re supposed to with a slower control deck such as the one I had made. I really need to try out a Leela build based on Desperado and an economy package with Dirty Laundry and Security Testing, I think it might fit my style better. I also want to play around more with the wonderful Anarchs…

Looking forward to the next time I can play some Netrunner!


Posted in: Netrunner, Gaming.

My first netrunner store championship

February 24, 2015

My girlfriend has told me I get these narrow interests where I pour all my energy and thoughts into and about 1,5 months ago I discovered Netrunner, a very awesome card game. Check out this how to play or team covenant’s channel if you want to know more.

So this Sunday I went to my first store championship with Henrik, the one other player I’ve competitively played the game with. Well I’ve played 2 games with my girlfriend, a bunch (10-ish) with her little brother and a few with another friend of mine but there I’ve always been the one teaching the game and making the decks and Henrik was the one who taught me the game.

I decided to bring a Blue Sun deck which tries to kill you and a prepaid MaxX deck I’ve been playing around with lately. The decks are very fun to play and I felt pretty good about them, but I certainly didn’t expect to get top 4, which I did!

The tournament was a 12-player one with 4 rounds of swiss followed by a double elimination bracket.

Swiss

Swiss is played both as runner and corp and you get 2 points for each win with a 65 min time limit.

Match 1, NEH/Kate

vs Near-Earth Hub

The tournament went off with a bang when I faced the tournament organizer and his self-proclaimed “fast deck”. True enough. I manage to snag an Astroscript early, femme the wraparound in front of HQ and I’m feeling good. However he’s got a ton of money, I’m poor, and he installs another Wraparound in front of HQ and I only have an eater and a femme and no Keyhole. He proceeds to rezz a SanSan and score out a Beale. I manage to trash the SanSan but he rezzes another one and scores an Astroscript. Basically over from there, 2-7 is the final score.

I was a bit flustered as I had never played against a deck like this, only read about how horrible it was and it was indeed a bit horrible. 0-2.

vs Kate

I don’t remember very much of the game or what type his runner was, only that I got a remote up and install-advance-advance a The Cleaners. He does some things and thinks a bit. He decides to run the remote and scores, but he’s down to 3 cards. I proceed to Sea-Source Scorch for the win, with a Punitive on hand for extra overkill.

2-2 in prestige and I’m feeling good, I managed to grab a win!

Match 2, Making News/Kate

vs Stealth Kate

I feel pressured the whole game but manages to stabilize a bit. I had several agendas on hand the whole game but I install a snare in the remote hoping for a scoring window next turn. Turn before he ran into a Taurus in an empty remote (for Bank Job/Desperado money) and I trash Desperado and an R&D interface. But the runner doesn’t bite and goes for a Maker’s Eye on R&D, but hits a surprise Snare and dies with only 2 cards in hand.

Things are going better than expected, the decks are performing pretty well. 4-2.

vs Making News

I saw the deck during the first match and I knew he ran a tag storm deck with some tag punishment. I play it safe and get an early Private Security Force in a naked remote. As the game goes on I manage to get my Keyhole/Eater combo up and I manage to mill two agendas into the archives and he has an NAPD scored. Sometime during the game he plays a Midseasons and gives me a ton of tags and trashes a same old thing and a hades shard, prolonging the game a bit.

Later on he realizes it’s a misplay as you can only play it the turn after a runner scores an agenda (I didn’t even think about it). The judge says that makes it a default win for me, but we decide to play out the game just to see what happens. As it turns out I manage to win the turn after, so I consider it a fair win.

I’m now up 6-2 and things are going much better than expected.

Match 3, Andromeda/HB

vs Andromeda

We come back after lunch and I find myself on the top table, meaning I have one of the best scores so far! But now I’m playing a fairly standard Andromeda, the (apparently) most feared runner. But I dunno, I’ve never played her.

I get a turn 1 housekeeping but for some reason I don’t play it immediately! No idea why I don’t, but at least I do it turn 2 and it messes him up a ton. Turn 2 I also have a Government Takeover and a punitive on hand and I decide to play the takeover in a remote. But then he decides to play a Crash Space the same turn and now my nerves are on the edge! Luckily he doesn’t run it and the game slows down a bit.

Then I get a second punitive on hand and I decide to advance the takeover, hoping to entice him to run it. But still he doesn’t bite. Instead he manages to score an agenda from hand and now he can win by running the remote. He still has 3 cards on hand and I have 2 Punitives… I decide to use them to slow him down and to remove his Crash Space. He spends the next turn drawing cards and I can ice up the remote some more, possibly replacing or start advancing the Takeover.

The game ends when he accesses a Snare on his second click. He removes the tag on his third but now he’s got two cards. For his fourth click he boldly proclaims “living on the edge!” and runs my HQ and scores another agenda. He’s now 6-0 but he’s down to two cards and another player comments “don’t die”. I promptly kill him the next turn with Punitive.

Super tense and fun game! Now I’m 8-2 and things are going fantastic, my corp deck has pulled through like a boss.

vs The Foundry

Now I know he runs grail and I try to be super careful. I play it slow and I manage to get my keyhole/eater combo up and I’m getting a ton of cheap R&D access but I keep missing agendas. Still feeling good, I’m in control of the game and I have an agenda. He scores an Accelerated Beta Test and luckily for him he hits two ice and installs over archives and R&D. But I still have R&D access and can continue with the keyholes. I manage to mill 2 NAPD into archives.

Then he rezzes a Will-o’-the-Wisp and my Eater is dead, my game is completely stomped. Locked out of archives and locked out of Retrieval Runs I feel the game is lost to me. I get a Mimic out and try for a remote access, but I run into a Merlin. He searches for another copy and reveals two Merlins in hand for a total of 6 damage, I have 5 cards on hand with one I’ve Had Worse. He draws 2 cards, nothing. He draws 2 more and the last card is I’ve Had Worse, I draw 3 more cards and I barely survive.

When I finally get out my Eater out we’re running out of time. He installs something in a remote which I can’t access and archives is still expensive. If I had one more round I could money up and go for the archives, but now it feels like the game is over. Luckily it’s not an agenda in the remote. He draws another beta test and we both needed just another round.

We draw the game and I’m now 9-3. Feeling good but high on adrenaline after two of the craziest games I’ve ever played!

Match 4, Valencia/Harmony Medtech

vs Harmony Medtech rush

Another identity I’ve never played, but now without any idea what I’m supposed to expect. Luckily I get set up fast and I manage to steal an early agenda. He’s having trouble finding agendas and I’m getting a ton of keyhole access. I find another agenda with keyhole and I’m feeling good, even though 2x tsurugi in front of archives are very taxing. He installs two cards in a remote server (and advances one I think?) protected by a guard and a lotus field but I destroy the ice, win the psi game and scores an NAPD for the win.

I’m a little proud for accessing the face down first as I only had 4 credits on hand, instead of trashing the caprice only to have to leave the NAPD there. More experienced players might say it’s a given, but learning the rather large card pool isn’t that straightforward.

Incredibly I’m 11-3, sitting on the top table and I think I have a good shot at top 4.

vs Control Valencia

Henrik also brought Valencia and I really considered to have Elizabeth Mills in the deck, but I cut her the day before. Perhaps I shouldn’t have.

Playing a control Valencia I feel a bit shut down. The game goes long and I have 2x punitive. Runner is pressuring me with Itinerant Protesters and keeping me poor with account siphon. I had a window where the runner had 4 tags, I try to draw for the scorched win but I don’t find it. I’m poor most of the game but finally stabilize and get a Housekeeping up. I place Government Takeover in archives but runner doesn’t bite. I place a snare and a crap card in remotes and runner does 2x Blackmail, but clears tags and draws up. I see my chance and install-advance-advance a The Cleaners, but another Blackmail makes it a score for the runner. Out of tricks I loose to the later archive run.

Probably some misplays, but I felt behind the whole game. Very strong deck, might reconsider ms Mills. 11-5.

Playoffs

The top seed has 12 points and I’m second with 11 points. 2nd plays 3rd which means I’ll get a rematch of my last match.

Match 5, Harmony Medtech

Rematch time! I got to choose runner/corp and I went with runner as the game went very well the last time. This time however I don’t get the fast setup and he has an early remote which I can’t get into and the game is over quite quickly.

6-0 is the final score and I feel a bit deflated.

Match 6, MaxX

Once again I get to choose sides. I’m a bit bummed over my runner from the last game so I pick my corp and he’s running… MaxX. Yoy!

He runs more regular breakers with double D4v1d, which is very bad for me. He’s also keeping me poor, forcing me to rezz ice all over the place, and I’m missing most of my economy cards. When I do get my Oversights, he’s far richer than I am wih Kati/Liberated Accounts/Daily Casts.

I do get my Janus, trying to trick him into it to kill his D4v1d counters and clicks, but he doesn’t bite. He scores a 3-pointer and the game goes long. I end up clicking for credits, trying to have enough money to protect my Government Takeover sitting in my hand while trying to drain his economy during runs. His Yog kills my Datapikes and I feel constrained.

The game goes to time and I hear the judge call out “15 seconds”. I install-advance-advance a 3-pointer, judge calls time and he has one turn left and I have one more. If the game is a tie I will win as I’m the higher rank (he was 4th after swiss). I do have 2 Punitives on hand and 32 credits. But he has ~ 40 credits. He runs the server, I rezz some ice and he steals the agenda. I bounce the ice but I don’t have enough money to kill him so we go to time and he wins 6-0.

I misplayed as I could have rezzed a Janus when he stole the first agenda, but I didn’t think I had enough money so I didn’t. If I did he would have spent the D4v1d counters and the rest of his clicks, possibly steal an agenda from HQ, and then I would have enough money for a kill (I think)! Also I should have placed Janus on a remote, in front of another big piece of ice. Probably also too passive play from my side, I might have had a scoring window when he only had a D4v1d out and a scored The Cleaners might have turned the tides.

Still, that’s the end for me and I finish 4th.

Summary

I was fairly confident in my theory crafted decks (some limited testing) and they did perform above expectations. I won a cool playmat and had a very, very good time! All were very nice and friendly and I sure want to play some more netrunner.


Posted in: Netrunner, Gaming.

2014 Read Books

December 31, 2014

In total I read 20 books, which is 33% less than last year.

Fiction

  1. How to Be a Woman - Catilin Moran
    Fun!
  2. The Kill Room - Jeffery Deaver
  3. A Song of Ice and Fire: Game of Thrones - George R.R. Martin
    Reread.
  4. A Song of Ice and Fire: A Clash of Kings - George R.R. Martin
    Reread.
  5. A Song of Ice and Fire: A Storm of Swords - George R.R. Martin
    Reread.
  6. A Song of Ice and Fire: A Fest for Crows - George R.R. Martin
    Reread.
  7. The First Law: The Blade Itself - Joe Abercrombie
  8. The First Law: Before They Are Hanged - Joe Abercrombie
  9. The First Law: The Last Argument of Kings - Joe Abercrombie

Non-Fiction

  1. The Power of Habit - Charles Duhigg
    How habits work. Helped me get more productive.
  2. En Perfekt Natt - Björn Jedensjö
  3. Elementary Number Theory - Kenneth H. Rosen
    Course book. Fun subject.
  4. Competitive Programming 3 - Steven & Felix Halim
    The ultimate reference to competitive programming. A lot about problem solving and algorithms. Very good. Used as course book as well.
  5. Game Programming Patterns - Bob Nystrom
    A very good read.
  6. Structure and Interpretation of Computer Programs - Gerald Jay Sussman, Hal Abelson
    The examples are what makes this book really shine.
  7. Automated Planning - Ghallab, Na, Traverso
    Course book. Subject very interesting, book a bit heavy.
  8. A Drunkard’s Walk
    Interesting and eye opening.
  9. Logic, Programming and Prolog (2ed) - U. Nilsson and J. Maluszynski
    Couse book. A bit too theoretical for my taste.
  10. Introduction to Cryptography with Coding Theory - Wade Trappe, Lawrence C. Washington Course book, quite good.
  11. The Shock of the Old - David Edgerton
  12. Den skapande människan - Staffan Hansson

Posted in: Read Books.

2014 in Review

December 31, 2014

Previous reviews: 2010, 2011, 2012 and 2013.

2014 Geek Achievements

  1. Solved 73 UVa problems.
  2. Won a turn in IMPA and solved a bunch of problems.
  3. Completed a doctorand course about algorithmic problem solving.
  4. Finished my 4 first years in University.
  5. Became a contributor to rust and became a friend of the tree.
  6. Completed the online course Machine Learning in Coursera.
  7. Entered Ludum Dare 29.
  8. Had an awesome summer job at Configura.
  9. Entered IDA Summer of Code.
  10. Wrote a lot of Rust and C++.
  11. Wrote some CM, Racket, Haskell, Lua, Prolog and probably something else.
  12. Made a timeedit rust library, scheduling information for university.
  13. Made a habitrpg rust library, fetching info from habitrpg.
  14. Was a mentor in Discrete Math.
  15. Went to Dreamhack.

2014 Non-Geek Achievements

  1. Achieved 2-kup in Taekwon-do.
  2. Been mostly pain-free, well, better at least.
  3. Been a kids trainer in Taekwon-do. Very rewarding.
  4. Survived a couple of training camps.
  5. Read 20 books
  6. Wrote 32 blog posts.
  7. Played a touch of Go, the boardgame.
  8. Discovered Ticket to Ride: Nordic Countries, a nice boardgame.
  9. Also played Carcassone another great boardgame.
  10. Played some other boardgames.
  11. Read some manga and manwha.
    Kingdom was the year’s highlight.
  12. Got a few 12-win arena runs in Hearthstone

2014 Failures

  1. Did not complete my Ludum Dare entry.
  2. Did not start a hardware project.
  3. Got burnt out.
  4. Skipped an extra course in geometry and one in probability.

Plans for 2015

  1. Take care of Veronica.
  2. Achieve 1-kup in Taekwon-do.
  3. Do more strength training.
  4. Do some more yoga.
  5. Participate in Ludum Dare.
  6. Prettify the site.
  7. Code a lot.
  8. Read more books.
  9. Play some more boardgames.
  10. Complete the exjobb.
  11. Finish university studies.
  12. Get a job?

Posted in: Yearly Review.

A Christmas Game

December 26, 2014

I’m going through a bit of a boardgame stint, as I usually do during christmas time. I had exactly one thing on my wishlist for this christmas for my little brother: Ticket to Ride: Nordic Countries. Guess what? I got something from my wishlist!

This was our 5th or 6th game (or something?) and it’s a nice piece of game! Much simpler than Agricola and Terra Mystica (our current favourites) but still with a healthy dose of decision making. It’s a fun and straightforward game.


Posted in: Gaming.

Extracting schedule information from timeedit

November 27, 2014

At liu we use timeedit to track our schedules. Recently they updated their interface and improved some parts. It’s now possible to create a prenumeration of a collection of courses exported as csv which can then be imported to other calendar apps. But they also started to obfuscate their urls.

This is the schedule for a single course TGTU49 in the interval “now - 2015-01-17”:

https://se.timeedit.net/web/liu/db1/schema/ri157XQQ519Z50Qv27045gZ6y7Y7206Q6Y45Y7.html

This is for the courses TGTU49 and TATA49 in the same interval:

https://se.timeedit.net/web/liu/db1/schema/ri15YXQ2519Z55Qv2X0457Q6y4Y120876Y45Y7gQ6076775Z7.html

There seem to be some logic behind the urls, but first, let’s look at how they handle search.

Using firebug we can intercept the json requests when we click the search button at https://se.timeedit.net/web/liu/db1/schema/ri1Q7.html. We find a GET request to https://se.timeedit.net/web/liu/db1/schema/objects.html?max=15&fr=t&partajax=t&im=f&sid=3&l=sv&search_text=TGTU49&types=219&fe=132.0&fe=115.20132,20141,20142 which has has some search results formatted as html:

<div id="objectbasketitemX0" data-id="363972.219" data-idonly="363972" data-type="219" data-name="TGTU49, Teknikhistoria, 1, TGTU49 1445-1503 Valla"  class="clickable2 searchObject   " >
  <table id="table0" cellspacing="0" cellpadding="0" class="infotable infotablenormal">

    <td>
    <div id="info0">
    <div class="infoboxtitle ">
      TGTU49, Teknikhistoria, 1, TGTU49 1445-1503 Valla
    </div>
    <div class="objectfieldsextrawrap">
    <table cellspacing="0" class="objectfieldsextra">
    </table></div>

    </div>
  </td>
  </tr></table>
</div>

types=219 means we’re searching for a course and if can change it to types=205 we can search for student groups instead. If we change objects.html to objects.json we even get a json response:

{"Kurskod":"TGTU49","Kursnamn":"Teknikhistoria","Omgång":"1","Kurstillfälle":"TGTU49 1445-1503 Valla"}

json looks much better and it’s a lot easier to parse, but unfortunately if we instead search for “TGTU” we only get one match but using html we get six. What’s worse, there’s a lot less information given with json. data-id for example seems important as it’s the unique id signifying the course.

As I’m writing this I tried .txt as well and we get a much larger json response which contains data-id, among other things.

Investigating the page source in ta schedule page we find

<span class="hidden" id="links_base" data-base="https://se.timeedit.net/web/liu/db1/schema/ri.html?h=t&amp;sid=3&amp;p=0.m%2C20150117.x&amp;objects=363730.219&amp;ox=0&amp;types=0&amp;fe=0"></span>

Which seems to suggest that we can send a request directly to https://se.timeedit.net/web/liu/db1/schema/ri.html with url parameters.

For example

https://se.timeedit.net/web/liu/db1/schema/ri.html?sid=3&p=140703-141231&objects=363972.219

Is a search for TGTU49 (data-id: 363972.219) between 2014-07-03 and 2014-12-31 and

https://se.timeedit.net/web/liu/db1/schema/ri.html?sid=3&p=140703-141231&objects=363972.219%2C363741.219

searches for TGTU49 (data-id: 363972.219) and TATA49 (data-id: 363741.219).

sid is an important flag here which specifies what information you’re interested in.

sid               Information given
------------------------------------------------------
3                 Date Course Local Type Teacher Group
4                 Date Type Teacher Local
others            Date

There’s a bunch of other parameters which we can simply ignore. This time if we replace .html to .json we get a nice json request:

{
   "columnheaders":[ "Kurs", "Lokal", "Undervisningstyp", "Lärare", "Studentgrupp", "Fria grupper", "Information till student", "Studentförening", "URL" ],
   "info":{ "reservationlimit":50, "reservationcount":17 },
   "reservations":[
      {
         "id":"361731",
         "startdate":"2014-11-04",
         "starttime":"13:15",
         "enddate":"2014-11-04",
         "endtime":"15:00",
         "columns":[ "TGTU49", "KEY1", "Föreläsning", "Dick Magnusson", "KA3, EMM3, EL3, PRO2", "", "", "", "" ]
      }, ...  ]
}

We can also get information formatted as .txt and .csv. For parsing purposes the best one should be json, as we can use rust’s json deriving, but then we need to create a bunch of structs. .csv is actually very easy to parse and it looks like this:

TimeEdit, Linköpings universitet
"TGTU49, Teknikhistoria, 1, TGTU49 1445-1503 Valla", 2014-07-03 - 2014-12-31 ,
Startdatum, Starttid, Slutdatum, Sluttid, Kurs, Lokal, Undervisningstyp, Lärare, Studentgrupp, Fria grupper, Information till student, Studentförening, URL
2014-11-04, 13:15, 2014-11-04, 15:00, TGTU49, KEY1, Föreläsning, Dick Magnusson, "KA3, EMM3, EL3, PRO2", , , ,
...

Which is what I did. For a more stable library I should probably switch to json parsing, but there it is.

I made a rust crate which uses the outlined approach to retrieve scheduling information from timeedit. There’s a bunch of things I’m not supporting, but it’s enough for my needs. I made a simple cli and integrated a .schema command into my irc bot.


Posted in: Programming.

Hearthstone on Wine

November 12, 2014

I like Hearthstone and recently the next expansion Goblins vs Gnomes so I wanted to install and play it. It didn’t work in vanilla wine, with a “time out error”, but I found a bug report which makes it work. Here’s a short summary:

Get wine source from git. My version was wine-1.7.30-121-g6fe4d9e.

Make shlexec.patch inside the source directory

@@ -, +, @@ 
    Revert "shell32: Use CREATE_NEW_CONSOLE when SEE_MASK_NOCONSOLE is omitted."
    
    This reverts commit 2005be6dc92c0943ede01525cecad88f8e83c9c7.
--- a/dlls/shell32/shlexec.c	
+++ a/dlls/shell32/shlexec.c	
@@ -338,7 +338,7 @@ static UINT_PTR SHELL_ExecuteW(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
     startup.dwFlags = STARTF_USESHOWWINDOW;
     startup.wShowWindow = psei->nShow;
     dwCreationFlags = CREATE_UNICODE_ENVIRONMENT;
-    if (!(psei->fMask & SEE_MASK_NO_CONSOLE))
+    if (psei->fMask & SEE_MASK_NO_CONSOLE)
         dwCreationFlags |= CREATE_NEW_CONSOLE;
     if (CreateProcessW(NULL, (LPWSTR)lpCmd, NULL, NULL, FALSE, dwCreationFlags, env,
                        lpDirectory, &startup, &info))

Before make run

patch -p1 < shlexec.patch

Then do make and make install as normal and have fun with Hearthstone.


Posted in: Wine, Slackware.

Soda

October 21, 2014

These quotes are from hacker news and I found them all too funny.

It’s hard for me to understand the whole soda phenomenon in Canada and the US. Is it as addictive as cigarettes? Does it make you crave for more? Or it simply tastes so good that you can’t get enough of it? Why not eat a bunch of apples instead (if you don’t care about the amount of sugar you consume)? Wouldn’t they taste better?

What are you drinking instead of soda in your country?

uh, water?

Water? Like out of the toilet!? (From the movie idiocracy).


Posted in: Life.

IDA Summer of Code 2014: Summary

October 6, 2014

This is a wrap-up post of my entry to IDA Summer of Code this year.

Quick stats

65 merged commits
6790 lines added
2822 lines deleted

36 pull requests, 34 merged
12 pull requests directly fixing issues
rest either documentation or cleanup

1 RFC submitted (postponed)

Worked ~160 hours

Initial work

Before this summer I had never contributed anything to open source. Inspired by the open source gardener my first steps was to read through all issues labeled A-doc, E-easy, E-mentor and I-papercut mainly to find some easy issues I could work with. Issue #15780 was for example the first issue I fixed. Before fixing issues it’s good to read through information for contributors, see for example rust guidelines, contributing and development policy but there may be more scattered about.

I contacted Steve Klabnik, who wrote the open source gardener and who’s been hired by Mozilla to work on rust and asked how I best could contribute and he thought documentation was an excellent way to contribute. I had also heard that documentation was low-hanging fruit so I figured it was a good way to start.

Documentation

The approach I took with documentation was to pick a part of the standard library, specifically collections, and I wanted to make sure everything had runnable examples. Personally the most useful thing when learning a new language is examples.

For example Vec::as_mut_ptr has the type signature fn as_mut_ptr(&mut self) -> *mut T and the documentation is basically a copy of the signature with some descriptive text. But the text says nothing of how to actually use the function. I just want to know how I use the pointer. A descriptive example is gold worth as it saves you so much time:

use std::ptr;

let mut v = vec![1i, 2, 3];
let p = v.as_mut_ptr();
unsafe {
    ptr::write(p, 9i);
    ptr::write(p.offset(2), 5i);
}
assert_eq!(v, vec![9i, 2, 5]);

You don’t even have to be that familiar with rust to see what the function does and how to use it with little more than a glance.

My first rust contribution was a main example for HashSet and my last accepted pull request documented Result and Option which is quite fitting as most of my contributions were documentation related. When finished I had made sure collections had runnable examples for everything except deprecated items and some which should be reworked (like btree). I made larger examples for priority_queue and rand using Dijkstra’s algorithm and a Monty Hall simulation which turned out quite decent and some documentation for other things.

Writing examples was more fun than I had initially thought and the reviewers seemed very happy with my contributions, which feels good. I might do something more in the future.

Issues

rust uses issues for everything from bugs to smaller feature requests. I fixed some easier ones like preventing failure with non-UTF8 formatting and JSON decoding fails on trailing comma. Even though the issues and the fixes are small, a lot of time went into fixing them. Time searching for issues and time spent familiarizing with the code base easily trumps time actually writing the resulting code.

For example when I tried to fix #12794, to modify json decoder to handle optional fields, a lot of time was spent reading about #[deriving(Decodable)] and how it’s implemented and I hoped to introduce a general way for all types deriving Decodable to handle optional types. This led me to investigate syntax extension and fairly deep compiler hooks, but this led me to a bit of a dead end and the final pull request is a simpler hard-coded Option handling for json.

My issues and pull requests.

Bug triage

Another way to contribute is to enter rust’s bug triage program where you receive a random set of old issues (I got 10 each week) and your task is to solve, bump, close or clarify them to the best of your ability.

I don’t think I actually managed solve a lot of issues, maybe a couple, but I did try to. At the very least I tried to replicate old issues to see if they’re still relevant and if so make an up to date test case. If not I’d usually just bump the issue.

RFC

rust uses the RFC process which all “substantial” changes to the language have to go through. Changing semantics, adding keywords or changes to the standard library are typical examples which requires an RFC.

Early on when reading rust’s old tutorial I cringed a bit of the use of Newtypes:

struct Inch(int);
let length = Inch(10);
let Inch(integer_length) = length;
println!("it's {} long!", integer_length);

But this isn’t very ergonomic and it just feels like a big hack to call a one element tuple for a newtype. So I wrote an RFC which proposed to introduce a newtype keyword which automatically derives the underlying traits of a type:

newtype Inch = int;
let length: Inch = 10;
println!("it's {} long!", length);

The feedback was positive overall, but it’s currently postponed until after 1.0 as it could be implemented with backwards compatibility in mind. There was also discussion about possibly favouring Generalized Newtype Deriving over a new keyword:

#[deriving(Sub, Show)]
struct Inches(int);

Which gives the ability to skip unwanted traits, for example multiplication might not make sense for an Inch as the resulting type would be Inch^2.

What it meant to me

I had a blast doing summer of code! It has long been a wish of mine to contribute to open source and rust has fascinated me a long time and I’m really happy I got the chance to work and to get paid doing this. Having a summer job doing something you might do anyway is per definition a great summer job.

It was more than just getting paid, it also gave me a push to becoming a contributor to rust which is big confidence boost for me and hopefully it gives me a good starting point to contribute more in the future. And of course it gave me a nice excuse to play with rust, which is really shaping up to be a nice language.


Posted in: IDA Summer of Code.

ISOC update

September 4, 2014

I have now worked a bit more than 3 weeks out of my 4 weeks of IDA Summer of Code and this is an update post of what I’ve done so far. I will write a more extensive summary post at the end of the project. I was planning on writing a weekly summary, but that ship sailed a long time ago.

I’ve written a lot of documenting code examples, specifically making sure most of the methods in collections had examples. I’m especially proud of the main examples for priority_queue and rand I wrote about here and here.

I have one RFC where I propose to introduce a new keyword newtype. I don’t think it will be accepted, but it spurred some good discussions and something similar might be included further down the road. It remains to be seen if it will be with a new keyword or if we’ll utilize existing constructions.

Other than that I’ve done a bit of triage: the act of looking up old issues to see if they are relevant, update them and preferably fix them. I have done some small fixes to a couple of issues, most have been very minor ones like adjusting error messages or adding tests.

The time I have left I will try to fix more issues. This week I tried to add default arguments for json decoding when using Option, but I approached it the wrong way. I may attempt to do it “the right way” but I’m unsure if I can come up with a nice way.


Posted in: IDA Summer of Code, rust.

Embedding youtube videos with Hakyll

September 1, 2014

A while ago a made a timelapse of my entry to Ludum Dare. This is how I parse and embed videos using Hakyll.

I don’t want to remember any special syntax for embedding, I don’t want to bother (remember?) to use something like {% youtube: <link> %} or whatever syntax we might find pretty. The simplest solution I could think of is simply to have a bare link separated by newlines:

Some text...

<link>

Some other text...

Would embed <link> as a video. A youtube link seems to always start like: https://www.youtube.com/watch?v= which we can parse with a simple regex. If we run this after compilation the link will also be surrounded by <p> tags.

-- Need to import the regex
import Text.Regex (subRegex, mkRegex)

-- Find and replace bare youtube links separated by <p></p>.
youtubeFilter :: String -> String
youtubeFilter x = subRegex regex x result
  where
    regex = mkRegex "<p>https?://www\\.youtube\\.com/watch\\?v=([A-Za-z0-9_-]+)</p>"
    result = "<div class=\"video-wrapper\">\
                \<div class=\"video-container\">\
                  \<iframe src=\"//www.youtube.com/embed/\\1\" frameborder=\"0\" allowfullscreen/>\
                \</div>\
             \</div>";

The rendering part is not pretty and I’m sure one could move it to a template somehow.

We can use with:

applyFilter :: (Monad m, Functor f) => (String-> String) -> f String -> m (f String)
applyFilter transformator str = return $ (fmap $ transformator) str

And use it right after we compile:

match "posts/*.markdown" $ do
    route   postRoute
    compile $ pandocCompiler
        >>= applyFilter youtubeFilter
        >>= saveSnapshot "content"
        >>= return . fmap demoteHeaders
        >>= saveSnapshot "demoted_content"
        >>= loadAndApplyTemplate "templates/post.html" (postCtx tags)
        >>= saveSnapshot "post"
        >>= loadAndApplyTemplate "templates/site.html" (postCtx tags)
        >>= deIndexUrls

I did not write this code originally, I found it on someone else’s blog, but I managed to loose the link and now I can’t find it.

The styling of the video is from another blog post:

.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 30px;
    height: 0;
    overflow: hidden;
}

.video-container iframe, .video-container object, .video-container embed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

.video-wrapper {
    width: 600px;
    max-width: 100%;
}

Now in the end this:

https://www.youtube.com/watch?v=NIbr-mLi4DU

Will be transformed to:

The full source can be found on github.


Posted in: Hakyll, Haskell.

Undo git reset --hard

August 29, 2014

I purposefully and more or less idiotically executed git reset --hard <hash> in hopes of going back a bit. What I didn’t realize then is that you throw away all the commits between now until <hash>. Not quite what was planned.

After a bit of panic I found the answer:

  1. Find your hash using git reflog.
  2. Do git cherry-pick <hash> to go back in time.

This saved me a bunch of time, thanks!


Posted in: IDA Summer of Code, Git.

Vacation

August 14, 2014

Finally back from a 2 week vacation up at Övertorneå. It’s been pretty great to be taken care of and not doing anything. Well, I did get my ass kicked in Terra Mystica and I played a bit of Minecraft, but still. We got some nice food and my in-laws and my parents were nice.

I’m still feeling extremely tired though and I don’t know why. The vacation was great but it feels like I need more. It’s quite horrifying when you come home from your vacation feeling tired. It’s a sure sign of stress and overexertion but I’m not entirely sure what to do about it.

I do have a wonderfully supportive girlfriend though, so things aren’t looking all too bleak, maybe I can survive.


Posted in: Life.

Monty Hall

July 30, 2014

I’m currently reading The Drunkard’s Walk, a well written book about probabilities. There they discussed the famous Monty Hall Problem. I’ve heard about it before and I know the answer, but he mentioned a simulation of the problem and that sounded cool so I made a simulation of my own. This example will be in the rust documentation as well.

Here’s a quick summary of the problem:

Suppose you’re on a game show, and you’re given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what’s behind the doors, opens another door, say No. 3, which has a goat. He then says to you, “Do you want to pick door No. 2?” Is it to your advantage to switch your choice?

The rather unintuitive answer is that you will have a 2/3 chance of winning if you switch and a 1/3 chance of winning of you don’t, so it’s better to switch.

This program will simulate the game show and with large enough simulation steps it will indeed confirm that it is better to switch.

use std::rand;
use std::rand::Rng;
use std::rand::distributions::{IndependentSample, Range};

struct SimulationResult {
    win: bool,
    switch: bool,
}

// Run a single simulation of the Monty Hall problem.
fn simulate<R: Rng>(random_door: &Range<uint>, rng: &mut R) -> SimulationResult {
    let car = random_door.ind_sample(rng);

    // This is our initial choice
    let mut choice = random_door.ind_sample(rng);

    // The game host opens a door
    let open = game_host_open(car, choice, rng);

    // Shall we switch?
    let switch = rng.gen();
    if switch {
        choice = switch_door(choice, open);
    }

    SimulationResult { win: choice == car, switch: switch }
}

// Returns the door the game host opens given our choice and knowledge of
// where the car is. The game host will never open the door with the car.
fn game_host_open<R: Rng>(car: uint, choice: uint, rng: &mut R) -> uint {
    let choices = free_doors(&[car, choice]);
    rand::sample(rng, choices.move_iter(), 1)[0]
}

// Returns the door we switch to, given our current choice and
// the open door. There will only be one valid door.
fn switch_door(choice: uint, open: uint) -> uint {
    free_doors(&[choice, open])[0]
}

fn free_doors(blocked: &[uint]) -> Vec<uint> {
    range(0u, 3).filter(|x| !blocked.contains(x)).collect()
}

fn main() {
    // The estimation will be more accurate with more simulations
    let num_simulations = 10000u;

    let mut rng = rand::task_rng();
    let random_door = Range::new(0u, 3);

    let (mut switch_wins, mut switch_losses) = (0u, 0u);
    let (mut keep_wins, mut keep_losses) = (0u, 0u);

    println!("Running {} simulations...", num_simulations);
    for _ in range(0, num_simulations) {
        let result = simulate(&random_door, &mut rng);

        match (result.win, result.switch) {
            (true, true) => switch_wins += 1,
            (true, false) => keep_wins += 1,
            (false, true) => switch_losses += 1,
            (false, false) => keep_losses += 1,
        }
    }

    let total_switches = switch_wins + switch_losses;
    let total_keeps = keep_wins + keep_losses;

    println!("Switched door {} times with {} wins and {} losses",
    total_switches, switch_wins, switch_losses);

    println!("Kept our choice {} times with {} wins and {} losses",
    total_keeps, keep_wins, keep_losses);

    // With a large number of simulations, the values should converge to
    // 0.667 and 0.333 respectively.
    println!("Estimated chance to win if we switch: {}",
    switch_wins as f32 / total_switches as f32);
    println!("Estimated chance to win if we don't: {}",
    keep_wins as f32 / total_keeps as f32);
}

This is an example run:

$ ./monty_hall
Running 10000 simulations...
Switched door 4994 times with 3323 wins and 1671 losses
Kept our choice 5006 times with 1619 wins and 3387 losses
Estimated chance to win if we switch: 0.665399
Estimated chance to win if we don't: 0.323412

Posted in: IDA Summer of Code, rust.

Dijkstra's Algorithm

July 23, 2014

For rust, I’m updating the documentation for the standard library and specifically with the collections. For the priority queue I had the idea to use Dijkstra’s algorithm as a fun example. That idea was well received and that example is now live.

At first I wanted to use A* to solve the eight puzzle, which I’ve done before, but that example became far too big.

Here’s the example code currently up in docs:

Using rustc 0.12.0-pre (ef352faea84fa16616b773bd9aa5020d7c76bff0 2014-07-18 21:46:32 +0000)

use std::collections::PriorityQueue;
use std::uint;

#[deriving(Eq, PartialEq)]
struct State {
    cost: uint,
    position: uint
}

// The priority queue depends on `Ord`.
// Explicitly implement the trait so the queue becomes a min-heap
// instead of a max-heap.
impl Ord for State {
    fn cmp(&self, other: &State) -> Ordering {
        // Notice that the we flip the ordering here
        other.cost.cmp(&self.cost)
    }
}

// `PartialOrd` needs to be implemented as well.
impl PartialOrd for State {
    fn partial_cmp(&self, other: &State) -> Option<Ordering> {
        Some(self.cmp(other))
    }
}

// Each node is represented as an `uint`, for a shorter implementation.
struct Edge {
    node: uint,
    cost: uint
}

// Dijkstra's shortest path algorithm.

// Start at `start` and use `dist` to track the current shortest distance
// to each node. This implementation isn't memory efficient as it may leave duplicate
// nodes in the queue. It also uses `uint::MAX` as a sentinel value,
// for a simpler implementation.
fn shortest_path(adj_list: &Vec<Vec<Edge>>, start: uint, goal: uint) -> uint {
    // dist[node] = current shortest distance from `start` to `node`
    let mut dist = Vec::from_elem(adj_list.len(), uint::MAX);

    let mut pq = PriorityQueue::new();

    // We're at `start`, with a zero cost
    *dist.get_mut(start) = 0u;
    pq.push(State { cost: 0u, position: start });

    // Examine the frontier with lower cost nodes first (min-heap)
    loop {
        let State { cost, position } = match pq.pop() {
            None => break, // empty
            Some(s) => s
        };

        // Alternatively we could have continued to find all shortest paths
        if position == goal { return cost }

        // Important as we may have already found a better way
        if cost > dist[position] { continue }

        // For each node we can reach, see if we can find a way with
        // a lower cost going through this node
        for edge in adj_list[position].iter() {
            let next = State { cost: cost + edge.cost, position: edge.node };

            // If so, add it to the frontier and continue
            if next.cost < dist[next.position] {
                pq.push(next);
                // Relaxation, we have now found a better way
                *dist.get_mut(next.position) = next.cost;
            }
        }
    }

    // Goal not reachable
    uint::MAX
}

fn main() {
    // This is the directed graph we're going to use.
    // The node numbers correspond to the different states,
    // and the edge weights symbolises the cost of moving
    // from one node to another.
    // Note that the edges are one-way.
    //
    //                  7
    //          +-----------------+
    //          |                 |
    //          v   1        2    |
    //          0 -----> 1 -----> 3 ---> 4
    //          |        ^        ^      ^
    //          |        | 1      |      |
    //          |        |        | 3    | 1
    //          +------> 2 -------+      |
    //           10      |               |
    //                   +---------------+
    //
    // The graph is represented as an adjecency list where each index,
    // corresponding to a node value, has a list of outgoing edges.
    // Chosen for it's efficiency.
    let graph = vec![
        // Node 0
        vec![Edge { node: 2, cost: 10 },
             Edge { node: 1, cost: 1 }],
        // Node 1
        vec![Edge { node: 3, cost: 2 }],
        // Node 2
        vec![Edge { node: 1, cost: 1 },
             Edge { node: 3, cost: 3 },
             Edge { node: 4, cost: 1 }],
        // Node 3
        vec![Edge { node: 0, cost: 7 },
             Edge { node: 4, cost: 2 }],
        // Node 4
        vec![]];

    assert_eq!(shortest_path(&graph, 0, 1), 1);
    assert_eq!(shortest_path(&graph, 0, 3), 3);
    assert_eq!(shortest_path(&graph, 3, 0), 7);
    assert_eq!(shortest_path(&graph, 0, 4), 5);
    assert_eq!(shortest_path(&graph, 4, 0), uint::MAX);
}

Posted in: IDA Summer of Code, rust.

My first rust Contribution

July 19, 2014

The problem with open-source for most people isn’t writing code, but it’s all the other things.

How shall I push my changes? How do I handle git? What should I do?

I was the same and I actually dreaded my awesome summer job, just a little bit, because now I’m supposed to contribute and preferrably a non-trivial amount. Although I’ve been programming several years, I’ve never contributed a large open-source project. Or a small one for that matter.

But this has now officially changed. 3 days ago my first pull request got merged into rust! Here are some useful steps and resources which might be useful for someone in my shoes:

I assume you’re going to contribute to rust, but the essence could be generalized for other projects as well.

Build

Firstly we should try to build rust. There are some useful things about building inside the root Makefile and in the test suite notes.

For making the documentation:

make docs NO_REBUILD=1

And making other things:

make -j<num-cores> NO_REBUILD=1 NO_BENCH=1 CFG_DISABLE_VALGRIND=1

The process can be very slow though, especially if you do make clean (try not to!).

Git workflow

Before we start hacking it’s good to have an idea of the git workflow we’re going to use.

Firstly, clone git@github.com:rust-lang/rust.git and push that repo into your github account. I have that as my origin. Then create an upstream branch:

git remote add upstream https://github.com/rust-lang/rust

For me it looks like this:

$ g remote -v
origin      git@github.com:treeman/rust.git (fetch)
origin      git@github.com:treeman/rust.git (push)
upstream    https://github.com/rust-lang/rust (fetch)
upstream    https://github.com/rust-lang/rust (push)

When we want to start working on something new, always create a new branch:

$ git checkout master -b mybranch

While we’re working we need to update from upstream, to get new changes.

$ git checkout mybranch
$ git fetch upstream
$ git rebase upstream/master

When done, push locally to github:

$ git push origin mybranch

To file a pull request we can use github’s interface. Just be sure to target the master integration branch.

If we want to make some changes to our pull request, simply make the changes in mybranch and push towards your github profile.

If you have a lot of commits in your pull request, or if they aren’t very descriptive, you may be asked to squash your commits. Sounds scary, but it’s fairly straightforward:

  1. git log and check how many commits you have (or check via github).
  2. git rebase -i HEAD~2 will rebase the 2 latest commits.

When satisfied:

$ git push origin mybranch -f

And that’s it! Make sure to switch branch when you’re done. I accidentally pushed another commit on top of my already reviewed, and accepted, pull request. Quite embarrassing but I’ll live =)

Actual work

With that taken care of, we can finally do some work. But what to do? Here are some tips:

  1. Document the library.

    At the time of my writing, the library lacks a lot of documentation, and that’s what I’m doing. And don’t be scared, it’s not as dry as it’s sounds. My contributions are basically just adding code examples.

  2. Write unit tests.

  3. Proofread the tutorial.

    I did this, but the tutorial is currently getting a complete rewrite, so I’m not sure how useful that was.

  4. Find and fix some bugs.

    rust organizes everything as issues. Feature request, updates and bugs. If you look for them, you might find an easy bug to work on. Which is what I did.

And you can always simply start hacking on something interesting. Or find and fix a bug yourself.


Posted in: IDA Summer of Code, rust.

Plans for Summer of Code

July 14, 2014

My first summer job is now over, and after a weekend of rest, it is now time to plan for my second summer job: IDA Summer of Code.

I will work a month, or 4 weeks, with contributing to rust! The only issue is, I have no idea where to start. I didn’t have a strict plan or a vision of what I want to accomplish when I applied, but now I’m running out of time. I need to have an attack plan.

First thing first is to read through the tutorial and to review rust a bit. After that I should go through the open issues and perhaps find an easy issue I can start working on. The idea is to perhaps start with documentation and work from there.

I will also track the irc channel #rust@irc.mozilla.org and use their mailing list. I’ve been idling in their irc channel a while now and they are very friendly and helpful, so I’m sure I’ll be able to get help and pointers from them.

But before all that, I need to clean my desk…


Posted in: IDA Summer of Code.

Summer job at Configura

July 13, 2014

This is a wrap up of my 5 weeks at Configura as a summer internship. There were 6 interns and we had two teams doing different things. I worked with two other awesome guys and it was great!

The Premise

We had two assignments this summer. One was to create an optimized version of an octree (more on that later). We had a reference implementation in CM, but we wanted to take it down to C++ and to optimize it and make it stable and robust. This was a self-contained assignment which could be used for various things in their application.

The second assignment was to use our octree and simplify meshes by removing invisible triangles from them. Here again we had a reference implementation to work with but we were going to make it faster and more robust.

On top of that we had to make debugging and visualization tools and a test suite.

The Result

In this picture we can see the original model on the left. The green outline to the right are the triangles we deemed visible and the red mesh corresponds to the invisible triangles.

Here we only show the removed triangles and we can see that there’s a dude inside the statue, which we mostly remove. This model has about 730 000 triangles and we managed to remove about 300 000 of them, which is pretty cool.

This is another interesting example. We can see that inside this model, we have a high resolution spring with nearly 3500 triangles!

As for speed, we significantly improved the runtime of both the octree and the ray casting. For a specific model with 20 000 triangles which took around 15 minutes with a small depth, we managed to get it down to about a second with a larger depth. We achieved similar results with the ray casting.

In the end our bosses seemed pleased, so I consider the summer job a success. I did suck at Disc Golf though.

Execution

Octree

An octree is an extension of a quadtree from 2D to 3D. The simple explanation is that we have a box, and try to insert triangles (or points, or whatever) into it. When the box has enough triangles we split it into 8 parts (4 with a quadtree) and then insert the triangles into the new boxes if they intersect them.

The octree is used in various ways, for a fast traversal with a ray, mesh healing, finding neighbours or other things.

Here we can see the root bounding box and the subsequent subdivision into smaller boxes. The green boxes have none or few triangles, the yellow and red have more triangles in them. Because we force our wctree to have a maximum depth some nodes like the red ones on top of the model can have a lot of triangles in them without further subdividing. This is basically a trade off between the memory and time usage versus how good the octree becomes.

This octree is very sparse at the top, which makes sense as there are no triangles there, and it’s dense in the middle. Interestingly we can see something sticking out inside the model, which means there are more triangles there. Indeed, the model has the actual holes, we just can’t see them.

In this picture we can see one of our debug tools. This is a single large triangle spanning over almost the whole model and the generated octree. The colored boxes show which nodes the triangle is inserted into, which can be an invaluable debugging tool when changing how triangle-box intersection and octree insertion works.

It also looks cool.

These are the basic optimization steps we did:

  1. Implement it in C++

    The performance boost you can get by moving down closer to the metal should not be underestimated.

  2. Use custom memory pools for the triangles, nodes and even the sequences holding them.
  3. Implement the AABB triangle intersection tests with the separating axis theorem.

    We had a link to a nice explanation, but now I can’t find it.

  4. Cache the above triangle projections.

    They will be used a lot. Use a cache to reuse them when promoting nodes.

  5. Don’t start insert from the root and search down, but walk up until we find something we know we’re inside.

    This exploits the fact that the triangles in the meshes are usually “close” to each other. We tried to presort the triangles using a fancy thing called the Hilbert curve which one can realize using Morton codes (using fancy bit manipulations), but unfortunately the presorting pass wasn’t worth it.

Ray casting

Our strategy for finding invisible triangles is quite simple: we cast rays towards the still invisible triangles from outside the model, and see what we can hit. All triangles our rays hit, are visible and the rest we can remove.

This is another of our debug tools where we can select a triangle (pointed by the arrow) and all the ray we try to cast towards it. In this case we fail to hit the triangle and instead we hit all the blue/purple triangles instead. This is a failed triangle, but I think it’s a nice illustration of how we tried to find invisible triangles.

The first pass of rays we only cast one ray along the triangle’s normal towards the visible side of the triangle. During the second pass we start to cast rays in a hemisphere, gradually increasing the density of the rays.

For each ray we traverse the octree and for every box the ray intersects we check the triangles inside against the ray. This is fast because don’t have to check against all other triangles at every step, but only against a fixed amount if the octree is well formed.

Conclusions

This was my second summer at Configura and it’s a pretty cool company. They gave us a lot of freedom and we got to work on pretty cool things and they have their own programming language which is fun to work with.

We rewrote the implementations from scratch, we battled with precision errors and edge cases but in the end our mission was a success. It was a very rewarding experience as the task was quite complex, but we managed to complete it in good style. We got to work with visualization on a high level and we also got to really dive into some low-level optimizations.

Oh, and something cool we hacked in during my last day: A better triangle flipper to turn triangles face up.

Left: Triangles turned inwards
Right: Triangles turned outwards (without blindly copying everything)


Posted in: Programming.

Reinstalling Slackware

July 5, 2014

So I reinstalled slackware on my machine and decided to take some rough notes of the most important steps I made. I did not document the steps in detail, and some are very specific for my setup. But maybe it can be useful for someone, or myself.

  1. Basic steps
    1. Make partitions
    2. Setup
    3. Config
    4. Install wicd, get online
    5. Custom Kernel
    6. Fix X
  2. Programs
    1. Firefox
    2. vim
    3. Skype
    4. Spotify
    5. Office
    6. cron
  3. Appearance
    1. xmonad
    2. Fonts
    3. Terminal
  4. Random Installs
    1. Slackbuilds
    2. Perl
    3. Multilib
    4. Better latex
    5. Groovebasin
    6. Java
    7. Anki
  5. Programming
    1. Hakyll
    2. SFML
  6. Games
    1. Minecraft

Basic steps

Make slackware usb loader

See README_USB.TXT in usb folder from slackware installation.

Create

dd if=usbboot.img of=/dev/sdX bs=1M

Be sure /dev/sdX is the usb, dd will wipe everything! Simple way is to ls /dev before and after plugging in device. Boot from bios (f2 or f10).

Make partitions

Make partitions http://slackbook.org/html/installation-partitioning.html

fdisk /dev/sda. Make sure sda is your harddrive. Print partitions p

Current setup:

tmpfs       4G      swap
/dev/sda2   50G     /
/dev/sda3   50G     /usr/local
/dev/sda5   rest    /home

Make sure that swap is of type Linux Swap, change with t. Approx 2 times your ram?

Setup

Boot and run setup.

Install from FTP/HTTP server:

  1. ftp://ftp.slackware.com
  2. /pub/slackware/slackware64-14.1/slackware64

For example.

Don’t pick KDE or Games. Use terse installation.

Config

Add a new user with adduser. Set zsh as basic shell. Set for root in /etc/passwd (or update user info there).

Add user to groups.

# usermod -a -G netdev username

Update name in /etc/HOSTNAME.

Install wicd, get online

Fetch package from /extra/wicd.

installpkg ...
chmod +x /etc/rc.d/rc.wicd
/etc/rc.d/rc/wicd start
wicd-curses

Custom Kernel

http://alien.slackbook.org/dokuwiki/doku.php?id=linux:kernelbuilding

Fetch latest stable kernel source: https://www.kernel.org/

cd /usr/src
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.15.1.tar.xz   # Or whatever
tar xf linux-3.15.1.tar.xz
rm linux
ln -s linux-3.15.1 linux
cd linux

Use slackware custom as base:

# wget or cp to dir
wget ftp://ftp.slackware.com/pub/slackware/slackware64-14.1/source/k/config-x86_64/config-generic-3.10.17.x64
mv config-generic-3.10.17.x64 .config
make oldconfig
make menuconfig

Make sure to select processor type, preemptive low latency desktop. Remove nvidia and riba for nvidia binary blob usage later.

make bzImage modules
make modules_install
cp arch/x86_64/boot/bzImage /boot/vmlinuz-custom-3.16.3
cp System.map /boot/System.map-custom-3.16.3
cp .config /boot/config-custom-3.16.3
cd /boot
rm System.map
ln -s System.map-custom-3.16.3 System.map

Update /etc/lilo.conf. This is mine:

# Start LILO global section
lba32 # Allow booting past 1024th cylinder with a recent BIOS
compact # Fast boot

# Append any additional kernel parameters:
append=" vt.default_utf8=1 logo.nologo"
boot = /dev/sda

# Boot BMP Image.
# Bitmap in BMP format: 640x480x8
bitmap = /boot/slack.bmp
# Menu colors (foreground, background, shadow, highlighted
# foreground, highlighted background, highlighted shadow):
bmp-colors = 255,0,255,0,255,0
# Location of the option table: location x, location y, number of
# columns, lines per column (max 15), "spill" (this is how many
# entries must be in the first column before the next begins to
# be used. We don't specify it here, as there's just one column.
bmp-table = 60,6,1,16
# Timer location x, timer location y, foreground color,
# background color, shadow color.
bmp-timer = 65,27,0,255

# Standard menu.
# Or, you can comment out the bitmap menu above and
# use a boot message with the standard menu:
#message = /boot/boot_message.txt

# Wait until the timeout to boot (if commented out, boot the
# first entry immediately):
prompt
# Timeout before the first entry boots.
# This is given in tenths of a second, so 600 for every minute:
timeout = 100

# Override dangerous defaults that rewrite the partition table:
change-rules
  reset

vga = 795

image = /boot/vmlinuz-custom-3.14.5
    root = /dev/sda2
    label = Slack
    read-only

image = /boot/vmlinuz
    root = /dev/sda2
    label = Backup
    read-only

Make sure to change image locations and drive location.

Then run lilo.

Fix X

Install NVIDIA drivers 337.25.

Use custom xorg.conf.

ln -s dotfiles/.workspace .
ln -s /etc/X11/xorg.conf.d/xorg.conf .workspace/xorg.conf

This is it:

Section "ServerLayout"
    Identifier "Layout0"
    Screen 0 "Screen0" 1080 480
    Screen 1 "Screen1" 0 0
    InputDevice "Keyboard0" "CoreKeyboard"
    InputDevice "Mouse0" "CorePointer"
    Option "Xinerama" "1"
EndSection

Section "Files"
    FontPath "/usr/lib64/X11/fonts/misc/:unscaled"
    FontPath "/usr/lib64/X11/fonts/100dpi/:unscaled"
    FontPath "/usr/lib64/X11/fonts/75dpi/:unscaled"
    FontPath "/usr/lib64/X11/fonts/misc/"
    FontPath "/usr/lib64/X11/fonts/Type1/"
    FontPath "/usr/lib64/X11/fonts/Speedo/"
    FontPath "/usr/lib64/X11/fonts/100dpi/"
    FontPath "/usr/lib64/X11/fonts/75dpi/"
    FontPath "/usr/lib64/X11/fonts/cyrillic/"
    FontPath "/usr/lib64/X11/fonts/TTF/"
EndSection

Section "InputDevice"
    Identifier "Mouse0"
    Driver "mouse"
    Option "Protocol" "auto"
    Option "Device" "/dev/psaux"
    Option "Emulate3Buttons" "no"
# Option "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    Identifier "Keyboard0"
    Driver "kbd"
    Option "XkbLayout" "us"
EndSection

Section "InputClass"
    Identifier "Keyboard Defaults"
    MatchIsKeyboard "yes"
    Option "XkbLayout" "us"
EndSection

Section "Module"
    Load "dbe"
EndSection

Section "Monitor"
    Identifier "Monitor0"
    VendorName "Unknown"
    ModelName "DELL U2211H"
    HorizSync 30.0 - 83.0
    VertRefresh 56.0 - 76.0
    Option "DPMS"
EndSection

Section "Monitor"
    Identifier "Monitor1"
    VendorName "Unknown"
    ModelName "DELL U2211H"
    HorizSync 30.0 - 83.0
    VertRefresh 56.0 - 76.0
    Option "DPMS"
    #Option "Rotate" "left"
EndSection

Section "Device"
    Identifier "Device0"
    Driver "nvidia"
    VendorName "NVIDIA Corporation"
    BoardName "GeForce GTX 550 Ti"
    BusID "PCI:1:0:0"
    #Option "RandRRotation" "on"
    Screen 0
EndSection

Section "Device"
    Identifier "Device1"
    Driver "nvidia"
    VendorName "NVIDIA Corporation"
    BoardName "GeForce GTX 550 Ti"
    BusID "PCI:1:0:0"
    #Option "RandRRotation" "on"
    Screen 1
EndSection

Section "Screen"
    Identifier "Screen0"
    Device "Device0"
    Monitor "Monitor0"
    DefaultDepth 24
    Option "TwinView" "0"
    Option "metamodes" "DFP-0: nvidia-auto-select +0+0"
    SubSection "Display"
        Depth 24
    EndSubSection
EndSection

Section "Screen"
    Identifier "Screen1"
    Device "Device1"
    Monitor "Monitor1"
    DefaultDepth 24
    Option "TwinView" "0"
    Option "metamodes" "DFP-2: nvidia-auto-select +0+0 { Rotation=left }"
    Option "Rotate" "cw"
    SubSection "Display"
        Depth 24
    EndSubSection
EndSection

Programs

Firefox

Download latest

tar xf ...
mv firefox /usr/local/lib64/
cd /usr/bin
rm firefox
ln -s /usr/local/lib64/firefox/firefox .

Get libflashplayer.so into /usr/local/lib64/firefox/browser/plugins.

Restore bookmark backup from .mozilla/firefox/X.default/bookmarkbackups if you want.

vim

For xterm copying and support for more plugins. Get vim source.

hg clone https://vim.googlecode.com/hg/ vim
cd vim
./configure --with-features=huge \
            --enable-multibyte \
            --enable-rubyinterp \
            --enable-pythoninterp \
            --enable-perlinterp \
            --enable-luainterp \
            --prefix=/usr/local \
            --enable-gui \
            --enable-hangulinput \
            --with-x
make
make install

Skype

Install Multilib. Install skype from slackbuilds, use 32bit mode.

Spotify

Install Multilib. Fetch from slackbuilds. I’m having some flickering issues, but no idea what to do.

Office

Install Java. Install libreoffice from slackbuilds.

cron

crontab -e

# Every 5 minutes
*/5 * * * * /home/tree/bin/ticker --update

Appearance

xmonad

  1. Install ghc linked from slackbuilds
  2. Install hscolour from slackbuilds (for haskell-platform warnings)
  3. Install haskell-platform from slackbuilds

As user:

cabal update
cabal install cabal-install
cabal install xmonad
cabal install xmonad-contrib
ln -s dotfiles/.xmonad ~

Install conky with dependencies from slackbuilds. Build conky with lua support.

Install dzen2 by cloning from github. Edit config.mk, choose option 7 (XPM, XFT, Xinerama).

Get .backgrounds and .icons.

Could not get nitrogen to build properly (I stole it from my other installation…!!)

Fix borders on firefox etc with lxappearance, install from slackbuilds.

Fonts

Copy ttf fonts to /usr/share/fonts/TTF, in that dir run

mkfontscale
mkfontdir
fc-cache -fv

In /usr/bin/startx mod a line with defaultserverargs="-dpi 96".

From http://www.linuxquestions.org/questions/slackware-14/how-to-optimize-fonts-in-slackware-640468/page29.html#post5067546, http://blog.lysender.com/2013/11/optimizing-fonts-for-slackware-14-1-without-infinality/

Enable subpixel rendering from source slackbuild http://ftp.slackware.com/pub/slackware/slackware-14.1/source/l/freetype/. Edit freetype.Slackbuild

Save as freetype_cleartype.diff:

diff -rupN freetype.orig/cleartype.diff freetype/cleartype.diff
--- freetype.orig/cleartype.diff	1969-12-31 16:00:00.000000000 -0800
+++ freetype/cleartype.diff	2013-11-19 15:32:04.811346576 -0800
@@ -0,0 +1,12 @@
+diff -rupN freetype-2.5.0.1.orig/include/freetype/config/ftoption.h freetype-2.5.0.1/include/freetype/config/ftoption.h
+--- freetype-2.5.0.1.orig/include/freetype/config/ftoption.h	2013-06-19 14:20:04.000000000 -0700
++++ freetype-2.5.0.1/include/freetype/config/ftoption.h	2013-11-19 15:27:47.456737625 -0800
+@@ -591,7 +591,7 @@ FT_BEGIN_HEADER
+   /*   This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be    */
+   /*   defined.                                                            */
+   /*                                                                       */
+-/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING */
++#define TT_CONFIG_OPTION_SUBPIXEL_HINTING
+ 
+ 
+   /*************************************************************************/
diff -rupN freetype.orig/freetype.SlackBuild freetype/freetype.SlackBuild
--- freetype.orig/freetype.SlackBuild	2013-11-19 15:31:53.895891885 -0800
+++ freetype/freetype.SlackBuild	2013-11-19 15:33:17.885864416 -0800
@@ -78,7 +78,8 @@ zcat $CWD/freetype.illadvisederror.diff.
 # for doing so.
 # Please see this web site for more details:
 #   http://www.freetype.org/patents.html
-#zcat $CWD/freetype.subpixel.rendering.diff.gz | patch -p1 --verbose || exit 1
+zcat $CWD/freetype.subpixel.rendering.diff.gz | patch -p1 --verbose || exit 1
+patch -p1 --verbose < $CWD/cleartype.diff
 
 chown -R root:root .
 CFLAGS="$SLKCFLAGS" make setup CFG="--prefix=/usr --libdir=/usr/lib${LIBDIRSUFFIX} --build=$ARCH-slackware-linux"

Then

lftp -c 'open ftp.slackware.com ; mirror pub/slackware/slackware64-14.1/source/l/freetype/'
cd freetype
patch -p1 < ../freetype_cleartype.diff
./freetype.SlackBuild
removepkg freetype-2.5.0.1-x86_64-1
installpkg /tmp/freetype-2.5.0.1-x86_64-1.txz

Enable subpixel rendering. Test http://www.lagom.nl/lcd-test/subpixel.php, choose rgb, gbr, or whatever. Also useful: https://wiki.archlinux.org/index.php/Font_configuration

ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d
ln -s /etc/fonts/conf.avail/11-lcdfilter-default.conf /etc/fonts/conf.d

Also use ~/.config/fontconfig/fonts.conf:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
	<match target="font">
		<edit mode="assign" name="antialias">
			<bool>true</bool>
		</edit>
		<edit mode="assign" name="hinting">
			<bool>true</bool>
		</edit>

		<edit mode="assign" name="hintstyle">
			<const>hintslight</const>
		</edit>

		<!-- Ignore any embedded bitmaps in TTF, etc (Microsoft's Calibri and others from Office 07/Vista have these) -->
		<edit mode="assign" name="embeddedbitmap">
			<bool>false</bool>
		</edit>

		<!-- MS fonts use full hinting -->

		<test name="family">
			<string>Andale Mono</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Arial</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Arial Black</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Calibri</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Cambria</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Candara</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Comic Sans MS</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Consolas</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Constantia</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Corbel</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Courier New</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Georgia</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Impact</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Symbol</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Tahoma</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Times New Roman</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Trebuchet MS</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Verdana</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Webdings</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
		<test name="family">
			<string>Wingdings</string>
		</test>
		<edit mode="assign" name="hintstyle">
			<const>hintfull</const>
		</edit>
	</match>
</fontconfig>

Terminal

Fetch rxvt-unicode from slackbuilds. Make .Xresources.

Color schemes with ls listings will be ugly, so copy DIR_COLORS to .dir_colors

STICKY_OTHER_WRITABLE 35;40
OTHER_WRITABLE 34;40

Set in .zshrc.

Fix git diff colors git config --global core.pager "less -r"

Also korean signs.

Stuff

Random Installs

Slackbuilds

Download from http://slackbuilds.org/. Install with installpkg. Remove with removepkg.

s3cmd, scrot, mirage, rtorrent

Perl

Install perl libs from cpan. As root:

cpan install cpan
cpan install App::Ack
cpan install Modern::Perl
cpan install DateTime
cpan install Data::ICal
cpan install LWP
# And possibly other things

Multilib

http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:multilib Also add blacklist.

When installing 32bit run . /etc/profile.d/32dev.sh

Better latex

Install texlive from slackbuilds. Remove tetex first.

Groovebasin

Need libgroove. Which also needs speex from slackbuilds apart from the clear dependencies. Run groovebasin as user.

Java

Get OpenAL from slackbuilds. Get Java JDK http://docs.slackware.com/howtos:software:java, not OpenJDK.

Anki

Download anki.

mv anki-2.0.26 /usr/local/lib64
ln -s /usr/local/lib64/anki-2.0.26/runanki /usr/local/bin

Programming

Hakyll

cabal install hakyll
cabal install MissingH

For upload scripts fetch python-magic slackbuilds.

SFML

Get source. cmake and install.

Games

Minecraft

Requires Java. Launch with:

java -Xmx2048M -Xms1024M -jar ~/.minecraft/launcher/Minecraft.jar

I copied .minecraft folder with saves etc.


Posted in: Slackware.

Notifications with xmonad/irssi/urxvt

July 3, 2014

So I’ve been idling on irc for years now and I’ve been using irssi for that, which works fine. I have not had notifications enabled, so I can see from the statusbar whenever someone messages me. As I’ve never been very active this has been fine, but now I figured it’s time to fix that.

Fortunately it was very easy, there’s even a perfect match for my setup in the xmonad documentation!

Here’s a summary:

Configure xmonad

In xmonad.hs, highlight with existing dzen (my statusbar).

myDzenPP h = defaultPP { ... }
main = do
    bar <- spawnPipe "dzen2 ..."

    xmonad $ withUrgencyHook NoUrgencyHook $ defaultConfig {
        logHook = dynamicLogWithPP $ myDzenPP bar
        , ...
    }

Configure irssi

I used beepchan.pl to only notify on selected channels.

settings = {
  "fe-common/core" = {
    bell_beeps = "yes";
    beep_msg_level = "MSGS NOTICES INVITES DCC DCCMSGS HILIGHT";
    beep_when_away = "no";
    beep_when_window_active = "no";
    ...
  };
  "perl/core/scripts" = {
    beep_channels = "#treecraft";
    ...
  };
};

Configure screen

In .screenrc

vbell off # or remove the existing 'vbell on' line

Configure rxvt

In .Xdefaults

urxvt.urgentOnBell: true


Posted in: Slackware, Xmonad.

Calling closures in a Vec

June 21, 2014

In rust one might want to have a list of closures, for example as a list of callbacks.

let mut fs: Vec<||> = Vec::new();
fs.push(|| { println!("imma firing my lazer"); });

for f in fs.iter() {
    f(); // error: expected function but found `&||`
};

Maybe if we borrow f?

for &f in fs.iter() { // error: cannot move out of dereference of `&`-pointer```
    f();
};

But then if we dereference f?

for f in fs.iter() {
    (*f)(); // error: closure invocation in a `&` reference
};

That’s not very helpful. Thanks to some friendly guys over at #rust at irc.mozilla.org I found something which works:

for f in fs.mut_iter() {
    (*f)(); // ok!
};

A note is that the closure types must be &mut || and not &||.

In the end I think that the error messages could be more clear. But now we have a running example and all is well in the world!

// Print "imma firing my lazer"
fn main() {
    let mut fs: Vec<||> = Vec::new();
    fs.push(|| { println!("imma firing my lazer"); });

    for f in fs.mut_iter() {
        (*f)(); // ok!
    };
}

Posted in: rust.

addwatch: resource exhausted

June 13, 2014

While tampering with Hakyll and running site preview I stumbled upon this error message:

site: addWatch: resource exhausted (No space left on device)

At first I tried to clear /tmp but, so clearly the device did have some space left. After a bit of googling I found a solution which managed to solve my problem.

# for foo in /proc/*/fd/*; do readlink -f $foo; done | grep inotify | sort | uniq -c | sort -nr
      2 /proc/12871/fd/anon_inode:inotify
      1 /proc/673/fd/anon_inode:inotify
      1 /proc/601/fd/anon_inode:inotify
      1 /proc/587/fd/anon_inode:inotify
      1 /proc/27695/fd/anon_inode:inotify
      1 /proc/176/fd/anon_inode:inotify
      1 /proc/12879/fd/anon_inode:inotify
      1 /proc/12840/fd/anon_inode:inotify
      1 /proc/12806/fd/anon_inode:inotify
      1 /proc/12772/fd/anon_inode:inotify
      1 /proc/12771/fd/anon_inode:inotify
      1 /proc/12770/fd/anon_inode:inotify
      1 /proc/12769/fd/anon_inode:inotify
      1 /proc/12768/fd/anon_inode:inotify
      1 /proc/12767/fd/anon_inode:inotify
      1 /proc/12754/fd/anon_inode:inotify

One can examine the pid

ps ax
ps ax | grep 12871
...

And in the end I found out that spotify was the culprit. I killed the spotify processes with a simple kill 12871 and the problem had gone away. One can check if spotify is running with ps ax | grep spotify.


Posted in: Slackware.

IDA Summer of Code 2014

June 11, 2014

IDA Summer of Code is Linköping University’s response to Google Summer of Code. Students can send in a project of their choice and if selected they get paid to work on it for 4 weeks during the summer. In return the university get to show off the students and their projects in marketing purposes.

As I’m writing this, my application got accepted and I will work on rust sometime during July/August. rust is mozilla’s new systems programming language focusing on safety and concurrency. I’m quite excited as one of my goals this year was to contribute, and now I will get paid to!

I am not completely sure exactly what I’m going to do, but things will get clearer when I actually start working on it. I will also make occassional blog posts of my thoughts and progress as I start working on it. As of now I’m working on my other summer job at Configura, which is also quite amazing and I should post a bit about that as well.


Posted in: IDA Summer of Code.

Mining Incorporated (unfinished)

April 28, 2014

Download
Linux 64bit Windows

Timelapse

I made a very serious attempt at making a grand game for Ludum Dare 29. Unfortunately it was a far, far, too big of a game for me to be able to finish it in one weekend. But I had a great experience and was fun beating the procrastination devil for once.

Anyways, this is the state of the game as it is now.

Mining Incorporated

How to play
Choose a room, drag to build things. You must build where the worker starts. If you want more workers you need to build more beds. They can be placed anywhere. To gain money you must build or mine on an ore patch.

Source
http://github.com/treeman/ld29


Posted in: Games, Ludum Dare.

Ores

April 27, 2014

Now we can build rooms, we can place objects and the worker will do things for us. Now I’ve added some ores which makes the game look a bit less boring. I realize I’ve spent all my time on these little things and I still don’t have a game! But it doesn’t matter, maybe I can finish the game on a later date.

Ores
Oooh, is that diamond?


Posted in: Ludum Dare.

We can build things!

April 27, 2014

Finally we have some sort of progress!

We can build things!
We can now build rooms and place and remove objects!

Yay!! But we still haven’t even begun with the game logic, resource management, the actual mining mechanic, multiple levels, actual tasks for our workers. But it’s something.


Posted in: Ludum Dare.

Hard Work

April 26, 2014

I’ve spent literally the whole day coding and it feels like I’ve only done a small parts of the actual game mechanics… I know this isn’t going to end well.

More Hard Work!
I can allow myself a small pause I feel…

Not sure where this is going to end, but I’m having a blast anyway!


Posted in: Ludum Dare.

A *

April 26, 2014

After a few hours of coding I’ve made a little, little, bit of progress but it took a lot longer than I would have liked.

I’ve basically managed to make a world and some tiles in the world and we have a worker who can move around on the tiles and he can’t move on all tiles.

A*
Look! He can pathfind! But here the real coding begins…


Posted in: Ludum Dare.

An Epic Start

April 26, 2014

Oh what a mistake. I woke up at 05.00 when my girlfriend woke up, she’s working early today, and went to the bathroom. After I was done, still pretty tired, I made a big mistake. I checked the current theme for Ludum Dare 29: Beneath the Surface and guess what? Now I wasn’t tired anymore.

So I got out of bed, at 5!, and wrote down some ideas. Now, almost 2 hours later, I’ve had a battle with my makefile and I’ve written a lazy resource management system and a simple state transition scheme. A bit annoying as my previous fast prototyping framework already had all those ready, but in the end I got a bunch of coding done and it’s not that big of a deal anyways.

My idea for the theme is far too big of course. Hopefully I’ll have something to show off in the end. But now I need to eat some breakfast and maybe go sleep an hour or two…


Posted in: Ludum Dare.

Ludum Dare 29 Entry

April 25, 2014

After months of procrastination it is time for me to enter Ludum Dare again!

I am totally unprepared, but I did setup a setup which actually compiles. I never got audio to run but hopefully I can manage something.

I halted all school work and the whole weekend is booked, except for Taekwon-do on Sunday. Hopefully I’ll get something done!


Posted in: Ludum Dare.

8-puzzle in rust

January 21, 2014

I think rust is one of the most interesting upcoming programming languages out there. So I wrote a solution to the 8-puzzle (see the 15-puzzle) using A*. It also has a breadth first search for solutions on a specific distance away from the goal.

The solution is not by any means a great one and there are parts I’m a bit annoyed with, but that’s mostly because of my inexperience with rust.

Rust was surprisingly easy to use and I like the strong typing and the pattern matching. One feature I found very useful was to do println!("{:?}", x); and be able to print any variable, composite or not.

I’m not friends with the different storage containers and especially the moving of values. Often I called a function with a value, but then I couldn’t reuse the value in another, so I ended up using clone() a bunch. I’m probably abusing it and there’s bound to be a better way to do things.

I got a little stumped on the standard library and spent some time perusing the documentation. It was very light on examples, which I find is the by far most useful thing to have in documentation, and I couldn’t even find some of the things. But it all worked out with a bit of determination.

I should mention that I’m using rust master, not a stable release, and I’m well aware of rust being in development at the moment. Still things worked out fine and I quite enjoyed dabbling with rust. I’ll write some more in it I think.

This is the code, working on rustc 0.10-pre (5512fb4 2014-01-19 05:56:35 -0800):

/**
 * A solution to the 8-tiles puzzle, implemented in rust
 * as a learning experience.
 */

extern mod extra;
use std::num::abs;
use std::hashmap::HashMap;
use std::hashmap::HashSet;
use extra::priority_queue::PriorityQueue;
use extra::container::Deque;
use extra::ringbuf::RingBuf;

// Use manhattan distance as heuristic for A*.
// Sum of distance in x and distance in y for all tiles.
fn manhattan(start: &[int], dest: &[int]) -> uint {
    let mut dist: uint = 0;
    for i in range(0, start.len()) {
        for j in range(0, dest.len()) {
            if start[i] == dest[j] {
                let x1 = i as int % 3;
                let y1 = i as int / 3;
                let x2 = j as int % 3;
                let y2 = j as int / 3;
                dist += abs(x2 - x1) as uint;
                dist += abs(y2 - y1) as uint;
            }
        }
    }
    // Avoid double counting so we don't overestimate.
    dist / 2
}

fn to_hash(state: &[int]) -> ~str {
    let mut hash = ~"";
    for x in state.iter() {
        hash.push_str(x.to_str());
    }
    hash
}

#[allow(dead_code)]
fn print_state(state: &[int]) {
    for i in range(0, 3) {
        for j in range(0, 3) {
            print!("{} ", state[3 * i + j]);
        }
        println!("");
    }
}

#[allow(dead_code)]
fn print(state: &[int], goal: &[int]) {
    for i in range(0, 3) {
        for j in range(0, 3) {
            print!("{} ", state[3 * i + j]);
        }

        if i == 1 { print!("-> "); }
        else { print!("   "); }

        for j in range(0, 3) {
            print!("{} ", goal[3 * i + j]);
        }
        println!("");
    }
}

// A* uses g: cost so far, h: manhattan distance to goal, f: g + h
struct State {
    state: ~[int],
    g: uint,
    h: uint,
    zero: uint,
}

impl State {
    fn new(state: ~[int], goal: ~[int], cost: uint, zero: uint) -> State {
        let h = manhattan(state, goal);
        State { state: state, g: cost, h: h, zero: zero }
    }

    // Ignore h and f.
    fn new_simple(state: ~[int], cost: uint, zero: uint) -> State {
        State { state: state, g: cost, h: 0u, zero: zero }
    }

    fn f(&self) -> uint { self.g + self.h }

    #[allow(dead_code)]
    fn print(&self) {
        println!("g: {} h: {} f: {}", self.g, self.h, self.f());
        print_state(self.state);
    }
}

impl Ord for State {
    fn lt(&self, s2: &State) -> bool {
        self.f() > s2.f()
    }
}

static dx: [uint, ..4] = [0, 1, 0, -1];
static dy: [uint, ..4] = [1, 0, -1, 0];

// Calculate the minimum distance from a state to goal with A*
fn dist(state: ~[int], goal: ~[int]) -> uint {
    let mut dist = HashMap::new();
    let mut q = PriorityQueue::new();

    dist.insert(to_hash(state), 0u);
    let zero = match state.position_elem(&0) {
        Some(x) => x,
        None => fail!("0 missing in state!"),
    };
    q.push(State::new(state, goal.clone(), 0u, zero));

    loop {
        // Ugly, but don't know how...
        let (state, cost, pos) = match q.maybe_top() {
            Some(e) => { /*e.print();*/ (e.state.clone(), e.g, e.zero) },
            None => break,
        };
        q.pop();

        if state == goal { return cost; }

        let x = pos % 3;
        let y = pos / 3;

        for d in range(0, 4) {
            let nx = x + dx[d];
            let ny = y + dy[d];

            if nx < 0 || nx >= 3 || ny < 0 || ny >= 3 { continue; }

            let npos = nx + 3 * ny;

            let mut next_state = state.clone();
            next_state[pos] = next_state[npos];
            next_state[npos] = 0;

            let next_hash = to_hash(next_state);
            let next_cost = cost + 1;
            let s = State::new(next_state, goal.clone(), next_cost, npos);

            if s.state == goal { return next_cost; }

            if !dist.contains_key(&next_hash) || s.f() < *dist.get(&next_hash) {
                dist.insert(next_hash, next_cost);
                q.push(s);
            }
        }
    }
    0u // Should never happen!
}

// Calculate the number of solutions with optimal solution length = target_dist.
// Use breadth first.
fn num_dist_from(goal: ~[int], target_dist: uint) -> uint {
    let mut count = 0u;
    let mut seen = HashSet::new();
    let mut q = RingBuf::new();

    seen.insert(to_hash(goal));
    let zero = match goal.position_elem(&0) {
        Some(x) => x,
        None => fail!("0 missing in state!"),
    };
    q.push_back(State::new_simple(goal.clone(), 0u, zero));

    loop {
        // Ugly, but don't know how...
        let (state, dist, pos) = match q.front() {
            Some(e) => { /*e.print();*/ (e.state.clone(), e.g, e.zero) },
            None => break,
        };
        q.pop_front();

        if dist > target_dist { break; }
        else if dist == target_dist { count += 1; }

        let x = pos % 3;
        let y = pos / 3;

        for d in range(0, 4) {
            let nx = x + dx[d];
            let ny = y + dy[d];

            if nx < 0 || nx >= 3 || ny < 0 || ny >= 3 { continue; }

            let npos = nx + 3 * ny;
            let mut next_state = state.clone();
            next_state[pos] = next_state[npos];
            next_state[npos] = 0;

            let next_hash = to_hash(next_state);
            let next_dist = dist + 1;
            let s = State::new_simple(next_state, next_dist, npos);

            if !seen.contains(&next_hash) {
                seen.insert(next_hash);
                q.push_back(s);
            }
        }
    }
    count
}

fn main() {
    let state = ~[5, 2, 6, 1, 7, 8, 0, 3, 4];
    let goal = ~[0, 1, 2, 3, 4, 5, 6, 7, 8];

    print(state, goal);
    let sol = dist(state, goal.clone());
    println!("optimal solution found in {} steps", sol);

    let target_dist = sol;
    println!("number of solutions on distance {}: {}", target_dist, num_dist_from(goal.clone(), target_dist));
}

Posted in: rust.

2013 in Review

January 4, 2014

The year is almost over and I think I accomplished a lot this year. You can read my reviews of 2010, 2011 and 2012.

2013 Geek Achievements

  1. Solved 213 UVa problems.
  2. Got 43rd at NWERC 2013.
  3. Placed high in IMPA, with one turn won.
  4. Completed the online course Programming Languages in Coursera.
  5. Wrote some ML, Racket and Ruby.
  6. Won the TDDD56 Parallel Sorting Contest.
  7. Got my first summer job as a programmer at Configura. Great fun, great place to work.
  8. Wrote a lot of C and C++.
  9. Switched my site generator from Jekyll to Hakyll and wrote a little Haskell.
  10. For the first time achieved full marks in an exam - TDDD20 Construction and Analysis of Algorithms.
  11. Completed an extra math course: TATA64 Graph Theory. Fun course.
  12. Finished my 3 first years in University, now I can choose my own courses!
  13. Completed the compiler course in school and learned a bunch.
  14. Unlocked all ships in FTL and beat it a bunch of times. Fantastic game!

2013 Non-Geek Achievements

  1. Had a good year with Veronica.
  2. Visited Karlskrona with Veronica.
  3. Achieved 4-kup in Taekwon-do.
  4. Been a kids trainer in Taekwon-do. Very rewarding.
  5. Read 30 books.
  6. Discovered Agricola, a great German Style board game.
  7. Discovered Terra Mystica, another great board game.
  8. Did a bit of yoga.

2013 Failures

  1. Did not complete (or start) a hardware project.
  2. Did not achieve 3-kup in Taekwon-do.
  3. Did not participate in Ludum Dare.
  4. Missed two exams. I didn’t fail them, but I missed the dates…

Plans for 2014

  1. Take care of Veronica.
  2. Achieve 2-kup in Taekwon-do.
  3. Achieve a full split.
  4. Do 300 morning stretches.
  5. Visit the gym 100 times.
  6. Write a game.
  7. Participate in Ludum Dare.
  8. Code some rust.
  9. Read 31 books.
  10. Write 52 blog posts.
  11. Solve 100 UVa problems.
  12. Take more fun courses.
  13. Construct a custom keyboard.
  14. Successfully read 1 Korean speech bubble in Tower of God, without reference.
  15. Complete all exams.
  16. Prettify the site.

Posted in: Yearly Review.

2013 Read Books

January 3, 2014

I actually read more books in 2013 than in 2012.

In a somewhat unorganized list:

Fiction

  1. Livet Deluxe - Jens Lapidius
  2. Escape from camp 14 - Blaine Harden
    Wonderful. A great book.
  3. Edge - Jeffery Deaver
  4. Dollar - Lee Child
  5. Gisslan - Lee Child
  6. Bränd - Lee Child
  7. Besökaren - Lee Child
  8. Hetta - Lee Child
  9. Värt att dö för - Lee Child
  10. Livvakt - Lee Child

Non-fiction

  1. Graph Theory - Reinhard Diestel
    Course book. Good but difficult.
  2. Graph Theory With Applications - Bondy and Murty
    Course book. Good explanations, but quite old (30 years).
  3. Modern Physics
    Course book. Only read parts of it. Huge and wordy.
  4. Signals, Infomation and Communications - Erik G. Larsson
    Course book.
  5. Reglerteknik. Grundläggande teori - Torkel Glad & Lennart Ljung
    Course book.
  6. Världens 99 bästa investerare
  7. Total Recall - Arnold Schwarzenigger
  8. Stora stretchboken
  9. Matrevolutionen - Andreas Eenfeldt
  10. Kundaliniyoga
  11. Stretching Scientifically - Thomas Kurz
    By far the best book on stretching. (which I’ve read)
  12. Statistics course book
    Don’t have the name atm.
  13. Automata and Computability - Kozen
    Course book.
  14. Artificial Intelligence - Stuart Russell, Peter Norvig
    Course book. Selected chapters. Huge.
  15. Competitive Programming 3
  16. Introduction to Algorithms
    Course book. Only a few selected sections.
  17. Compilers: Principles, techniques and tools - Aho, Lam, Sethi, Ullman
    Course book. Read most of it without going in deep.
  18. Numeriska beräkningar - Eldén, Wittmeyer-Koch
    Course book.
  19. Love and Math - Frenkel
  20. Children & Sports Training

Posted in: Read Books.

Minecraft Server Hosting

April 22, 2013

I play the phenomena that is Minecraft on and off. Sometimes the laid back building or the exploring is just what I need. Sometimes I can challange myself to build cool complex stuff and I’m even an avid follower of Doc’M and Etho and the other mindcrackers over at the youtube. Now brother Filip is an even more Minecraft follower than me and that’s the perfect setup for having my own minecraft server!

For the last couple of months I’ve had a server running on dotcloud’s sandboxed servers - it was literary free! A week or so ago they announced that they would turn off their sandboxed webapps and I had to turn my focus to something else.

Enter dedicated minecraft hosting! The very first host I laid my eyes on (I didn’t even search for anything else) was servercraft. At $7.99/month I thought they where pretty cheap. But they where pretty horrible. “Instant Minecraft Server setup in under 15 minutes!”. It took me about that long to get my first payment information and when I woke up that morning I could try out my new dedicated server.

Or so I thought. I could see the server flickering between online/offline through Minecraft and I couldn’t connect reliably. But at least I could connect right? I’m sure it’ll work! Let’s upload our map through ftp. With their upload speed it took me about 30 minutes to get it done, and I have 100 Mbit upload. But now that’s done, who cares about that right? Let’s see if my brother can log in.

Nope…

Just for fun I browsed the minecraftforum and their dedicated server section if I could find something better. Preferrably something relatively cheap for about 5 players and hopefully with the ability to run Computercraft, a mod which allows you to program things. One of the most responded to threads was about MCProHosting. They offered a simple 5 player plan for $2.50/month and they seemed very active in the thread responding to queries and stuff. I decided to ask them if it would be possible to run a modded server and if they could help me set it up (I had no idea how to do it).

A while later I’m running a perfectly smooth server with them, with up to 23 players and a total controll over the server’s mods and I’m practically paying the same as before ($9.99)! I had contact with two different people who helped answer my questions and to help me with my mod installing, they seemed very cunning and very service minded. MCProHosting has been fantastic so far.

And about a day later servercraft responded to my unsubscribe mail (which I sent before looking elsewhere).


Posted in: Minecraft.

FTL got a new victim

March 6, 2013

Faster than Light the great game I lost a ton of time on, has found a new victim. It’s not someone you’d expect, it’s even someone who said: “What a bad game” when she saw me playing it. But nevertheless this Saturday she played it more than 2.5 hours!

I told Veronica I wanted her try out FTL and minecraft, but we never got time for minecraft… It was so funny seeing her, on the edge of the seat, mumbling “die, die, die” to herself when she’s in battle and jumping up “hooray!” when she destroyed the enemy. Sadly she didn’t beat the boss, but boy did she come close! FTL must be a hidden skill for her.

I’m looking forward to introduce her to minecraft. I just hope she won’t get too addicted and turn into a clone of myself.


Posted in: Gaming.

Long Term Goals (part 2)

February 16, 2013

A few minutes after I wrote about my long term goals, in the shower, I realize I forgot a few major goals I have:

Write my own Programming Language

Why? Because it sounds fun and epic as hell.

Write a Book

So I like books and I like to collect them and I have my whole bookcase filled with programming books, manga and fiction. Something really cool would be to have a book with my name on it! So I wanna make that a reality.

I think I wanna write a programming book, what else could I write about? Fiction? Nah, I don’t have enough imagination and my writing isn’t good enough for that. A self-biography? Nah, my life isn’t that interesting I’d say. Programming is fun and it’s something I feel relative confidence in, so I suppose that’s set then.


Posted in: Life Hacking.

Long Term Goals

February 16, 2013

I have a lot of things I want to do. Right now I want to go to the kids training tomorrow and also to our training time. I haven’t trained a lot lately so it feels good to do something again and training the kids is very rewarding. On Monday I have the next graph theory lecture and I want to do all our lesson assignments until then. As I’ve beaten FTL on easy I really want to do it on normal as well. And I’m looking forward going to the restaurant with Veronica and a bunch of other stuff.

But sometimes it’s good to take a step back and take a look into the future a bit. What do I want to accomplish? What things do I want to do? What are my long term goals? This is an attempt to list some of them.

Black belt in Taekwon-do

I’ve been training for 2,5 years now and lately I’ve started to assist, and to hold, in the kids training and it’s great fun. Now this 3rd year in University the courses have become harder and I’ve also become more serious so the training has suffered a bit. But my long term goal with training has always been to have fun, maintain some shape and to get a black belt.

I associate being a successful programmer and having contributed to, or started, a popular open-source project. I want to become a successful programmer, but that’s not really a concrete goal, so I want to get myself out there and contribute.

Own a Snooker table

This is a somewhat random goal to be sure. I love to watch snooker and I always try to catch the World Championship - but I have never played it! I’ve played some eight ball and I loved it, but no snooker, and I’m a bit sad that I haven’t played more. Somewhere there this goal was born.

I want to have kids

I love kids and sometime I want to have them too. More than one preferably.


Posted in: Life Hacking.

Faster than Light

February 12, 2013

So I returned to Faster than Light again this weekend, this time for real. I bought it when it came out and I played it only in passing, but this weekend I played it a ton.


Aaahh a new beginning in FTL. Will it be death once more?

I generally don’t like games where you have to restart after you die, I have a tendency to get really upset when things go badly. Yes I do rage quit when I play cs. But I really liked FTL for some reason. It is frustrating sure, especially when you’re facing the final boss once more, and once again you fail to beat him. I think I played 20 rounds from Friday to Sunday and yet I couldn’t beat him.

Until now.

I beat him using The Torus, with two scrap recovery augments and a drone recovery arm early on. Needless to say I went full blown drones and I had some nice shielding and cloaking going on, but it was still a hard fight. The feeling after was so satisfying! I practically jumped out of my chair in pure happiness and I messaged my friends and Veronica “I beat him! I beat him!”.

Since then (since yesterday) I actually beat him again, but this time without the big yahoo reaction I was hoping for. But… I’m still plaing on easy mode… Do I dare to try normal next time?


Posted in: Gaming.

I, Robot

January 20, 2013

Here are the results of the big robot construction course we had before christmas! The whole process went smooth and our group was amazing. The design and building of the robot went well even though in hindsight I would’ve changed a lot of stuff. The ending competition didn’t go quite as we had hoped, but we never did place much effort in it anyhow. In summary I’m very pleased with the result.

Competition

We had a competition with the other robots at the end. It didn’t matter how it went really, but as always it’s fun to do well. I couldn’t embed the youtube links, but here are our epic matches!

  • Game one. Went well, getting our hopes up!
  • Game two. Everything sucks. We accidentally touched the recalibrate button so the robot did not see the lines…
  • Game three. Something is wrong with that curve I tell you! At least it felt better than loosing like the last one.
  • Game four (part 1) Game four (part 2). Retribution!
  • Exhibition. Just a ploy game, with no rules. But they cheated anyway!

A bit upset about the second game… If that didn’t happen I’m sure we could’ve won the whole thing, maybe. But no matter!


Do not ever place the blue start button right next to the gray nuke button! Or was the nuke button blue…?

Here’s a bunch of nice photos of our robot.


Posted in: School.

Fixing Problems

January 13, 2013

Today I have fixed two large annoyances I’ve had!

I fixed the blue people on youtube bug

I found a nice thread with a great answer. I solved it by forcefully patching libflashplayer.so

perl -pi.bak -e 's/libvdpau/lixvdpau/g' libflashplayer.so

Worked perfectly!

I fixed the minecraft stuck in pause bug

This affects you if you’re using xmonad (or similar?) and java 1.7. The solution was simply to downgrade to java 1.6.

Another problem I’ve had earlier was that minecraft tries to full screen over both of my screens instead of just one. The solution is to add this to your xmonad.hs.


main = xmonad defaultConfig {
    ...
    , startupHook = setWMName "LG3D"
    ...
}

Fixed my Todo Lists

Oh and I also added a lot of levels to my todo list, as suggested by this post.

I have now the levels

  • Programming
  • Writing
  • Reading
  • Watching
  • Verro
  • Misc

All so I can always have something to do pending on my different energy levels etc.


Posted in: Slackware, Xmonad, Minecraft.

A Vacation Filled with Obsession

January 7, 2013

A nice thing about school are the nice long vacations. Directly after my last exam we went north to our dear home village Övertorneå and spent two weeks celebrating Christmas and New Years Eve. What did we do? I practiced some obsessive behavior with Power Grid and Minecraft (and finishing up with some World of Tanks).

It all began with an article and the discussion which followed on hacker news. Basically they discussed the pros and cons of different games and specifically noting the advantages of german style board games over classical board games like Monopoly.

A summary from Wikipedia:

  • Themed games
  • Games made for everyone
  • No player elimination
  • Game ‘mechanics’

A note from simonw about Monopoly which I can relate to.

Couldn’t agree more. German-style games make Monopoly etc look positively archaic. Two great starter games are Settlers of Catan and Carcassonne. I’m a big fan of Ticket to Ride as well.

There are a couple of things that make these games so good. Firstly, they’re extremely well balanced - unlike Monopoly, it’s rare for one player to pull ahead to the point that it’s impossible for anyone else to catch up with them.

Secondly, they tend to come to an inevitable conclusion - a game of Settlers will virtually never last more than an hour and a half due to resources / space on the board depleting over time. I’ve had games of Monopoly last 6 hours or more, by which time everyone is fed up and wishes they’d never started playing.

After some debating I figured I’d order Power Grid as it got really good reviews, both from the discussion thread and various reviews.

And boy was it worth a buy!

The first day I played maybe two games with my little brother, like me he’s very into games and we positively loved it. When my uncle (he loves board games as well) and cousin arrived we played a bit, and then some more. In total we played at least 20 times in 12 days, with a maximum of 4 times one day. The game takes 1,5 - 2 hours and is very mentally taxing so I consider that a lot.


Power Grid, an great strategy game

I liked it so much that I ordered three of the expansions for it just after I left.

Of course we didn’t only play Power Grid day out and day in. We also started a new world in minecraft which we played a bit on… Sometimes things are just so good you can’t get enough of it you know?


Posted in: Gaming.

2012 Read Books

December 31, 2012

I read a post, sadly lost the link, where the author had recorded all books she had read during the year and I thought it’d be pretty fun to do. So here goes, in a mostly ordered list.

  1. The Art of Learning - Josh Waitzkin
  2. Världens Whiskey
    More of a reference book.
  3. Linear Algebra Done Right
    Course book.
  4. Linear Algebra Done Wrong
    Course book.
  5. Effective Prototyping for Software Makers
    Course book, selected chapters.
  6. Över Näktergalens Golv
  7. På en kudde av gräs
  8. Optimeringslära - Kaj Holmberg
    Course book, great both as a learning tool and reference book.
  9. Dune - Frank Herbert
    A truly great book, the sci-fi world is amazing.
  10. Under lysande måne
  11. Fit Forever - Dolhp Lundgren
  12. The Book of Cain
  13. Dune Messiah - Frank Herbert
    Not quite like the first book, but still brilliant.
  14. Lärjungen
  15. The C programming Language - Kernighan and Ritchie
    Did not do all exercises, really good book.
  16. Software Engineering
    Course book.
  17. Operating System Concepts
    Course book. Pretty good, although a bit wordy at times.
  18. Linear Systems and Signals - B. P. Lathi
    Course book. Quite good.
  19. XO - Jeffery Deaver
  20. The Definite Book of Body Language - Allan & Barbara Pease
    Very informative and also pretty funny.

All in all, I did not read that many books this year. I did start on a few which I never finished for various reasons.


Posted in: Read Books.

2012 in Review

December 31, 2012

Like the last two years I’m summarizing the year. At the end of the year like this it always feel like I didn’t accomplish much, but after the yearly summary it always feels better.

2012 Geek Achievements

  1. Designed a processor which fulfills the Core Wars 88 standard. Includes a redcode assembler.
  2. Went through pintos in school and learned a lot about operating systems.
  3. Began a new website.
  4. Wrote some Ruby in conjunction with Jekyll.
  5. Learned some Rust and wrote a small irc bot with it.
  6. Took an advanced mathematics course in Linear Algebra, it was fun!
  7. I was a mathematics mentor to the first years in Discrete Math.
  8. Won the “best CV” award from Ericsson during Linkdagarna.
    Here’s the CV (in Swedish) and here’s the latex file which produced it.
  9. Got top 3 in IMPA, I did participate three turns out of five.
  10. Participated in prog-SM and won a t-shirt! (Or three…)
  11. Solved a lot of problems on UVa.
  12. Migrated all my private projects from github to bitbucket.
  13. Wrote a lot of C.
  14. Wrote some C++.
  15. Wrote some Perl.
  16. Made a robot.
  17. Read one programming book - The C Programming Language.

2012 Non-Geek Achievements

  1. Me and Veronica had a good year.
  2. Achieved 5-kup in Taekwon-do.
  3. Read 20 books.
  4. Read a lot of manga. Battle Royale was the highlight of the year I think.
  5. Read some manwha. Possibly better than manga??
  • Tower of God (my favourite manga/manwha atm)
  • Magician
  • The Breaker New Waves
  • Noblesse
  1. Discovered Power Grid, a German Style Boardgame.

2012 Failures

  1. Did not write enough code.
  2. Did not participate in Ludum Dare.
  3. Did not write a new game.
  4. I have a mechanic course behind me…

Plans for 2013

  1. Take care of Veronica.
  2. Complete a hardware project
  3. Try out some yoga.
  4. Learn about compilers.
  5. Take some fun courses.
  6. Achieve kup 3 in Taekwon-do.
  7. Develop this site a bit.
  8. Bigger and better blog posts.
  9. Work hard(er?) in school.
  10. Code more.
  11. Read more books.
  12. Fix the Failures of 2012.

Posted in: Yearly Review.

Understanding the Computer

December 15, 2012

When I discovered programming it felt like a whole new world opened up for me with endless possibilities. It granted unlimited power and I could create virtually anything and it explained so much to me - how did a program work? How could you make a game or a website? But there was a big question without a good answer lurking in the background. I understood how you made the computer to do something and I understood the concept of electronics on a very crude level, but how did you ever go from a current to a full fledged game?

After 2,5 years in University I finally feel I can understand a bit of that. This is a simplified view of my journey so far.

Basic Electronics

We had a basic electronics course, although I must admit I never really got a good understanding of it and I haven’t used it enough to be comfortable with it. But I have at least a basic idea of how basic digital components can be realized.

Basic digital components

We only had one introductory course here as well. I didn’t like it at all at the time, I found it a bit dumb. Why care about the theory behind digital logic so much? Who cares?

Well, it’s impossible to build something bigger without the building blocks and it’s hard to build a computer without basic combinatorical networks. Still didn’t like it though.

Larger digital components

This was the first hardware based course (we had several) I liked. Our mission was to build a digital clock or something. Turns out it’s really fun to build things! We extended the clock to be a counter, up or down, and we built other simple things. Life was good and the world of computers started unlocking a little, from the hardware point of view this time.

A processor

I’m not sure how it happened but the next step after playing with the smaller digital components was to play with a real CPU - motorola’s 68k family. This was also my first insight into assembly, it’s something I always wanted to know. Turns out it wasn’t all that different from regular programming, except that you’re dealing with much more detail. We used the processor to communicate with our familiar digital hardware, we made a 1D ping-pong with diodes and a simple “sinking ship” game and a lot of small assignments. We ported (parts of) Forth to it!

After that we had a construction course, we could make a digital thing! Maybe a processor, hurr? So we did. We made a microprogrammed processor, simulated on an FPGA, which ran redcode. I even wrote an assembler for it!

Compiler

I’m waiting eagerly for our compiler course to start in ~10 months.

Operating system

We had a super fun course about operating systems and we did some work in pintos, an OS where you’re supposed to improve and implement parts of it. It was perhaps the best course I’ve had yet and I learnt a ton. Threading, scheduling, system calls, security, file systems, launching programs, etc…

After pintos it feels like I understand what a OS does and how it communicates with hardware and programs.

A program

Ah, we’ve come a whole circle. I’m still writing programs, that’s practically all I’m doing, but now it feels like I have a better grasp of what it takes to run it.

There are still things I’d like to do more of. More games, more assembly code, more hardware controlling stuff, using my newly gotten raspberry pi perhaps?, and I definately want to make my own programming language sometime.


Posted in: Computer, Programming.

Early Christmas Present

December 14, 2012

School is almost over and it’s almost time to travel back up to Övertorneå. This year me and Veronica opened our Christmas presents a bit early - we’re impatient like that.

I got one of the best presents yet I think! A Raspberry Pi!


Just look at this bad boy!

She got some crochet (virkning?) stuff from me, but she seemed content with that little. Now what shall I do with mine? I’m thinking of fetching a small screen for it and… and… Do something fun with it?


Posted in: New Stuff.

Monaco What's Yours is Mine

December 12, 2012

I’ve been waiting for soon to be three years for Monaco What’s Yours is Mine, and today I was granted an early christmas present - I was given a beta key! w00p!!

I was planning on studying and sending some emails to some companies… But who knows what I’ll end up doing?

Tomorrow is preorder release, yes I’m going to buy a 4-pack directly, and they will also stream etc. But for new enjoy the 10 month old gameplay video!


Posted in: Gaming.

5 Kup

December 2, 2012

After a season with very bad attendence, I blame school and lack of motivation, I still went to grading. I slept well but I was super stressed all weekend so I had to constantly run to the bathroom and I couldn’t eat lunch or breakfast properly, and I don’t usually get nervous…

Anyways the grading went well, the kids where absolutely great! They trained 6+ hours on Saturday and 4-5 hours on Sunday and they never complained or made any trouble whatsoever. I’m so proud!

My grading went well, I was worried about some jumping kicks… But I didn’t need to do them! The sparring went okay, but nothing really admirable, I guess I need to show up to more trainings. The breaking didn’t pose any problem and the patterns went well, although I got super tired by the end.

At the end I succeeded in leveling up, next one is a blue belt! I really, really need to work on my kicks though.


Posted in: Taekwon-do.

Dbot

November 13, 2012

So I made a small irc bot in 294 characters in code-golfing language #1: Perl.

Usage

perl Dbot

Commands

  • .name - Echo the bots name
  • .hello - Output “hello world!”
  • .src - Dump the source code

Code

use IO::Socket;$s=IO::Socket::INET->new("158.38.8.251:6667");sub o{print$s "$_[0]\n"}o("NICK $0");o("USER b * * :b");while(<$s>){o("PONG$1")if/^PING(.*)$/;o("JOIN #$0")if/004/;if(($p,$h)=/(P.+)\.(.*)./){o("$p$h world!")if$h=~"h";o($p.$0)if$h=~"n";if($h=~"s"){open F,$0;o($p.do{local$/=<F>})}}}

Well uh let’s try that again, without minimize shall we?

use IO::Socket;

# Connect to one server of irc.quakenet.org
$s = IO::Socket::INET->new("158.38.8.251:6667");

# o("txt") writes "txt\n" to the server
sub o{ print$s "$_[0]\n" }

# Register our nickname, same as file name
o("NICK $0");
# Register username, necessary stuff :<
o("USER b * * :b");

# Never quit!
while(<$s>) {
    # Play a bit of ping-pong
    o("PONG$1") if /^PING(.*)$/;

    # Join when ping-pong has completed
    o("JOIN #$0") if /004/;

    # Parse a message our channel with message ".<cmd>"
    # so example:
    # :<user-info> PRIVMSG #<channel> :.<cmd>
    # (P.+) Match 'PRIVMSG #<channel> :'
    # \. Cmd prefix
    # (.*) Cmd
    # . Trailing \r
    if(($p,$h) = /(P.+)\.(.*)./) {
        # .hello Echo hello world! Unless an abuser appears!
        o("$p$h world!") if $h =~ "h";
        # .name Echo name of bot
        o($p.$0) if $h =~ "n";

        # .src Output whole source code
        if($h =~ "s") {
            # Open running script file handler
            open F,$0;
            # Echo contents of running script
            # file slurping
            o($p . do{ local$/ = <F> })
        }
    }
}

All hacky, but I had some fun with it.


Posted in: Programming, Perl.

Good and Bad Programmers

November 8, 2012

Every now and day blog posts about what it takes to be a good programmer or how you figure out if someone is a bad programmer arrives. There’s always talk about how you find the good programmers in interviews and the topic is always hot in schools and universities.

Today I read the best comment so far about the topic by hacker news regular edw519:

My default response to any “good programmer, bad programmer” post:

A smart accountant once told me that the answer to “How much money did you make?” is always, “Who wants to know?” If it’s an investor, the answer is “A lot.” If it’s a customer, the answer is “A little.” If it’s the IRS, the answer is “None.”

Same thing here. The answer to “Who is a good programmer?” is always, “Who wants to know?”

To a project manager, the programmer who hits every deadline (regardless of quality) is a good programmer.

To a customer, the programmer who solves their problem quickest is a good programmer.

To a business owner, the programmer who makes them the most money is a good programmer.

To a PHB, the programmer who makes them look the best is a good programmer.

To a journalist, the programmer who tells the best stories is a good programmer.

To a junior programmer, the best mentor is the good programmer.

To another programmer, the programmer they are most likely to want to go into battle with is a good programmer.

To a blogger, the programmer who best fits the profile of the point he is trying to make is a good programmer.


Posted in: Programming.

Laying off Pintos

October 16, 2012

Exam period is here which means all courses should be wrapping up and a week or so ago we finished up our lab series about pintos. The labs were among the best I’ve had yet and I learned a ton. We didn’t follow the official instructions but we had our own assigmnets. Basically:

  1. Implement some basic system calls.
  2. Reimplement timer_sleep to not use busy waiting.
  3. Implement synchronization between processes, program arguments and securing the system calls. Yes quite a bit bigger than the rest.
  4. Synchronize the file system.

All in all pretty darn fun. I was considering sharing the code publicly, but that might not be a too bright of an idea. I’ll keep it private for now.


Posted in: School, Programming.

Moving private repositories to Bitbucket

October 10, 2012

Long overdue, I recently moved my private repositories from Github to Bitbucket. Github is great of courseand they even gave me a free students account and I still host all my public repositories there. Still, Bitbucket has unlimited free private repositories for up to 5 users which is a much better pricing model. And Bitbucket is pretty awesome as well, they’re posting a lot on hacker news, my favourite place on the web. That’s where the final push came from anyway.

The transition was as smooth as a… a sine wave…? Pretty damn smooth that is. Sign up took 30 seconds, copy paste my ssh key and redefine some remotes and I’m basically done. Decentralized source code management (git in this case) is pretty damn awesome.


Posted in: Git, Bitbucket.

Eduroam for wicd in Linkoping's University

September 13, 2012

So we have eduroam at our University and unsurprisingly wicd is not on their official support list but with some googling the wonderful Arch Wiki had the answer. Well, almost.

Save the following as /etc/wicd/encryption/templates/ttls-80211:

name = TTLS for Wireless
author = Alexander Clouter
version = 1
require anon_identity *Anonymous_Username identity *Identity password *Password
optional ca_cert *Path_to_CA_Cert
-----
ctrl_interface=/var/run/wpa_supplicant
network={
    ssid="$_ESSID"
    scan_ssid=$_SCAN

    key_mgmt=WPA-EAP
    eap=TTLS

    ca_cert="$_CA_CERT"

    phase2="auth=MSCHAPv2 auth=PAP"

    anonymous_identity="$_ANON_IDENTITY"
    identity="$_IDENTITY"
    password="$_PASSWORD"
}

Only difference from the wiki is the line subject_match="$_CERT_SUBJECT" is removed.

In a terminal:

cd /etc/wicd/encryption/templates
echo ttls-80211 >> active

Then open wicd (I use wicd-curses) and choose TTLS for Wireless under the security mode and enter your credentials from this page. For the lazy people download this, save it somewhere and specify the path to it as Path to CA Cert then input your <name>@liu.se or <name>@student.liu.se and don’t forget your password.

Done!


Posted in: Eduroam.

Robot Project Start

September 5, 2012

So it has begun, the long road until christmas when we’re supposed to have a working warrior robot. We’re gonna do battle with infrared lasers instead of axes but it might be fun anyway. Luckily for me I’m responsible for software and nothing harder than that! w00p!


We could maybe cheat a little…

Our group seem pretty good, all nice guys (so far!) and we have guys on the harder jobs - documentation responsibilities and project leader - so it should go well. We’ll see!


Posted in: School.

Entering Pintos

September 3, 2012

First week of school is over and it’s been full throttle from the start, in a good way. We’re having four courses and for once I like them all. We have an interesting math course, a useful course “Software Development in Theory” (boring but useful) and a big project course where we shall build a robot. That’ll be fun! But my favourite course so far has been the course about operating systems where we’re supposed to add functionality to pintos, a toy operating system from stanford.

It’s one of the things I’ve been wanting to learn every since I first came in contact with programming; How does the connection hardware to software work? How does an operating system work? And how does a programming language work? After two years, with implementing a processor last year as a high point, I think I can answer how hardware connect with software. I still need to implement my own language but for now I’m having fun with OS programming. Yesterday I implemented basic System Calls and next on the agenda is altering some thread stuff. I might make the code available when the course is over, and maybe even add even more stuff? Fun, Fun!


Posted in: School, Programming.

It's Time for More School

August 27, 2012

Today it’s finally starting again and it’s off with a flying start. We have 11 lectures this first week and an absolutely smacked schedule. If that wasn’t enough I also have a mentor time to prepare for and I need to start Taekwon-do again.

On another note Ḯ’m currently plowing through ‘Liar Game’ manga which is pretty damn nice. It’s a psychological manga about various games where you’re supposed to lie and cheat your way to victory. Corny as it may sound it’s pretty good.


Posted in: School.

Up like a Sun, Down like a Pancake

August 25, 2012

I was looking forward to this weekend, for Ludum Dare and for me to finally make a game again. But it just don’t feel right to me. I’m not prepared, I feel a little bit stressed and I don’t really have faith in my game so I’m gonna step down this one as well. But it’s fine, Ludum Dare is supposed to be fun and challenging with an emphasis on fun but as it is now I just don’t really feel it.

Next time I will come more prepared, that’s a must! I think I need to do some html5 or pygame for the next time. Fast prototyping should mean more than writing a lot of boilerplate code and the boiler will make a damn stew if you’re rusty.


Posted in: Ludum Dare.

Ugly and Slow Progress

August 25, 2012

Ludum Dare is coming along… Slowly. The rust on me is probably so brown it’s nearly black. But I have an idea and it might be good, all I need to do is execute it. Right?


Programmer graphics coming to take you away!

Anyway it’s going to be a risk-like game with a twist: you can change all the rules and victory conditions. I played a pretty cool card game where changing the rules was the core of the game, pretty neat idea actually. As for the theme I wanted to do something with robots taking over the world - it’s only the next logic evolution of computers anyway.

Not sure if the game is going to be anything to celebrate over, but I’m having fun at least. Except for getting annoyed about C++ missing all my favourite features from other languages… But in time I’ll be in love with it anyway.


Posted in: Ludum Dare.

Rising from the Dead, it's Ludum Dare

August 25, 2012

I’ve been a long time gone, been busy with school then having summer vacation and generally not making games or blogging. But I have revived! I scrambled to push my new website live because today it’s Ludum Dare time! The theme is “Evolution” and it’s the 24th time for Ludum Dare and my 4th time entering.

Of course, as usual with my Ludum Dare entries I’m totally unprepared. I haven’t used any of the tools I’m going to use in over half a year or something.


But I did clear my desk! And an inspirational cactus friend!


Posted in: Ludum Dare.

Beginning Programming

March 18, 2012

I read a wonderful post, 3 Things I hate about “beginner” programming books, which I couldn’t agree more with. Basically he has these points:

  1. Too long
  2. Too many examples like “Hello World!”
  3. No answers to exercises.

Nr 1 is a pretty curious one. Even though I think a book is good, I often end up only completing 75-85% of it before going on with my own projects or with something else. Also the best books are often shorter than your average 700+ pages brick. Modern Perl, The Pragmatic Programmer and Effective C++ are all short but really good.

I always hate, really hate, when I can’t find an answer to an exercise in a book. Often I’m unsure or I frankly don’t know how to solve something, even after reading the text and examples, and I also think I learn best by copying. This may sound strange to you but I swear it’s true. When I made my first game I copied from a tutorial and after I changed and wrote something new. This is also the same when doing math, first I want too see examples and how to actually solve something then I copy that and then I go “hmm what does this do, what will happen here”.

The small constructed examples you always see, “this Vehicle is a class and the Firetruck inherits Vehicle”, are no use at all I’d say. Is that how you solve a problem? Is that how you program? Not really. Almost all examples are contrived and not useful at all, especially for beginners. I never thought classes where good before I copied a solution to some problem I had. Wonderful!

This is what I’d do if I would write a “beginner” programming book:

  1. I would use the whole book to construct a game. I would begin with simply drawing a shape, or an image, on the screen. Then I would make it move and at the end of the book I would have all the necessary code for a complete and functional game.
  2. I would provide all the code inside the book. Of course I could provide it online but the act of actually typing in something yourself is very valuable.
  3. It should be fun and easy-going. I wouldn’t focus on every little detail but instead on the big picture and my goal would be to get the reader hooked on programming.

That’s it! Learning programming is hard, but it’s also very satisfying. My summer project will be to teach my little brother to program, we’ll see how that’ll go.


Posted in: Programming.

Changes

March 4, 2012

A lot has been going on lately and it feels like I’m being swamped. I can’t complain too much but there are things I’d like to change after the exam period this week.

  1. Program more!
    I have seriously done nothing since christmas or someting. I need to finish:
  2. Ada project for school. Can’t believe I still haven’t done it.
  3. New web page. Need to track down a good perl hosting service and actually finish the site.
  4. Game for my little brother to create graphics and tweak some code in, I want to teach him to code during the summer! That’s a good healthy challange for me.
  5. Ludum Dare 23 in April, yay!
  6. Serious Taekwon-do training.
  7. Don’t fall behind too much in school. This time I’m hurrying like mad to catch up before exam and I’m actually worried. This shouldn’t happen! I didn’t even go to a single lesson this time.

Just wanted to get that out there.


Posted in: Life.

Motivation is Valuable

February 24, 2012

It’s funny how motivation can play such a huge role with my productivity. I’m currently having two math courses; one mandatory about analysis in multiple variables and vector analysis and one voluntary about advanced linear algebra. I don’t like the analysis course, didn’t like the previous ones and I don’t like this one.I don’t fall asleep on lectures ever and I always try my best to listen but this one is pretty horrible. Not sure if the teacher or the content is to blame?

On the other hand the linear algebra course is fun and intriguing. Every lecture I’m always surprised when it ends “already 2 hours?”. This is so funny because I’m not really convinced why this is happening, are the courses or the teachers that different? Sure that’s probably true, but mostly I think it’s my motivation that’s hurting me.

“Linear algebra seems fun! It’s hard but I will manage it.” vs “Pah analysis again. Damn the first lecture was boring, this course is boring”. I do like linear algebra more and I think it’ll be much more useful for me in my programming career but analysis isn’t so bad, not this degree. I think my motivation blow ups my it into bigger proportions than it really is.

It’s pretty bad, we have exam in two weeks and I have literary done nothing in the analysis course… Now I need to study hard if I want to complete it but the lack of motivation is just sooo hard to overcome. Sometimes I think I don’t have the mentality to be a good student. Many of my class mates are in school the whole day, every day, while I try to be in school as little as possible.


Posted in: School.

Favourite Programming Language

February 24, 2012

All the programmers love to promote their favourite language, or to hate on others. Now I read a post which claimes my favourite language is not good enough! But he’s correct of course, there is no one language to rule them all. You should always choose the mest language for the job, be it C or Ruby, but most don’t learn enough of them. Maybe he’s right, maybe we’re all just lazy?

Whatever the reason I certainly have a favourite language, or rather a few. If I would have to name one I would probably say Perl, just because I’ve had the most fun with it! I do enjoy C++ and as I’ve made most of my precious games in it that’s a good candidate. Haskell is absolutely awesome and so is Lisp. There I’ve listed 4 favourites! But of course I don’t care about that really, I tend to fall in love with most of the languages I use.

Well I don’t particulary like Ada… But I do admit it has some nice features, and the error messages are great! But how about Java then? I’ve been joking around a lot with it but to be honest I don’t really hate it. Sure there are better alternatives but there are good points. The JVM, the libraries and the simplicity of it appeals to me. Maybe it’s not simple but I’m used to the thinking.

To echo his suggestion: learn new languages. I’ll add that don’t just learn them: use them for something real and learn to love them! And don’t just learn similar languages (from C++ to Java isn’t worth it) but try to switch it up a bit (try C++ to Haskell). You’ll find you’ll be a better programmer when the dust settles, and you can actually choose a language gwith the strengths for a particular prolem.

End rant.


Posted in: Programming.

Doing Stuff

February 12, 2012

The school and my life is trotting along. I’m handling the extra course fine, but instead I’ve left the standard math course behind a bit. Actually more than a bit but hopefully I’ll correct things later.

No my life is going along just fine, it almost feels like my life is runing ahead and leaving me behind. What have I done lately? School work I guess? Can’t think of anything else the last month to be completely honest, which is pretty far from optimal. I set out this school year with the goal of programming a lot more, but so far that has been pretty dead. Sure I made a lot of progress on the new site during the christmas break but since school started I have done nothing, nothing! So sad.

Yesterday I did something else though. I went and bought a bunch of stuff. I bought a birthday present for Veronica which I’m very happy with, and I bought some rubber bands for training the oblique muscles among others. I tried but I couldn’t find a protective condom for my new phone, yes I have a new phone! A white, shining, wonderful Samsung Galaxy S2 which is blowing my mind. I can now surf, watch starcraft and read manga in bed, in the bathroom and in school! Yay! And umm… New boxers.

Apart from all that I also hung up Veronica’s two paintings and a white shelf I’ve been meaning to a while. I realized I had no idea whatsoever how to hang up a painting! I bought a big box with screws and stuff but there where only one of them I knew how to use. Now I know how to hang up a painting like the leaning tower of Pisa!

Leaning tower of Pisa
You call that leaning? You should check out my paintings!

I finally got them sort-of straight, but it took a while.

You know your life is running fast if you’re savouring hanging up paintings. But now I will do something about that: I will go to Taekwon-do practice and later maybe going to the children’s practice, yay!


Posted in: Life.

A Simple Thought

February 2, 2012

I wrote that we where doing some microprogramming, making the processor work etc. We had a lab about that yesterday and I was very, very nervous. The preparations weren’t that hard, but they where very bothersome. Converting the instructions to binary/hex by hand is never nice. Turns out the lab was very easy! You also had the option to prepare everything before on their simulator, which dumb be didn’t do.

When I thought about how to describe what microprogramming is I was going to write that it’s what makes a processor work. This sounds a bit off though, couldn’t you do the same with physical hardware instead of another programming step inside the processor? Well turns out that’s what RISC is all about. Sometimes the qualms you have when facing something new are completely justified.


Posted in: School.

Speeding Ahead

January 29, 2012

Life is slowly settling down over here. School has started with some pretty interesting stuff this year. Firstly we have a math analysis course in multiple variables which is ok. I’m not a fan of the previous analysis courses but maybe this will be a bit different. We’re contining with computer hardware, microprogramming and such, and I enjoy it a little.

When I started programming the big question was how did the code I typed into my editor become something the processor could understand? I’ve got a good feeling for different programming languages, and now including the assembly for 86k processors. Now the basic hardware, from logical gates to ackumulators, and code are being connected together which feels very nice indeed. I still like to construct and make stuff in a more high level way though.

We’re also having a new course, it’s been totally remade since last year, about software prototyping. I’m quite used to prototyping with my games but as expected a university course about the subject is a bit more structured and dare I say more boring? The course book, Effective Prototyping for Software Makers, is pretty good as it explains the design process in a formal, but not mindnumbingly boring, way. I need to investigate more but I’ll definitely use some of the ideas.

The last course for now is the advanced course in linear algebra which me and a friend chose. Linear algebra was probably the hardest math course we’ve had but at the same time I think it’s the most enjoyable and useful so far. And finally I hear it’s very useful for programmers in computation and 3D programming so it’s something I really want to understand.

Life with Veronica is also working out, mainly because she’s awesome, and I went to a Taekwon-do training this week. Feels good to practice again!


Posted in: Life, School.

Ludum Dare 22 results!

January 21, 2012

The results from Ludum Dare 22 are in! I made the game Sat-E for the 48 hour competition and I was quite happy with it.

#24 Community 3.71
This one was really surprising, but welcome. I did post a cute picture of a korean k-pop star so I guess that’s why.

#40 Fun 3.38
Fun is always great! I’m so happy ^^

#49 Theme 3.69
I thought my theme choice (Wall-E in space) was good, seems like other thought that too.

#65 Overall 3.42
This is supposedly the “best” category to do well in so I’m glad. I did a lot better than I thought I would…

#95 Humor 2.82
Damned blast I should’ve focus more on the funny one-liners.

#167 Mood 2.92
If I make a better version of the game this is probably the one thing I would focus on. But that is a thought for another time.

#247 Innovation 2.69
Not very innovating I agree.

#338 Audio 2.23
No music = shit.

#340 Graphics 2.62
I guess I’m not that good of an artist, but tell me something I don’t know!§

#376 Coolness 35%
The coolness factor = amount of games rated. I wasn’t motivated at all sadly… I’m a game developer but I don’t play much games? I’m so strange.


Posted in: Ludum Dare.

2011 in Review

January 4, 2012

It’s time to wrap up the year that’s been. Be warned for slight ego boosting here.

2011 Geek Achievements

  1. Wrote three games this year:
  2. Bought a new computer!
  3. Bought a mechanical keyboard.
  4. Bought custom Starcraft 2 keycaps for the keyboard.
  5. Learned 68k assembly.
  6. Learned about algorithms and data structures.
  7. Bought a lot of programming books.
    • The Pragmatic Programmer
    • Structure and Interpretation of Computer Programs
    • Introduction to Algorithms
    • Modern Perl
    • Effective Java
    • Learn You a Haskell for Great Good!
    • Land of Lisp
    • Maybe something more…
  8. Read a lot of programming books. Modern Perl and The Pragmatic Programmer were my favourites.
  9. Learned some Ada.
  10. Learned a lot of Perl.
  11. Learned a tiny bit of Haskell.
  12. Learned some emacs
  13. Got a hint of design understanding thanks to Design for Hackers

2011 Non-Geek Achievements

  1. Went to a dance course with Veronica.
  2. My stumach is in good shape!
  3. Read and loved A Song of Ice and Fire.
  4. Achieved 7 kup in Taekwon-do.
  5. Read a lot of manga. Some recommendations:
  6. Bakuman. A nice slice of life manga about… making manga. Surprisingly captivating.
  7. Gamaran. A slightly brutal battle manga with loads of weapons.
  8. Vinland Saga. A bit more brutal battle manga about vikings and war.
  9. Beelzebub. Battle manga but with a ton of light hearted humor.
  10. The Breaker. Another battle manga, a bit more direct perhaps.

2011 Failures

  1. Didn’t produce enough games.
  2. Didn’t write enough code.
  3. Did not learn enough Haskell.
  4. Have a lot of books I haven’t read yet.
  5. Did not have enough free time.

Plans for 2012

  1. Keep Veronica happy!
  2. Make more games.
  3. Code more! Much more!
  4. Blog more!
  5. Learn more Haskell (yet again)…
  6. Transform my site to something new, something that I don’t dread to use.
  7. Improve in Taekwon-do.
  8. Be more disciplined in studying, coding, training and cleaning.
  9. Read the programming books I have but have not read yet.
  10. A book about Erlang.
  11. K&R C Programming language.
  12. SICP, all important for every programmers. I hear.
  13. Probably missed something… Damn I’ve got many.
  14. Get good results in school.
  15. Try to be a bit more social (it’s hard).
  16. Get more free time somehow.
  17. Complete a larger personal project.
  18. Learn more mathematics.

Posted in: Yearly Review.

Postmortem: Sat-E

December 28, 2011

This is my postmortem for my Ludum Dare 22 entry, Sat-E. You can find the timelapse over here.

The Good

Motivation
I was really motivated for this dare and it showed in the game and outside it. It’s super hard to make a game in only 48 hours but this time it went pretty well. My previous attempts went okay, but there were always something lacking. This time the game feels a little bit more finished so I’m going in the right direction.

After the game the programming motivation continued and with it I’ve been improving my small fast prototyping framework I use when making games. I got a lot of ideas on improvements during the weekend so that’s great.

The feedback
I was moderately happy with how the game turned out, it didn’t contain everything I had envisioned after all, but I got a ton of positive feedback anyway which is wonderful! It seems like some thinks that my game is good and there’s nothing better for your game making confidence than a bunch of flattering words. I’m even considering developing the game more, maybe spending a couple of days here and there on it during a couple of months when I have the time?

I learned a lot!
The best way to learn something is just to do and it’s still true. I’ve found a bunch of ways to improve and shorten my code, I’ve made an “infinite” space constructed by individual chunks and that game physics != real physics. Awesome.

Game design is a pretty fascinating creature. Sometimes you give it your best but the resulting game isn’t funny, other times you think your game is shit but then you get comments on your “amazing” game! This time I was certain the game was crap, a neat idea wrapped behind a boring gameplay but turns out it maybe wasn’t that boring after all?

I got this comment:
“Also the fact that when that happened the game didn’t simply reset, I lost my money but not my items, literally stopped me from rage quitting. Bravo”

My thougts? Wait that’s a bug! Hmm…

My girlfriend
Of course as I live together with someone it’s quite hard to devote an entire weekend, plus the extra time before and after, with my computer. Veronica handled it wonderfully well and she was very supportive which means a lot to me and it helped a ton.

The Bad

The music
There’s no music but I had grand plans for making music for the first time ever! It failed hard though. Which brings me to the next point…

Not familiar with the tools
I used my own framework for the game, which is fine, but my last game with it was in May 2011! Which is a looong time ago. I was a bit (a lot) out of practice with this whole pixel arts thing. And of course I had never used LMMS to make music and that didn’t happen. I was short of time and it was too big of a deal to start it with the last minute.

Not enough time
Even though I had the whole weekend planned for the dare and I skipped practice on Sunday I was still short on time. I’m not really sure why though. I made a pretty simple game, not a lot of art and I generated sound with bfxr which took no time at all… The reasons really must be:

  1. Not enough practice.
  2. Unfamiliarity with the tools. Correlates closely to #1.
  3. I’m bad and LD is hard.

When I see all these amazing games I’m reminded on how much better other game makers are. I need more practice and I need to make more games. I should enter the next dare, enter the experimental gameplay project and just make more games.

And let’s face it: Making a game in 48 hours is frickin hard.

The Ugly

The art
Oh god… I suck at making art. Let’s just leave it at that.

The code
There’s a lot of bad and wrong in there, it works but it’s not pretty. In fact, it’s ugly.

The gameplay
This is a tricky one. I thought about placing this in the bad section as I didn’t find the game very pleasing at all. The beginning was too slow, the ending too long and there wasn’t enough incentive to continue flying through endless space I thought. But I got a lot of positive comments and reactions which is wonderful! I don’t fully understand why yet so I’m tagging the gameplay as ugly. After all the gameplay wasn’t like in my dream…

Ending thoughts

Before entering the competition I’m always nervous but high spirited. That feeling is always crushed during the weekend and when I finally get the game done and uploaded I think it’s the worst game ever. Luckily I’m greeted with positive feedback and that was the case this time again. Maybe they are okay, not super of course, but simply okay.

This time the dare came at a time where I felt I haven’t done anything meaningful for a long time, it’s just school, little programming and no game making. Now after my spirits are high and I can face a new year with many more games to come!

Until next time, cheers!


Posted in: Postmortems, Ludum Dare, 7days.

Sat-E

December 19, 2011

So I entered Ludum Dare 22 this weekend as a preamble for tomorrow’s linear algebra exam. The theme this time around was Alone and the game I came up with is about a lonely satellite in space, kinda like Wall-E.

Download
Windows Linux 64bit

Sat-E

Instructions
Collect junk and other items for you to buy upgrades, and finally, your friend to finish the game. Be careful not to run out of battery, you need to return home to base for a recharge between runs.

Controls
Arrow Keys - Move around
Space/Return - Choose item in docking mode
F1 - Developer console

Timelapse
It’s on youtube and it’s embedded here.

Source
https://github.com/treeman/Sat-E

Built using my fast prototyping framework
https://github.com/treeman/7days


Posted in: Games, 7days.

Ludum Dare 22 Timelapse

December 19, 2011

Here’s the timelapse for my entry to Ludum Dare 22, Sat-E.

This time I managed to record one screen every minute, which is very suboptimal to say the least but I slowed it down a bit so you can at least see something being done there.


Posted in: Timelapse, Ludum Dare.

Starcraft 2 Keycaps

December 16, 2011

When I ordered this computer I was compelled, utterly compelled to buy a mechanical keyboard. Sure they cost almost 10x as much as a “regular” one and they didn’t even have these funky multimedia keys, what gives? Did I loose my insanity? It was supposed to give a great typing experience… And it sure did deliver!

I’m bringing this up again because I decided to spend my money on something possibly even more useless (or awesome?). I ordered some starcraft II modifier keys for the keyboard and now they are fitted onto the keyboard. Yay!


Posted in: Computer, Keyboard, New Stuff.

Ludum Dare 22 Here I Come

December 14, 2011

The time has finally come. After more than three hours of exam writing, and almost double spent on studying for it, I am now ready to declare my entry into Ludum Dare 22! I’ve been away far too long, with my entries for the 17th and the 20th dare being almost a century away, the ancient game making creature will once again move into action. We’ll just hope the game won’t be ancient as well…

Leaving that behind us I can now focus on what to actually use. I wanted to try some new language and some new environment but that seems lika a really bad idea. So I will stick to what I know:

My fast prototyping library consisting of old C++ on top of the nice SFML engine. sfxr, or maybe the newer bfxr for sound effects. It’s seriously great, give it a try! Probably mtpaint for some nice pixelated graphics. I would like to try out inkscape for some vector based graphics but I might skip it this time. LMMS for music making. This I tried to use a long time ago… And failed miserably. It’ll be a fun, fun weekend! And finally my little timelapse recording hack for linux. Be careful if you want to try it, it will most likely blow up in your face and take your computer down with it. Handle with care.

And of course here’s where I’ll be spending most of my waking hours:

Ludum Dare 22 setup

Ludum Dare 22 setup

I’m planning on getting some new food during all this, but I’m not entirely sure yet.


Posted in: Ludum Dare, Game Making.

Finishing Stuff

December 7, 2011

I haven’t done much blogging or game programming in a while but instead I’ve finished some school stuff. We completed the assembly course labs, which were pretty fun actually, and I managed to finally complete the electronics course I’ve been holding off on for like forever… But now it’s gone, yay!

There’s not much left before christmas either, we have some sort of exam on tuesday (very boring course) and one the 20th (very fun course) but other than that I’m free to do whatever I want.

  • I’m planning on entering Ludum Dare next weekend, finally getting some game programming done.
  • I need to recap this year and plan some for the next. I fear this year wasn’t as productive as I had hoped.
  • I’ve been thinking that I know my tools (Vim, the command line) but I need to get a little bit better. Especially with emacs as I feel like a monkey on a typewriter when I’m forced to use it at school. Not cool.

And some more smaller stuff I don’t have energy to type out (or maybe you’re interested in reorganizing my home folder?).


Posted in: Life.

A Nice Weekend

November 21, 2011

I’ve had a pretty nice weekend. On Friday MLG Orlando began and I’ve been staying up to 2 and sleeping until at least 10 the last days. My inner night-owl is very happy about it, my early-rising girlfriend perhaps not as much, but I think she’s a bit understanding?

On Saturday we cleaned the house for Christmas and hung up a star and stuff like that. It was brutally hard work (laugh if you like) but I pulled through without dying too much. Saturday night was full of StarCraft again though so it’s fine!

What about Sunday then? Even more StarCraft of course!! IPL had some grand tournament, which Stephano won of course, and MLG had it’s final day. In the middle there somewhere we had some taekwon-do and I did some laundry. With that done I sat and shouted at my chosen ones in the tournament and they did do okay, not like I had hoped but still. Leenock managed to win MLG which is pretty damn awesome.

Now I need to adapt to a normal life again, with school and Ludum Dare coming up.


Posted in: Life.

The Decline of FPS Games

November 20, 2011

I read an article about the decline of FPS games and it made me think a bit. When was the last time I actually enjoyed an FPS game? I installed old Deus Ex a while ago but it’s what 12 years old? Team Fortress was okay, the one or two times I tried it, but I can’t say I truly enjoyed it, hell I never even played it apart from trying it at a friends pc. Well I bought Duke Nukem Forever but I haven’t even completed it, it’s best server collecting dust at the bookshelf now. No the truly last FPS I enjoyed was CSS. How is this possible?


CSS: my one favorite FPS game.

I am not a big FPS fan and I get sick of modern FPS almost directly. It feels like they are all the same, I don’t even want to try them anymore. The biggest upset was actually Duke Nukem Forever lately. It had totally linear levels, you could only use two weapons at a time and it just felt boring and uninspiring. Why is it that FPS games are considered good if the graphics is good? Or have an advanced physics engine? It’s good of course but there has to be more to a game than that. Games feel so shallow nowadays.

But I never did think about FPS games when I read the article no I thought about RTS and construction games. The main point the article wanted to put forward is that game designers today, especially big ones, don’t want to take big risks so they do the same thing as everyone else. This is what happened a decade or go or something when we got a bunch of very similar RTS games. I remember that there were a lot of very similar construtor games before that too. But where are they now? I don’t want a million similar titles, but the basic ideas behind those games were great - and I miss them.

Where is Evil Genius 2 for example? It’s one of the best games ever but there’s nothing similar, only a bunch of similar games trying to steal the popularity of other, probably better, games in the same style.

We need to stop imitating and start innovating, but we also need to bring back the ideas of the classics.


Anno 1602, one of many classic constructor games. But where are they now?


Posted in: Gaming, Game Making.

Swelling with New Shiny Books

November 9, 2011

So I read the wonderful Design for Hackers and I managed to win some money for books from a course… So I ran away and ordered some new books, and they just arrived today. Yay!

First off I ordered Introduction to Algorithms which is the de facto book about algorithms and it seemed like a fitting thing to do as I won it by doing algorithm assignments.

Secondly I’ve been wanting to grab Structure and Interpretation of Computer Programs for a while and I finally did. It’s one of the classical computer books you have to read once in your life (or so they say).

I wasn’t going to get a third book, but on adlibris where I got the vouchers you couldn’t pay with two vouchers on one order. So I had to split it up and it felt kinda dumb to not use it all… So I ordered a third book. I had no idea what book to get though, but stackoverflow came to the rescue! It’s a bunch of answers to the question “What is the single most influential book every programmer should read?” and is like a top X list for programming books.

Incidentally I’ve got a few of those already, and the two I’ve already decided on was there (SICP is 3rd, Introduction to Algorithms 5th). Of course I wanted to get either the 1st or 2nd and I ended up choosing the 2nd one, The Pragmatic Programmer just because it seemed a bit easier to read. I’ve got a ton of fairly hardcore programming books I need to plow through so something a bit easier to digest should be welcome.

Go go programming books!


Posted in: Books, New Stuff.

Done this, done that. What now?

November 5, 2011

Finished and uploaded our java game Grand Thief Arto, done an exam (didn’t quite go as intended) and starting some new courses in school. I’m liking my choice of Computer Science more and more. Data structures and Algorithms was a super fun course, I actually ordered a new book about the subject just yesterday. Linear Algebra is really fun now as we’re getting deeper into it and we’re looking into assembly and processor structures now too. Awesome. I can’t believe I considered doing physics or electronics when I could take these courses. Now if I only could do operating systems, compiler construction and language design…

In the meantime I’ve finished Design for Hackers and it was a really nice book to be honest. I never knew there was so much about design and now I keep noticing funky stuff like what font a particular website is using, what colors and how they direct the reader. I also see a lot of inadequate stuff on my page and I have a few things I’d like to try.

I also read Watchmen, the comic, and it was absolutely wonderful. Sadly I saw the movie before but, naturally, the comic was a lot better. So wonderfully dark and ah… Simply awesome.


Posted in: Life.

The End of the Tunnel

October 19, 2011

Lately I’ve been feeling like there’s been a shit-ton of stuff going on, quite a turn-around from the last time.

One course about data structure and algorithms (super fun to be honest) has wrapped up. We thought we were ahead with the assignments but in the end it got very stressful. I sat up pretty late trying to optimize our code from 0.16 to below 0.15 seconds and it almost drove me crazy…

My last resort was to convert all strings to integers and do some funky bit shifting operations but it got too late so I had to go to sleep before making it work correctly. Of course I couldn’t sleep and I lay and thought about all the things I didn’t do or where I could’ve messed up. I woke really early, couldn’t sleep, and I went to fix it before our presentation that morning and look and behold! It was fixed in less than 15 minutes and it was blazingly fast! It’s funny how sleep or a nice shower can solve almost any problem you have, except hunger I guess.

While this was going on I also took part in a competition of some sorts in connection with the course. There was a programming problem after each lecture that we had to complete and the goal was to get as few hours as possible after the problems were released. Most problems were quite easy but there were a few hard ones. One I also lost some sleep over! But again I woke up and had to run to the computer to try to solve it… At least I won some money for some lovely new books so I guess it was worth it.

We’re now finishing our other course, the one with the Java game that spurred me to wanna make more games, and I think I spent a bit too much time on that… The game turned out pretty cool, I will make a post about it tomorrow I think, but it was a level or two above the actual demands I think so we could’ve chilled and not stress that much. And now we only have to document it! Describe how all the classes work with UML and some blocks of text… Sigh.

And oh yeah, we had totally forgotten to write a project specification that was supposed to be handed in over a month ago and we had completely missed the deadlines for the other assignments in that course. Luckily the deadlines were only suggestions and our assistant was cool about the specification too so we survived with our head still intact.

It just seems so silly though. Why did we wait with the other assignments, I think I did them in one day or something, until the very last second? It seems like I’ve been here before, and I don’t like it. This time I had a bit more control over the whole situation but it’s still not quite good enough.

Anyway now when this is all finishing up I can start to relax again. But then the thought creeps up on me: what’s next?

I’m probably gonna program, make a game or two, go through a language, read some books, train a lot… Urr I’m getting all stressed out just thinking out loud like that!

No I need to relax. Maybe read some more manga? Yes, that is indeed a good idea…


manga…


Posted in: Life.

Grand Thief Arto

October 19, 2011

Here’s me and Li’s game for our school course. The game isn’t tweaked too much but it’s a game with some fairly cool ideas.

Download
Windows

Grand Thief Arto

Instructions
Your goal is to collect loot until you can escape through the entry point when you’ve collected enough to complete the level.

There are touchpads and lasers you need to shutdown by walking next to a computer or an electric board and shut them down from there. Otherwise you need to open doors and then just run around and collect.

You can either play by launching the bash script “play” directly in the folder or launch the game with:

java base.GameFrame
or
java -Xss2048k -Xms64m -Xmx1024m base.GameFrame

Or whatever your preferred way of launching java apps is. You obviously need the java runtime, otherwise you might fetch it from here.

You might need to create the binary files for it. Use the bash script “create” or do:

javac base.GameFrame

But it might not be necessary.

Controls
Arrow keys - Walk around
Space - Do action
Esc - Menu


Posted in: Games.

Design for Hackers has arrived!

October 19, 2011

It’s here! After about a month of waiting I’ve finally gotten the book that will make me a design god! Or at least make me aware of something called design. Joking aside I’m really terrible at design and making things look good. Admittedly my programming art for my games has gradually improved but I honestly don’t know what I’m doing, I just mess around until I get something decent. Maybe this can be a small aid? I even have some websites I want to design, and while I’m at it I want to try the Perl web framework mojolicious which looks totally awesome!


Posted in: Books.

Being Productive

September 30, 2011

School’s been going on now for… Is it a month and a half maybe? I don’t know really but it’s all going so fast, week after week is disappearing and I don’t know where they go but I know that I’m at least not wasting them like I did most of last year!

Last year I managed school sure, but without doing anything special. Well if you don’t count watching nearly every GSL live (from 06-09 or 11-13 on weekdays) which is pretty awesome. But that’s also taking away a lot of time when I could’ve (and often should’ve) studied - sadly I skipped a lot of school last year. I admit GSL can’t explain it all, I was lazy okay!

This year I’d like to a bit better and it has started out fine. I haven’t skipped a single lecture yet (Java doesn’t count!!) and I’m not too far behind in anything and a bit ahead in others, in summary I’m doing great, heh.

Aside from school though, which is almost even more important, I’m feeling good and getting things done. Our home hasn’t burned down yet so that’s some success right there, but I’m taking it even farther and taking care of some cooking and stuff too, of course with Veronicas help but anyway. I’m also increasing my Taekwon-do training, doing some reading and a bunch of other stuff. Programming too!

I took the advice of Cal Newport and now I actually plan my days, every day, on the morning or the night before. Here’s an example:

  • 0730 - 0900 Program
  • 0900 - 1000 Call OnOff, electric company, DN, corren
  • 1000 - 1100 Program
  • 1100 - 1130 Food
  • etc..

Of course I don’t really follow it to each and every point, but it helps me know what I need to get done this day. Often I skip and I reorder and I do other stuff a lot but if I’ve done at least half of what I set out to do I’ve been more productive than I’d usually be! And I even remember to do stuff like make a prenumeration on DN which I would never had otherwise.

Something else that’s helped me is a regular and healthy sleeping pattern - go to sleep and wake up at the same time, every day.

I’m feeling good about school and everything but I’ve got stuff left to do so don’t see it as a perfect example - far from it to be sure, but it’s a step in the right direction I guess.


Posted in: Life Hacking.

Design for Hackers

September 16, 2011

I get these.. urges sometimes. Not like Dexter no, but sometimes I just have to buy a specific thing. It happened again yesterday (or was it the day before I don’t know) when I saw this post on hackernews.

It’s a book this time, again, but this is something a little different - it’s about design. Now I know nothing about design but I’ve enjoyed designing some sites and I really like to design games but I don’t have a clue how to do it in a structural manner. I just try different colors and different stuff until “hey that looks kinda good” and it’s done! That’s not how you make something useful or something that looks good - good design. But this book seems to teach you just that!

It’s a book for hackers, in the original non-journalistic definition, and it explains stuff in a logical manner! Now I might get a feel for why I think something looks good and I might even be able to improve on it? Happy times!

The only issue is that I promised myself to not order any more programming books until I’ve gone through the ones I have - but this isn’t one so it should be okay! So now I made myself to promise that I’ll do the math assignments for the week and then I can order!

Instead of writing this I really should do them then.

Hrrmm…


Posted in: Books.

10 Games in 10 Languages

September 12, 2011

For school we have this programming course for Java. It isn’t anything special really and it would be really boring if I don’t like to program, it almost is anyway, if it weren’t for the fact that we’re to create a game! Just any game will do and we’re in a group of two and we have about a month to complete it. Mmh I like.

Me and Li, my conspiring friend, have a pretty decent idea of something we can make. The only minor thing is that neither he nor I know anything about Java. Turns out I’ve done some gamemaking in mostly C++ and it’s really not different so we’ll see how the game finishes.

Now this game me a bit of an idea, or rather it resurfaces and older idea, namely to make a few games in a couple of different languages. I like to explore different languages and I like to make games so why not combine them?

I’ll try to make 10 different games with 10 different languages, starting with this Java game. I won’t make this one alone but that hardly matters I guess, there’s plenty of time to code in solitude later.

These are some I had in mind:

  1. Java
    This one is slated for release in the middle of October

  2. C++
    I’m not sure if this one is considered cheating? I mean I’ve made a few already.

  3. C
    I haven’t done much pure C, and this looks like a nice time as any.

  4. Lua
    I’ve used you to change values without compiling before, but do you have more to offer me?

  5. Clojure
    I do love lisp and as it runs on the JVM it shouldn’t be too different from Java.

  6. Scala
    Scala is one of those languages you just got to try someday. Also a JVM, piece of cake right?

  7. Perl
    Perhaps my current favorite language, it’s just so fun to write you know?

  8. Python
    When you’re gonna do the Ludum Dare many are recommending you to use Python with PyGame, it’s time to find out why.

  9. Coffee-script + html 5
    One of the more hyped up web technologies right now and I haven’t used them? Shame on me.

  10. Haskell
    Oh Haskell, I’ve tried to get you down the last two summers but you won’t quite let me. Enough is enough, you’re going down!

I might change one or two later on if I find something better to try out (C++ is a bit lazy to include) and I certainly won’t do them in this order. There’s a big chance I won’t do them once a month either, but that’s the general goal I’m setting up.

Now it’s time to do some other, more boring, school work…


Posted in: Game Making.

Back to Training

September 4, 2011

Five days of school now and things are starting to settle down a bit. The courses are pretty cool; we have linear algebra which is pretty interesting, we have a java course where we’re going to make a game (!) and one about structures and algorithms. Pretty promising but we’ll see how things pan out.

Taekwon-do practice has started and it’s awesome. In the beginning it’s so hard so I always wonder why I continue, but in the end it’s really fun and it feels good after. If you haven’t tried it you really should, or some other martial arts cause it’s pretty cool.

It’s a perfect training for both mind and body. You might think it’s just mindless hardship thanks to all the martial arts movies/anime/manga with crazy training, but you’re also training your awareness, your creativity and decision making and more. Especially when sparring it’s absolutely paramount that your head is with you, doesn’t matter how fast or strong you are, if you don’t fight with your head you’re pretty screwed. That’s what I really like about it, it’s a pretty smart training.


Easy! Or maybe not?

What I don’t like however, and this is totally unrelated to anything, is the rain! I went to school five days and I got soaking wet five times! Hrblr… That’s why I’ve decided to do absolutely nothing today, I might watch some GSL and read a bit. I’ve got Learn you a Haskell for Great Good, Effective Java and Thinking in Java who can hold me company a bit.

And then there’s Taekwon-do training of course!


Posted in: Taekwon-do.

Getting Comfortable

August 28, 2011

So I physically built the computer and now I’ve been using it a while, configuring stuff and getting used to my new screens. I think they’re about three times wide as my old laptop and now I have this one huge vertical space which is absolutely wonderful for surfing forums and reading code. Damn I love coding on it! When I go back to the laptop I feel cramped..

And while we’re at dissing the old - I can never ever like another keyboard again! Well, at least not another rubber dome or scissor switch one.

No this day forward I’m a mechanical keyboard fantast. You might think I’m crazy but the difference is pretty huge, before my fingers got tired but now they don’t and it’s even fun to type again!

If that got you interested you need to read this geekhack post, it’s nice to say the least.

Back to my screen setup again - yes everything with my new computer is either the monitors or the keyboard - I wanted to use xmonad without relying on xfce this time. I like xfce as a truly lightweight window manager but a tiling window manager is just vastly superior, and the xfce statusbar is pretty ugly..

I set up a nice looking statusbar and some stuff on the desktop with conky. I’ve been wanting to set up a todo list and while I was at it I put up my assignment due dates and my schedule too. And never forget the ever so important manga updates!


My dual screen setup, click to enlarge

A nice little feature I added down on the right is the time in various timezones, they adjust to summer time on their own dates and they change the abbreviations too - from CEST to CET and so on.

Something that didn’t go smooth at all is the gaming - I couldn’t ever get any games to work with wine! After a while I found out that an older driver solved the problem, but most games still don’t work with dual screen. So I kinda have to switch between two config files, but that works too I guess.

All my config files are up on github as well if you’re interested.


Posted in: New Stuff, Computer.

New Computer!

August 21, 2011

I briefly mentioned my new computer in the last post and I thought I’d make a post about it, as it’s awesome (as all new computers are).

Firstly, the specs:

GPU: Gigabyte GeForce GTX 550Ti OC 1GB
CPU: Intel core i5 2500K
CPU cooler: Zalman CNPS-9900NT
Motherboard: MSI P67A-C45 REV B3
Ram: Corsair 4GB (2x2048MB) CL9 1600Mhz XMS
Harddrive: 1TB Samsung Spinpoint F3 HD103SJ
PSU: FSP Aurum 400W 80+ Gold
Displays: 2 x Dell U2211H ultrasharp 21,5" widescreen
Keyboard: Das Keyboard - Ultimate Model S Silent
DVD burner: Samsung DVD±R/RW/RAM
Case: Fractal Design Define R3, Black

Secondly, the look:

I wanted the computer to be fast and silent and I had to have two screens. I had a budget of 12,000 SEK and almost managed it too.

The screens I chose are two fairly large widescreen IPL screens, very solid, but they quickly ate up about a third of my budget… In hindsight it was a good investment, they’re absolutely wonderful!

The processor was fairly straightforward to choose - the i5 2500K is a beast for it’s price. I don’t really need 8GB ram, I think I’ve used 2GB max before so I just stuck with 4 this time. The motherboard is nothing special but I don’t need it to be either.

I’ve got about 4TB of storage laying around here so I don’t need any more really, but I chose a relatively fast and silent 1TB disk. I’d love to get a SSD but I couldn’t squeeze that into the budget.

Although you can say you don’t need a DVD reader/burner in this era of usb sticks it’s still nice to have, especially since I’ve got a few installation disks I’d like to use. A small fee that saves time I’d say. Floppies are dead for me though.

I also wanted it to be quiet and according to some who probably knows better than me by far the biggest noise source is the stock CPU silencer - so I threw down one which looked good. In hindsight it works great too.

The case looks good and it was also solid, no qualms there. But the one big issue I had was the graphics card, oh how hard it was! I wanted something silent, something from Nvidia (Ati drivers used to suck on linux, but maybe not anymore), something that’s reasonably powerful and also cheap. Not a bad combination I say! I think I chose something reasonably good - the fan is very silent, it’s a good chipset and it wasn’t all too expensive. However I haven’t gotten any games to work with it on linux but that’s probably a configuration issue, annoying anyway.

Keyboard, Das Keyboard

The keyboard, oh the keyboard! I got it in my head that I had to have a mechanical keyboard, they’re supposed to be a lot better than the “regular” ones. And oh yeah it’s absolutely wonderful, it’s a joy to type in and I’m already irking when I have to go back typing on another keyboard. But it is a tad too load according to Veronica, and it was oh so expensive.

My workspace!

Overall I’m very happy and I don’t think I would’ve done anything different if I were to buy it today, except maybe try an Ati card, some say the drivers aren’t bad at all anymore.

Finally some more pictures:


Posted in: New Stuff, Computer.

Resurrection

August 18, 2011

Aah what a nice summer!

It was nice to be back in Övertorneå, doing nothing in particular. Just not having to make lunch and dinner every day is such a relief, and if you do slip up food with grandma or Veronica’s parents is only a phone call away. I watched TV, played rollercoaster 2 and simcity 4 and just killed time in front of my beloved (PC).

The only real work I did was clean the house a time or two and made food for my little brother Filip and did some exercises with him when my parents worked. But it was a pretty small price to pay as my mum helped me invest in a new computer! Of course dad couldn’t find out but that wasn’t so hard - I do live about 1400 km away from home anyway.

But now things are moving back to the way things were before the summer break; I’m back in Linköping cooking (lunch, dinner and breakfast), trying to remember watering our plants and generally enjoying life. Everything is almost set for Veronica’s return so I need to take it easy a bit before she storms into my life again tomorrow…

There’s a lot of stuff I need to reboot again; studying obviously but I also want to make more games and program a bit which I completely neglected the last months and taekwon-do is starting again! My first practice went to hell though, I almost managed to get a blackout as I didn’t drink nearly enough but oh well.

But the first step is to write a bit more here, I hear that’s a useful skill to have. Instead of taking a boring class I can just write stuff here I guess.


Posted in: Life.

My Minions

May 2, 2011

So I think I made it! It became a pretty different game from what I set out to create, but I’m glad with how it turned out.

Download
Windows Linux 64bit

My Minions

Instructions
Build a pathway and then place objects or release minions on it, everything must be on a path. Place musical objects or make the minions turn or split to make sound and create some music. Or you can create a digital circuit and make it do something fun.

Controls
Mouse Left - Place an object
1 - Toggle up through objects
2 - Toggle down through objects
Space - Release a minion
K - Kill all minions

P - Pause
Left Shift - Increase speed
Left Ctrl - Decrease speed

L - Load map
S - Save map

F1 - Console, nothin fun :(
F10 - Exit the game

Now beware, I didn’t have the time or energy to create a full blown level saving, so it will always use “level.dat” in bin as it’s save file. It will overwrite and it will do so without asking.

Source
https://github.com/treeman/My-Minions

If you want to build it yourself it depends on: lua, boost and sfml.


Posted in: Games, 7days.

I Made It!

May 2, 2011

It’s been over a year, but I haven’t lost (most) my touch yet! For the second time I’ve completed a Ludum Dare! Not an easy feat and yet there are tons of games that look absolutely wonderful. I’m not there yet but now I have at least gotten back into game making again, long overdue.

I will make a formal post and all that jaz when I wake up tomorrow, or maybe I’ll sleep the whole day… Nah not really, but at least a while.

Here’s my entry btw, didn’t turn out the way I wanted it to but in the end I’m quite satisfied. There are a ton of possibilities for it though.

Oh well. Nap time!


Posted in: Game Making.

Making a Game Again?

April 28, 2011

I’ve gotta do a lab today at school, tomorrow I need to do the exam I missed when I had my glasses-missing headaches and I’m going to Ikea and some other shops for, you guessed it, shopping! Sure it’s fun and sure I need to do these things but the only thing on my mind now is making a new game. This weekend Ludum Dare is on again and I would really, really like to enter it! It’s been over a year since my last Ludum Dare and almost 11 months since my last game.

I want to make games again..

I can’t promise a new game this weekend but I think I might have the time for some game creation on friday, saturday and sunday evening/night so I just might. The last time I even had a massage course the whole day on sunday/saturday so I should be fine.

This time I also think I can come up with some more sound and music compared to the last time (where I only had two thuds!). I got LMMS, a free music creation program. I really suck at making music though lol.

I haven’t made a game since I switched to Slackware either, luckily SFML is cross platform. I’ve also got my old 7days library, my collection of old game creating codebase which I was pretty proud of for a while.

For graphics I think I’m aiming for some pixelated cool stuff with mtPaint. Pixelated stuff looks awesome, if you’re good at it, and I’d like to make something similar.. At least a little similar.


Unreleased fun pixel graphics

So for a quick recap, if I’m going to make a game again this is what I’m going to use:

  1. LMMS for music
  2. SFML as the core game library (graphics, sound and input)
  3. 7days library for useful stuff
  4. mtPaint for pixel graphics

As usual it’ll be made in C++ (I might do something else another time) and I’ll probably listen to Raubtier, Sarah Brightman, Hans Zimmer and some classical composers (Mozart, Bach, Vivaldi etc).


Posted in: Ludum Dare.

What's up

April 22, 2011

It’s been a while again since the last time we met mr. Blog. I’ve been busy with school and other stuff. I’ve thought about you but I just never really picked up emacs to write to you. I know it’s my fault but I beg of your mercy mr. Blog. You know that I had laid off school for a bit but now I’ve caught up with almost everything. I’ve got a bit of electronics left: 2 labs and one project assignment. It’s a pretty damn hard course but now when I’ve taken my time to sit down and go through everything it’s quite fun! It’s also a course over the whole semester so it’s not even done yet. The other thing I’m behind in is math. I chose not to do the last exam, so I can do it now in about a week.

I’m home in Övertorneå again and it’s fairly chill here. It’s pretty nice to eat food someone else has made, and I don’t have to think about holding the apartment afloat. Admittedly Veronica is a great help (I might actually be the help).

I’ve been meaning to program a bit but I’ve only done it a little, I’ve been watching starcraft and just chillin’ for the main part.

I’ll be sure to update a bit better for you mr. Blog.


Posted in: Life.

A Four-Eyed Update

March 21, 2011

Wow it’s been a while! Almost a month and a half since my last update. There I complained about my almost constant headaches which hampered me a lot actually. Luckily now I have joined the rank of cool.


Glasses: makes the cool cooler

I took home three frames I think and tried them out and I settled some I thought were fairly good looking, nothing special mind you but at least they didn’t look horrible on me. Then I went back and I settled on the semi-expensive ones and then I waited. And waited. Then I went back and asked but the glasses didn’t fit into the price class I’d chosen, something about the frames being too bent, so I had to pay some more.

Then I waited again, and a little bit more… until I called once more, now I was getting pretty pissed, but they should be here this Friday. They called on Thursday and finally I had them! It’s funny, I was going to demand some discount but even the pricier glasses didn’t fit and so I got some really expensive ones. Fair enough I thought and so I left.

The first few days were pretty disoriented, but man oh man what a difference. It’s funny how you don’t realize how bad your sight is before you get a pair of glasses and that really fit me well. Suddenly I didn’t have to stick my nose into the screen to see the text and today I was at school the whole day! Sure I’m a bit lazy sometimes but I also couldn’t concentrate like this before.

Life is good.


Posted in: Life.

A Week of Headache

February 9, 2011

This was supposed to be a productive week with lots and lots of Perl and Ada but instead I’ve had this big headache all week, and some the week before and it’s gotten pretty bad so I can’t really concentrate on anything really. The electronics assignment was a bitch and it took a looong time to complete, even if all I had to do was to rewrite some stuff. You just love when the result is completely wrong just thanks to a misplaced minus sign.

So now I’m a bit worried, luckily not as much as my girlfriend, and what’s the cause of this? The lack of water is probably the source of 90% of my headaches but now when I drink and drink it only eases of a bit and then it’s back. Painkillers help a bit but I don’t want to turn into a junkie just to be able to act normally.

Luckily I think I’ve found the reason, but sadly it’s not the very best one. I think I need glasses. I squint all the time in front of the computer and I’m getting headaches when I’m reading. So this Friday it’s judgement day. I dunno what I’m hoping for, if it’s glasses then fine at least it should be better, but if it’s not then it might be a bigger problem somewhere.


Me of tomorrow?


Posted in: Life.

The Little Things in Life

February 3, 2011

It’s the little things in life that makes it extra special. Sometimes it’s the luxury of coffee together with the morning paper and other times it’s just a small simple smile from a random stranger, kid or dog. Today when I got this bad headache I got saved by a two hour nap and my Programming in Ada book. It was quite a pleasure to just read it and not worrying about anything else. I even think my headache disappeared a while there.

And if that wasn’t enough, my long lost Modern Perl is finally here! I’ve skimmed a little and boy I think I’m going to like this one. I’m soon up to two digits with my programming books and I really do like them. Even if I’m not doing anything in that particular language it’s still fun to just read about. There’s always something you’ll learn and even if not I still find it soothing.

Reading books, threads, blog posts or random forum rants/wars about programming is sometimes coffee for my brain (I don’t actually drink coffee or anything with caffeine. I’m almost feeling like an endangered programming species).

If the book is actually worth reading we’ll see and I’ll report back when I’ve gone through it.


Posted in: Programming, Books, Life.

Poking at Emacs

January 30, 2011

I’ve been a vim vim fan for a while now and with some recent configs I’m starting to feel pretty confident and happy with it. For those who don’t know it’s basically a text editor, like notepad, but with a lot of keycommands which allows you to edit code (and text in general) faster. For writing a simple straight up text it might not be worth it, the learning curve is pretty steep, but for someone who codes a lot it’s really good in the long run. Here’s an article I read when I read when I started with vim.

The thing is that I need to work at school too and everyone there use emacs. Emacs is in many ways similar to vim, but they’re a bit like bitter competitors and if you’re a vim user, like me, then you’re not an emacs user and vice versa. Also I haven’t gotten vim to work as I want to at school, meaning it doesn’t work exactly like I’m used to (I’m quite picky with that). So what I’ve done up until now is that I’ve been working from home and trying to avoid emacs as much as humanly possible.

It’s been working okay so far, but I don’t think it will for much longer. When we’re declaring our labs our teachers use emacs, when I need to collaborate with other students then they most likely will be using emacs and when we have our exam. It was pretty ridiculous yesterday when we had to show our lab and I got really, really nervous on how to open multiple files in emacs… It feels like something I should be able to do in my sleep and if there’s anything like a nerd ranking somewhere I think I just hit rock bottom.

No this shouldn’t be allowed to continue so now I’m going to give emacs a try. I doubt that it’ll replace vim but still I think it’s quite nice. In theory it should be just as nice as vim, with really fast code editing once you get used to it. Here’s a better comparison of the two. I guess I just don’t like the idea of having to climb another intimidating learning curve.

Learning Curve
I’ve used notepad, visual studio and vim. Emacs seems though.

Posted in: Programming.

Focusing Attention: Programming

January 30, 2011

These last two weeks have been a small attempt at clearing up my head a bit. I have far too many things I’d like to do and even if it’s not possible to do them all at once it didn’t stop me from thinking of them. One minute it’s that and the other it’s something completely different. This is really not good as it messes with the top idea a lot so I decided to do something about it. By focusing on one single thing each week I’ve been trying to remedy the situation.

Now I haven’t really spent a lot of time with the things I’ve been focusing on, but I’ve been a whole lot calmer and not as stressed up as before. So I think it’s good for me.

This week I’m gonna focus on something I haven’t really done so much, namely programming. The little I’ve done is some stuff for school and it’s fun and all, but it’s not really the same as working on your own project. Now I think I’ll try to complete the assignments for the course, but that’s not really a priority and if it’s even a little bit stressful then I’ll cut back on it. We’ve got plenty of time left and it’s not worth it to get stressed by something like that.

No I’ll focus on Perl (my new Perl book should arrive this week) and making something fun: an IRC-bot. A simple bot isn’t much of a challange so I need to add some cool functions to it. I’m really annoyed that a friend of mine is always ahead of the latest manga releases so I think I’ll automate that one. I’ve actually already made one in both Perl and lua, but they’re pretty damn bad so this time I’ll make it right. Naturally I’ve got a ton of other stuff to add but we’ll see where we end up.

The point isn’t to make a bot with a million features, but to start hacking on something fun. Hell I’d be happy if I just stick to the new book and learn Perl a bit.


Posted in: Attention, Programming.

Focusing Attention: Study Hacking

January 26, 2011

A week of drawing is over, but I didn’t draw that much. It was a little bit of a fail from my part.

But the past is the past and this week I’m going to be study focused. Not that I need to study, but I really need to rework my study technique. I’ve been going on like a classical student, in the bad sense, by skipping class and getting super stressed when the tests and deadlines are over me. Somehow you manage with some last-minute studying and all is well.

Well not really. I already have a bad stomach and stress makes it a lot worse. Even if I didn’t have this problem stress is never good, especially not when you need to take this test or finish this assignment for tomorrow. It screws with my health, my study results and it intrudes on my free time far too much I’d say.

This is when I dusted an old bookmark I found a long time ago: Study Hacks. It’s some guy who writes about studying and study technique and he’s got some pretty good ideas. This is what I’ll focus on this week: to change my routines and take control over my studies and don’t let them control me.

Here’s a little rundown of the main principles from Study Hacks as I understand them;

Do fewer things
Sure it makes sense. When I signed up for an extra course last year I felt pretty damn stressed and I couldn’t really focus on my other courses knowing I had this extra class I missed to catch up with. It was even on my mind when I tried to do other things and when I got my stumach problems I decided to drop it. That was seriously a pretty damn good decision: I felt a lot better with it gone.

Do them better
Also what are good grades? They should show your skill but if they’re good they should also impress. And what are you most impressed by? Someone with straight-A or someone who’s read 40 points more but with slightly worse grades? I think we’re more impressed by deep knowledge in a smaller area (better grades in fewer courses) than by someone who’s a know-it-all but specialist-in-nothing. Maybe it’s a good idea to focus on getting really good grades instead of trying to do too much at once and risk to spread out too much?

Know why you’re doing them
Lastly it makes sense why you should know why your study technique works (or doesn’t). So we can change and adapt. After all what is the definition of Insanity?

“Doing the same thing over and over again expecting different results” - Albert Einstein


Posted in: Attention.

The I'm Great quote

January 19, 2011

A new semester at the uni and so far it looks promising; I got a hold of some new books even though the bookstore had a snakelike queue similar to the Jörmungandr (the snake that encircled the earth in nordic mythology) and our new programming course started. This time it’s Ada’s turn and as always it should be interesting. At a first glance it doesn’t look like it’s introducing anything completely new from what I’m used with. I guess it looks like a cross between C and Haskell’s type system spiced up with some other stuff.

It’s funny how I notice all these little, syntactic similarities (haven’t done anything real with the language yet so I’m a bit shallow now but whatever) from different languages. It was a long time ago I came across a language that distinguish between functions and subroutines. I think that was the case with Visual Basic, my oh so dear first language a few years ago. Might’ve been five years ago?

Anyway quite enough of that, I don’t want to derail too much. What I really wanted to write about is when our new teacher, who by the way is completely awesome, asked us who thought they were a great programmer. Most of us laughed it off but I think there were two, maybe three, who raised their hands.

I thought about raising my hand, but who do I think are great programmers? Knuth, Thorvalds, Djikstra, Stroustrup Silverman and Carmack comes to mind. They’re probably not the greatest, but they’ve done some really notable things. Do I think I’m at their level? What a laugable question, I’m miles away. And I’m sure there’s some epic bearded fellow somewhere out there who’s even higher on the programming skill ladder.

Now what is a great programmer then? I have no idea. But I do know that with all the things I don’t know, I couldn’t be one. Sure I’ve done something in about 10 different (some not so different) languages. But there are hundreds more. I’ve done nothing low level, I have no experience with op codes or assembly and I’m not up to date with the latest scripting languages. There are a few new interesting languages like Rust, CoffeeScript or Go which I haven’t even looked at yet. Of course the number of languages you know doesn’t make you great, but it just feels like I’m missing stuff.

Sure these guys could be great - who am I to say otherwise? But you’ll have to wait a long time for me to spill the I’m great quote. Hell, maybe even a lifetime?


Posted in: Life.

Focusing Attention: Drawing

January 17, 2011

In my last post I wrote about some ideas and projects I have and how it’s a little bit too much at a time, so now I’m going to try something new here. In the beginning of every week I’ll declare something I’ll be focusing on and then that’s the only thing I should focus on on my free time. Just so I don’t drift off from irc bots in haskell to opening a new Erlang book or starting a game and then move on with another.

Not really so I don’t work on several things at once but so I don’t think about the other things too much.

This week I think I’ll be focusing on drawing. I kinda like to draw and I drew a lot when I was little but then it wore off a bit, I dunno why. I think I was pretty good too, well I didn’t think so then but when I look back at the drawings I’m sure I at least had something going for me.

Recently I bought the book Drawing on the Right Side of the Brain - I’m not really sure why but so far it’s been pretty darn good. Hopefully I’ll have some progress, but I’m sure I’ll have fun whether it’s a success or not.

Of course there are some amazing stuff around and if I could get a tenth or even one percentage of his skill it’d be cool has hell!


Posted in: Attention.

The Top Idea

January 14, 2011

Recently I’ve been having a dozen ideas and projects I’ve been poking around with:

  1. I wrote a simple lua, later perl, which announced when a new day9 episode has come. Later I expanded it to search for new manga episodes, but now it’s broken and unfinished.

  2. In an attempt to learn Haskell I began writing a simple irc bot, but I never did come far with the language and now I’m a bit stuck. I have the bot itself working but I want to restructure it with plugins instead of hardcoding every command and I’d like to have some interactivity like saving state and fetching info from internet. But I haven’t come that far and now it’s on a stand-still.

  3. Totally not related to the other two I want to learn how to draw. On a little whim I bought the book Drawing on the Right Side of the Brain and I was totally blown away. I was a bit sceptic at first but she’s explaining everything so scientifically and the results look amazing. Almost too good to be true. But as always I started but I’m not there yet, in fact a pretty long way from finished.

  4. Back to the programming business. I’d like to update the backend of this site, but to be fair it’s not that important. Just something that’d be nice to do.

  5. What’s worse is my game projects. What projects you ask? Well I started a few much bigger games this time and they have just faded away from my brain little by little and now I’m not that into them. I mean the ideas are amazing, but I haven’t done anything with them.

The issue here I think is that I’m trying to do far too many things at once. Back when I wrote all my experimental games I didn’t have these many things going on. In fact they were the only thing on my mind - you know the thing you think about when you’re in the shower or before you go to sleep. Hell I’ve even woken up, all sweaty, and had a solution but the very problem I had struggled all day with!

Paul Graham wrote a nice article about this a while ago. He’s more focused on startups of course but the core of the article very much applies to me. I’m not keeping the right idea on the top of my mind, instead I think it’s changing - I’m doing too many things at once. One time I’m focused on say learning Haskell but the next day, or even the very same night I’m all wound up about a game I’d like to make! How will I ever get things done if I’m floating around like that?

Of course Paul points out that I’m in good company, even Newton fell into this trap and I have a feeling many more have this problem.


Posted in: Life Hacking.

2010 in review

January 6, 2011

I saw a post on briancarper where he reviews the past year and it sounds like a great idea actually.

2010 Geek Achievements

  1. Wrote a few games earlier this year;
  2. Updated this site a bit.
  3. In the process I learned a lot of PHP, Javascript, mysql and design. Fun and useful.
  4. Switched to Slackware which I like a ton better than Ubuntu.
  5. Learned a lot more linux. Thanks Slackware.
  6. Learned a lot more git.
  7. Learned a lot more vim.
  8. Tried out and configured uzbl which I still use.
  9. Learned a bit of Haskell.
  10. Tried out Perl a bit.
  11. Learned a lot more Lisp.
  12. Switched to zsh. It’s fine after a bit of config
  13. Rebuilt a custom Kernel a few times, some failures but learned a lot. And got starcraft 2 to work!
  14. Read a lot. This years high were One Piece and Jeffery Deaver. Real World Haskell scores the highest Geek score.

2010 Non-Geek Achievements

  1. Moved to Linköping with my girlfriend Veronica and I didn’t just survive but I also liked it!
  2. Enrolled in a Linköpings University in Computer Science. We’ll see if it’ll get geeky later, atm it’s a breeze but we have a ton of seemingly fun courses to go.
  3. Took a massage course.
  4. Learned how to cook more than one dish.
  5. Did the dishes, expertly maneuvered our vacuum cleaner and did the laundry. More than once!
  6. Started Taekwondo and after a few months of hard work I even got a yellow stripe for my white belt!

2010 Failures

  1. Didn’t produce enough games.
  2. Didn’t write enough code.
  3. Got worse in my stumach towards the end of the year. Too stressed and not enough regular meals I guess.
  4. Didn’t blog enough. Sorry :(

Plans for 2011

  1. Get good results in school.
  2. Make more games.
  3. Code more!
  4. Blog more!
  5. Learn more Haskell (again). This time continue with the small irc bot I’m writing.
  6. Learn a few more languages and expand my knowledge. Maybe some low level stuff with C or assembly? Or some more higher level?
  7. Get a better sense of algorithms.
  8. Try to be a bit more social
  9. Get a new belt in Taekwondo.
  10. Be a bit more disciplined with training, coding and school.
  11. Loosen up a bit more so the stumach won’t mess anymore.
  12. Last but not least, keep Veronica happy and help around at home.

I thought I didn’t do anything this year I guess it’s been a productive year anyway. But in 2011 I think I’ll do a lot more still.


Posted in: Yearly Review.

My Dream Game: The Tycoon

January 5, 2011

I’ve been playing Starcraft 2 a little this christmas. It wasn’t dead serious 1v1 which really is my favorite but I’ve played 2v2 with some friends and I actually played the campaign a bit and it was pretty fun! Usually I never play the campaign on RTS games but this one I liked. I even bought it to my little brother and he seems to like it.

But it’s funny - yesterday when I went down to check on him he was playing Rollercoaster Tycoon 3! Jagged but fine illustration of Rollercoaster Tycoon 3

One of my absolute favourite games (the whole series in fact) and that got me all nostalgic again. Tycoon games are so good; SimCity, Theme Hospital, Rollercoaster Tycoon, Evil Genius and more! I’m not surprised to see him playing this old game, I replay these games myself from time to time. I’m almost through Theme Hospital for the fifth time or something. You just don’t seem to get tired of them you know.

Of course I’d like to make my own tycoon game. Not entirely unlike Jonas IceCream Stand but with actual building of course. I wonder how it’d look like though.

evil genius’ traps/base planning + rollercoasters + theme hospital’s hilarity + simcity’s economy = ?

The best of the best games should make something good. That’s only a theory though…


Posted in: Game Design, Gaming.

Christmas break

December 18, 2010

So school is on a break and I welcome it with all of my heart. The semester has been pretty fun and I really enjoy studying here. We had lisp the whole time which is a pretty sweet little language and if you haven’t, give it a shot. Then we had math and I do like math, although I wasn’t really motivated this time around and I dunno why. Maybe because I think I got it pretty fast and that didn’t really motivate me to study when the test came around and I got far too many dumb mistakes I think.. Not good, not good.

Speaking about math then I took an extra course, mathematical statistics or something funky like that but meh it wasn’t all I thought it’d be. In fact it was almost a bit boring and when I got problems with my stumach again (dunno why, but I think it has to do with stress or my irregular eating patterns, or both) so I kinda dropped it. But nothing’s really missed: we’re gonna have something similar later on anyway.

Now I haven’t made anything game related in a while which sucks. A month ago or something I was poking at some prototype but it hasn’t gotten anywhere yet. I was going to enter ludum dare 19 but then I kinda just didn’t, and now it’s too late to do anything. And I have like a thousand ideas I’d like to do, but I don’t seem to have done anything.

Argh!

And then there’s my other programming interests of course. I’ve been poking at Haskell a few months ago but now I actually want to learn the damn language and the best way to do that is to make something real from scratch, so I’ve started my own (atm extremely simple) irc bot. Then I’ve bought the classical K&R C book and some book about Erlang and I’d like to get going with those too.

Add to that we’re gonna do Ada in school after christmas which could be pretty darn fun too. There’s surely not a shortage of stuff to at least!


Posted in: School.

Going to University

October 6, 2010

I mentioned in the last post that I’m going to the university, which might explain my lack of activity here and for that I’m sorry. It’s not as hard as I had imagined, and I don’t have that much in school but there’s still a lot that’s going on. For example now how to make something which doesn’t focus on pasta or meatballs and I’ve also done the laundry a few times. These are all thanks to my girlfriend and without her I doubt that I would eat anything other than pasta and I would constantly wake up just to find that I don’t have any clean underwear left.

There are still a few homework things I need to do from time to time, but those are often either math or lisp which are pretty fun so no harm has been done to me yet.

I should really begin with the game making again now when my schedual is opening up a bit.


A secret preview of my latest game project.


Posted in: School.

The great Hochstapler

September 19, 2010

Hey there. A lot has happened lately since my last update and my last game here.

I’m now a pretty happy student at Linköpings university and I’m reading something similar to Computer Science or Computer engineering, but I guess it’ll become whatever you make it to be. For starters we’re reading a bit math and a bit common lisp, which is fun but hopefully this is just the beginning.

Me and Veronica are now living in a fairly nice apartment and I think I’ve increased my cooking skills a few magnitudes since I got here. Admittedly that’s not a too big of an accomplishment…

I haven’t had any time, or energy, to focus on game development. There are a few things I’d like to do but we’ll see what happens. My friend on the other hand has been productive and he has just finished one of his big game projects: Hochstapler.

Hochstapler, the epic production from Gridlock Games

It’s a really fun game with some inspiration from the old commodore and I really recommend you to give it a try. The only downside is of course that I just can’t beat his highscore!


Posted in: Gaming.

Where's Teddy?

June 6, 2010

So I did this course Game Design and what’s a course on Game Design without a game? Well, here it is. Made in about seven days (more likely eight) and I thought it became quite cool.

Download
Windows

Where’s Teddy?

How to Play
Your mission is to find teddy and his teddybear friends. The problem is that it’s dark and it’s really hard to find them if you can’t see where you’re going but thankfully you have a candle with you and if you’re lucky you can stumble on more candles to keep you from going completely dark.

Controls
Move with Arrow Keys
Switch and light candles with Space
Next Level: N
Previous Level: P
Reset Level: R
Console: F1

Credits
Sound effects: Random from freesound
Music: Joshua Holtz - Sounds of Insects
Rest: Me

Source
http://github.com/treeman/Wheres-Teddy


Posted in: Games, 7days.

Game Design Analysis: World of Goo

June 1, 2010

Top

  1. Introduction
  2. Analysis
    1. Actions and confirmation
    2. Varying the mechanics
    3. Consequences of the rules
    4. Mods
  3. Conclusion
  4. References

Introduction

This is the second essay for the course Game Design and this thime I will be analysing the game World of Goo a bit.


The first level

The game is very simple. You begin with a structure and a few Goo balls, the charming balls bobbing around there, which you can drag and drop to build on the structure. Your goal is to reach the pipe and it will suck in the surviving Goo balls and you need to collect a certain amount of balls, in this case at least 4. All you ever use is your mouse and one button to pick up and place the balls.


A step by step of the core mechanics

The beginning levels are very easy but it will get increasingly harder and you have to plan your building so you don’t use up too many Goo balls.

But as it’s a physics game you will also have to think about gravity so your tower won’t topple over and crash, which will happen to you a lot in the later levels.


Oh noes my bridge is collapsing!

That’s about the whole game concept right there; build structures to reach the pipe but use so few balls, or building blocks, as you can. You might think that it’s a shallow game with doing the same thing over and over – but you couldn’t be more wrong, there are a lot of different Goo balls to play around with; sticky balls, dangling balls, exploding balls, shooting balls, removable balls and more which will force you to change your build process in different directions. The level design is simply fantastic and it challenges your constructions and it makes the game very varied.


The levels are both fun and diverse

The game which inspired World of Goo, namely Tower of Goo was an experimental one week, one person game with the aim of simply building a high tower and you can still do that in World of Goo in a sandbox mode and you can compete online on who makes the highest tower.


The level chooser screen, be proud of those flags!

If you like challenges there’s more to do: for every level there’s this extra hard ending criteria – a challenge – for you to get gray hairs from. There’s time challenges, constraints on number of moves and a minimum of balls collected and some of them are extremely though. If you’re successful you’ll get a nice little flag on the level chooser screen.

The game is quite large with 5 different chapters and there’s around 10 levels each. Every chapter has it’s own theme and they vary quite a lot; there’s focus on explosions, balloons and there’s even Goo balls you can shoot! This gives the game fairly long but it manages to stay fresh all the way through.


The 5 chapters + sandbox (Tower of Goo) is the World of Goo

Back to top

Analysis

  1. Actions and confirmation
  2. Varying the mechanics
  3. Consequences of the rules
  4. Mods

Actions and confirmation

One of the things World of Goo does really well is to communicate to the player. When a first time player loads the first level it’s almost always clear what to do, you have this helpful sign showing your first move (drop a goo ball here) and you have this curious looking pipe just above you and not much else to distract you. After each level you get a score screen on how you did and both the level and world screen are helpfully showing your progress and what to do next. But to me the most impressive thing is how your actions are handled.

When you hover your cursor over moving Goo balls or removable joints you’ll get a clear marker around the selected ball and it’ll stop and give you a cute look just to show you ‘Hey! It’s me you wanna pick up!’. Likewise when you have a ball selected and you’re moving it around for a good spot you’ll get a small notion of where it’s going to connect and always you have a nice big clear marker on where your cursor is.


Selecting, building, shooting and moving

Visual confirmation in all honor but what really makes actions clear is the sounds. For every Goo ball hovered over and every joint constructed there’s a short confirmation of your action and for every dead Goo and every block crashed there’s an unique sound to let you know that something bad happened here in your little world. Every Goo that go down the pipe will emit a happy little laugh and you just love the hear that extra peculiar laugh which will tell you if you did complete the extra level challenge.

I didn’t find any sound or visual effect for when your action fails, for example there were no error sound when trying to click in an empty space and the mouse pointer never acknowledged my clicks if they weren’t valid. But you can say that they aren’t necessary, because for every valid action and for every click you can make, where something actually happens, there’s always a confirmation sound and that is enough to let you know that something was successful and unsuccessful.

Although simple the visual and auditive feedback works absolutely wonderful and I never had to wonder if my actions were registered, it felt like they always were and if things didn’t work as I wanted to I realized pretty quick that I was doing something wrong.

Back to top

Varying the mechanics

The concept of the whole game is really quite simple, create structures with drag n’ drop Goo balls, add in some simple physics and you’re done. It’s amazing how captivating something simple as this can be and I believe it has a lot to do with the small incremental changes the game makes all the time.

One thing the game does is introduce new Goo balls all the time; balls you can remove multiple times force you to climb and restructure, balloon Goos create interesting aerial acrobatics and a sticky Goo makes the structure mobile.


Lifting off and climbing is possible thanks to different Goo balls

Even Goo’s with minor changes like industrial Goo which you can’t control or dangling Goo which will only dangle down gives a lot of depth to the game thanks to the great level design.


There are lot’s and lot’s of levels which change the way you play

It’s not just build straight up; it’s build around, use balloons to topple the tower from island to island and it’s surprising how hard it is to build a tower in water or in a tumbler, you really have to stop and think or else it won’t work. The game is constantly varying it’s mechanics and you have to change with it, you have to evolve to keep up.

Perhaps the most radical experiment is the fourth chapter. We get new Goo’s that shoot! This is different from our regular balls that we can move around freely and they usually build or attach when we release them but these launch themselves when we drag n drop them. It’s the only way we can move them around and with one type we get to shoot and build.


Shooting Goo?

Still staying true to the basic mechanics, select ball, drag n drop for effect with some physics and this could easily have been a game of it’s own.

Going the other way around World of Goo also experiments with the drag n’ drop of Goo. They introduce block Goo which is immobile and it doesn’t walk around your structure like the other Goo and the only way you can move, the only way you can interact with them is to move them around and use them to block and for support or just to create a very unstable tower.


Block Goo; immobile and blocky but yet they manage to add something to the game

All in all World of Goo uses their simple core concept to it’s limit with a ton of variation and experimentation and it makes the game feel novel all the way through those 50+ levels.

Back to top

Consequences of the rules

World of Goo is a physics based game; when building structures you need to compensate against gravity so your tower won’t collapse and you need to make sure your structure has enough joints so it can withstand tension and compression. Physics games are hard to create, you can’t rely on a perfect representation as it’s too hard to simulate perfectly and there are many edge cases you’ll have to handle.

You can for example make it easier through this level if you force your structure into the wall and this “break” it. In real life a structure like this would completely break but in the game that doesn’t happen, the joints simply turn inwards and now you have a nice and short structure to move around.


Small structures are easier to move around

This happens because in the rules you can only break a structure if you either drop it into the ocean or on spikes, and loose them forever, or if you connect with a special construction destroying cogs. Here we exceed the tension and the compression and instead of breaking we get our joints twisted.

You even have to abuse the rules because the extra hard level goals can’t be beat otherwise. I’m sure the creators chose to incorporate the bugs into the game and they even call them features in a way to create bigger challenges in the extra level requirements.


Some core game rules abuse

The left picture: In World of Goo in some levels there are sleeping goo balls which you can’t get control of if you don’t get your construction close enough. But you can pick up and move around the balls and even throw them and if you do you can actually make the sleeping balls bounce around too. If you throw at the right angle you can bounce the sleeping balls close enough your structure and they’ll wake up.

The middle picture: Your ultimate goal is the pipe and it will start sucking in your goo balls if you get your construction close. But if you have the green goo balls which you can remove from the structure you can get a small structure hanging from the pipe’s suction! Then you proceed to move the rest of the goo balls freely onto the structure and you will get a lot more balls collected. It’s so good you can actually get every goo ball, except one, if you do this trick. Incidentally the creators noticed this bug, or feature, when testing and so they set the extra level goal to precisely one less than your total balls.

The right picture: In a level there’s a huge head which hangs from a small hook. When you’ve exploded the head you can get the hook to attach to the wall by throwing goo balls at your dangling structure. It will then connect to the wall because it doesn’t make any distinction to exploding heads or walls, it just sticks to it.

Back to top

Mods

The game is more or less a closed system but if you’re interested it isn’t too hard to create new levels, alter the online scoreboard (which has happened a lot) or even add new Goo balls. The site goofans.com is a dedicated site which collects fan-made levels and mods.


Colorful balloons and a new Christmas level

There’s even a tool, GooTool, which is a tool which let’s you manage your installed mods, manage your profile stats, general options like screen resolution and even add in your own language.

These changes, these mods, are mainly geared towards resources and not the actual game rules. It is possible to change them but then you more or less have to rewrite and mod the game on assembly level. This could be said about every computer game but it’s really hard and time consuming to do, but it sure is possible.

Back to top

Conclusion

I think World of Goo is an excellent game and there are so many things it does right. The game is good about telling you what to do and when you’ve done something good by using both visuals and sound effects. The game basic foundation of the game is really quite simple but they manage to create a lot of diversity and this fresh feel throughout the whole game by introducing small, and big, variations to the core mechanics.

The simple rules will create a few bugs and surprising side effects but they turn it around and they even call them features when they force you to use them if you want to complete the extra hard level requirements.

There are a few mods and new levels out there if you hunger for more and with a little effort you can create your own, even if most of the game rules are quite inaccessible.

Back to top

References

Salen & Zimmerman, 2004. Rules of Play. The MIT Press.

http://2dboy.com/ http://www.worldofgoo.com/

http://goofans.com/ http://goofans.com/gootool/about Accessed may 1st


Posted in: Game Design.

Generating ideas

May 23, 2010

So I got a fairly fun assignment from the game design course I’m taking for once. I should come up with 50 ideas using my own idea generation technique.

I used a sort of “notes in the basket” approach where you placed some notes with words in a basket and randomly drew two and then you should come up with something with the two words. But I’m too lazy to write a lot of notes and it’s pretty damn hard to come up with a lot of good words too, so I tried to automate the process.

I searched for some random words and found this site: http://www.wordswarm.net/ and I pulled out a few pages and got a few thousand words. Then I made a very simple tool which randomly combines two lines from a file and creates a sentence, much like the you would with the notes but this is just so much faster. Granted I had a lot of shitty words and I got a lot of garbage lines but I could go through so many lines it was a very simple task to get these 50 one-lined game ideas.

These are not fully fledged game ideas, but merely seeds from which you could grow a game.

  • Pensionere wheelchair race
  • Fish and surf on the fish
  • Deep sun exploration
  • VimCity - A simcity but with ascii chars which will teach you vim
  • Crazy units RTS
  • RTS with important landscapes - Destructable, things moving, rising water, paths in snow etc
  • House destruction - explosions!
  • Hospital creation with strange diseases you need to cure
  • Create Nautilus - an underwater city creator
  • Prison diner maid - give lunch to hungry prisoners
  • Prison break - with stealth, create stuff with different things
  • Bread seller - bread maker tycoon?
  • Night debt collection hero
  • Imprison Berth the jewel thief - police hunting a thief in the night/museum
  • Feed azimutal, the mythic beast in the sky
  • The 59th beetle-killer squads patriotic killings
  • Trauma center boom
  • Make mt. 63 a tourist franchise
  • Chop the mighty “King’s wood” from the legendary forest of death
  • Untagling Sarsenet - the predecessor to skynet
  • The great pie theft
  • Sawyer the egoist ant
  • Herbsman Abdal, the lone man growing herbs in the desert
  • Carving the first images - like caveman style
  • Bart the Darting hero
  • Brady the Big Eater glutton - Rush into restaurants and eat everything, then split
  • The struggle against Montezuma II, A mayan RTS war game
  • Industrializing Cakedoom
  • Mini racers the beginning: Autobahn
  • Saunter on thin ice - wannabe ice princess
  • Clark the Corrupt and Ruler of the Rhen - screw your inhabitants and take all the money
  • A wooden submarine - the first submarine, the turtle
  • Aristocrat apartment building
  • Managing the missionaries hygiene
  • The world’s best Toasts
  • The raspberry in Cosmos
  • The viking slap-up
  • Digging after tea
  • Colorizing the world with a trumpet
  • Round Rod explores Square City
  • Ordering the Oranges
  • Smuggling over the boarder
  • Life at the Toxic Waste Dump
  • Creating a Ghost Town - with real ghosts who want to live their life
  • Riding a Lawnmower and killing Gremlings
  • Digging gold on Mars
  • The life of a Bacteria, birth, mutation and world conquering
  • Put the surfing Duck
  • Butler who’s carrying silver

Posted in: Game Design.

Competition Feedback

May 18, 2010

The voting is over and I got a few ratings I want to comment on. You can view all ratings and comments here.

They’re all from 1 to 5.

Innovation: 3.75
This is by far the most positive of the bunch and the one button timing combination worked great!

Fun: 3.29
Again a good grade and I thought the game was fun although it became really frustrating.

Theme: 3.17
The islands wasn’t very prominent in the game and the game could’ve been about anything really, but again I’m more than happy with the grade.

Graphics: 2.54
Very simple and with some more effort it would’ve been better. But I’m happy, programmer graphics ftw!

Audio: 2.14
I only had two click sounds but still got fairly high. Many decided not to vote on it and I wouldn’t either. They were just last minutes add-ons but good to see someone liked it.

Humor: 2.54
I didn’t focus on this at all but got some decent grades from it anyway. Not sure if my graphics are that ugly.

Overall: 3.13
The most prestigious grade and it’s okay. I’m absolutely happy with it, especially since my desperate hope was to get something playable out of this.

Community: 1.64
The community rating is for posts and stuff over at the Ludum Dare homepage. Sadly I didn’t spend time there, almost at all, so I can’t really say anything about this.

Overall I’m really happy with everything and I’m really happy with my relatively good grades.

I will do my very best to make my next game even better, but atm I can’t seem to decide which idea I want to work with (I have like 4-5 serious ideas I’d want to explore).


Posted in: Ludum Dare.

Postmortem: Beebop The Island Hopper

April 26, 2010

So I participated in the Ludum Dare for the first time and this is a postmortem of my game Beebop The Island Hopper for the theme Islands.

About Ludum Dare

Ludum Dare is a competition which runs maybe two times a year and the competition is 24 hours long with a specific theme. After the 48 hours are over everyone who submitted a game can rate the other games in different categories such as graphics, fun, theme and overall. More info here.

The other entries

View all 205 Ludum Dare 17 entries

Holy hell they look absolutely fantastic! Taking part in a competition like this is so humbling, I can’t even begin to compare myself to the best games out there. But that’s good, I have games and creators to look up to and so I know how I can improve. Which by the way I can do with everything.

Stats

This time I didn’t log my hours and so I don’t have a good enough graph to show you. Thinking back I worked about 8 hours during this 48 hour challenge, two of them on Saturday and the remaining six late on Sunday. I didn’t work many hours on this game but the hours I did work were really productive.

Pressure

Once again I think I’ve proven that pressure is the best motivator. The game feels as finished as any other game I’ve made. Sure it’s not the biggest game and it has very limited features but it was made in less than a third of the time. Actually even less if you count the hours and not the days!

The Game

Even despite it being extremely simple it did suck up a bit of my time when I tried to beat it (which will take you a minute or two). I kinda liked playing it.

The graphics are pretty good, I have a pretty special style and I personally think it’s not half-bad and hopefully you like it too. The music and sound are… well there is no music and I have like three sound effects in total - two of them are different kinds of clicks!

Overall I like it, but it’s nothing really special. If I would try to give it an unbiased score (we all think our children are fantastic after all) it would probably be a 3 of 5.

Conclusion

The pressure of a deadline is a powerful motivator and now I’ve found that no more than a week, or even a weekend, is enough to make a game. And it might even end up being enjoyable.


Posted in: Postmortems, Ludum Dare, 7days.

Beebop The Island Hopper

April 26, 2010

Download
Windows

It’s here! The stuff of dreams, an entry for the epic Ludum Dare 17 has been made! For those who don’t know it’s a 48 hour game making competition which actually is pretty silly. Even more silly is my two hours of commitment yesterday but late this night at about 03:05 I am now, finally, writing this post! The theme was islands and this is what I came up with:

Beebop The Island Hopper

Controls
Any Key.

Credits
Sound effects: Random from freesound
Random Coolness: Ludum Dare
Rest: Me

Source
http://github.com/treeman/ludumdare17


Posted in: Games, 7days, Ludum Dare.

Ludum Dare 17 - an hour or two into it

April 24, 2010

I decided to participate in the Ludum Dare this time, even though I’ve spent the whole day on a massage course (which by the way was pretty darn good), and about halfway there this is what I’ve done:


Chockingly… ugly

All is not what meets the eye though, I’ve got the basics done with fully scriptable islands and actually the very basic gameplay too. Now it’s just the blows and whistles left (meaning it’s about 90% left).


Posted in: Ludum Dare.

Evolution of RTS games

April 23, 2010

  1. Introduction
  2. The Journey Begins
  3. The RTS Boom
  4. Life After the Boom
  5. The Modern Age
  6. Conclusion
  7. References

Introduction

This is an essay for the course Game Design and I’m going to give you a ride through the evolution of RTS game genre. I like RTS games and I’ve played them for as long as I can remember, from the classic Red Alert and Age of Empires to the newer Supreme Commander and Starcraft 2 (beta).

First of all what is a Real Time Strategy game? How do we narrow it down? The first distinction I’d like to draw is the Real Time part. Games like chess and civilization are most certainly strategy games but they are not executed in real time. Instead you wait for your turn and then make your move. Turn-based games like these are in my mind not RTS games. Neither are “God games” like SimCity and The Sims. You have very few boundaries and you can do what you want, when you want and how you want. But I think of RTS games more as a competition – a race against time.

I’d like to draw a loose definition for an RTS: “harvest, build and destroy”. Practically all RTS games are based around the idea to get money or some kind of resources to build up an army and proceed to destroy your enemy.

I will focus more on the beginning RTS games as they are still the main influence to all RTS games and then I will a bit more quickly go through the modern games and the modern ideas that continues to drive RTS forward.

Back to top

The Journey Begins

In the beginning there was no RTS games. Hard to imagine I know but that’s the truth. When the idea of RTS was born the gaming scene looked a lot different from now. In the 1980’s Nintendo had blown new life into the video game industry and it was the simple games that held us entertained, games like Pong, Tetris and Pac-Man. However the tides were shifting and more advanced games like SimCity were on the rise.

Dune II (1992) wasn’t the first RTS game, there had been several games with RTS influence in them but this was the first complete RTS. The game was all about control. You chose exactly what units to build and when to build them and you could command every single unit at will – perhaps drive it across the map to check what your opponent is building?

The game introduced the concept of a tech-tree (Technology Tree) where you could “tech up” to stronger but more expensive tanks or you could continue to build cheap tanks. Gone where the days when you had to rely on a rock-paper-scissor balance between units, such as tank beats artillery which beats infantry which beats tanks, and instead you had the choice of countering a tank with a bigger tank! Or with a mind-control tank or you could choose to destroy the factory producing the tanks. Choosing the right time to climb up the tech-tree became vital to your success but it was complicated by “the shroud” which was a black fog covering the map where you haven’t been. This in turn forced players to scout and check what the opponent is doing having to constantly revise what units he should build and if he had to tech up.


The sandy land of Dune 2

Perhaps the most revolutionary concept Dune introduced was the resource system. To build things you had to have spice, the game’s only resource, and to get spice you had to harvest it on the map and bring it home to convert it to money and then units or buildings. What this practically means is the player had to have control of the map, he had to have a place he could get spice or else he would probably die. The concept of map-control is something that is driving virtually all RTS games to date. The first online capable game was Warcraft: Orcs and Humans (1994) but the online boom wouldn’t come just yet. Instead it was the game Command & Conquer (1995) who refined RTS a bit more. It wasn’t a graphical masterpiece nor very complex instead it’s simple but it just works. The game screams atmosphere and war. All the units were pretty straightforward (I mean who doesn’t know an apache, a rocket launcher or an M1A1 tank?) so it was pretty easy to pick up. But beneath the simple exterior lay a surprisingly deep game.

The game built on Dune 2 and in fact some fans nicknamed it Dune 3; the shroud and the resource system was the same and the tech-tree was built upon and it introduced the concept of a BO (Build Order – a predefined order to build things to maximize unit production or similar). C&C furthered the sense of control, in Dune you could just select one unit at a time but here you could select several, you could then store it in a group 0-9 and whenever you pressed the number again the group associated with it would be selected.

Instead of the “tank, bigger tank, biggest tank” from Dune C&C furthered the unit differences with tanks and infantry. Infantry was weak and could even be run over by the tanks with a satisfying splat sound, but they were dirt cheap and vital for early scouting. Tanks on the other hand were strong and fast but they were expensive and they had to rely on driving over infantry in order to effectively kill them. This gave the game a whole new level depth.

Back to top

The RTS Boom

Warcraft II: Tides of Darkness (1995) became the first mega-successful RTS game. For some the interface was a letdown with no groups or build queues but instead it introduced the standard right click. Example with a peon: if you right click on a gold mine he will harvest and if you click on an enemy he will attack. It also allowed you to build anywhere opening for the oh so popular tower rush (build offensive defense towers). For the first time we got to have full naval battles with battleships, submarines and even a very own naval-resource. They improved the shroud and turned it into the now standard Fog of War where the fog regrows if you don’t have any units there.

But the thing that really set Warcraft II apart was the online multiplayer. A huge community gathered and spawned leagues, clans and ladders and essentially creating the base of modern competitive RTS gaming.

Command & Conquer Red Alert (1996) was the original C&C but more and better. It kept the defining pieces but moved up the pace with high yield minerals and a stronger focus on tank warfare. In fact the focus on tanks was so strong that it introduced the concept of a “tank rush” where you amass a lots of tanks quickly and then rush your opponent to catch him of guard. The factions were different and unique and featured for the first time full featured land, sea and air combat. Red Alert also has a crazy and good story where Einstein witnesses the horrors of Hitler and proceeds to g back in time and kill, but without the competition for Stalin a new war breaks out. This placed new importance on the story in RTS games, a tradition which still continues today.


We can spot Red Alert’s mighty mammoth tank

If you think about classical RTS games the chances are high you’ll think about Age of Empires (1997). The game is one of the most influential RTS games and if you’ve ever played it it’s easy to see why. It’s balanced, polished and very deep. It’s one of the first games to introduce the concept of “Ages”, essentially tiers in a tech tree. There are four ages which let’s you progress from the very basic clubmen to advanced bowmen and even war elephants. The whole system is nicely done and the progression to higher tiers is fluent and it adds a lot of depth to the game. The resource system is still one of the most complex in any RTS with a whopping four resources for you to balance. Another new concept was the random maps. This way every game was a whole new experience with lots of different chokes and the importance of scouting was set on a whole new level.

There are games that would introduce one or two novel ideas and then there is Total Annihilation (1997). The game was the first 3D RTS game and it featured real physics simulation. Gone where the days when your units would hit instantaneously and without fail, here everything was simulated; on bumpy terrain the shots could fire into the ground, the front units would absorb and block hits and higher terrain would give the benefit of an increased range. TA was one of the first games where units could shoot while moving, making for some interesting run and dodge tactics. Dead units would even leave wreckages on the battlefield, wreckage that would block movement and you could reclaim them and regain some of the metal you used to build them.

When we’re on the topic of metal and resources – TA has one of the most unique resource systems to date: they’re unlimited. Unlike games like C&C with a finite resource system you never had to worry if you had enough, metal and energy would be regenerated infinitely so it was never a question if you could afford it, but how long it would take to be built. TA reintroduced the “Hero unit” from the era before Dune II, where you actually were a unit and if that died you loose.

TA was more a game without limits than anything before – battles with hundreds of units were commonplace and when the big units in other games fired across the screen, the big guns in TA fired across tens of screens or even across the whole map! Where other games had strong Rock-Paper-Scissor counters TA had none. You could even fire artillery at airplanes (although pretty useless). Instead the balance revolved around unit speeds, turning times and overkill.

Until this day, almost 12 years later, Starcraft (1998) is still the most competitively played RTS. The game had a great story and had three completely different races. Other games differentiated their factions with units but in Starcraft even the way you built things was different. But the thing that sets it apart from anything else is the community and in particular the competitive gaming scene that gathered around it. It’s so ridiculously popular in South Korea that it’s considered the National Sport there and the players are treated as rock-stars.

Why did this game become so popular? I don’t know; it took almost a decade to get it balanced good and it isn’t extremely fast paced. It’s really fun to play but almost more importantly is that it’s fun to watch, the immersion factor and the excitement of a high skilled game is unparalleled and I think that’s what sparked the formation of a dedicated community. Then the community in itself is a reason why Starcraft has stood the test of time – the formation of pro leagues, great map support and excellent coverage has made sure the community has flourished.


Starcraft, the most successful RTS game yet

Back to top

Life After the Boom

The success of RTS as a genre sparked the creation of a lot of pretty similar, but often very good, games like one of my personal memories KKnD (1997). However it didn’t take long until the next big revolution: true 3D brought to you by Homeworld (1999). Total Annihilation had used 3D terrain but Homeworld set the player in space and gave the freedom of the Z-dimension. Instead of just moving on a flat, albeit bumpy, surface you could now move freely in any direction you’d like. In addition Homeworld became known for it’s atmospheric and rich story and they introduced persistence in the single player campaign. It means that you would retain all of your units and upgrades from your last mission and if you had finished it badly with only a few units the next mission would prove impossible and you had to replay it.

Building on a concept and improving it has been heavily used in RTS and it has brought us some of the very good games. Age of Empires II (1999) was all of the original but better. Command & Conquer: Red Alert 2 (2000) upped the pace of of older C&C games and created a fun, with some good humor, easy to pick up but hard to master classic RTS game. Red Alert 2 still had a cartoony 2D look who many loved but it was to become one of the last 2D RTS games.

Age of Mythology (2002) was a spin-off from the Age of Empires with all its goodness but with additional “God powers”. Rise of Nations (2003) incorporated classical board game features such as territory and it tried out a resource system with a whopping 6 resources (crazy!).

Warcraft III (2002) continued on where Warcraft II left but with added focus on abilities and RPG like hero units. The game is very centered around you gaining experience and leveling up your hero by killing neutral monsters, called creeping, as the three heroes you could have are more powerful than the rest of your army. Instead of a hard unit cap like in Starcraft Warcraft tried the approach with upkeep: if you have a large population you’ll gain less gold and it worked pretty well as multiple expansions would do more harm than good.

The focus on heroes and abilities made the game really micro intense (taking care of individual units) as opposed to the very macro (economy) centered Starcraft. (It’s pretty amusing in the current Starcraft 2 beta where you can actually see what game the top players used to play, Starcraft players usually have great macro but pretty bad micro whereas top Warcraft 3 players micro a few units but their economy is bad.)


A human player harassing an Orc in Warcraft 3

Command & Conquer Generals (2003) shifted the focus for the C&C series. It made the building panel a bit more free, so you could easier build where and what you wanted, it had radically different factions and sub-factions but it had a very poor story but perhaps the most noteworthy addition was that upgrade change unit behavior instead of simply making them deal +1 damage. For example infantry was weak against tanks but with an armor-piercing upgrade they could destroy it.

Lord of the Rings: The Battle for Middle Earth (2004) had a pretty interesting and different build system. Where other games placed no limits on where you could build the game only allowed you to build on specific places and they were very limited. This forced you to really think about what to build – one mismatched building and you could get your entire army mismatched against your enemy. It also had a sort of RPG experience points tree whit a lot of different power ups you could have, but these too were limited and forced the player to make hard decisions, and hard decisions are good.

Dawn of War: Warhammer 40,000 (2004) changed the well known resource system, instead of harvesting the player was given “map points” combined with an in-house generated resource. You also had squads, which were treated as one unit for easier control and as several when in battle.

Back to top

The Modern Age

Company of Heroes (2006) is a pretty special game. It fuses the cinematic experience from an FPS with the tactical and strategical depth from an RTS. You command a lot less units and you’re a lot closer to the battlefield. The environment is almost fully destructible and your units will take shelter behind anything they can find. Things like where you attack a tank became important as the armor was considerably weaker in the back and ammunition and fuel was considered a scarce resource.


The immersion of Company of Heroes is simply stunning

World in Conflict (2009) took the tactics even further and is considered an RTT – Real Time Tactics. In WiC there are no resources, just a sum given in the start of the game for you to call in units with. When the units are killed the points are slowly given back ensuring you won’t run out of units. The game is solely focused on controlling your units and thus isn’t really a true RTS in my eyes but a game bordering between the two.

Supreme Commander (2007) is the spiritual successor to Total Annihilation and it stands in stark contrast to WiC’s tactical focus – here it’s about the broad strokes man. Given the strategic zoom you can zoom out until you can see the whole battlefield and all the hundreds of units are there for you to command. The scale is huge, nukes and experimental super units trashing around gives the game an epic feel. But there’s a lot more to Supcom than watching huge battles, it’s using the whole TA system with infinite economy, wreckages and no hard counters. We have new intelligence modes; in addition to line of sight as in almost every other games there are radar, sonar and omni (see all). To counter these we get cloaking and radar jamming units. Another thing Supcom does well is the improved interface with infinite queues which tie well with the infinite resources so you don’t have to babysit your factories to get them to continually produce units.


Me and Toejams showing off in Supreme Commander

Today there are both big scaled games like Hearts of Iron III (2008) and small-scale like Company of Heroes. There are games that relies on the old tried-but-true formula (Starcraft 2 currently in beta) and other more novel (Darwinia 2005). If you look closely you’ll notice the core the old RTS games are still here, unchanged. Starcraft 2’s resource system is basically the same as in Dune II and grouping are still the same as in the original C&C. Games are still living on, and building on, the successful ideas of the past (the new C&C, AoE3 etc) and I personally think they will continue to entertain us, Dune II style, for at least a couple of decades more.

Back to top

Conclusion

We’ve been through the evolution of the RTS from the beginning with Dune II until modern games like Supreme Commander and World in Conflict. The simple one resource system has given birth to four and even six resource systems and some games have opted for “map points” or different infinite resources. The simple shroud concept has turned into the now standard Fog of War and there has been some advanced intelligence gathering going on in a few games. The Hero concept with borrowed RPG elements are now standard in many games and the tech tree has been branched into several different flavors. The scale has both been amplified and minimized and units has differentiated themselves from each other.

Thanks to the online multiplayer pioneered almost 15 years ago has turned a little niche genre into a mega-industry with competitions held in several different games and countries. But where the genre is heading is anyones guess, but whichever way it’s heading I’m sure it will continue to entertain and surprise you.

Back to top

References

Everything accessed 21 mars 2010

gamespot1, gamespot2
History of RTS during the years 1989-2001. Pretty good.

Gamereplays RTS history, a great resource written by several RTS enthusiasts.

A top 20 list, take it with a grain of salt. Used for inspiration.

From wikipedia various stuff (mainly dates):
Dune the novel
Warcraft: Orcs and Humans
Darwinia
Age of Empires II: The Age of Kings
KKnD
Age of Mythology
World in Conflict
Hearts of Iron 3


Posted in: Game Design.

Before the Games: The Site

April 16, 2010

I’ve got some things I want to do before I start with my next game and they’re all about improving the site. The last week or so has been extremely productive with me throwing out a lot of wasted code, speeding up the site and adding/removing features and I want to continue with that and get the things done now when I’m in the flow.

You can find the whole source for the site, excluding a few security related files ofc, on github where I’ve also uploaded a small to-do list and some ideas I might want to implement.

Here’s a small summary of the stuff:

  1. Allow editing all the information pages without doing it through phpmyadmin, merge it together with the post editing.
  2. Change the layout of adding comments and it’s preview, try unhide it.
  3. Fix the layout of search and possibly tweak the inner workings
  4. Revamp archive page, maybe use it as a sitemap?
  5. Add read next/previous posts on post and older/newer posts?
  6. Make comment editing work, for guests too.
  7. Statistics!! I have third party statistics but I want stats for the most active commenter and other stuff.
  8. A greater 404 page
  9. Refactor, remove garbage code and refactor some more.

I’m itching a little bit about a new game, but first thing’s first.


Posted in: Webpage.

Widening the horizon

April 10, 2010

This is a game making site but where are the games? What gives?

I’ve been slightly less motivated in making games lately and I’ve been doing different things, just to get my ideas and my motivation up. As I said in an earlier post I wanted a break from Experimental Games and I want to spend more time on each game just to get the quality of the games up.

Lately I’ve been using vim and I really like it but the learning curve is really high, so why not make a game about it? To make the learning progress easier and hopefully even somewhat fun. I haven’t come up with a great idea yet, and thus I haven’t started, but I’m pretty optimistic.

I also mentioned Ludum Dare but as the looks of things it ain’t gonna happen this time. I’ve got a massage course the whole weekend timed on just as the 48 hour game making competition is and I don’t think I wanna stress myself to manage the both of them.

Instead for a game I’ve been focusing on learning Haskell and on improving this site. Trying out different stuff like trying a new paradigm and trying out different languages is a really good way of Sharpening your Saw. Yes technically he meant doing things not related to programming, such as math, but I still see it as doing something completely different and improving while doing that.

For example Kohana, the framework this site is built on, has made me think more about tools and frameworks instead of just language features as it transformed my awful, hackish site into this beautiful little thing literally in the blink of an eye. Or take jQuery which took my epic cross-browser checks and transformed it into beautiful code. These two seemingly small changes made the boring web developer process really fun!

Yeah that’s what I’ve been doing; I’ve been widening my horizon and I’ve been having fun at the process! Wooo


Posted in: Programming.

The games that make me who I am

April 6, 2010

I read an article the other day where he met someone who didn’t read fiction:

He suggested that fiction was a waste of his time — he read to learn, not for “mere” entertainment

I don’t agree with this view and neither did he:

Fiction allows you to be part of situations that are unlikely to happen otherwise. You can experience thousands of years worth of events by reading fiction. Yes, it is true that what happens to you in real-life — with it’s finality and incomparably richer stimulation – out-weighs that of a book. However, the course altering moments in life are infrequent. Fiction provides a means of accelerating your “personal growth.”

He then gives us a list of fiction characters who has made him who he is, many small pieces of trait that has become a part of him.

Interesting I thought and I began thinking of what characters I could identify with (Lincoln Rhyme and Robert Langdon comes to mind) but then I started thinking of games. What games has made me who I am? It’s not an easy answer and it’ll never become exhaustive but it’s interesting to think about and here’s my try:

Worms
I played the demo of Worms 2 to death, I ran to my friend all the time to play Worms Armageddon and I’ve been addicted to blasting ugly worms with banana bombs ever since.

RollerCoaster Tycoon
I love rollercoasters and I love to build stuff so naturally I played the games a ton… I’m still tingling with excitement when I think of building a super-coaster. The builder that is me was born with this.

Hospital Tycoon
Another constructor game with hilarious humor and I’m still harboring thoughts of resurrecting this beauty as a new game. I think it was one of the first games to make me think about actually making games instead of just playing.

Counter-Strike Source
The best anger management there is. Or well I’m not really civil when playing it but it lets me went out pretty damn good, but don’t sit near me when I’m playing - it’s not good for your ears.

World of Goo
The game that opened my eyes to the wonders of Indie Games.

Supreme Commander
Introduced me to the world of competitive gaming, or rather the competitive mindset. It also helped me become a better person by helping and being a part of a great community.

Evil Genius
Humor + Base Building = Epic Win.

These are just a few games from the top of my head, some had big impacts and some slightly less so.

We started with a quote and that’s how we’ll end it:
I am the product of my parents, my friends, my life, my experiences…and my teachers.

Posted in: Life, Gaming.

Death to the Forum

April 2, 2010

Well it was fun while it lasted, but now it’s gone and it’ll stay gone for a long time I think. It was mainly a test to see if I could do it and I’m really proud of my styling of it but it’s deader than in a grave, which isn’t really surprising, and it bothered me that I didn’t write it myself - like really bothered me.

phpBB is fantastic in many ways; easy, fast and easily managed but it just didn’t feel right as I hadn’t done it. Kinda the same as why I’m not using any popular blog tool but I’ve rolled my own. It feels pretty good to use a site you’ve written completely yourself…

And no I don’t want to write my own forum now, for now I’ll stick with a tweak here a tweak there on the site.


Posted in: Webpage.

The Experimental Games

March 30, 2010

It’s been nine months since I started doing Experimental Games and I think it’s time to evaluate and maybe go in a new direction.

At first I had been stuck for ages with my never-ending projects and I had literally nothing to show for all my coding. Well now things have changed a bit: I’ve successfully released seven experimental games, games that more or less are playable, working and sometimes even fun! These months have taught me that games aren’t impossible year long projects, they don’t have to be perfect to be enjoyable and above all they taught me to get things done!

Here are a few lessons I learned the hard way.

Iterate
Don’t try to make the game perfect from the start cause it won’t be perfect and it won’t be pretty. Instead create the ugliest, crappiest playable version of your game you can and then work from there. The best games where those who got playable the earliest: MenuCity, Bugger and Jonas IceCream Stand. The other crappier games such as A Geek Valentine and Black and White got playable just in a very late stage and indeed they also became the least fun.

Fun isn’t created on the spot - it’s created through iterations. It’s like carving a wood figure. You don’t create it with a big slash, you carefully chop the wood off little by little until the figure is complete. This is how I think good, fun games are made.


This quantum leap wasn’t achieved with a big chop, but with many smaller ones

Get things done
This is the thing that changed with me the most. At first I thought games where all about the planning stage - the idea stage. It’s important to have a great idea and it’s good to write down things sure but you can’t just sit on your ass doing the big talk and not actually do anything. As said about iteration you can’t make the game perfect from the start and you can’t the whole game from the start either. The game will change and your idea about what’s good for the game will change too.

Take for example my latest game A Geek Valentine. I had envisioned the game as a game where you built trap combos from a top down point of view. But the game changed into a pac-man type (I’m not all too happy about it though). For better or worse games and ideas change, stop planning and start getting shit done.

Set Goals
In December I had the truly great theme New World Order and it spawned the best game idea I’ve had, a sort of SimCity game but instead of building stuff you plot to take over the city and taint it with your evil propaganda. Like in North Korea or in the old Soviet. But the game was not to be.

Why you ask? I think it’s because I never had a goal - I broke the one week rule and I could just push the deadline further and further and I never got anything done. With other games when I was at the 2-3 last days I always got a big energy boost and I always managed to get the game finished. But here I could just say “meh, I’ll do it later” and so it never got done. It’s Duke Nukem Forever all over again (maybe a bit smaller okay). Goals will help immensely to get things done.

Have fun
In retrospect I should have had an overall goal for my experimental games too. I never put an end date - it was just new month = new game and in the end it wasn’t very inspiring to just churn out a game. It was as if I just had to make a game, it wasn’t something I wanted to do and it was almost as if it had become a chore.

Mind you I’ve had lots and lots of fun making these games and the games who were the most fun to play were also the ones I had the most fun making. You could divide my games into three categories I think.

The beginning: Fun

The middle: Really Fun

The end: Not so Fun

The funny thing about this is that it works really really well both ways. Both how fun the games are and how fun I thought it was to make them. I think this is an indication for all you game developers out there: Have Fun, not only will you live a happier and longer life but the game will also be a lot more fun!

Conclusion
I’m not sure what the meaning of this post was. At first I wanted to state a new beginning for myself and then it turned out to a lessons-learned post… but whatever.

I won’t be doing monthly experimental games for a while now, I’m happy with the results but I’m not at all motivated right now and I need a little break. I will continue my game making but it just won’t be exactly the same - maybe I will try to release a game, any game, each month or I’ll focus on making “real” games - games which are everything I want them to be, not just a proof of a concept. I guess that’s something that’s been bothering me about my experimental games - it feels like something is missing.


Posted in: 7days, Postmortems.

No game this month

March 25, 2010

Well here I am in the end of the month - without a game. It’s a failure I know but once again I lack inspiration and then it’s really hard to do something. Instead I’ve been thinking of something I could do that would make me wanna code like really bad again. I’m thinking of patching up this website, the forums are bugging me like hell as I didn’t write it, switching rendering framework for my games and just now today I’ve done a few Project Euler challenges in Haskell which was pretty fun (but hard as I’m really bad with it).

Next time I’ve got my sights on the Ludum Dare which instead of a seven day game is a two day game! We’ll see how that’ll go.. If I have the power and the time to.

I’ve also written a small piece about the Evolution of RTS games, heavily shortened to fit a perfect 5 pages a feat I’m quite proud of. Of course I wanted to write a hell of a lot more.

In short: Not much has happened and not a lot is happening but we’ll see what the future has in store.


Posted in: 7days.

Postmortem: A Geek Valentine

March 10, 2010

Ah man the mush in my brain is finally letting go and I’m starting to feel this tiny little programming urge again… This time it’s not Haskell or a new experimental game that’s luring me on, no this time it’s me longing to create this fantastic awesome epic RTS game. Sadly it’s a long way to go there…

Anyway let’s get this going!

A Geek Valentine isn’t a good game by any means, it’s really nothing special. The gameplay sucked really bad. It’s kinda funny as I told Sundb00m this would be my greatest game gameplay wise. Yeah right..

Hard Work Work!

This is a small graph which shows how I’ve worked for a straight week from the 22th to the 28th. The Y-axis is hours and the X-axis is days. The labels are for either work or break and the height of the green peaks if you check it on the Y-axis is the sum of both green and red. Green is for hours where I actually worked and the red is for when I had a break. You know food, clipping toenails, reading manga and playing counter-strike.

Total work time: ~25 hours
Total break: ~15 hours

Weekend work: 13.8 hours
Weekend break: 8.3 hours

The noteworthy thing about this is that I spend more than half of the whole week’s worth of time in the weekend and I probably got even more done during that time. I think it’s the whole deal with being chased with a the brutal thing of failure that motivates me.

Graphical Adoration

About the game let’s start with the positive stuff. I really like how the game looks, it actually looks pretty darn good (even though I forgot about the girls’ turning, now they’re just looking forward). I’m really improving in a graphical sense, something I thought impossible when I began this journey.

Do something you Like

Like with a Big L. I felt I had a really nice idea going for this one. In the end it looked and felt like a bad pacman clone but this wasn’t what I had in mind at all. The idea was to build cool trap-combos sort of like in the Epic Game Evil Genius.


Here’s a plan for an über-trap in Evil Genius

I really love Evil Genius and especially the base building but let’s face it - I failed. But the idea kept motivating me and it was really fun to try to make it happen.

A first small taste of an “AI”

How do the girls move? They have a 5x5 vision with a 2 radius (they’re in the middle) and they choose what to do. If they see the dude close to them either in front, left or right they’ll go there. Otherwise they’ll try to follow a path in front of them or to the left or right. Otherwise they’ll just go in a random direction.

They are extremely stupid and you can trap them in a never-ending loop fairly easy and it’s a stretch to say they have intelligence but it was pretty cool to dip my hand into AI programming. I know it’s extremely shallow and bad and stuff but still it was pretty rewarding to see them actually move around on their own…

I might actually develop this game further with special regard to AI. Change the core of the game so you can script both the player and the girls, just for laugh and giggles?

The game sucks but hey…

Yupp it’s not my best game, in fact I think it’s one of the worst. But I still like it a lot and my trap-building idea is still alive and I might develop the game more, improve the AI and focus on building traps (need a lot more cool traps damnet). Yes I think I might do that…


Posted in: Postmortems, 7days.

March Theme: 10 seconds

March 2, 2010

Well well here’s something interesting. The Experimental Gameplay Project has given us a really interesting thing to focus on: Time. Like Braid, it’s time for us to make something interesting with time itself. 10 seconds is the constraint and that’s not a lot, but perhaps enough?


Posted in: Themes, 7days.

A Geek Valentine

February 28, 2010

Yes! I made it! It’s 22:22 on the very last day of February and I’ve been programming virtually non-stop for the past two days, my brain feels like mashed potatoes…

Download
Windows

A Geek Valentine

Controls
Steer with the arrow keys.

Use spacebar to:
1. Build the time machine
2. Buy and place traps (Just face an empty square and choose a trop on the top right)
3. Sell traps (Face and click)

Story
Well it’s Valentine’s Day and as the geek you are this is the worst day ever. Luckily you havean almost complete time machine hidden here in the grass and if you could complete it you’ll be safe for now! But beware… The girls are searching for you! Place traps and run away!

About
This game, as usual, was made for The Experimental Gameplay Project. This time they asked for a short explanation on how the theme would fit together so here it is:

Rejection + Valentine’s day = feelings hurt

And you’re the one hurting all the girls’ feelings. Enjoy.

Credits
Music: Nighttime Falls, I’ll be Waiting for Her - ilocan18
Sound effects: Random from freesound
Rest: Me

Source
http://github.com/treeman/Rejection


Posted in: Games, 7days.

Why is my file so huge?

January 24, 2010

My latest game was absolutely huge! And I’m not talking about the music (which was pretty huge too - roughly 20mb) but the little .exe file.

It was 14,6mb!!

Now every way you look at it, that’s incredibly huge. It’s like comparing an ant to a human. Normally the little ant is the exe file which should be small, except that it’s not.

Incredible I thought, what the heck did I do wrong? I mean my code isn’t really good but I never knew it was this horrible. So today I was determined to find the cause of this obscene mutant ant.

I started out chopping off everything regarding exceptions, cause all c++ resources I’ve read say exceptions will take space like a mutant gremlin. Okay I thought and chopped away everything - but nothing happened.

Now that’s weird, what happens if I scrap this.. and this.. It ended with me beginning a big revamp of my whole “engine”, or rather collection of stuff - nothing inherently wrong as it was badly needed - but nothing happened with my exe file! It was still almost 2mb big with basically only a hello world…

Then it struck me! I had been using -g with gcc and without any optimizing at all. When I turned on size and speed optimizations and scrapped the debugging the change was quite extraordinary.

The mutant 14 637 kb was magically transformed to a more fitting ant size of 856 kb. I couldn’t save much of the total file size (23 254 kb -> 20 768 kb) so while I apologize for hogging your bandwidth, time and harddrive space I’m hoping you won’t be too mad at me.


Posted in: Programming.

Postmortem: The Chronicles of Bim: The 100 Fake Afros

January 19, 2010

My first shooter! It’s working (although a friend got a null pointer error) so I’m a little happy.

The Time

I spent about 24 hours on this game. A whopping 30% was break time, mostly me eating, reading manga or playing games… This is proof of me being really lazy this month I think.


It’s pretty cool that everything regarding the scripting, loading the little levels I had from lua files and writing them took only a mere hour! I could have saved so much time if I would’ve scrapped the whole levels idea completely. (Levels are more than just the code it takes to load them from a file… a lot more)

Immersion

We all love big bangs and loads of stuff flying around on screen and sadly I didn’t deliver. I had all these ideas of pieces of dead afros flying around and dead things piling up on the ground which you’ll walk over… but I never did any of it which is sad cause it would be pretty damn cool.

Another thing is the messages on the left side. Pretty cool - if they would actually say anything, but again I didn’t have time or the inclination or whatever to do anything with it…

All we’re left with are the quakes which are kinda cool but they could do with some tweaking, maybe shorter and less frequent to really get the omg effect.

Gameplay

It plays okay. Not a lot happening, it’s just a race against time. The immersion part would really hot up the gameplay cause really, it’s fun to blast things into the sky!

Conclusion

The game feels like it’s not finished. The whole afro thing was cool but it’s not revolutionary or anything different. It’s stuck in the middle between random ideas and mediocrity. Too bad.


Posted in: Postmortems, 7days.

My Dream Game: The RTS

January 18, 2010

Even if there are a million great games there’s one that has a very special place in my heart: Supreme Commander. It’s not the game I’ve played the most and there might even be games which are better and more fun but supcom was the game that introduced me to competitive gaming and it made it me feel like no game had done before. I took gaming seriously for once; sure I had played online with cs but I was never serious. I did nothing to improve myself, I didn’t really care - as long as I didn’t have 1-10 or a silly just-beginning-stat.

Before supcom I always cheated my way through an RTS game (I still remember that pepperoni pizza gives food and quarry gives stone in age of empires) or just gave up when things got rough. Now I’m happy to give it my best just to beat guitar hero on expert and someday I’m sure I’ll do it! Getting beat down by a lame rush? Before I would just whine and shout “lamer” and throw out the game but instead I saved the replay, copied his moves and presto! Now I got to be the one who got shouted at!! And I can tell you - it felt a lot better…

All this effort I put into the game really got me involved on a very different level than in any game before. I’d never even thought that SimCity, the great 4th edition, was imbalanced. But when I think about it: the huge apartment-building with a couple of thousand inhabitants it always, always without fail clogged down all the transports even when I dedicated everything around it just for transport. Later I found out it was bugged and there’s a fix, somewhere, to download which will fix this and some other bugs. Now I started to find things I didn’t like in supcom, things that was… wrong. No matter what you did, and no matter what the really good guys did - you couldn’t beat a certain strategy. It ended with everyone playing the same faction, spamming the same units in game after game… Not really fun. I participated in discussions and believe it or not I think that I was right more often than not. I was improving!

But hey! Why did they do this? What if they had done this instead? If I had made a game it would have done this and thus been a lot better…

And here I am. I have this dream of making the best RTS game ever… Staying true to my play style from supcom: copy the good things from others, improve them and make them my own, my plan is to mix in the great things from all the RTS games I’ve played throughout the years. Obviously the most prominent would be supcom but also StarCraft, kknd, TA and CnC among others…


Posted in: Game Design, Gaming.

The Chronicles of Bim: The 100 Fake Afros

January 16, 2010

Aaah feels good having a game ready after the last month’s failure! This time it’s a small shooter.

Download
Windows

The Chronicles of Bim: The 100 Fake Afros

Bullet masher - can you keep up with 100 enemies at the screen? Try it!

Instructions
W: up
A: left
S: down
D: right
mouse: shoot
space: leap into the sky!

Credits
Music: The Last Prophecy - Matthew Le Blanc (SynthR)
Sound effects: Random from freesound
Rest: Me

Source
http://github.com/treeman/100-things


Posted in: Games, 7days.

New Year, New Theme: 100 Things

January 1, 2010

Happy New Year, Everyone! 2009 was great in many ways; I drove a submarine (yeah quite literally), I released 6 experimental games and recently I discovered the completely amazing game Evil Genius but lets try to make 2010 even better!

So let’s forget our small mishaps (yes I’m looking at you - December month without a game) and roll out a new theme. As usual I’m following The Experimental Gameplay Project’s theme which happens to be 100 Things.

And Things could mean anything from sprites, sound effects to pixels or enemies.


Posted in: Themes, 7days.

Now we have a Forum

December 21, 2009

In a burst of random energy I made a forum for madeoftree. Well okay I just made an awesome style for the awesome phpBB - the forum itself was up and running in say 10min and the rest of the latest days has been all about customizing. Now it’s finally kinda complete so here it is (it is now taken down)!

Making it was the easy bit - now we need to generate some content! Where is the almighty sundb00m when we’re in a desperate need for spam?!


Posted in: Webpage.

Pushing toward Git

December 16, 2009

The time has come; it’s time for me to move my source out in the open for the first time.
I present to you the source of the upcoming game (which has no name yet):

Repository deleted, never became anything
Available on Github

It’s nothing special really, if you want take a look at the code and help me improve it.


Posted in: Git.

Breaking the rule of three

December 14, 2009

It’s pretty darn stressful making a game in a week, especially when you have this big great vision on how your game should be (which is always grand). For me making Balls, Black and White and Jonas IceCream Stand where truly stressful, MenuCity and Bugger not so much but still.

This is why I’m giving me an early Christmas gift: I won’t make the December game in a week. In fact I haven’t even logged the hours, I just work on it a little here and a little there and boy it’s nice not having to do something all the time.

But there are downsides of course. I’m breaking my rules which is… bad and I don’t have that productivity boost I always get when under a deadline so now I’m pretty far behind.

But the screenshot looks promising doesn’t it?


Posted in: 7days.

December Theme: New World Order

December 4, 2009

The The Experimental Gameplay Project drives on with the Art Game theme which will last the rest of this year but that’s something we can’t accept! I’ve done my game and I didn’t force myself out from the Haskell world just to do nuthin so here’s a new little theme for me :)

What does the U.S one dollar bill, the French Revolution and Zion have in common? It’s the conspiracy New World Order of course!

The paranoid can find it anything so this shouldn’t be a problem?
Right?!


Posted in: Themes, 7days.

Postmortem: Jonas IceCream Stand

December 1, 2009

Ah my latest game Jonas IceCream Stand is finished and up and running and I’m really proud of it! And thanks for the feedback guys, it’s always welcome.

I spent almost exactly fifty hours on this game and that’s by far the most I’ve spent on a 7day project. To be honest it’s probably more but I’m not really good at logging all the hours…

A Race

This game was a race against time from start to finish. I understood right from the beginning this wouldn’t be easy. Creating a whole GUI from scratch, composing animation and a focus on graphics(!). I’ve never done a GUI, it would be really easy with a decent framework for it… But I don’t have one for it so all the GUI code is really messy and hard to maintain.

I guess I’m learning the coding lessons the hard way. Keeping it structured and maintainable even, no, especially under pressure is extremely important. It’s a good thing I have a fast iteration cycle repeating itself for every new game I’m making.


Heh

Art

I keep saying it again and again but I’m not a graphics designer but I should stop saying that! Although not wonderful I think my games are looking good and this game is no exception. It’s certainly the most complex graphical wise.

The fading effect on the sky was pretty cool, but it’s kinda crude and it doesn’t fit the overall theme very well. The theme has a few distinct colors with a little “childish” feel to them. I feel the fading adds a bit too many colors to it. But I do think the end points (in the middle of the night with all the stars and when it’s as light as possible) looks pretty good. And I’m not sure it was a very good idea to include a MenuCity silhouette in the background.


A beautiful night sky.

Gameplay

Sadly I don’t think the gameplay was one of my best. Sure the first five maybe ten minutes are a blast, they almost awoke my slumbering tycoon feelings. But the game is so badly balanced, it’s far too easy when you’ve passed a point in the game. The problem is that I balanced the game the last handful of hours on the very last day and that doesn’t work, not at all. A great gameplay needs to evolve, it can’t be created just there on the stop. Well that’s my experience at least.

Conclusion

I think the game is really great. Sadly it gets boring far too fast but it does have great potential. It’s almost worth given a remake as a “real” game.


Posted in: Postmortems, 7days.

Jonas IceCream Stand

November 25, 2009

Ahoy there! This time I’ll take you along for a ride with an arty Tycoon game.

Download
Windows

Jonas IceCream Stand

Get wild and become a Crazy Dealer of IceCream!

Instructions
It should be pretty self-explanatory, it’s a very simply tycoon game.

Credits
Music:
All Around Us - Eric Maskol
I Will Always Look up to You - Steve Chatterton

Sound effects:
Random from freesound

Rest:
Me


Posted in: Games, 7days.

An invisible Remake

November 2, 2009

What does a guy like me do when not working on a new game? Except living my life, being a coach for my little brother’s hockey team and eating strawberries? The last week or so I’ve been working hard with my webpage, yes this page. If you’ve visited my site before today you’ll know what I’m talking about.

NOT

There’s practically zero visible difference. You might notice the ‘Quick n Dirty File Download’ or the little line of text towards the bottom of the page, or even the ability for multiple tags! That’s kinda freaky stuff eh? And only +1 week to do that! :D

The big thing was actually a complete rewrite of the whole site. From really bad and random spaghetti code I managed to produce some half-nice code. I wrote the site with Kohana which was a blast to use! If you’re making a page of some sort I can heartily recommend to give it a try.

Soon it’s time for some game making again, I just need a good idea… hm.


Posted in: Webpage.

November Theme: Art Game

November 1, 2009

Back over at The Experimental Gameplay Project a new theme has come up. My last three themes haven’t been “my” themes: I’ve been following their lead and their themes and this month is no exception. This months’ apparently a big theme - Art. It’s even a collaboration with a big art museum…

The idea that games are art is an old one and there are a few games considered art - but it’s really hard to make an actual art game. But I’ll try :)


Posted in: Themes, 7days.

Postmortem: MenuCity

October 19, 2009

Good times, good times. MenuCity has been out a while and thanks for all the positive and constructive feedback guys, it’s like my food doing this (programming is my air and the fun is the water… err). Anyway here’s the postmortem of my latest, and greatest, game.

Let’s start with a hideous graph: God it’s ugly, but it works I guess. I spent about 32 hours on this game which is the most I’ve spent on an experimental game so far. The bulk of the game was actually done really, really quickly like the second day or so. All the gameplay was there and with pacemaker art too! The last 5 days of production was focused on polish, level design and art.

Art

I spent a lot of hours doing the arty business and I think the game looks really good. You’d think the art I have in the game would be doable in a lot fewer hours than I spent and you’re absolutely right. In the beginning I had a very different style in mind, it was supposed to be a dude trapped in a console (a beautiful one) with all the ground, the birds (yes birds!) and the blocks all comprised of numbers… But as I worked on it I switched more and more to the style I have now, albeit diverging from the theme but meh.

Production

These games I’m doing, they’re more about production than the games themselves I realize that now. Naturally I’m making the games how could they not be about games?

It’s just my impression but when I’m doing the games my focus is more on the process of making them, like planning on a free day which I can get zoned and only focus on the code, instead of playing around with “cool” stuff.

This is good I’d say! But meh - we all like cool stuff, I mean it’s cool! But making things happen, making things work on screen is way cooler than having them all set up in my head. And besides, my very best ideas (and games) have come when I focus on making them work instead of how cool they should be.

What is is always way cooler than what should be.

The Game itself

Ahh the game… This one is my very best; it looks as good as Bugger, it’s more addictive than Balls and it’s even criminal to compare the levels to those of Black and White! So what could be better? There are a few things: + Horrible tutorial. I tried to redeem myself here but still.

  • Be able to move the camera for an overview of terrain. This I had planned, but I had other more important things to do and then I sorta forgot about it…

  • Go back 5sec or a few moves. I mean how many times did you press the rest button? I know I did press it a dozen times too many.

  • Move up with the side keys instead of having to switch, and slowing down, between up and side. This was suggested later and I don’t know why I didn’t think of this from the beginning :S

  • Repetitive sound. Well honestly I.. uh… yeah. The song is wonderful but some variation would be nice. And for the next game you need to stop and change the music from a menu, instead of the obscure console options. (sound_enabled 0 in console f1 or set in settings.ini)

  • Disappointing ending. This one is so true.. I might spoil this for you but the last level isn’t as demanding as the ultra hard ninth level. And there wasn’t even any ending credits or anything like that, almost like cleaning my room real good without anyone acknowledging it =(

Conclusion

MenuCity gave me a great ride, both developing it and playing it. And all the positive feedback doesn’t hurt my ego either ^^. There are things I dislike and annoy me but the games are getting better, I’m learning loads and the most important thing of all: It’s fun :)

Yesterday I checked the date and there’s almost two weeks left until my next monthly experimental game! I might have to start another side project… hum hum…


Posted in: Postmortems, 7days.

MenuCity: Level 0 Walkthrough

October 16, 2009

It hasn’t even been a week since I released my latest game MenyCity and already so much positive feedback! I’m so thrilled :) However, all isn’t blue skies and nice sunshine. A lot of times the first question is: How do you play it? or How do you get past the first level? I admit yes, the tutorial is really bad…

So this is me trying to redeem myself! I can’t go back and change the game and make a better tutorial - that would violate my limit of 7 days for each game so here’s the next thing. A nice walkthrough with a lot of pictures explaining the basics and it’ll show you how to actually complete the tutorial! :p


This is you in the first level.


The big thing seems to be your ability to pick up stuff. Use the down key to pick up a block. The yellow stripey things are there to show you how many times you can pick up a block, so be careful.


You can climb one block up with the up key, naturally with or without a block on your head.


If you fall down you can’t get back up, here it’s okay - but don’t move too far to the left! Then you’ll get stuck and you can’t turn to drop the block.


Put down the block with the same key you picked it up - down. Notice that the block went all black and you can’t pick it up anymore. This will be the cause of some real frustration later on, trust me.


And here we go! All we have to do now is climb up that silly looking city silhouette and walk to the goal. And we’re done! =)

Hopefully you’ll find this helpful if you’re stuck and dunno wtf this game is all about. If you want a walkthrough on some later levels just let me know and I’ll see what I can do.


Posted in: Walkthrough.

MenuCity

October 13, 2009

This game is called MenuCity and it’s a numbers game. Well that’s the theme anyway. The game pretty much held to what I planned for - except that it deviated from the theme -again- a bit.

My game is very reminiscent of the old calculator classic Block Dude made by Brandon Sterner. If you like that game, or any puzzle game for that matter, you’re gonna love this one.

Download
Windows

MenuCity

Instructions
Left/Right arrows - Move
Up arrow - Climb
Down arrow - Pick up/Put down
f1 - Secret dev console

If you’re stuck this might help: Walkthrough Level 0

Credits
Music: The Year Before The War - Eric Maskol
Sound effects: Random from freesound
Rest: Me


Posted in: Games, 7days.

An intriguing new puzzle

October 13, 2009

Here’s another game made for the experimental gameplay project:

Slidoku which is a sort of mix between Rubik’s cube and sudoku. I enjoy puzzles like those and I really enjoyed this one too - it took me a while to beat it but I just love the feeling when you do. If you like puzzles take a look, it’ll be worth it!


Posted in: Gaming.

Why make games

September 28, 2009

Why did I start making games? Because I like to play them of course. Think of all the fantastic games; Super Mario, Lemmings, Tetris, GTA, The Sims, Counterstrike, Theme Hospital, SimCity and Rollercoaster Tycoon… Damn - when you count them like this you’ll see how many great games there are out there. And I can honestly say each and every one of them has inspired me and made me wanna create something similar. No - something even better!

I also like to program, that’s almost a must if you should make a working game from scratch, so I figured why not use it to make something productive and hopefully something fun?


Posted in: Game Making.

Postmortem: Bugger

September 24, 2009

It’s time for the follow up on my latest game Bugger.

Wow it seems like forever since I begun this monthly game business, but it’s only been two months since I first thought about this and here I am having finished my third game. I’ve really come a long way, in the beginning I though I’d only make state of the art crap games. Like I would struggle to even get a Tetris up and running. That’s partially why I decided to make Balls.

Anyway I started out with a small idea: speed-typing. It later turned out to be bugs you killed, but that’s of minor importance really. They were supposed to bind to the theme Failure by letting the average gamer feel how a programmer fight for his life against bugs. Bugs are for those who don’t know errors in your program - they can be as simple as a wrong letter in the wrong place causing havoc in the game or a bigger thing like a fundamental flaw in your game. Think about the balls who got stuck in mid-air in Balls. That’s a typical bug…

If I followed the theme good or bad you be the judge. Personally I don’t think it was as clear as I’d want it to do but meh.

The game itself took 25 hours to make - but more than 5 hours of them was me having a break…
Here’s a little jummy pie of what took time:

Compared to my two other games I spent a bigger part on both graphics and level design - and that was sourly needed imho. The “embedding scripting” part is where I built in the ability to build levels from lua. I think the result was really good and it saved a lot of time just being able to edit a file without having to recompile every single little change.

You can make your own levels too, just open the “levels.lua” file in a text editor and make your changes. I won’t explain anymore since it’s really simple.

I’m also using about 1/5 of my working time to rest. Jikes! That’s almost too much. But I dunno, it really hurts staring at your computer screen hour after hour. My longest session - without a break, even a bathroom one - was almost five hours. I totaled more than 10 hours that day I think.. As always I do the bulk of the work when I’m out of time. The last two days were responsible for at least 90% of the work!

I guess you could say that’s a lesson: you’re most productive, and ambitious, when you’ve got a smoldering iron up your ass.


Posted in: Postmortems, 7days.

Bugger

September 20, 2009

Ahhh… Finally another game! Theme of this beauty is Failure and your mission here is to avoid the bugs. As a programmer the fight with those nasty bugs are a daily occurrence and now I’ve brought you a chance to kill those nasties too!

The gameplay wasn’t what I was planning on - yet again - but I’m actually quite content with the game. It’s able to grab your attention for at least a few minutes before loosing you and it’s absolutely the prettiest one I’ve ever made! Enjoy! ^^

Download
Windows

Bugger

Instructions
Type the text on the bugs to make them disappear, that’s all folks!

Credits
Music: Dare to Breathe - Tom Fahy
Sound effects: Random from freesound
Rest: Me


Posted in: Games, 7days.

Going into Being Busy mode

August 25, 2009

I’m in the civil service atm and, sadly, we’re going to be extremely busy the coming… two months or something? So I can’t promise a game the next two months. Kinda beats the point of this site doesn’t it? I’m really sorry and that’s all I can say really…

Hopefully I’ll get a week somewhere with enough spare time to create something. It’s a damn sure I’ll have to make a game about submarine warfare!!


Posted in: Life.

Postmortem: Black and White

August 21, 2009

All this time working on my latest game I thought it sucked and I was trying hard to make it to not suck. My spirit wasn’t high, just check this post and this but now when it’s done it’s like night and day, or like black and white! I’m damn happy I got it done!! Aah I’ll try to make this postmortem shorter than the last one… That was huge.

Lessons I’ve learned

  • Levels take time
    I know you’re all disappointed by a measly three levels in the game and for that I’m sorry. I hadn’t set aside time for making the levels in my mental plan so when I ran over the time limit of 7 days I had to cut down on some stuff - this time it was the levels.

  • A codebase rocks
    For my first game I had some basic code from older projects I used, like handling states, a small menu and a vector class among others and that saved me a whole lot of time. Now I had even more code so I got something on screen a lot faster and I could afford beginning with creating the dude and his animation (although I kinda overdid that) knowing I already had the basic foundation in place. Now I’m going to get my coding skillz up and the experience and this is another really big stone which will allow me to make bigger and more badass games later on.

  • It might not suck so hard after all…
    In the beginning I was pretty confident but I quickly lost that momentum and I thought a lot about how sucky this game is… It’s not polished, it’s not fun and the levels suck etc but it turned out to be okay! I have to stop being so damn negative! These are experimental games for crying out loud, they’re expected to fail once in a while and guess what? It doesn’t matter!


Posted in: Postmortems, 7days.

Black and White

August 20, 2009

Here it is at last! Boasting a unoriginal name, themed Bare Minimum. My thoughts where to create a game where graphics where included into the gameplay but sadly it didn’t come out nearly as good as I expected it too.

Yes I know there are a lot of things bad and wrong with this game, but this is a competition with myself to create a game in only seven days and you can’t always polish the games like your heart tells you to do.

Download
Windows

Black and White

Instructions
Move left and right with the arrows, jump with space and change the blocks with enter. Esc into the menu and there you can enter a highly advanced (not) level editor to change the levels however you want with left and right mouse.

Credits
Music: What we take to the grave - Tom Fahy
Sound effects: Random from freesound
Rest: Me


Posted in: Games, 7days.

Incomplete game coming up

August 19, 2009

Man I’m far too much of a perfectionist, with this mentality I’ll never get anything done - seriously. I spent far too many hours, even days, figuring out in my mind how the game should be and I started off going for nothing less than just that. But it turned out to be a lot harder and a lot bigger but still I couldn’t let it go and start over with something new, something fresh.

I wonder isn’t this something very common? Not just in game development but for everything in life; we always stick with our idea of perfection and stuff that we’re familiar with, trying hard not to do something different and unfamiliar. I can honestly say I’ve tried to make something fresh and different but maybe that’s my problem. I’m trying too hard and when it’s impossible I still won’t let it go… Just maybe it might work if I do it like this… maybe?!

No this month’s game is going to be crap, I can see it. Polish, which I believe is the single most important ingredient in a game, is non-existent. And worse yet, the gameplay is bad - in fact it’s even worse, it’s unplayable and boring! Never mind that I’ll give myself tomorrow to give the game a bit more love in the hope of making it just a tiny bit less sucky.

What do you think; should I release the game - no matter what - after one week and ignore my need for perfection or should I give the unfinished and “bad” game more love so it might be a little better and a bit more fun to play?


Posted in: Game Making.

Going down

August 16, 2009

Ah my first game was so painless so I thought I could do any game I could imagine! Shooters, and mario bros kinda stuff. Well now I’m not so upbeat anymore, I’ve worked on this game for 7 days now and it’s not playable at all. With seven days I don’t mean a week, I’ve had a big break in the middle with no reason at all!

Anyway I realize I can’t make the one week mark… which sucks… and the game isn’t looking or feeling the way I want it too but I will release it when I’ve made it slightly less sucky.


Posted in: Life.

Postmortem: Balls

August 4, 2009

So it’s been what? Two, three years since I discovered the art of programming and I haven’t made one single game?! Well now I’m not counting the visual basic nightmare mastermind I made a long time ago but a real game. Whatever that means. I’ve had these monster-projects;

  • Point and click monkey island style adventure game
    The beginning c++ adventure for me. Kinda harsh start up don’t you think? I thought so too - it never got anywhere near completion or playability.

  • Another heavy game
    Think fully destructible environment. Need I say more?… No.

  • The Game Engine
    The project everyone dreams of making games ends up doing and either discover it didn’t amount in anything playable, which I did, or you’ll end up thinking creating games is extremely hard and it’ll take years for just a small game.

  • The Dream project
    I’ve been thinking of making a few posts about the games in my dreams. Which I’ll most certainly complete! Sometime… Maybe…?!

Somewhere about now I got interested in Indie games. I think World of Goo was the first but I’m not really sure. Maybe armadillo run or bridge builder? Damn! I couldn’t even google the link to bridge builder aka pontifex 3 - all I found was a thousand torrent sites…

But what I did find was kloonigames, some guy who did the same thing I’m doing. Or I’m doing the same as him: following the footsteps of the Experimental Gameplay Project. Making a game in 7 days, something surely impossible, and I haven’t even made any game before! Oh crap! But as Petri (kloonigames dude) so elegantly put it:

My experiences told my that creating, even a small, game takes months, if not years. So to do it in 7 days seem frightening. And not only the code, but graphics, music, sound, levels and all things included. I shit my pants even thinking about it and almost gave up. Luckily I realized that the worst thing that could happen (beside shitting my pants) was wasting a week of my life. I could do that easily with a Buffy the Vampire Slayer marathon.

And here’s a summary of my first ever game Balls. It’s available here for download.

The Good

  • I got it done!
    It seemed impossible and it scared the hell out of me. But I made it!! Aaah… It feels so good right now. And the game is actually pretty fun! It doesn’t suck, it doesn’t crash (but it’s a bit buggy) and I can sort of say I managed to stick to my theme Addictive Gaming. Now with this over with I can focus on my next game. Not just now but in a while, now I’m confident to try new, bigger and hopefully better things and I know I can pull it off!

    I’m on top of the world! Nothing is impossible! Superman and Neo - you’re just sooo jealous right now.

  • It didn’t even take long…
    I end up using timelog from kloonigames to track my time. The game took 25,5 hours to make, but I spent 7,5 hours of that time on a break! Either reading manga, playing cs or just surfing around and chatting. This isn’t the time to nag about my lack of concentration and that I’m lazy, this is where I realize I didn’t even work myself to death making the game. I could afford a break here and there, and now when I think about it they were really necessary.

  • Pressure is good
    I did manage to implement some physics and collision detection, even though it’s really simple. This was a first for me and I did it under a tight schedule! A coincidence? I don’t think so, a small amount of pressure is really really good. It is during these times I’m most productive and I really do get things done if I have to.

The Bad

  • The motivation didn’t stick
    Although I made the game and it was pretty good I didn’t even remotely invest as much time in it as I could - and I don’t know why. I lost that super motivation pretty early in development and when I hit a bug or something that needed a lot of changing to implement I usually cut corners or just ran away screaming.

    Is this the every day life of a developer? If it’s this though to get motivated wonder how you can motivate yourself working on a shitty project?

The Ugly

  • The code
    Wow - I’m never showing the source of this to anyone! I tried doing the things which would make the game nearest completion, I did cut some corners but in the end the job is done. But it’s really ugly and before reusing the code I’ll need to clean it up a lot!

    What’s that smell…? It stinks of smelly code!


Posted in: Postmortems, 7days.

August theme: Bare Minimum

August 4, 2009

This time I’ll be following my inspiring site and declare Bare Minimum as the theme for my next game. This could really be anything, from graphics to user interaction… But I’ve got an idea. It’ll be a real challange for me to make but hopefully I’ll have a game in a few weeks time.


Posted in: Themes, 7days.

Balls

August 1, 2009

Here’s my first ever experimental game! The theme was Addictive Gaming. My first thought was oh god I’ll be making another tetris clone but the end result turned out a bit different. I’m not sure it’s very addictive but it’s actually okay! =D

Balls is a game about… balls. Well it’s all in 2D so maybe Circles would be a better description but I don’t think that captures the attention enough.

I didn’t think this was possible but here it is! My very first jewel =)

Download
Windows

Balls

Instructions
Well… There’s nothing to it really. Move the mouse over the balls to make them shrink, survive until the top is filled with balls.

Credits
Music: Markovich/A.M.P. - Twisted in flight
Sound effects: Random from freesound
Rest: Me


Posted in: Games, 7days.

The first (worst) post

July 21, 2009

Well, here it is: The opening post. What will come here? Here’s where I’ll outline what the blog will be about and maybe, if I’m dedicated, it won’t die before Christmas you think.

And sure, you’re right. I will run away to the corner in about two and a half months crying I never got the traffic I’m fantasizing about but I can try to summarize the site in one sentence: I’m going to make a themed game every month. There, I’ve said it. Tired and scared of wasting my time with a monster-project I’ve decided to use the experimental project model. Basically I’m going to make a game in 7 days, kinda like God made the world. And I’m alone making these games, all the gfx, the sound and the code.

If this got you interested check back regularly for some cool (I hope) games and read my posts.


Posted in: Webpage.