In Loki We Trust The many projects of Lokkju, Inc


Primecoin Wallet and Xolominer pool miner for OSX via Homebrew

I've added homebrew recipes for both Primecoin (Primecoin-Qt and primecoind) and xolominer to my homebrew tap.

To compile on OSX, after installing homebrew, just do:

brew tap lokkju/formulae
brew install primecoin
brew install xolominer

Fair warning, both pull from my own primecoin/xolominer forks on github:

Filed under: Projects No Comments

ZPAQ homebrew formula added to my taps

ZPAQ is an intellectual property encumbrance free, faster, better archiver. While it's easily available for Windows and most flavors of linux, there is no package for OSX... so here's a simple homebrew formula.

to use this (and the other formulae in my Tap), just add it to your homebrew install:

brew tap lokkju/homebrew-formulae

Filed under: Uncategorized No Comments

AngelList Newest Startups dashboard

Put together a quick hack to display the newest (claimed) startups on AngelList using the angel list api - this lets you see the newest startups as they are created - which hopefully means you see the coolest things as they come into existence:

Filed under: Code 5 Comments

In Oregon, a blasting cap is a “bomb”

In a new appellate court ruling released last week, Oregon v. Johnson, a conviction for possession of a destructive device (ORS 166.382(1)(a)(A)) was affirmed.

The device in question wasn't anything you would normally think of as a bomb, and it's something you can buy quite easily... a simple blasting cap.

Now, what's interesting is that in the opinion, the court went ahead and defined "bomb", as it isn't defined by statute. Their definition?

the plain meaning of the term "bomb" is "a device carrying an explosive charge fused to detonate under certain conditions."

Problem is, that definition is so broad, that a car easily meets the requirement... as do many fireworks.

Filed under: Law & Ethics No Comments

Installing Adobe CS 5.5 on a HFSx (case sensitive) root volume

Adobe CS 5.5 (Photoshop, Fireworks, etc, etc) refuses to install on a system that has a case sensitive root filesystem. I've written a workaround/hack that allows it using a combination of a dylib and a case insensitive sparsebundle.

This solution has been tested on OS X Lion 10.7.2

Instructions and code at:

Also included is a demonstration of using DYLD_INSERT_LIBARIES without needing to define DYLD_FORCE_FLAT_NAMESPACE.

Filed under: Uncategorized 5 Comments

usbhid grabbing usb device before VMWare can

Found a small work-around to being able to restore the iPhone 4S firmware from iTuns in a virtual machine today.

In the past, people have been able to use the usbhid quirks mode flag to make it not grab the iPhone device before VMWare does, but for some reason, under Ubuntu 10.04, that was working.

Instead, you can unbind the device from usbhid using the syntax:

echo 2-5:2.2 > /sys/bus/usb/drivers/usbhid/unbind

You numbers will vary, but can be found in your dmesg.

h/t to

Filed under: Uncategorized No Comments

Legal: Did You Know? Your wages must be paid the day you quit!

While reading through Court of Appeals decisions today, I came across one that talked about an Oregon employment law I wasn't aware of (surprise, surprise, right?).

The case is KAY RUSSELL v. U. S. BANK NATIONAL ASSOCIATION, and the law in question is ORS 652.150.

The law essentially requires that all wages owed to the employee be paid the same day that an employee quits - and imposes penalties if this is not done. In most cases, the penalty is capped at 100% of the wages owed, but not always. The law is actually quite simple - the penalties are calculated as you working 8 hours per day, at your past wage, until the day you are paid. As a small additional note, " ... payment occurs on the date the employer delivers the payment to the employee or sends the payment by first class mail, express mail or courier service".

Now you know!

Filed under: Law & Ethics 1 Comment

Import all WordPress users into phpBB3

A task I had to pull off as part of some improvements I'm making for, we had to move all the existing WordPress users over to phpBB3, keeping the passwords and the like.

Luckily, this is made relatively easy, because they use the same hashing library, though different default hashes. The following script hasn't been extensively tested, but it worked for me. That said, I also had to bang this out in just a few minutes, and it requires both your WordPress and phpBB3 instances use the same database.


define('IN_PHPBB', true);
define('ROOT_PATH', "/path/to/forum");

$phpEx = substr(strrchr(__FILE__, '.'), 1);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : ROOT_PATH . '/';

include($phpbb_root_path . 'common.' . $phpEx);
require($phpbb_root_path ."includes/functions_user." . $phpEx);

function init() {
	global $db;
	global $user;
	global $auth;
	global $default_group_id;


	$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = 'REGISTERED' AND group_type = " . GROUP_SPECIAL;
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$default_group_id = $row['group_id'];

function walk_wp_users() {
	global $phpbb_root_path;
	global $phpEx;
	global $db;
	global $config;
	global $user;
	global $auth;
	global $cache;
	global $template;
	global $default_group_id;
	$sql = 'SELECT user_login,user_pass,user_email,user_registered,user_activation_key FROM wp_users';
	$result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($result))
		echo "processing '" . $row['user_login'] . "' ";
		$error = validate_username($row['user_login']);
		if ($error && $error == 'USERNAME_TAKEN') {
			echo "exists\n";
		} elseif ($error){
		} else {
			$user_row = array(
				'username'              => $row['user_login'],
				'user_password'         => $row['user_pass'],
				'user_email'            => $row['user_email'],
				'group_id'              => $default_group_id,
				'user_timezone'         => '-8',
				'user_dst'              => 0,
				'user_lang'             => 'en',
				'user_type'             => (($row['user_activation_key']) ? USER_INACTIVE : USER_NORMAL),
				'user_actkey'           => $row['user_activation_key'],
				'user_ip'               => '',
				'user_regdate'          => strtotime($row['user_registered']),
				'user_inactive_reason'  => (($row['user_activation_key']) ? INACTIVE_REGISTER : null),
				'user_inactive_time'    => time(),
			$user_id = user_add($user_row);
			echo "added as $user_id\n";



Filed under: Uncategorized 10 Comments

A View of the 2nd Occupy Portland GA Committee meeting.

I debated on posting this, but finally decided I should.

I attended the GA Committee Meeting on Monday night, from about 7:20pm till 9:30pm - and I was beyond disappointed at what I saw. I could write pages about this, but I will try to make a very short list:

1) Very few people had been in a consensus decision making process before, nor understood it.
My opinion is that people who are deciding on a solution to bring to the GA should have experience with it.

2) The people who had used consensus before we not listened to.
Myself and another gentleman repeatedly brought up our position that consensus in a large group was not workable, and that we should use modified consensus from the start. Though the rest of the group stated that they disagreed with us, their actions said otherwise, as they moved on over our objections. The "solution" was to use a 9/10ths model when something was "urgent" - and for those of you that don't immediately see the problem with that, here is a snippet of the paraphrased conversation:

Someone: "if it's urgent, we move to a 9/10ths model"
Me: "Who defines urgent?"
Someone: "It's obvious".
Me: "I don't think it is".
Someone: "well, if it deals with a safety or security issue"
Me: "Who defines if it is a safety or security issue?"
Someone: "it's obvious"
Me: "?!?!?"

At that point, I gave up - because my opinion had already been marginalized, and because it was self evident it wasn't obvious - or else we wouldn't have been discussing it.

3) Many people we unable to think critically about what they said
There seemed to be an ingrained marginalization of people's opinions - and the reasons for them. During a discussion of when it was ok to block proposals, it was stated multiple times that blocks shouldn't be allowed for "arbitrary" reasons. When I pointed out that what is arbitrary to me may be "life or death" to someone else (especially when we get into ethical considerations), that was modified to be "it must be something that addresses a real human need". While that phrasing sounds great, it, again, only changes what we have to define - not that we have to define something. There is no language value difference between "not arbitrary" and "real human need" - they both can mean completely different things to different people, and one person's "real human need" can easily be another person's "arbitrary". In combination with the conversation in (2), it seemed to me that there was willful blindness - and in my experience no amount of talking can overcome that.

As I said, I did end up having to leave early, as my son was getting fussy, so I don't know if things got better - you can all watch the recordings of it and form your own viewpoints.

While I would love to see things work out well at tonight's GA, my fear is many people will feel marginalized - and walk away because of it. If we want true consensus, then we must strive for that, and be aware of the blinders that people naturally wear - that *all* of us naturally wear.

Filed under: Uncategorized 2 Comments

Open Source Part of Speech Taggers

I'm on a new project at work, and it requires we tag parts of speech. To that end, I'll be evaluating some of the existing open source NLP/POS Taggers - I'll post results once I'm done, but for now here is a list of current open source POS Taggers.

I'll be concentrating on MorphAdorner and OpenNLP, as they seem to have the most favorable licensing and most activity.

Filed under: Code, Projects No Comments