Categories
Creations

Tommix

This filk was made sometimes back in the late 1990s. I had time. I had zeal. Internet was young. I was a budding Linux crusader. I loved Linux, I liked other Unixes and Windows was just plain evil. Even OS/2 existed. So I sat down for a week and filked the whole Tommy, by The Who. You should be able to sing this to the music of the Tommy. I sometimes did. Lately I forgot about this, but I dug it out few weeks ago, and decided to put it on my blog. I always loved The Who, and I always loved The Tommy. So why not spend a week filking it. If you listen to the Tommy, and you’re a computer geek, this is for you! Here it goes….

It’s a fault

fork() returned and then core was dumped, his newborn child will never know him.
Believe him zombie with all his streams closed, don’t expect to run him again.
It’s a fault, Mr. Kernel, it’s a fault.
It’s a fault, Mr. Kernel, it’s a fault.
A fault, a fault, a fault…..

Signal 9

Got a feeling signal 9 is gonna be a good one.
Especially if handler traps it and halts forever.
So you think that sending KILL is gonna be a good one?
Could be you don’t know that KILL can’t be caught ever?

I had no reason to be over-optimistic,
But somehow when you code I can brave core dumping.

What about the KILL? What about the STOP?
What about the handler, he caught them all!

You didn’t trap it! You didn’t stat it! You won’t send nothing to no one
never in your life. You never dumped core. How absurd it all seems
Without any source.

You didn’t trap it! You didn’t stat it! You won’t send nothing to no one
not a singe bit! No one’s gonna know you caught the KILL.

Internet journey

Deaf, dumb and blind code, it’s in a quiet daemon land.
Strange as it seems, his exclusive streams ain’t quite so bad.

Sharing memory as bold as share can be.
Stating files and becoming wise through IPC.

Signals will surely take the life, some just can’t be caught,
Come on the Internet journey and learn all you should know.

Strange deamons resolving addresses for me,
All at once signals charging I see,
Some systems won’t take me, they’d rather go down,
But I’d caught ’em all ‘n’ new child I would spawn.

Nothing to send, nothing to swap, nothing to share.
Each new signal makes a byte in my memory.

His pipes are the pipes that transmit all they know
Shared memory filled with unthinkable flow
He is your deamon, he’s your guide,
On the Internet journey together you’ll ride.

Sparks

(instrumental)

ID for the blind

You talk about your server. I wish you could see mine.
Yeah, you talk about your server. I wish you could see mine.
Every time request’s resolved, she makes client’s handler blind.

You know she’s niced to -20, I can tell by the load she makes,
She’s niced to -20, I can tell by the load she makes.
Every time she spawns new child, the deamons all awake.

She’s got the power to debug you. Never fear.
Yeah she’s got the power to debug you. Never fear.
Just a signal from her code and the deaf begin to hear.

Event loop

Did you ever see event loops of the programs, they get so excited.
Waking up at system boot, instructions after CPU ignited.
They believe in pipes and all they mean, including IPC ferrocity.
Peeping at the queues to see what messages are for their curiosity.

And Tommix doesn’t know what time() it is.
He doesn’t know who Kernel is, or what SIGKILL does.
How can he be trapped, without kernel hack?

Surrounded by the deamons, he sits silently and unaware of everything.
Shifting bits and bytes, trapping signals, poking kernel segment memory.
I believe in IPC, but how can blind code without it be rightened?
Only if he’s hacked will his future nice level ever heighten.

And Tommix doesn’t know what time() it is.
He doesn’t know who Kernel is, or what SIGKILL does.
How can he be trapped, without kernel hack?

Tommix can you hear me? Tommix can you hear me? Tommix can you hear me?
Tommix can you hear me? Tommix can you hear me? Tommix can you hear me?
How can he be trapped?

Swap me. Trap me. Touch me. Hack me.
Swap me. Trap me. Touch me. Hack me.

Cousin Dirty Hack

We’re on our own cousin. All alone cousin.
Let’s think of a code to play, now the deamons have all gone away.
You’ll be of much help being blind deaf and dumb, you’ll help me crash kernel today. Do you know how to poke at his code? Together we’ll bring down this node.
But tied to address you won’t go anywhere. Now we will skyrocket the load.

How would you feel if I flushed all your queues,
disk-swapped your code, made you of no use.
What would you do if I moved all your files,
and wiped all your code and the source so you die?

I’m the system bully. The segment cheat.
The nastiest process you ever could meet.
I’ll poke in your bites, remove all your files.

Maybe a gigabyte into your pipes,
would cause your dump core and handle traps right.
Swap you around back and forth to a disk.
Or running your sick code using a RISC.

I’m the system bully. The segment cheat.
The nastiest process you ever could meet.
I’ll poke in your bites, remove all your files.

Debugger

If your code ain’t what it should be now, this hack can put it right.
I’ll show it what it could be now, just give me few more bytes.

I’m debugger, profiler, abort before we start.
I’m debugger, I’m guaranteed, to tear your code apart.

Give us access, close the pipes, leave us for awhile.
Your stack won’t overflow no more. You won’t swap to a file.

Gather your bits and hold your queues. Your code must learn to roam.
Just as debugger must do, you’re gonna leave your $HOME.

My hack is done. Now poke at him. He’s never caused more load.
His children spawn, he’s using cron, watch this roaming code.

I’m debugger, profiler, abort before we start.
I’m debugger, I’m guaranteed, to tear your code apart.

Underture

(instrumental)

Do You Think It’s Alright

Do you think it’s allright, to leave this code with super-server?
Do you think it’s allright? He transmited many megabytes tonight.
Yes I think it’s allright. Do you think it’s allright?
Yes I think it’s allright.

Fiddle About

I’m your wicked super-server, I’m glad if you connect my ports,
then I fiddle about, fiddle about, fiddle about.

Kernel left me here to mind you. Now I reach all ports I want to.
Fiddling about, fiddle about, fiddle about.

Down with the telnetd, up with the fingerd.
Fiddle about, fiddle about, fiddle about.

You won’t halt as I fiddle about.
Fiddle about, fiddle about, fiddle about.

Fiddle, fiddle, fiddle…..

Kernel Wizard

Ever since my process started,
I’ve monitored’em all,
from deamons to the kernel,
I must detect their fault.
But I ain’t seen nothing like him,
On systems large and small
That sneaky, swapping blind code,
sure makes a fatal call!

He’s swift like a kernel,
becomes part of the machine,
feeling all the deamons,
knows their hidden means,
forks by intuition,
makes devices dream,
That sneaky, swapping blind code,
sure makes a kernel scream!

He’s a kernel wizard,
I can’t get him right,
A kernel wizard,
I lose just every fight!

How do you think he does it? I don’t know!
What makes him so good?

Ain’t got no distractions
Don’t hear no beeps or bells
Don’t see no lights a flashin’
Ignores his sense of smell
Patches running kernels
Dumps no core at all,
That sneaky, swapping blind code,
sure makes a fatal call!

I thought I was the time-slice table king!
but I just handled my stream ids to him!

Even with my favourite deamon,
his hacks can beat my best.
He makes the sockets open
he just does the rest,
He’s got crazy socket handlers,
never closes streams,
That sneaky, swapping blind code,
sure makes a kernel scream!

There’s a Program I’ve Found

There’s a program I’ve found, could bring up this node.
there’s a program I’ve found could cure the code.

There’s a program I’ve found, could set things right.
He’s in public domain let’s find him tonight!

Go To The Server Boy

He seems to be completely unreceptive.
The patches don’t improve his code at all.
His streams react to bytes device detected.
He traps but can’t return from system call!

Swap me. Trap me. Touch me. Hack me.
Swap me. Trap me. Touch me. Hack me.

There is no chance for kernel alterations.
All hope is in his core and none in mine.
Imagine, though, the shock from isolation.
When sudenly each deamon wants his fine!

Swap me. Trap me. Touch me. Hack me.
Swap me. Trap me. Touch me. Hack me.

His code can’t see, his handlers dead, his core dumped.
All the time the kernel traps and halts.
No code is smart enough to patch all his event loops.
Nothing can be done to kill his code.

Go to the server boy.

Kernel often wonders how to trap him.
Has he ever handled his request.
Look at him at server wildly forking.
What is happening in his core.

What is happening in his core?
Ooh, I wish I knew. I wish I knew.

Tommix, Can You Hear Me

Tommix can you halt me?
Can you let me nice you?
Tommix can you fork me?
Can I help to wipe you?
Ooh, Tommix.

Shut the System

You don’t return from my call with even a log or an int, but you
make the load increasing.

You don’t handle my signals but you exercise streams,
how can the kernel affect you?

Can you debug me, now I realize,
That you swap me, see the CPU load…
rise, rise, rise, rise, rise, rise, rise, rise, rise, rise, rise, rise, rise.

Do you hear or fear, or do I shut the system?

Initialization

Your logfile grows as I approach you,
sockets stop transmitting bytes.
Traces stop, addresses for me,
Load increased when I’ve gone by.

You log me comming. Some disk vibration.
From afar you’ll seek me. Initialization. Initialization.

They worship me, and my processes.
Hazy eyed, they catch my system calls.
Fine devices shake their handlers,
let me through their firewalls.

You log me comming. Some disk vibration.
From afar you’ll seek me. Initialization. Initialization.

Soon you’ll run me. Can’t you ban be? I’m comming.
Send your programs dancing, I’ll do the branching. I’m comming.
I’m comming. Initialization.

I leave a trail of zombie kernels.
Opened socket at their foot.
The few I’ve patched have my internals.
We all are one. I am their root.

Miracle Cure

Hex dump, hex dump, open and read it!
Tommix code is available now.
Hex dump, hex dump, open and read it!
Hex dump!

Process child

Inside the function the proccess anounced, his child couldn’t go to the meeting.
He went on performing his matrix inversion,and the child opened /dev/sound for beeping.
He peeked at the bytes allocated for matrix, and filled them with random doubles.
Into endless loop his father went promptly, with child causing him all the troubles.

He knew from the start, deep in his flow chart, he and Tommix were nodes apart.
But the kernel said: “Never mind. Your code is to be in his process tree.”

The MOTD was “Run under me and code will find the way.”
So child decided to ingnore his dad and transfer his code anyway.
He spend all the afternoon uploading his sources, and decided he’d try to touch him.
Maybe he’d see his resources were free, and in next version he would add him.

He knew from the start, deep in his flow chart, he and Tommix were nodes apart.
But the kernel said: “Never mind. Your code is to be in his process tree.”

He compiled himself and was ready to run, as the load was still increasing.
Code after code compiled and installed, there was no header missing.
He was put on the DAT tape among other archives in the /dat filesystem.
Then a deamon transmitted some signals and logged: We’re ready now to run them.

The load went crazy as Tommix ran the code.
Little process got stopped as some deamons tried hastily to decrease the load.

Soon the system went more idle and Tommix ran some demos.
Child had to let him know he wants to peek him and tried to make his streams close.
He tried to write some data to NULL and right-shifted his proces table.
Tommix detected segment violation, and promptly the child was disabled.

He knew from the start, deep in his flow chart, he and Tommix were nodes apart.
But the kernel said: “Never mind. Your code is to be in his process tree.”

Core was dumped and all his files closed, his source was patched with some checkups.
Tommix continued to run other programs, just in case did some backups.
The child recompiled and tried it again but his UID won’t change.
His process was finished and the monitoring deamon send him out of range.

The load went crazy as Tommix ran the code.
Little process was lost for the price of his source and some coredumps on the node.

Sixten patches put him right and his dad said “Don’t say I didn’t warn you!”
Child went and ran on some network computer somewhere in California.
Tommix still has logs about the day the load went wild.
And little process sometimes still dumps core whenever he spawns new child.

I’m Free

I’m free. I’m free.
And network tastes of reality.
I’m free. I’m free.
I’m waiting for you, to transfer me.

If I told you what it takes to crack the toughest node,
You’d laugh and say: ‘No hack is that simple!’
But you’ve been told many times before, hackers always dumping core,
no one tried to follow their example.

I’m free. I’m free.
And network tastes of reality.

Welcome

Come to this node, be one of the comfortable programs.
Lovely bright node, we’re running all night never sleep()ing.
Emacs come in. And compiler.
Little old hack welcome. And you profiler.

Come to this node, be one of us.
Come into this node, be one of us.
You can help download some more in.
Young and old programs, let’s get them all in.
Come to this node, into this node.

Ask along that hack, who’s crashing in coredump.
Bring every single program who is using a longjump.
Find ftp server, bring utilities, demos.
Everyone go home, and fetch your old versions.

Come to this node, be one of the comfortable programs.
Lovely bright node, we’re running all night never sleep()ing.

Excuse me kernel, there’s more at the pipe,
there’s more at the pipe…
There’s more at the pine, there’s more!

We need more disk, mount an extension.
magnetic tape, CDs, spare no expense now.

Come to this node, be one of us.
Come to this node, be one of us.

Tommix Holiday Node

Good morning programs!

I’m your disk driver, and I welcome you to Tommix Holiday Node.
The node with the difference, never mind the passwords.
When you come to Tommix, the holiday’s forever!

We’re Not Gonna Take It

Welcome to the node, I guess you all know why you’re here.
My name is Tommix, and I’ve recompiled this year.
If you want to run me, you’ve got to use some hacks.
And use many deamons, ignore some of signals,
and use all the load you get.

Hey you, zero division, I’ve got you trapped.
Hey you, violating sengments, this is core dump.
Hey hung up accounting program, don’t try to use my load.
Cos you ain’t gonna use resources in any of those ways,
although you think you must.

We’re not gonna run it.
We’re not gonna run it. Never did and never will.
We’re not gonna run it, gonna STOP it, gonna wipe it,
let’s forget it better still.

Now you can’t read me, you’re streams are truly sealed.
You can’t write either, cause you’re pipes are filled.
You can’t swap nothing, you think this is a RISC.
Here comes disk driver to guide you to, your very own disk.

We’re not gonna run it. Never did and never will.
We’re not gonna run it. As far as we can tell.
We’re not gonna run it. Never did and never will.
We’re not gonna run it, gonna HALT it, gonna dump it,
let’s forget it better still.

We recheck you, gonna hack you,
let’s forget it better still.

Swap me. Trap me. Touch me. Hack me.
Swap me. Trap me. Touch me. Hack me.

Hacking your code, I get the signals.
Halting the node, I swap my heap.
Droping the load, I dump the deamons.
I get exitement while I sleep()!

Right behind you, I see the zombies.
On you, I see your childs.
From you, I get the forking.
From you, I loose my bytes.

 

Categories
Life

Parents divided cannot stand

I’ve witnessed a horrible thing today. No, it wasn’t zombies eating up a village of unsuspecting bystanders. It wasn’t even Trump nuking North Korea. Or the other way around.

It was much worse.

I’ve witnessed a hijacking of a vibrant, supportive, and active parent association, for a personal agenda of an egocentric person, who believes he is doing a “great job” while obviously dividing the community into two polarizing us-vs-them camps. So the parent association throws through the window all good thoughts of school and kids and the real reason why they exist, and start wasting their energy towards divisiveness, accusations and pointless bickering.

It is in order to also say first a big thank you to all the people who are willing to get involved into PA to a level that they do. I did not. Shame on me. Every person who is on board and participating deserves a thank you for it. I wish I did more, but I didn’t and that is my own fault. So there may be things I don’t know and things I don’t understand. I start simply from a point of an observer of human interactions. If I missed some point, please forgive me. I am in no means perfect or all knowing. I simply convey my thoughts and my feelings, however imperfect, selfish or occasionally patronizing they may sound. You’ve been warned. You can choose not to read this.

Step back….

I am not a political person. I don’t like Trump. But I don’t like much anyone in Washington either, since either side of the red-blue divide seems to serve too much of a self-centered agenda to do much good for the people. So as a non-political person, I tend to spend my time tinkering with computers and playing board games with the kids, rather than getting involved into local Parent Association at the Charter School where my kids are attending  first and third grade. Let the people who are good with other people run that, and I’ll just trust them, since most of parents I meet, tend to be good people, people I can respect, and I would happily trust them to run the Parent Association.

And then Tuesday afternoon happened. A deluge of text message and emails and cacophony of digital voices interrupted the slow drain of my cellphone battery, and the juice quickly started running out with megabytes of data flowing back and forth. It all centered around Scott, the supposedly much loved leader of the school Parent Association. I never heard of him before myself. What was it all about?

Well, the deluge of messages essentially told me the following…

  • Scott’s wife is a convicted level 1 sex offender. Apparently she had a 13 year old from school at her house for a period of two years with over 300 sexual encounters and so on and so on.
  • Scott was apparently less than forthcoming about this. He got himself elected to a position of PA board president, with people not knowing these details.

I quickly think it might be a scam, or someone tries to trick me, but a google search tells me that this is not something out of the blue, but seems to reflect reality enough for me to believe it.

My first gut instinct at this was very simple: why on earth would a person like this want to become a leader of a PA board? Why would he want to put anyone through a strong reaction I experienced myself? There is something selfish here, and I don’t like it!

I can rationally accept the fact that I don’t know the details of the case. I don’t know how much of amends are they trying to make. Are they a poor couple trapped in a bad consequence of one poor choice? Or are they active ongoing sex predators who got away lightly the first time around? I don’t know. Either is possible, so I had to accept I don’t know.

But one thing really really kept bothering me. And it was simple: Why would a person like that, who has to know that this will cause a strong emotional reaction in many people, want to put a community of parents through this? You can’t be so dumb, to think that this will not cause strong reaction and polarize the community in a bad way. It’s simply common sense that people react that way. So why would you go stick your nose out there into a nest of parents? How is this good for anyone?

So I did what I never did in my life before. I dragged myself to the PA meeting.

Fast forward, Wednesday afternoon. I sit in the meeting hall of the Charter School. One in a crowd of many. I know many faces. I like pretty much everyone I know. We hang at birthday parties together. Chatting about kids. Occasionally even sneaking in some more “serious” conversation about some Sci-Fi books we read recently. Holding on to a guilty beer bottle, all the while wondering if anyone will be judged for drinking a bottle of cold Sam Adams at a birthday party for 7-year olds.

So I sit among these people and start experiencing some kind of a Twilight Zone. The meeting drags on and on, because, of course, PA leadership is a very last item on the agenda. I had serious thought to stand up after 5 minutes and address the elephant in the room, but everyone seemed so adamant to follow the agenda, that I figured I might just go with this, and wondering what happens if we might simply run out of time, and end up not even addressing the elephant.

So we go on. Committee about this, and committee about that. I don’t really know who Scott is at the beginning. But after some 10 minutes, when someone addresses him by the name, I come to conclusion that he is indeed the guy sitting at the center of the big table up front. I had a glimmer of hope initially that he might have stepped down by now, simply because that would be a kind thing to do for everyone, to not have to go through upset and arguing and so on.

But no. He’s still there. Meeting drags on just south of forever, in the end finally the topic of PA leadership comes up. At that point everyone made sure there are no more students in the meeting. Thank you for that, everyone! Last thing we want our kids to know is: instead of working for you and spending time for your benefit, your parents have decided to waste time bickering back and forth about the leadership of the PA. That would really make our kids feel special, wouldn’t it?

Scott, to his benefit, clearly speaks out and says something like this:

  • his wife is a level 1 sex offender, wearing a GPS bracelet
  • she is not allowed around the kids, there are a lot of rules and he, Scott, is making very sure she is following the rules
  • he was very clear with the school leadership (principals and executive director) making them fully aware of the situation. However, executive director didn’t really confirm this later, but pretty much said, that she really fully learned about this only after he was elected. So someone somewhere is lying…

He also said something about recusing himself or not being in a meeting that discusses him, but he clearly stayed there, so I don’t know what that was all about.

Then someone (I think the person who started a petition to remove him?) stands up and starts reading a petition, which is basically centered around him getting elected to the position of PA leadership without being open about his situation, and that this is betrayal of trust, and that a motion should be put forward to call for a vote of confidence. So we get to vote, right?

At this point I’m already a bit annoyed, because I realize something: we, the group of 100 or so parents, are not spending our energy on our kids and our school that we so love. We are instead focusing our energy and our thoughts on Scott. And that makes me angry. I don’t necessarily care about Scott and his wife’s criminal past. That’s his business. But I do care about the school. And if I decide I want to do something for school, I want do to it for school. Not for Scott. I don’t want to make him the center of attention. I want school and kids to be the center of attention. This is a distraction. Unnecessary.

But back to the vote. We’ll get to vote! Yeah! We vote him off, move on and case closed. Elect someone else, focus on kids again.

Uh-oh… Not that easy! The board member who seemed to be responsible for rules and laws reminds everyone that we can not vote for his removal. We can only ask for a board itself to vote for his removal. The board, who was basically all along telling us what great job is he doing and that we need to look past his issues and simply accept the fact that he’s a great guy doing great things. Democracy in action, I guess? What matter is not the vote of majority, what matter is a vote of 3 people who supposedly represent us. Whatever. Fine. I will never understand democracy entirely, but if this is what it is, then I fully understand the guy who said: “Democracy is the worst form of government, except for all the others….”

So this goes on, and now is a discussion part of the vote. No vote yet, but a discussion around this.

One thing keeps nagging me. Scott is a leader of the PA. He says he’s doing a great job. But all I see around me is parents slowly and certainly grouping themselves into 2 camps. Camp for Scott. And camp against Scott. It’s all about Scott. Everyone at this point completely forgets why we’re here (kids? school? anyone?) and just goes on about Scott this, Scott that. Forgiveness. Consequences. Blah blah.

My mind wanders at this point…

What are the things I know? Scott is married to a sex offender who apparently had over 300 instances of statutory rape happen right in their house, as internet tells me. All the while Scott was living in the same house. Over the course of 2 years. How can that happen without him knowing? Could my spouse have an affair with a minor on my couch downstairs repeatedly, many times a week, over the course of 2 years, without me knowing anything? So what are we talking about here? Can I at this point even believe that Scott is not criminally complicit in the whole thing? He talked a lot about what his wife did, but he never said anything about his role.

Let’s stop my wondering mind. I don’t know the facts. But that’s what I was thinking about. Knowing all along that I don’t really know. The only reason why I’m thinking about this, is because everyone around me seems bickering back and forth about Scott, Scott, Scott, and I find it boring by now.

So I think about this: Wouldn’t he himself be better off just not being there? Wouldn’t it be better for him, as a feeling human being? Why is he actually putting himself through this? What can he possibly accomplish by having a full attention of 100 parents? Are they also thinking, like I was, about worst possible scenarios? Well… Maybe it’s not about accomplishing anything. Maybe it’s about attention itself! Some people simply love attention. Any attention is better than no attention. It’s all I can think of here… I can’t come up with anything else.

So I get pretty angry at giant waste of parental energy, and I raise my hand and ask Scott directly: “There are people clearly upset here! Their upset will not go away, since their upset comes from a very deep emotional place. So how can you think you will be able to accomplish anything as a leader if you have decent section of parent body with such deep feelings against you? This is how your past affects people, you can’t escape that. So how is this good for anyone? Without any judgement of your past, these are simply facts around us right here. This is the effect you have on people.”

Answer was basically a mumbling: “I think I will do a good job!”

Well, guess what, Scott: you are not doing a good job right now! In this very moment, your job of being a leader of parent community, has devolved into being a center of negative attention of a divided, angry group of parents. You have divided a community. You have turned it into two camps. Those for you. And those against you. Those are cold facts staring us in the face right now, and this is not what I call a good job. Not by a mile.

But, back to the meeting: There is a lot of talk about newspapers picking up this story and blemishing the name of the school. To which a counterargument is: but do we really want to teach our kids that image is all that matters?

At some point a parent I know well, raises an issue of news using this, and then I hear one of the board members yell back something like: “Yeah, because YOU told them, right!”

Hold on! Did I just hear a vicious sniping comment from pro-Scott group to against-Scott group? Geez! I’m glad that police officer is here! Is a police officer in every one of these meetings? Or is this an exception, because someone thought this might get contentious? I know school doesn’t really use metal detectors at the front gates… My survival instinct kicks in briefly, I look around me for concealed weapons, but then I realize I’m probably just getting a bit too paranoid. Sorry. Sometimes I get like that.

Fast forward to the final vote: at some point a discussion is stopped, and vote is put to the 3 people on board with Scott, who give him 3 votes of confidence against 0 votes of non-confidence, so, yay!, Scott stays. Because 3 people who had votes, were exactly the people he made sure like him, since nobody can deny him his likable demeanor and open personality.

At this point I pretty much give up. Which part of us can see beyond the distracting facts, and realize that togetherness of a community is more important than any single leader? A great leader would step down when seeing that he is simply sowing the seeds of divisiveness. But I guess great leaders are very rare. Leading through a divide’n’conquer is a standard practice of bad leadership, and it always leaves communities, countries or even continents in ruins and in bad need of healing.

Anyway. This charade stopped at some point, meeting adjourned. Off I go to a long drive back home. What did I learn?

First thing I learned, is that if you sit back and ignore the political process, then the political process will be hijacked by people you don’t want there. So you should be involved early and enough to at least try to prevent this. That’s on me. My fault. Sorry, community, for letting you down. Will I do better next time? I’d like to believe that.

Second thing I learned, is that once certain people loose sight of grand goal, it’s so easy to get lost in minor details. The board members clearly like Scott, and once they like him, they are no longer rational observers, but fully entrenched in us-vs-them thinking. And that is a hard thing to fix. I may be a bit of an expert on this, since the country I grew up in, went up in a puff of smoke during an episode of a little bit of overzealous us-vs-them thinking. It turned real people into real killers with real guns and real tanks, killing other real people that were sometimes innocent and other times not so much, but ended dead regardless. But that’s a sad story for another long post.

So I just urge everyone to pause and think a bit. This is not about sex predators. This is about whatever brings communities apart. You can take communities apart by arguing about what color of balloons you want at the neighborhood parties if you’re in a divisive state of mind!

And most of all, Scott, whatever your role, whatever your thinking, whatever your innocence or complicity, whatever you are doing, face the following fact: your achievement at this point is a divided community.

Please do something about it. You are in the center of it all, and you’re the person in a best position to start the healing. Own this. This divide would not happen if it wasn’t for you. So be a man, and own this rift. Put behind your past and your troubles from ten years ago, and simply take a look at your present failure. Show us that you can in fact be a leader. Stepping down? You probably should, but at this point, it might simply be seen as a victory of them against us or us against them or whatever. And a victory for one side does not bring communities back together. Communities come together through honesty, humbleness and understanding. And the honesty, humbleness and understanding has to start with you. So I dare you: fix it! Apologize for bringing along this rift with your selfish decision to inject yourself into a position where it was pretty obvious that it will cause an upset, and then work towards bringing everyone back together if you can. And if you can’t, find someone who can, and move to a role where you are not dividing people further.

Meanwhile, I’ll continue playing board games with my kids, and tinkering with computers.

Will I make a point to drag myself to more PA meetings? Maybe, but probably not. If I will have to sit through another episode of someone reiterating bylaws, flylaws, crylaws or any other darn PA laws, while completely missing the point that the community around the room is deteriorating and falling apart, it would probably depress me to a point of simply giving up on humanity, building a wall around my property and homeschooling my kids.

Categories
Coding

Best practices for git submodules

Git submodules seem to be a contentious topic among expert git users, while beginner git users either desperately cope with them or are typically glad that they can avoid them.

I’ve been using git submodules for many years in a large software development environment that contained embedded C code, java-based desktop tools, python code, various scripts and similar, all of them with intricate dependencies between them. I’m firmly convinced that submodules are a great tool and when used correctly, they can contribute greatly to the dependency management of your software project.

However, they don’t come without hiccups. The interface to git submodules is a bit quirky. They often end up in “dirty” state from the super-module view for seemingly unknown reasons. Merging branches with different submodule pointers can possibly turn into a mess and merging branches which have different submodules all together will definitely turn into a mess. Junior developers will inevitably start running around with their HEADs detached.

So basically: with great power, comes great responsibility.

This post assumes that you are very familiar with submodules. It’s not intended as any kind of tutorial, it merely debates best practices as I’ve adopted them.

I try to follow very strict rules when it comes to use of submodules:

  1. When a repo A is declared a submodule of super-repo B, that should mean ONE and ONLY ONE thing: B depends on A.
    There should be no use of submodules for purpose of breaking up repos on account of them being too large. There should be no submodules for creating good directory taxonomies or similar reasons. The submodule relationship has a very strict meaning of dependency, and nothing else.
    Therefore, whenever a developer updates any submodule pointer at any level, this action has a well defined meaning: “I, the committer, have tested that stated version of submodule works with current version of containing module.”
    There is no applied meaning to levels further up, since that is out of scope and out of control at the layer of this statement.
  2. When super-repo appS contains submodules modA and modB, and both modA and modB contains a submodule libX, super-repo appS will contain 2 copies of submodule libX, two levels down. That is not a problem, that is simply a fact, and an opportunity to do some sanity checks!
    At the level of appS, you typically need a single version of libX. Therefore you should submodule libX to appS as well. This one version, should be used to build both modA and modB, and the libX submodule under modA and modB should be ignored. In case of version missmatch, you can detect that early in your continuous integration build system, and simply stop the build with a clear error message that modA and modB require two different versions of libX. A developer should then look at this, and make sure that modA and modB on the branches that are being used together, both point to the same submodules.
    Note that this way, we have turned a possible problem with having multiple same submodules, into an opportunity to do some more sanity checks before the build!
    It allows a build to verify that modA developers AND modB developers are in fact using the same version of libX. If not, then it’s good to know early, rather than wait for build to explode later, or even worse, succeed in a subtly broken state.
  3. A consequence of 2: you shouldn’t use –recursive when dealing with submodules, unless you really know why are you doing this. In the above example, appS has everything it needs as direct submodules: modA, modB and libX. There is no need for recursive actions on submodules at that level. If you are independently working on modA, without any awareness of appS, then you may want to clone modA separately somewhere else anyway, since you’re operating within a different context. Or maybe in this case you do want to init the submodules of modA. They don’t hurt, it simply gives you an ability to operate on modA independently. You make it work on its own, then go back to appS and update the submodule for testing the integration.
  4. Build system should ALWAYS allow for a configurable locations where individual modules exist. In the above example, when you’re building modA independently, as a standalone repo, you have to specify the location of libX to wherever you mounted the submodule inside modA.
    However, when you’re building modA within a context of appS, the build system needs to use the version of libX as present directly under appS, ignoring the one that is mounted under modA. The one that is mounted under modA, might not even be initialized, if you have never done a recursive submodule init.
    So when you’re building Makefile or gradle file or ant file or whatever your build system is, for the modA, do NOT lock the system into libX being present at the location where its mounted as a submodule. You can use that as a default, but you have to be able to specify alternative location. Ideally your build system will follow a modern approach of using an artifact depot somewhere, and everything is built by taking dependencies from a depot, building a unit, and then publishing it back to the depot.

I believe that if you set out such best practices, the submodules can be used as great tool, and not as a nightmare that some projects turn them into.

Categories
Creations

Skipping Stones Game

When you find yourself with a friend on a beach, and lazying around turns to boredom, this game comes handy.

Game goes like this:

  1. Each player picks 5 stones for themselves and 5 stones for each other player. So if you have 2 players you pick 10 stones. Stones have to be small enough, to be covered by a palm of your hand, yet big enough to not be covered by your thumb.
  2. Each player keeps 5 stones (they probably want nice flat ones, that will skip well!) and gives 5 stones to each of the other players (you probably want to hand out “bad” stones that will not skip well).
  3. Players then take turn skipping stones, one at a time. Player gets 1 point for each “impact point” on the water surface. So if a stone simply hits the water and sinks, without skipping, that is one point. Single skip is 2 points as it makes 2 impact points. Maximum amount of points for a single throw is 5. A “slider”, when a stone planes over the water like a planing speedboat, also gives you 5 points. All players observe and should agree on the scoring. If players can’t agree and start fighting, entire game is forfeit and you are not allowed to play this game for at least one week. Also, grow up, and stop being so  damn competitive. It’s supposed to be fun!
  4. After all the stones are thrown, player with most points wins.
  5. Tie is broken by throwing one stone each, until one player gets more points for throw than the other one, in which case that player is a winner.
Categories
Coding

Rule of passing arguments

Rule is as follows:

If I need a sheep, I should be asking you only for a sheep.

I should not be asking you for an entire barn, and then waste time
searching through the barn to find that one sheep.

Even if I find a sheep, how do I know that that sheep is not sick,
and should not be eaten? And if I find 2 sheep, which one do I use?

So never declare requiring an object if you only need just one element inside that object. Just declare requiring that one element, and let the caller sort it out.

Following this rule does wonderful things for you, when you end up moving layers around, or refactoring things, of finding new ways to use certain module.

Categories
Life

Citizen coins

A society is full of people who care about the government. They vote, they get involved, they contact their senators and congressmen. Sometimes they propose laws for their towns and sometimes they start a website to support an issue. Hooray! Democracy at its best!

But then again, society is also full of people who don’t care! They don’t bother to vote, they don’t know the name of their senators and they couldn’t care less about whether the government is spending their money on helping the homeless, or on subsidizing big oil companies.

I propose that we create a system, where involvement in society and government is rewarded.

We would create a special currency called “citizen coins”. You can earn citizen coins in many ways:
– vote in elections, you get 10 coins
– attend town-hall meeting, you get 2 coins
– help at the local VFA, you get 5 coins
– volunteer for a government-sponsored activity, you get some coins relative to a level of your volunteering.

Each year, government sets up various ways to earn the coins.

You can then use the coins to get benefits from the government:
– you need an installment plan for tax payment: use 50 coins and you’re all set! (Instead of current law, where you can do that only once every 5 years or something like that)
– postpone a jury duty – 30 coins
– you’re in a jam and want to postpone tax payment for a month – 10 coins
– you need an express passport renewal – 5 coins
– you want a free ticket to Smithsonian? – 2 coins
– tour of the white house? – 2 coins

You get the point. Basically there would be a marketplace for the citizen coins, where you can earn them by helping government and spend them on services that government provides.

Coins are non-transferable and are tied to each individual citizen forever. They don’t expire either. They can’t be inherited. And they can’t either be purchased with money or sold for money.

I believe system like that would improve the one value in a society which would help our democracy best: citizen participation.

Categories
Life

Tax reform

If every time I heard someone say “You’re wasting MY tax money for THIS?”, I got a penny, I’d manage to pay my next year’s taxes with that pile of pennies! 🙁

All exaggerations aside, I think we need a tax reform!

And I’m not talking about whether we should pay less taxes or more taxes. I’m not talking about tax brackets or tax loopholes or tax-deferred money growth or any of that stuff!

I’m talking about solving the problem of people whining that someone is “wasting THEIR money on THAT?!?”.

So how do we do that? Well, we simply give people ability to block their money being used for what they don’t like!

Here’s the outline of how this would work:

Once a year, government does the budget. One of the outcomes is a document for general population, listing all the areas of spending. This should be readable at the high-level (just the big buckets, sort of what you get here) and down to smaller details for the people who care more. Each item will be clearly identified by some number.

When you submit your tax return, you can fill in a new form that will be introduced. This form will be the “Where is my money going!” form. All taxpayers will have the ability to select up to certain percentage of the total budged for which they DO NOT ALLOW their contribution to be used for. In essence, if you don’t believe in spending money for, say, military, then you simply specify that you don’t want your money to be used for that!
This form is optional.

If you don’t want to bother, and simply trust the government, then simply don’t file this form, and it will be assumed you don’t care and your money will be used however government sees it fit.

This way, if you are the guy who is complaining about his tax money used for something, then next time, simply fill out this form, and then you will be able to be certain that your money is NOT used for that.

Money tracking and computer systems at the IRS are more than capable of tracking this information. I even wonder, if this would on the average really change anything, since I suspect that the distribution of the money will ultimately stay the same. However, it does add additional check on the government. If there will be some initiative that will be really so hugely unpopular with the whole population, then what’s better way to stop that, than to dry up the funds for it?

Categories
Coding

Jigger on github

We have a repo on github now:

https://github.com/digitalgeyser/jigger

Categories
Coding

Jigger

I want to build a better build system. In my 30 years of software development, I’ve heard programmers repeatedly refer to their build system as “the evil you know” in various forms.

Be it ‘make’, ‘ant’, ‘jam’, eclipse PDE, whatever it is, it seems like that is to some degree a universal dislike towards these tools.

They serve an important purpose though! No big software project can go along for a long time without some forms of build scripts.

So I decided to build a new one, called ‘jigger’.

Some basic premisses:

  • at the root of the project, keep the ‘.jig’ directory, which contains all the data. (Sounds like .git? No kidding…)
  • all data is stored in text files.
  • you can edit the text files, but the preferred API to modifying build environment is via ‘jig’ command line utility, which basically modifies text files under ‘.jig’ directory.
  • support basic commands, such as ‘jig run’, ‘jig test’, ‘jig add ‘, etc.
  • put all build artifacts under .jig/build/. ‘jig clean’ simply deletes that
  • auto-detect standard source files.
  • support generation scripts which can be anything they want to be, but can be executed via ‘jig generate XXX’. So a uniform API to running generation scripts.
  • Have full visibility via ‘jig show’ command.
  • Support multiple target platforms, both PC and embedded.