nemorathwald: (Default)
Friday night, 8PM: FoolMoon, a parade of luminary sculptures on Washington Street at Main Street. It's a branch of FestiFools, an event two days later.

Saturday afternoon, noon to 5PM: Work on the TuxTrax site for Penguicon, at All Hands Active hackerspace, 525 E Liberty. Lunch is provided to developers.

Saturday evening, 6PM: Nerdsplosion, a concert of nerd music at Cavern Club on 1st Street at Washington, sponsored by Penguicon.

Sunday evening, 5PM: FestiFools, a glorious parade of giant puppets on Main Street. My past FestiFools reports:

My FestiFools 2011 report. (Schematics) (Video)
My FestiFools 2013 report.
nemorathwald: (thoughts)
I wanted to design a game about Open Source and proprietary software for a long time. It was always difficult to get the theme to fit visually with the equipment. I think I finally hit on the right way to do it.

There is a new subgenre of game, which I'm calling "non-collectible collectible card games" or NC3s. Everyone starts with the same rudimentary deck. The game consists of building your deck during the game, by using cards from your hand to add a new card from the supply to your deck. Unlike Collectable Card Games, there are no booster packs-- once you buy the box, you own every card, and you're done spending real-world money.

Here's the idea I had for an NC3 game. You have a screen behind which to play cards that are in your proprietary control, to be resolved when the screen is lifted. Also, there is a central place to play cards collaboratively, with tokens to indicate who contributed them, so they can get credit.

You build projects on the table as chains of face-up cards that accumulate work points, reputation points, and money points.

If there are enough work points in a project, it gets a new software card.

If there are enough reputation points in a project, it can recruit a developer or a user from a variety of characters: Entrepreneur, Propeller Beanie, Community Manager, Benevolent Dictator For Life, Aunt Tillie, Iconoclast, Curmudgeon, Bastard Operator From Hell, etc. They have personality incompatibilities.

With enough money points you are tempted to buy a layer of Middle Management, Script Kiddie, Market Droid, Lawyer, Judge, or Legislatosaurus in your proprietary area. Each has various anti-competitive powers that are useful for things other than quality software. But if you do too much of that, then all the other players would combine their efforts against you.

There are also Lawsuit cards and Flame cards which you receive as penalties or attacks. They waste space in your hand and your projects, and react badly with various Person cards. :)

The game is over when the Person card deck is empty. If the common area has more Person cards than anyone's proprietary area, the player who made the largest contributions to earn reputation points is the winner. However, if one player has more Person cards behind his screen than any other screen or in the common area, he wins the Evil Empire victory.

I got permission from Eric Raymond to name it Cathedral and Bazaar, after his paper "The Cathedral and the Bazaar".

I would like to open this process to collaborative development, but a game needs a single vision of what kind of experience the design is intended to achieve. It is notoriously difficult to balance the available strategic choices in games of this type, so it's already hard enough to make it fun without the added challenge of making it educational as well. It must be fun, through gameplay and humor. That may come at the expense of realism, but I'll do what I can. If anyone makes a suggestion, and it doesn't break the gameplay, and it's true enough to engender laughter, it will probably get in.
nemorathwald: (hacker)
A poster in Ops at U-Con advertised seeking geeks to be interviewed, for an honors thesis about geek culture. So I emailed Rachel Yung at and signed up. If you self-identify as a geek, Rachel wishes you to do likewise. Here is a transcript of the interview.
Read more... )
nemorathwald: (Default)
Forgetting frustrates me. I've forgotten more knowledge in my life than peasants in the Dark Ages ever learned. The point of taking a class is not about what I learn. It's about what I won't forget. Then I can move forward on programming projects with confidence that I don't have to waste a bunch of time catching up on what the keywords and punctuation mean. I refuse to cram for exams and just lose it all. I have to practice, practice, practice-- then I need to keep doing a regimen of projects to keep in the habit.

At an informational level, I've understood true-false logic, strings, variables, constants, conditionals, loops, iteration, and recursion for twenty years. But it was learning, not training. I can self-teach, but my life was too busy for self-training. There is a certain hump I must surmount.

I owe my desktop publishing proficiency to taking classes, with a set of practice exercises on deadlines. Now I can pick up a new program and not even think about it. I just get in the Zone. That is the hump I need to get over with programming, which is why I am taking a class.

[livejournal.com profile] blue_duck and [livejournal.com profile] ssanfratello will understand the concept of training, right down at the muscle memory level. It's not just what you learn about stances, balance, breathing, keeping your options open like water, when to commit to swinging the sword, and absorbing the universe juice. It's about what your body does from practice, just WHAM. If you have to stop and access the knowledge, you have been stabbed. With a sword.

That's what I'm interested in. When it comes to my daily Lojban regimen, it needs to be engraved in the brain at the level of instant linguistic connection between word and meaning. I know the vocabulary of Lojban, but most of it I still have to translate from English, which should not happen. Translation wastes valuable milliseconds, too long for comfortable speech. Fortunately I do not get hit with padded sticks when this happens.

When I program Karda, it will be for language training, not just language learning. Spaced repetition algorithms do training. I'm interested in software for self-training in various skills. As Napoleon Dynamite said, "You know, like nunchuku skills ... bow hunting skills ... computer hacking skills." The idea will be for the software to remind you to practice the skill again, get feedback on the result, and modify the interval for when it will remind you to do it again.
nemorathwald: (Default)
Any advice on a quick tool to preserve code formatting in a blog post?

The assignment. )

My solution. )
nemorathwald: (thoughts)
[livejournal.com profile] le_bebna_kamni knows Java really well, which has come in handy for tutoring, I can tell you.

However, she also has a copy of "Beginning Python From Novice To Professional" by Magnus Lie Hetland lying around. Since Python is the language I want to make actual real projects in, I was curious. So I decided to do my homework again, in Python. This time it was six lines long.

However, I decided to take it further. The new version properly uses singular and plural English. In other words, it will say "1 hour" instead of "1 hours."

My Python script. )
So while I was doing this, she also did the exercise in Python, except she didn't want to type the singlular/plural decision into her version three times like I did. She felt it was more elegant to make one set of pluralization instructions and have Python repeat it for hours, minutes, and seconds. She cursed at the computer for a half hour and came up with the version she will post in the comments.

I do not curse at the computer. I expect coding to be painful, and have been pleasantly surprised to be proven wrong.

pain = False

if not pain:
    gain = False
nemorathwald: (Default)
I've received some very good comments to my blog, concerning the style of my comments in source code. It's true that in professional projects, very obvious comments are counterproductive, especially when changes are made to the code they are explaining. However, for the time being, I'm trying to remember Java itself, not the decisions particular to a specific program. So I am temporarily commenting my learning exercises in such a way that a complete newcomer might be able to follow it.

I wish I had done that on Herdcat when Bruce and I wrote it in Python a year ago, because going back now, I don't understand the code or remember the keywords. Fortunately I still have my Quizlet list about Python keywords and punctuation set up, and that is giving me a refresher.

Here is part two of my first Java homework assignment. )

Here is my solution. )
nemorathwald: (Default)
I would like very much to know who responded anonymously to my post a year and a half ago about learning to program, with the advice I have copied below. Normally I ignore all anonymous posters, but this was a well-intentioned and unusually helpful comment, rather than a cowardly bad anonymous comment. Under the circumstances I would like to know who it is and follow up.

Flashcards aren't likely to help. Or rather, you'll make a little progress, but nowhere near as much as you would actually writing code.

It doesn't take long to get the syntax down when you are actually writing code. From the things you are saying, it sounds like you are just leaving it too long between sessions. Don't expect to go a couple of weeks and then pick it up again in five minutes. It can take time to get into the right frame of mind for coding, even for experienced developers, so don't give up just because it doesn't immediately come back to you.

Don't try to do too much too soon. The decision tree looks too complicated for a beginner. Write simple things, like asking for two numbers and adding them together, then counting the number of words in a text file, etc. Not only will you get to practice your syntax, but when you come back, you can look at the code you have already written to remind you of how things should look.

Once you've written a few little programs like this, you shouldn't really have any problem with syntax. Python syntax is quite regular. You'll still have to refer to the documentation all the time to check which modules/classes/functions to use, but that's no problem. You'll learn the ones that are most useful to you quickly and the rest you don't need to memorise anyway.

At this point, you're going to want to try to write your game again. It's still not time. What will happen is that you will make a little progress at a time, write a load of spaghetti code, and end up stuck, with a lot of confused code that you don't know how to untangle and no way of moving forward. You need to *grow into* writing larger programs.

Slowly expand your skillset, while writing slightly more complicated programs each time. Your skillset, like how to access databases, how to read and write files, how to talk over the network, etc, is like your vocabulary. It's comprised of knowledge of modules, and you don't usually have to learn new syntax or concepts to use them.

But architecture is a different matter. Learning how to write larger programs is something that you can't easily describe/teach/memorise, it's something you get with practice. As you get more experienced, you'll look back on your previous programs and realise that it's a confused mess that weaves all over the place, and now you can rewrite it to be smaller and much more organised.

Once you start figuring out architecture, you are more able to spot the warning signs that you are creating a mess, and look for a better approach. It's at this point that you are capable of writing a game and actually completing the project.

It sounds daunting, but it really isn't. It's a series of small steps, one after the other. Try to run too fast and you'll fall over, but take your time and be sure of your footing, and you'll go places.

Unlike eilrahc, I recommend Python over PHP. PHP isn't significantly easier, it's more complex and irregular in many ways, it gets you into bad habits, and it's a much worse language for complicated stuff. While Python is used by many professional programmers, it's also been taught to kids in educational settings.

And, for what it's worth, I've been a professional web developer for about nine years, wrote my first program almost twenty years ago, and have a lot of programming languages under my belt.

One last thing I forgot to mention: most people assume that computers are smarter than they actually are. You are likely to approach a large decision tree, get halfway down it and realise that there's no function you can call to make a decision because the computer is dumb and can't figure big stuff like that out. Go the other way. Write small bits that you know you can handle, and then join them up into a larger program that solves a bit more of the decision tree. This is "bottom up" programming. "Top down" programming has its advantages too, but programming beginners are much better off with bottom up.
nemorathwald: (Default)
Over the holidays I started reading the textbook and creating flashcards in Supermemo on my handheld. These are the ones that were discussed in the first class. Let me know if you know a better way to put the questions, assuming that's your kind of thing.

Read more... )
nemorathwald: (Default)
I walked into the first class of Intro To Java and it was totally quiet. I sat down and the guy behind me asked me, "Hey, why do people learn Java?"

"What do you mean?"

"Like, why are you taking it?"

"To learn programming. It was that or take C++. Then I'll teach myself Ruby and Python."

"So, like Javascript? Javascript is a subset of Java?"

"No, they really shouldn't have named them alike."

"But Javascript's embedded in all the browsers."

"Yeah, it's like a monopoly so we have to put up with it."

"But Java ... what do people choose Java for?"

"The answer to that depends on as opposed to what."

"Like, what is Java good for?"

"The corporate world developed it so they trust it. Also it runs on different hardware platforms."

Now it has gone back to complete silence. The teacher hasn't started, so I'm blogging.
nemorathwald: (sinfest devil clerk)
I'm dog-sitting my landlady's puppy, a half-spaniel/half-coton named Lola. Lola is so young she couldn't even walk a few days ago. In the Python programming language, the object "lola" is in the class Dog and has methods such as "lola.eat" and "lola.white". Bruce Webber explained this to me last night when we continued my instruction in Python. We completed all the steps I had planned out for what to do in my program Herdcat. Then he taught me the basics of Functions and Objects.

The current version of Herdcat source code. )

February 2026

S M T W T F S
123456 7
891011121314
15161718192021
22232425262728

Syndicate

RSS Atom

Most Popular Tags