Magic

We never really stop and marvel at the fact that we carry magic in our pockets.

We have most of the world at our fingertips and we worry about the color of someone’s skin or who they love. Humans have crystallized magic and we worry about things more mundane. The depth and breadth of how we have expanded each person’s reach now touches the outer limits of the solar system.

How come I can communicate with another human half the world away at the speed of light, but people right next to me want for food and shelter? Why has our magic not solved these obvious problems that humans face? Why it is easier for my neighbor to order a car than to get a sandwich?

Customer Development and Parenthood

Kids fall down a lot; like all of the time. I don’t even think that I
possess the ability to count how many times my daughter falls every
day. At any given time, she is either actively falling, on the ground
still from the previous fall, or standing up from the previous fall.

Since she falls so much (she has only been walking for three months or
so), I am constantly moving things out of her way so that she doesn’t
trip, or moving things so that she doesn’t fall into them. I think
that every parent does this; Walking to the next room just behind the
baby and giving the room a quick once over to make sure that nothing
is within arms reach that she will find enticing; Jumping up to try in
vain to catch her as she stumbles over her own pacifier so she doesn’t
whang her head for the second time in as many hours; It just becomes a
habit to try and anticipate what is going to draw the baby’s attention
in an unwanted direction to the detriment of her stability.

While consoling my daughter the other night from another countless
wipe out, I realized that this is exactly what customer development is
all about – observing your like a hawk, looking critically at your
product, and removing the stuff that is going to distact and/or hamper
your user.

Redesigning UI’s to ones that don’t trip up the user is no different
than re-arranging your living room so that the hard armchair arms
aren’t right next to the walkway at infant head height. And just like
an infant will stumble over everything in their path – toys, pillows,
their own feet, the carpet pile – your users will stumble on every UI
element that they haven’t navigated a thousand times before. You want
an underbar that comes in from the right side of the screen? Good luck
with a user using that without stumbling. You want users to click on
the robot icon to do your app’s magic artificial intelligence thing?
Unless that robot icon is also your app’s logo, that cool little robot
is just some confusing button.

Parenting and customer development are the exact same process
(although I’ve only been a parent for just over a year, so maybe I am
way off base). The whole idea is to have an idea of where you want
your user/customer/child to end up, closely and critically observe
them, and build the tools to get them to realize your vision. I want
my daughter to experience the whole world and not get too banged up,
so I make sure that the sharp corners are at least somewhat padded,
and the stairs are blocked. I want my users to be able to scrape every
fraction of a penny of profit out of their food businesses, so at
Bareo [0] we strive to make sure that we are always guiding users to
more and more efficient ingredient sourcing and usage behaviors. This
means a constantly evolving UI, a constantly evolving analytics suite,
and lots and lots of observation and feedback. The process is the
same, and since practice makes perfect, I am hoping for perfect
outcomes to both my parenting and customer development.

Death of the Hacker

School killed Him. Work killed Him. I killed Him.

He realized, like all who are killed, too late of his impending
doom. His second to last thought was that maybe if He had realized
sooner that the things around Him were killing Him, He could have
prevented it. His last thought was that He had begun being killed on
his first day of school.

School – What a joke He thought. All of that time that He spent there,
and what did it get Him? A personal sense of worth on somebody else’s
scale. A thought process that began and ended with “what do others
need me to do?” The more He thought about school, the more He realized
that the first cut in his death by a thousand, was from school.
“The teachers only taught what us students needed to know for The
Test” He thought.
“What was on the test anyway? Basic reading comprehension and even
more basic mathematics? How depressing it would have been to be one of
the people that didn’t pass.”
A fateful smile crept appeared on Him as He put together a body and a
face for this dark shadow that had been about Him all through
school.
“They were celebrating the mediocre,” and a forlorn chuckle escaped
his lips.
“They only wanted people just good enough to not need assistance in
life, but not so good as to see through Their ruse.”
“Well I saw through the ruse, but only in my last minutes” and the
threadbare smile faded and the chuckle turned to silence.

He thought back to his “Critical Thinking” class that He was forced to
take – It isn’t really critical thinking if you have to agree with the
teacher in order to get credit.

He thought back to group projects – The other members of the group
were lazy slobs, and yet He received poor marks on the
project. “Surely the Real World is not like this” He remembers
thinking when seeing his marks.

Work – The Real World. “No,” He thought, “the Real World was just as
bleak as school had been.” He had had what others would call a decent
job. He had climbed all of the ladders, but no rung was what He was
looking for. Every new rung that He passed, the same old thought
occurred, “Someday I am going to leave this place and do My Own
Thing.” But there was always another rung, and always another reason
to wait to do His Own Thing. He was paid to solve problems for The
Company, but He could only give solutions that The Boss wanted to Hear
– He could never give the correct solution. He thought back to his
co-workers and thought that his lazy co-workers were the same people
from his school that had passed through without significance; They
were good enough at their jobs to not lose them, but not so good as to
turn The Company’s boat away from where it was always Heading.

Me – I bear the most guilt in his death. I led the lamb to the
slaughter. At first, I lead through innocence; At the end, I lead
through apathy. It was my job to keep Him alive, and for most of his
life, He only stayed alive through sheer dumb luck. That one saving
math teacher – that one fulfilling job – those are what kept Him
alive. I always knew deep down that one day He would become all of me
or none of me. He had always been a part of me; Telling me that
smart-ass remark to make, showing me that clever solution. I had just
thought that everybody had a companion like this, but no, I was of a
rare breed I guess. That part of me is gone now. Like any living
thing, eventually it will lose some battle and be lost forever. Now I
am just a drone to do what others tell me and not what I want. My Own
Thing is now Their Thing.

======================================================================
Afterward:

I wrote some time ago in an act of catharsis, and am just finally
getting around to publishing it. I hesitated to share it originally
for some now unknown reason – I share it now because it feels more
right to share it than to keep it only for myself to read.

Using Colemak on the FirefoxOS Flame

As I mentioned in my previous post, I have been using a FirefoxOSAs I mentioned in my previous post, I have been using a FirefoxOSFlame developer reference phone as my daily driver. It has nowbeen about two months, and I couldn’t be happier with the phone(you can read my initial review of the Flame here [0]    I use the Colemak layout for all of my keyboards, so I wasdisappointed when the FirefoxOS 2.2 builds had the Dvorak layoutbut not Colemak. As any good developer would do, I promptly clonedthe gaia repo[1]and got ready to muck around in the system’s keyboard app. Much tomy initial dismay of being able to contribute something sweet tothe community, I found that the Colemak layout was already there,it just wasn’t enabled in the default list of layouts tobuild. This means that instead of hacking together some JS, allthat is required to get the Colemak layout on your device isediting one line in a Makefile, building gaia, and flashing ontoyour device.
** You should backup your device before mucking around in gaia **
I am not going to write about hacking on Gaia itself, thatinformation can be readily had from Gaia’s MDN page[2].
Adding Colemak to the Keyboard LayoutsIn order to get the Colemak layout on your FirefoxOS device youmust first get the gaia source. It can be cloned from Github bydoing:
git clone https://github.com/mozilla-b2g/gaia     cd gaia        You can look in the /apps/keyboard directory to see the source ofthe system’s keyboard app, but we aren’t going to touch anythingin there. We are going to modify gaia’s toplevel Makefile.Open ‘Makefile’ in you editor of choice. Search for’GAIA_KEYBOARD_LAYOUTS’. In my gaia repo it in line 440. Thisenvironment variable is used to determine which keyboard layoutswill be built into the system’s keyboard app – exactly what wewant to modify.Feel free to modify this line as you see fit, but in order to getthe Colemak layout you must at least add ‘en-Colemak’ to the commaseparated list of layouts. Make sure to save the file after youedit it.
Now comes the slightly scary part, we are going to build a newversion of gaia and flash it onto our FirefoxOS device. Followingthese instructions[3] we can see what we need to do. On that page theis a note about only flashing a single app instead of all of thegaia apps; There is another MDN page[4] however that cautions thatusing the APP environment variable with ‘reset-gaia’ will put yourdevice in an unstable state (my experimentation also confirmsthis). So, we are going to have to build gaia in its entirety,which doesn’t take more that a few minutes.    First make sure that you have ADB installed on your machine. Thereare installation instructions on MDN[5], and that you have enabledUSB debugging on your device from within the Developer menu.    Next connect your device to your machine. If you are using a Flamedevice, you want to issue the following command:
make reset-gaia GAIA_DEV_PIXELS_PER_PX=1.5

The GAIA_DEV_PIXELS_PER_PX environment variable specifies that youwant to use higher resolution assets. This is mentioned in a notein MDN [6] but after the ‘make reset-gaia’ command so it is easy to miss itthe first time you build gaia.
Assuming there are no build failures, your device will reboot andafter you go through the initial setup screens, you will be ableenable the Colemak layout in the Keyboards Settingspanel.
[0] https://zachwick.com/posts/using_the_firefox_os_flame.txt[1] https://github.com/mozilla-b2g/gaia[2] https://developer.mozilla.org/en-US/Firefox_OS/Developing_Gaia[3] https://developer.mozilla.org/en-US/Firefox_OS/Developing_Gaia/Different_ways_to_run_Gaia[4] https://developer.mozilla.org/en-US/Firefox_OS/Developing_Gaia/Build_System_Primer[5] https://developer.mozilla.org/en-US/Firefox_OS/Debugging/Installing_ADB[6] https://developer.mozilla.org/en-US/Firefox_OS/Developing_Gaia/Different_ways_to_run_Gaia

Using the FirefoxOS Flame

I have been using a Firefox OS Flame developer reference phone as
my daily driver for a couple of weeks now. I thought that it would
be a good time to publish my thoughts on the hardware and
software, and also comment on my first few days of developing for
FirefoxOS.

I first started using Firefox OS way back when
the ZTE Open[0] became available in early 2013. I fell in love with
the idea of Firefox OS, most likely because it was so in step with my
“compute free or die” attitude (if you sidestep the issue of mobile
phones having proprietary media codecs and proprietary baseband
systems). Sadly, the ZTE-Open was only my daily driver phone for a
week or two because the hardware/software (Firefox OS v1.0) required
too much handholding for me at the time. I was missing important
calls/texts/emails due to software bugs and hard resets, and for quite
a while I had a notification that I could never clear and a
notification tray that I could not open. Because of that, the ZTE-Open
got regulated to a shelf in my shop where I would occasionally pull it
out and putter around developing for it, but it never made it back
into my pocket for longer than a week or so. I did talk to Bob Call[1]
who was also using a ZTE-Open, but he didn’t seem to have the same
issues that I was (probably because he is used to working on things
like the ZTE-Open)

I saw the announcement of the Flame developer reference phone, but
didn’t pre-order one because of my experience with the
ZTE-Open. It was only after I
heard Christian Heilmann[2] speak at IoTCon 2014 in Berlin, Germany (I
attended both of his talks) that I decided to get a Flame
phone. Christian’s first talk was about the “Mobile Web” and how it
can be a common platform across many devices. His second talk was
specifically about Firefox OS and its current state.

I was once again hooked.

I ordered a Flame phone the day that I got home, and have been
using and abusing it since it arrived a few days later.
My Flame came with Firefox OS v1.3 on it. The improvements over
v1.2 (which I was able to compile and flash onto the ZTE-Open
myself) were phenomenal. I wasn’t missing calls, texts, or emails
and with the exception of a PumpIO [7] client, there were apps for
everything that I wanted. The Flame replaced a Nexus 5 and met the
standard of reliablity that the Nexus had set. My wife started using
the Nexus 5, so now I had to be careful about hacking too deep on the
Flame because there was no going back.

The Software
————
I flashed the Firefox OS v2.0 base image later that
first week and was once again blown away by the software. In v2.0,
the homescreen scrolls vertically and scrolling horizontally
switches between open apps. Just as the change from iOS to Android
made me love the paradigm of the back button (I know, I used to be
an iOS guy), this switch to the crazy Firefox OS scrolling has me
convinced that it is a better user experience. The only part of
this new scrolling experience that still strikes me as weird is
that when browsing the internet, opening a link in a new tab both
creates the new tab as a new horizontal scrolling target and
pushes me to it. I don’t mind the new scrolling target, but I wish
that there was an option to not automatically navigate me to the
new tab (there may be, but I haven’t found it).

I then flashed a nightly build and set the phone to do OTA updates
from the nightly build tree. This was pretty scary for the first
few days since I had no other phone to fall back to (other than
the ZTE-Open of course) but now I sleep easy knowing that the
morning’s update will be just fine.

The only outstanding software issue that is really annoying is
that sometimes when I receive a call, when I answer the call the
vibration and ringing stop. But then as soon as I hang up (1 or 30
minutes later) the phone keeps vibrating as if I am receiving a
call. Everything else works just fine at these times – I can use
apps, send texts, whatever, but the phone is just constantly
vibrating. Putting the phone to sleep doesn’t stop the vibration,
but restarting it does. This doesn’t happen every call, maybe only
about one in seven, but it still pretty annoying.

The Hardware
————
The ZTE-Open hardware always felt cheat to me. The Flame is billed
as[3] “representative of the mid-tier phone hardware Mozilla and its
partners are targeting over the coming year”. I think that if the
Flame is “mid-tier” I think that if there is ever a “high-end” device,
it it going to blow the competition out of the water. The phone has
enough weight to it that it doesn’t feel cheap and skimpy. I have
never seen it get bogged down and sluggish and it has weathered many
tumbles off of my workbench without so much as a scratch.

The back of the case is a smooth rubber-ish/matte material that
seems to attract sawdust, pocket lint, and dust, but it may just
be that I am often covered in those things myself.
The screen is a 4.5in screen (FWVGA 854×480 pixels) and is quite
useable in direct sunlight. The screen also feels very responsive
to touch events with is a wonderful improvement over the ZTE-Open
where I often felt like I had to really press hard to get events
to register.

The Development Ecosystem
————————-
I haven’t made any Firefox OS apps that are more than a few steps
above trivial, but I really like the
ecosystem. The App Manager[4] is very impressive. It uses adb to
connect to the Flame and provides a nice place to modify the app’s
manifest, install the app on the phone, and debug the app on the
phone. The App Manager is being replaced with the WebIDE from Firefox
34 on, but as I only use GNU Icecat and Debian Iceweasel, I haven’t
tried it out yet.
Because Firefox OS apps are just HTML5 apps, developers are free
to use whatever tooling they so choose. And because apps are just
JS, CSS, and some HTML, any tool set is very easy to set
up. Personally I use Emacs + Grunt as my web development tool
set. Granted, I use Emacs + whatever as my tool set for any
development. Mozilla has a bunch of reference apps[5] where you can
see various techniques for using the web API present in Firefox OS,
and there is a decent tutorial[6] if reading code doesn’t do much for
you.

I have begun work on a non-trivial open web app that I intend on
running (and using) on my Flame phone – an HTML5 Emacs clone. So
far, it is going well and I will surely humblebrag/post about it
once it has a minimal feature set. I am sure that I will also have
a post specifically about developing for Firefox OS.

Final Thoughts
————–
Do I like the Flame? Yes
Knowing what I know now, would I get one again? Yes
Would I reccomend that others get one? Eh, maybe. If you aren’t
getting a Flame to hack on, then it would behoove you to look at
the Firefox Marketplace and see if there are apps there for
everything that you want.
I really like the Flame, and barring any catastrophes, I expect
that it will be my daily drive phone for a long long time.

[0]
https://developer.mozilla.org/en-US/Firefox_OS/Developer_phone_guide/ZTE_OPEN
[1] http://fossetcon.org/2014/speakers/robert-call
[2] http://christianheilmann.com/
[3] https://hacks.mozilla.org/2014/05/flame-firefox-os-developer-phone/
[4] https://developer.mozilla.org/en-US/Firefox_OS/Using_the_App_Manager
[5] https://developer.mozilla.org/en-US/Apps/Reference_apps
[6] https://developer.mozilla.org/en-US/Apps/Quickstart
[7] http://pump.io

HTML and EME

As much of the technical world is now aware, Mozilla has agreed to
put HTML5 EME support in Firefox [0] via implementing a DRM scheme. I
am like many other Free Software folks who are very upset by the
Mozilla Foundation acting in a way that I see as against their stated
goals. Bradley Kuhn has a great post [1] in which he argues that the
Mozilla Foundation (either by enabling the Mozilla Corporation, or by
its own volition) by creating and distributing DRM is acting against
its charitable purpose as posed to the IRS. After reading the
documents that bkuhn linked to [2] [3] the Mozilla Foundation’s stated
goals and their actions do appear to be directly opposed.

The two statements made by the Mozilla Foundation in their
IRS paperwork that I will draw on here are as follows:

From “Part II, Question 1: Part B. Background”
“Furthure, some Web pages can be viewed solely on a certain type of
computer or with a specific Web browsing software. The use of such
non-standard technologies, often promoted by commercial software
developers and vendors who are eager to maintain a competitive
advantage, reduces the Web’s universality and, consequently, limits
Internet access on those unable or unwilling to afford the commercial
technologies.”

From “Part II, Question 1: Part D. Key Activies”
“The Foundation plans to engage in the following key activities in
pursuance of its exempt purpose:”
“(1) Facilitate the development of a web browser, e-main software and
other Internet software that (a) are open source, (b) implement open
standards, (c) are available free of charge to all Internet users
around the world, regardless of the make or model of computers they
use, the language they speak, or disabilities they may have, (d) are
developed in an open process in which any interested party
(individuals, government agencies, nonprofit organizations,
corporations) can contribute, and (e) are powerful and easy to
use.”

“(5) Participate in Internet standards development efforts with the
focus of promoting standards that complement the Foundation’s exempt
purpose (i.e., the availability of software to the general public
free-of-charge, regardless of the make or model of computers that they
use, the language they speak, or disabilities they may
have).”

Based on the quote from “Part B” above, we can clearly tell that
the Mozilla Foundation as it was when these forms were filed, knew
that DRM was not something that would advance the free and open
web. The fact that an organization behind a for-profit company was
willing to publically say that is a very big deal.
In the second quoted section above, the notable part is “(5)”
wherein the Mozilla Foundation states that they will work
promoting standards that complement the Mozilla Foundation’s
stated goals. One of these goals is “the availability of software
to the general public free-of-charge, regardless of the make or
model of computers that use, the language they speak, or
disabilities they may have.”

Deconstructing that Goal
————————
That sentence reads funny to me. Is the goal to make software
available free-of-charge to users no matter what computers they
use, language the speak, or their disablities? Meaning, for users
of GNU/Linux, OS X, or Windows the cost is $0; For speakers of
English, German, Spanish, etc. the cost is $0; etc. Or is the goal
“to make software available” that has the following
characteristics:
-is free-of-charge
-will work regardless of computer specifics
-will work regardless of language
-will work regardless of a user’s disability

If the correctly stated goal is the former, then the Mozilla
Foundation has by enabling DRM in Firefox acted completly in
accordance with their stated goals. If however, the later
clarification is correct, then the Mozilla Foundation has misled
many people for a long time, and is no longer even trying to act
as it claimed it would.
I only use vanilla Firefox on my mobile phone, but now, I am
unsure if I even will continue doing that. On all of my other
machines, I use GNU IceCat and I would suggest that others do the
same.
I also suggest that others educate themselves on the HTML EME
fiasco, and on the Mozilla Foundation’s latest news before jumping
to rash decisons.

Further Reading:
—————-
https://u.fsf.org/xj

To Serve Users


https://www.eff.org/deeplinks/2013/03/defend-open-web-keep-drm-out-w3c-standards
http://manu.sporny.org/2013/drm-in-html5/

On Encrypted Video and the Open Web


http://www.defectivebydesign.org/

[0] https://blog.mozilla.org/blog/2014/05/14/drm-and-the-challenge-of-serving-users/
[1] http://ebb.org/bkuhn/blog/2014/05/14/to-serve-users.html
[2] http://www-archive.mozilla.org/foundation/documents/
[3] http://www-archive.mozilla.org/foundation/documents/mf-irs-501c3-application-attachment.pdf

LibrePlanet 2014

On the plane back from LibrePlanet 2014, I have tried to put
together a debrief, but as I am running on about three hours of
sleep, I am not sure how coherent these thoughts will end up
being.

I always leave LibrePlanet feeling very inspired and ready to go
forth and hack on even more. In retrospect, it is strange, and
kind of sad maybe, that what I do for a day job is not this
inspiring. I thoroughly enjoy what I do though, so maybe this
phenomenon occurs only because LibrePlanet is especially
inspiring.

Once again, LibrePlanet afforded me the opportunity to interact
with people in the flesh that I usually only interact with via
email or IRC.
And of course, I also met lots of new people who are working on
even cooler projects.

I am eagerly awaiting all of the talks having their recordings
posted so that I can watch all of the talks that I had to pass up
in order to attend other talks (or give my own.).

I am very grateful to the staff, volunteers, and attendees that
made LibrePlanet a success and am looking forward to next year.

My Newest Dev Setup

A few months before my switch to Colemak[0], I distro-hopped back to
Debian and switched my “daily driver” machine from a Lenovo ThinkPad
x230 to a Lenovo ThinkPad x60s. For those of you that are still
reading after that sentence, you are probably wondering why I went
from a very new machine to a machine that was released in 2006. I will
answer that question in a seemingly roundabout way, but I assure you
that it will be answered.

The ThinkPad x230
—————–
The ThinkPad x230 is a wonderful machine. It can run a 64bit OS
and supports a bunch of RAM – mine has 16GB in it. The screen is
fantastic (back lit too!) and the battery life is excellent. I
have two main issues with that machine though; First, I never used
a meaningful portion of its hardware capabilities, and second,
even using only free software from the kernel up, I was still
forced to use a proprietary and closed BIOS.

With regard to never fully utilizing the hardware of the x230, I
suppose that I could take out some of the RAM. There was more than
one time that I would forget that I had multiple VM’s running and
keep spinning up more. The x230 also has an Intel i5 which I
hardly ever made peg. There were, of course occasions that I
would be using 100% of the CPU, but in all cases, it was due to
some runaway program under development. Surely that machine is
overkill for working on code for embedded systems or the
occasional web API.

Enter the ThinkPad x60s
———————–
I first thought about getting an x60, x60s, or t60 after meeting
one of the Coreboot developers at LibrePlanet 2013. I however
didn’t take the plunge until July of this year. I picked up an
x60s on EBay for ~$165 if I remember correctly. The x60s has very
humble specs – An Intel Core Duo processor, support for up to 4GB
of RAM, and a non-back lit 1024×768 display in a 4:3 aspect
ratio. I have found though, that except for compiling a 32bit of
GNU Icecat, this little machine is more than enough for what I do
on a computer throughout the day. Presently, I am working on
automotive embedded systems so I do a lot of serial communication,
compiling C for micro-controllers and circuit design. While I am
working, I constantly listen to music (using Emacs as my media
player of course), and have a graphical web browser open. All the
while I have bunches of buffers open inside of Emacs and I have
yet to cause the x60s to bog down.
The x60s is supported by Coreboot, so from the BIOS up, I am only
using free software. While this may only be a moral/philosophical
point, it is a point that I am rather proud of.

Conclusion
———-
Using a seven year old laptop with rather meager specs compared to
contemporary laptops is obviously not for everybody. How many
people actually require the hardware that their computer has
though? The sorority sister playing with social media at the
coffee shop certainly doesn’t need an i7 CPU. The back-end web
developer doesn’t need a very recent processor – ssh is their
gateway to computing power. I am fairly certain that outside of
compiling code, I could probably do the entirety of my work on a
microprocessor based computer from the late 80’s. Maybe that
should be my next project; Getting one of my IBM PC’s or the Apple
][+ set up as my main machine.

[0] https://zachwick.com/posts/switched_to_colemak.txt

My .XXX TLD

Some time ago I
purchased zachwick.xxx[0] because I thought that it could be funny
someday. I get quite a bit of enjoyment from sending email replies
from that domain to spammy recruiter emails and from giving out that
same email in various professional settings. (See the end
of my “Python + FUSE” talk for a real life example)
Today I got the following email from the ICM Registry that made me
laugh given that I host my personal blog on a .XXX TLD:

——————————————————————————–
This email newsletter was sent to you in graphical HTML format.
If you’re seeing this version, your email program prefers plain text emails.
You can read the original version online:
http://ymlp269.net/zqKtHK
——————————————————————————–

 

Newsletter
CONTACT US ( http://www.icmregistry.com/contact )

TRAFFIC.

LIST YOUR SITE ON WWW.XXX.XXX.

Every webmaster wants more traffic, and we give you more by
listing your qualified sites on www.XXX.xxx

In the month of November, visitors to www.XXX.xxx generated five
million clicks to developed websites in the .XXX community at no
additional cost to our members.

Get Listed ( http://www.xxx.xxx )

POWER IT UP.

EARN MONEY AND BUILD VALUE ON YOUR .XXX DOMAINS.

If you are webmaster or own .XXX domain names that are being used as
parked pages or are not yet live, you are missing out on the
opportunity to earn extra money and build value for your domain
through traffic generation.

Visit our Recommended Programs (
http://www.icmregistry.com/programs/recommended ) to see how easy it
is to build a tube, cam, dating, or adult toy website. Over a thousand
.XXX websites are already earning extra money and building traffic
through the Recommended Programs (
http://www.icmregistry.com/programs/recommended ).

Learn More ( http://www.icmregistry.com/programs/recommended )

BUY A .XXX.

SECURE SOME OF THE MOST VALUABLE ADULT KEYWORD DOMAINS.

.XXX is growing in popularity with adult consumers and .XXX sites are
climbing the page ranks of the most popular search engines like
Google, Bing, and Yahoo.

Visit www.Buy.xxx to search for premium domains like Tube.xxx and
Cam.xxx or some great recently available domains!

Get Yours Now ( http://www.icmregistry.com/domains )

STAY TUNED.

THE NEW GTLD’S ARE COMING ONLINE.

Along with over a thousand new TLD’s, .PORN, .SEX, and .ADULT are
on the horizon. Register or renew your existing .XXX to ensure your
names are eligible to participate in ICM Registry’s unprecedented
“Domain Matching Program” (
http://www.icmregistry.com/about/policies/domain-matching-program ).

Learn More ( http://www.icmregistry.com/programs/gtlds )

For more information on .XXX domain names and other programs check out
our newly designed website.

www.icmregistry.com

 

The content of this email just makes me feel like my blog posts
should have adds for sex toys and such embedded within them.
The whole point of me buying a .XXX TLD was to get laughs out of
it, so mission accomplished I guess.

[0] http://zachwick.xxx
[1] https://www.youtube.com/watch?v=DpvdOuTzOU0

Switched to Colemak

As the title reads, I have switched to the Colemak keyboard layout
on all of my devices. I switched mainly due to wanting to help
alleviate some of the strain that I feel in my hands after a long
day coding. I chose Colemak over Dvorak mainly due the similarity
that Colemak and Qwerty have – I assumed that this would help the
transition go more smoothly.

Progress
——–
I decided to switch cold-turkey as I thought that doing a part
time switch would be less than ideal since I spend most of my day
in front of a computer. Today is day two and I can already see
improvment from yesterday. According to ‘gtypist’ my typing has
gone from 180 WPM with 98% accuracy using Qwerty to 25 WPM with
85% accuracy using Colemak. Clearly there is a ton of room for
improvement!!

Other Notes
———–
I have also noticed that due to my slowed speed, I am being much
more thoughtful of what I say. Maybe this trend of thinking before
speaking will remain once my speed gets back to a reasonable rate.