Nexus 4 digitizer

Just some knowledge I couldn’t google myself and want to store somewhere publicly accessible.

After I changed my nexus 4 digitizer and screen assembly, the digitizer worked perfectly when phone asked for encryption key and touch screen went unresponsive when phone finally booted. It appears encryption has something to do with it, factory reset and removing the encryption worked.

Posted in Uncategorized | Leave a comment

Amazon Glacier Uploader

Despite the fact that there are other clients, as pointed out in one of my previous posts, I was still a bit itchy to write my own one. After all WPF is a hardware rendered awesomeness. Even if it doesn’t run under linux, it is still awesome. And who needs UI for Linux anyway? Mac – meh…

Anyway today I’ve pushed first version of uploader that could actually do something. Although I won’t recommend using it, as it spawns one thread per upload and will effectively reduce your machine to a load test of Windows’ scheduler. Planning to make it workable may be tomorrow, or on Thanksgiving (thanks for holiday).

IceAge development branch on GitHub

IceAge is the name as you might have guessed. Some nice screenshots

If you happen to clone and build it you’ll be welcome with Options screen that needs to be set up
Iceage options

then AWS options. BTW validation in WPF is hillarious, I really liked binding the validator and automatic styles, type something in region!
AWS options

Click add and add some! Sync! (other doesn’t work sorry)
IceAge uploading

IceAge main

Notice “lightspeed” means “not uploaded, as it is already there perhaps”. Also estimations screen (although this is not really what Amazon will charge anyways, but will give you an idea)

About screen is not that interesting yet
IceAge about

P.S. If I get at least one comment on this I might get more incentives to do it faster 🙂

Be safe, drive safe, keep your stuff on more than one hard drive, keep your hard drives in different physical locations. Or just use Glacier. Bye!

Posted in Uncategorized | Leave a comment

In search of silver bullet

I feel a bit theoretical today.

Lets say you have a team of 5 people working on some big project. The project is usual 3-tier project, so there is a datastore and datastore layer needs to be written.

Now lets assume one guy designed the datastore and now writes ORM stuff he is pretty much done, but cannot check in until code reviews are done. Sometimes code reviews are fast, sometimes they are not. If they are not, you are now stuck, team cannot progress as a team because common dependency is not checked in, and everyone is dependent on it.

What can you do?

  1. Create a “dirty” branch everyone makes checkins to, so you have a non-reviewed prototype faster, everyone can grab latest changes and work on them.
  2. The idea kinda works at the early stage of development, but later it brings problems, now everyone shall check in to development, but as development is non-reviewed you cannot send a code review diff between it and your code. So you shall do a code review on diff between development and mainline and a significant part of code is not yours.

    The branch changes too fast, interfaces are flaky everyone merges very frequently with frequent conflicts.

    The development branch outlives its initial purpose at the moment of first code review that makes a baseline for everyone else. Longer you drag it, more problems you’ll have. Now what you do is actually stop have everything there code-reviewed and progress further in GitFlow style or whatever else you prefer.

  3. Pair programming
  4. Now lets grab one of code reviewers and do pair-programming with that guy. By the time of code review your reviewer agrees to code more or less. The problem with approach is it is not a peer review, it is a self review!

  5. Fix interfaces of datastore layer
  6. This is just a recursion, the interface itself shall be code reviewed! Moreover nor reviewers, nor the author sees reall application of that interface, and it can be based on incorrect assumptions, which will break whole team productivity.

A big story on productivity is also doing work while code is on review (being penalized with merges afterwards), this kinda can be done with first approach with for example git, when you merge your feature branch into mainline. However if you allow development to progress your merge will break it, which comes to “stop and have everything reviewied”…

I am walking in circles or what.

Posted in Uncategorized | Leave a comment

Amazon Glacier

I was trilled to see the price for it, as my media storage at home is susceptible to single zone catastrophic failure, thus said – house burns, or someone steals everything that looks electronic.

But wait. No opensource client for Amazon Glacier? WAT?

I have a new .NET project it seems.

Posted in Uncategorized | 4 Comments

Some updates

I’ve moved back to Comcast, as FIOS is not available in my new place. Comcast upload sucks, so downloads moving to where they should be I guess – gitHub!

Route53DDNS updater had a critical bug fixed, it would update first record it encountered with same IP (too quick-and-dirty migration from really basic functionality a while ago), so if you use it – beware it might be your apex. Fix is out.

Still enjoying Seattle sun!


Posted in Uncategorized | Leave a comment

Route53 dynamic dns updater service

After posting to AWS forum realised that the guy originally asking for windows application asked for more like a service. Voila! It is pretty easy with .NET. So now in addition to GUI in same package at GitHUB is bundled a service. With no installer though. A bit bloated with many megs for simple service, mostly log4net and AWS SDK. Might remove xmls, but can’t do much about huge monolith of AWS SDK except writing own lightweight REST client.

Anyway, if you don’t feel like you are in the mood of compiling anything with Visual Studio download the service and the GUI from Github downloads page here.

The AWS configuration file shall be created manually

	"hostedZoneId": "",

or you can pretty much use the one generated by GUI and copy it over service one. Don’t think like there is much need for random sleep at start, so removed in service by default.
The service shall be installed and run. By default it will install in automatic mode, so it will autostart with windows. To install it locate your .net framework 4 folder and find installutil.exe then run as administrator

c:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /LogToConsole=true Route53DDNSService.exe

to uninstall run

c:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u /LogToConsole=true Route53DDNSService.exe


Posted in Uncategorized | 44 Comments

Running your own wordpress site for 51 cents a month with AWS

Really 51 cents a month* (asterisk! asterisk!). Well, almost. How?

My recipe:

1. Make sure you are not running, or something similar. Won’t also work for anti-governmental newspapers, especially if they are in Chinese. If you are ok with your site being unavailable for hours. I mean really, who gives a @#$ if this page is down for a day? No one, even me. So why should I pay for hosting of this page more than I pay for Netflix (yep I did not drop the membership), more than I pay for Amazon Prime (two-day delivery, first dose for free)?

2. Get an old unused Atom netbook.
When I was looking through hosted solutions, cheapest solution were Intel Atom based server. And then I was like, hey I have one!
I’ve got EEE901, it is a 12Gig SSD (more like external cheapo flash actually) and Atom N270. But it consumes only like 20 watts per hour! So electricity will be couple of cents a day (they are not included in 51 cents above, so yes, I cheated a bit). But from the other side – I run the netbook 24/7 anyway, it is a DLNA server that streams russian cartoons to my Blue-Ray for my kid, so it is on anyway!

3. Get an internet provider. Your residential Comcast will do most probably, but business will do better, but it is not frugal. I’ve got FIOS 25/25 for around 45$ a month (with a hefty connection fee though, hate two year commitments after AT&T). Not included in price above, you do have an internet connection if you are reading this!

4. Register a domain name (can be free if you don’t really care about having third level).

5. Set it up, connect, install something. Do something. Connect your netbook to internet after all!

6. The most interesting part – register an AWS account. If you have an Amazon account, you have an AWS account as well. Just login with it and pretend you’ve read the terms and conditions. Subscribe to Route53, and register your hosted zone with Route53.

Route53 will charge you 50 cents a month for 1 hosted zone, then couple of cents per million queries. No idea how much, never got to million. So it will be 51 cents! Hurray!

Not so fast – if you live in Washington or any other state Amazon collects tax (or finally Amazon get pressed hard enough to collect tax everywhere) you’ll get sales tax added. So my bill is 56 cents a month.

7. Now you shall have realized that most probably your provider doesn’t give you static IP. So you need some dynamic dns app! Here your humble servant comes to play Linux version and Windows GUI version. Running these guys for once per 5 minutes shall be more than enough.

Enjoy your sub-one-dollar per month website!

P.S. Yes I do work for Amazon AWS, no this is not part of my job 🙂

Posted in aws, own stuff | Leave a comment

Route53 Dynamic DNS Windows GUI

When I wrote the Route53 dynamic dns script in ruby , it was pretty obvious I wasn’t the first and I wasn’t the last. So I thought what if I do something new and weird, like writing the same with GUI for Windows! So I started with remembering my experience 6 years ago when I was using .NET although not really with UI applications.

What is dynamic DNS? In short – you run something a website, a FTP server, webcam, a torrent application after all from your home machine and it is accessible from outside. You have a public “real” ip, but it is not “static”, e.g. it might change because of disconnect, or wrong phase of moon. So one day you go to work, want to check your downloads, your kitty and realise that no one answers at your IP – it has changed! So what you do is register domain name, and run an app that detects (or periodically polls) ip change and updates your preferred DNS service (Route53 in this example), so you are almost always accessible by your domain name. BTW this wordpress runs on top of same thing.

I was surprised how good .NET got (or I am already tainted by couple of years of Java development?).

Anyway here is my another pet that kept me entertained for some time. Route53 dynamic dns application for windows! Works under I guess Windows XP+, you’ll need .NET framework 4.0 for it to run. Don’t ask me who is going to use it. Someone may be, may be no one.

As usual code is on GitHub. Copy it, use it, rewrite it, fork it, print and burn it. Do whatever you want.

For impatient and folks who do not want to download and compile anything – already compiled version on my machine, nothing harmful to my best knowledge 🙂 Download right here. Unpack, run Route53DDNS.exe

Some pictures. Everyone likes pictures right?

First option tells app to use external IP “reflector” service to know your external ID. It comes with two default options and Latter is supposed to be better. If you need it for internal DNS purposes – uncheck it. It will take one of your network interfaces, I don’t really know which one, as I have only one NIC. Anyone wants to try?

Second option is for protection against spikes Colm has a great article on this. I do carry a pager sometimes, and I love it, really, especially when it goes off at 6 am on Sunday. Don’t make Amazon guys (including me) get paged for no reason.

Third option is autostart upon start of app. I love pager, but I hate applications that automatically start with my Windows. So no autorun on startup!

Last is amount of seconds to sleep between updates. Do not set it too small – DNS is heavily cached everywhere, so I limited it at 30 from below, no matter what is in config

Moar picz

Pretty simple – fill in your AWS keys and hosted zone id. Hosted zone shall contain only one A record!

Allows anyone who knows what regex is to define his/her own ip reflector sources.

Something like this

Next time you launch it will just quietly sit in taskbar and do its work. With a nice neat menu if you right-click on it.

Perhaps. I haven’t tested it that much, so submit bugs in github or here.

P.S. Anyone wants to contribute a nice icon?

P.P.S. it write logs, a good working log looks like this

03 May 2012 00:02:52,433 [INFO] Route53DDNS.MainForm: Application is starting up
03 May 2012 00:02:52,466 [INFO] Route53DDNS.type.GeneralOptions: Loading general options from config/config.json
03 May 2012 00:02:52,486 [INFO] Route53DDNS.type.GeneralOptions: Randomizing IP sources
03 May 2012 00:02:52,486 [INFO] Route53DDNS.type.AWSOptions: Loading AWS options from config/aws.json
03 May 2012 00:02:52,488 [INFO] Route53DDNS.type.Options: Loading configuration
03 May 2012 00:02:52,488 [INFO] Route53DDNS.type.GeneralOptions: Loading general options from config/config.json
03 May 2012 00:02:52,488 [INFO] Route53DDNS.type.GeneralOptions: Randomizing IP sources
03 May 2012 00:02:52,488 [INFO] Route53DDNS.type.AWSOptions: Loading AWS options from config/aws.json
03 May 2012 00:02:52,488 [INFO] Route53DDNS.Runner: Runner starting
03 May 2012 00:02:52,488 [INFO] Route53DDNS.type.Options: Loading configuration
03 May 2012 00:02:52,488 [INFO] Route53DDNS.type.GeneralOptions: Loading general options from config/config.json
03 May 2012 00:02:52,491 [INFO] Route53DDNS.type.GeneralOptions: Randomizing IP sources
03 May 2012 00:02:52,491 [INFO] Route53DDNS.type.AWSOptions: Loading AWS options from config/aws.json
03 May 2012 00:02:52,493 [INFO] Route53DDNS.Runner: Sleeping for initial delay of 73 seconds
03 May 2012 00:04:05,502 [INFO] Route53DDNS.Runner: Woke up!
03 May 2012 00:04:05,507 [INFO] Route53DDNS.accessor.IPAccessor: Retrieving IP
03 May 2012 00:04:05,507 [INFO] Route53DDNS.accessor.GetExternalIPAccessor: Requesting ip from
03 May 2012 00:04:05,720 [INFO] Route53DDNS.accessor.GetExternalIPAccessor: got result

03 May 2012 00:04:05,720 [INFO] Route53DDNS.accessor.GetExternalIPAccessor: Parsed regex
03 May 2012 00:04:05,720 [INFO] Route53DDNS.Runner: Got IP []
03 May 2012 00:04:05,720 [INFO] Route53DDNS.Runner: Retrieving IP from Route53
03 May 2012 00:04:05,725 [INFO] Route53DDNS.client.DefaultRoute53Client: Creating Route53 client
03 May 2012 00:04:05,732 [INFO] Route53DDNS.client.DefaultRoute53Client: Calling ListResourceRecordSets
03 May 2012 00:04:05,745 [DEBUG] Amazon.Runtime.AmazonWebServiceClient: Request body’s content size 0
03 May 2012 00:04:05,747 [DEBUG] Amazon.Runtime.AmazonWebServiceClient: Starting request ListResourceRecordSetsRequest at
03 May 2012 00:04:06,150 [INFO] Amazon.Runtime.AmazonWebServiceClient: Received response for ListResourceRecordSetsRequest with status code OK in 25200400.0061 ms.
03 May 2012 00:04:06,157 [INFO] Route53DDNS.Runner: Route53 is pointing to
03 May 2012 00:04:06,157 [INFO] Route53DDNS.Runner: Nothing changed. Bye monster.

Posted in aws, own stuff | 10 Comments

Multiple requests to DNS

If you have a website, that has not so many visitors, and suddenly got shocked with amount of DNS requests being done to your domain name (or may be even the bill, which is less probable though) and you are most probably using some CDN right?

CDNs do a lot of DNS requests, millions of them.

Posted in just because | Leave a comment


My stuff at gitHub –

Posted in aws, own stuff | Leave a comment