. */ # Known/outstanding issues: # [COSMETIC] If the ping services list is empty, the log file will report "not pinging services - disabled by administrator" even if pinging is enabled. # adds an options page to the options menu function SUP_add_options_page() { if(function_exists("add_options_page")) add_options_page("UP Smart Update Pinger", "UP Smart Update Pinger", 5, basename(__FILE__), "SUP_show_options_page"); } # shows the options page function SUP_show_options_page() { global $logfile; $ping = get_option("SUP_ping"); $pinglog = get_option("SUP_pinglog"); $uris = get_option("ping_sites"); $forcedpings = false; $SUP_output_log=''; $pingservicesnow = "Ping Services Now!"; $deletelogfile = "Delete Log File"; if(isset($_POST["ping"]) && $_POST["ping"] == $pingservicesnow){ $forcedpings = true; SUP_log(SUP_ping_services($forcedpings).strftime("%D %T")."\tForced pinging services (Homepage)\n\t─────\n"); }elseif(isset($_POST["submit"])){ $uris = $_POST["uris"]; $ping = 0; if($_POST["ping"] == 1) $ping = 1; $pinglog = 0; if($_POST["pinglog"] == 1) $pinglog = 1; update_option("SUP_ping", $ping); update_option("SUP_pinglog", $pinglog); update_option("ping_sites", $uris); echo '

Options saved.

'; }elseif(isset($_POST["delete"]) && $_POST["delete"] == $deletelogfile){ $fh = @fopen($logfile, "w"); if(false === @fwrite($fh, strftime("%D %T")."\tLog file deleted\n\t─────\n")){ update_option("SUP_error", 1); }else{ update_option("SUP_error", 0); } @fclose($fh); } $checked1 = ''; if($ping == 1) $checked1 = 'checked="checked"'; $checked2 = ''; if($pinglog == 1) $checked2 = 'checked="checked"'; echo '

Ultimate Plugins Smart Update Pinger

Click here for installation instructions

Click here for usage instructions

Click here for updated versions

Click here for comments and suggestions

URIs to Ping

The following services will automatically be pinged/notified when you publish normal or future timestamped posts. Not when you edit previously published posts, as WordPress does by default.

This plugin also fixes an issue with the default extended ping programming in Wordpress and pre-2.1 versions of Smart Update Pinger (it now includes the url of the new post).

NB: this list is synchronized with the original update services list.

Separate multiple service URIs with line breaks:

Ping log

These are the last 100 actions performed by the plugin. In reverse chronological order for easier reading (latest ping first).

'; SUP_get_last_log_entries(500); echo '

'; } # telling WordPress to ping if the post is new, but not if it's just been edited function SUP_ping_if_new($id){ global $wpdb, $post_title; $SUP_output_log="\t─────\n"; $SUP_ping_result=''; $forcedpings = false; if(get_option('SUP_ping') == 1 and get_option('ping_sites') != ""){ # fetches data directly from database; the function "get_post" is cached, # and using it here will get the post as is was before the last save $row = mysql_fetch_array(mysql_query( "SELECT post_date,post_modified,post_title,guid FROM $wpdb->posts WHERE id=$id")); # if time when created equals time when modified it is a new post, # otherwise the author has edited/modified it if(!$row["post_title"]){ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (ERROR: YOU HAVE FORGOTTEN TO ENTER A POST TITLE) ...\n".$SUP_output_log; }else{ if($row["post_date"] == $row["post_modified"]){ $SUP_output_log=strftime("%D %T")."\tPinging services (New normal post: “".$row["post_title"]."”) ...\n".$SUP_output_log; $SUP_output_log=SUP_ping_services($forcedpings,$row["guid"]).$SUP_output_log; # Try commenting the line above, and uncommenting this line below if pinging seems to be out of order. Please notify the author if it helps! # generic_ping(); }else{ // Post has been edited or it's a future post // If we have a post title it means that we are in the normal WP loop and therefore it was an edit (not a future post) if($post_title){ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (Existing post was edited: “".$row["post_title"]."”) ...\n".$SUP_output_log; }else{ $SUP_output_log=strftime("%D %T")."\tPinging services (New timestamped post: “".$row["post_title"]."”) ...\n".$SUP_output_log; $SUP_output_log=SUP_ping_services($forcedpings,$row["guid"]).$SUP_output_log; # Try commenting the line above, and uncommenting this line below if pinging seems to be out of order. Please notify the author if it helps! # generic_ping(); } } } }else{ $SUP_output_log=strftime("%D %T")."\tNOT Pinging services (WARNING: DISABLED BY ADMINISTRATOR)\n".$SUP_output_log; } SUP_log($SUP_output_log); } # More or less a copy of WP's "generic_ping" from functions.php, # but uses another function to send the actual XML-RPC messages. function SUP_ping_services($forcedpings,$SUP_guid = '') { $SUP_output_log=''; #$services = get_settings('ping_sites'); #UP - 17.07.07 - get_option is newer/better then get_settings $services = get_option('ping_sites'); $services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines $services = trim($services); if ( '' != $services ) { $services = explode("\n", $services); foreach ($services as $service) $SUP_output_log=SUP_send_xmlrpc($forcedpings,$SUP_guid,$service).$SUP_output_log; } return $SUP_output_log; } # A slightly modified version of the WordPress built-in ping functionality ("weblog_ping" in functions.php). # Original version: #function weblog_ping($server = '', $path = '') { #global $wp_version; #include_once(ABSPATH . WPINC . '/class-IXR.php'); #// using a timeout of 3 seconds should be enough to cover slow servers #$client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); #$client->timeout = 3; #$client->useragent .= ' -- WordPress/'.$wp_version; #// when set to true, this outputs debug messages by itself #$client->debug = false; #$home = trailingslashit( get_option('home') ); #if ( !$client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping #$client->query('weblogUpdates.ping', get_option('blogname'), $home); #} # This one uses correct extendedPing format (WP does not), and logs response from service. function SUP_send_xmlrpc($forcedpings,$SUP_guid = '',$server = '', $path = '') { global $wp_version; $SUP_output_log=''; include_once (ABSPATH . WPINC . '/class-IXR.php'); // using a timeout of 5 seconds should be enough to cover slow servers (changed from 3 to 5) $client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); $client->timeout = 5; $client->useragent .= ' -- WordPress/'.$wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; $home = trailingslashit( get_option('home') ); # The extendedPing format should be "blog name", "blog url", "check url" (the new URL), and "feed url". # Related Website(s) # http://www.weblogs.com/api.html # An example: # Someblog - Title # http://spaces.msn.com/someblog - Home URL # http://spaces.msn.com/someblog/PersonalSpace.aspx?something - Check/New URL # http://spaces.msn.com/someblog/feed.rss - Feed # Changed the following line therefore: # if($client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url'), get_bloginfo('rss2_url'))) if ($forcedpings){ # If this is a forced ping it's better to use a regular ping for the homepage without an update URL (safer) if($client->query('weblogUpdates.ping', get_option('blogname'), $home)){ $SUP_output_log=strftime("%D %T")."\t► [Regular Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; } }else{ $SUP_output_log=strftime("%D %T")."\t► ".$server." could not be pinged. Error message: “".$client->error->message."”\n".$SUP_output_log; } }else{ if($client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, $SUP_guid, get_bloginfo('rss2_url'))){ $SUP_output_log=strftime("%D %T")."\t► [Extended Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Updated : '".$SUP_guid."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► RSS URL : '".get_bloginfo('rss2_url')."'\n".$SUP_output_log; } }else{ # pinging was unsuccessful, trying regular ping format if($client->query('weblogUpdates.ping', get_option('blogname'), $home)){ $SUP_output_log=strftime("%D %T")."\t► [Regular Ping] ".$server." was successfully pinged\n".$SUP_output_log; if (get_option('SUP_pinglog') == 1){ $SUP_output_log=strftime("%D %T")."\t►► Blogname: '".get_option('blogname')."'\n".$SUP_output_log; $SUP_output_log=strftime("%D %T")."\t►► Homepage: '".$home."'\n".$SUP_output_log; } }else{ $SUP_output_log=strftime("%D %T")."\t► ".$server." could not be pinged. Error message: “".$client->error->message."”\n".$SUP_output_log; } } } return $SUP_output_log; } $post_title = ""; # Receives the title of the post from a filter below function SUP_post_title($title){ global $post_title; $post_title = $title; return $title; } # Log $logfile = ABSPATH . 'wp-content/plugins/ultimate-plugins-smart-update-pinger/ultimate-plugins-smart-update-pinger.log'; function SUP_log($SUP_log_output) { global $logfile; $logerror = 0; $fh = @fopen($logfile, "a"); if(false === @fwrite($fh, $SUP_log_output)){ update_option("SUP_error", 1); }else{ update_option("SUP_error", 0); } @fclose($fh); } function SUP_get_last_log_entries($num) { global $logfile; $lines = @file($logfile); if(get_option("SUP_error") == 1){ $fh = @fopen($logfile, "a"); if(false === @fwrite($fh, "")){ echo "Error writing log file (".$logfile."). Most likely your logfile (".$logfile.") is write-protected and no log data can be saved (change the rights of this file to 777), or alternatively this could mean that you have manually removed the log file, or that you have changed the directory or file name of the plugin (they both should be 'ultimate-plugins-smart-update-pinger')"; }else{ // Original: $lines = array_slice($lines, count($lines) - $num); // Modified to show in reverse order (easier for reading) $lines = array_reverse(array_slice($lines, count($lines) - $num)); $msg = ""; foreach($lines as $line){ $msg.=trim($line)."
"; } echo $msg; } @fclose($fh); }else{ if($lines === false){ echo "Error reading log file (".$logfile."). Most likely you have manually removed the log file, or alternatively this could mean that the logfile (".$logfile.") is read-protected (change the rights of this file to 777), or that you have changed the directory or file name of the plugin (they both should be 'ultimate-plugins-smart-update-pinger')"; }else{ // Original: $lines = array_slice($lines, count($lines) - $num); // Modified to show in reverse order (easier for reading) $lines = array_reverse(array_slice($lines, count($lines) - $num)); $msg = ""; foreach($lines as $line){ $msg.=trim($line)."
"; } echo $msg; } } } # ----- # adds a filter to receive the title of the post before publishing add_filter("title_save_pre", "SUP_post_title"); # adds some hooks # shows the options in the administration panel add_action("admin_menu", "SUP_add_options_page"); # calls SUP_ping whenever a post is published add_action("publish_post", "SUP_ping_if_new"); # calls SUP_ping_draft when changing the status from private/draft to published # add_action("private_to_published', 'SUP_ping_draft'); # removes the "WordPress official" pinging hook remove_action("publish_post", "generic_ping"); # activates pinging if setting doesn't exist in database yet # (before the user has changed the settings the first time) if(get_option("SUP_ping") === false) { update_option("SUP_ping", 1); } if(get_option("SUP_pinglog") === false) { update_option("SUP_pinglog", 1); } if(get_option("SUP_error") === false) { update_option("SUP_error", 0); } ?> Tim's Weblog
28 Mar 2014, 11:20
Tags: , , , , ,
Comments Off

Job Opening: Debian Linux System Administrator at Kumina

Thank you for all the responses and the interest, we are currently evaluating the candidates and we’re hopeful to find our new coworker among them!

We’re growing and are looking for Debian Linux System Administors that would like to grow with us and provide sysadmin services to our customers.

TL;DR: (in random order) Debian Linux / Apache / PHP / MySQL / Python / Puppet / KVM / Qemu / PostgreSQL / Tomcat / GlassFish / Logstash / ElasticSearch / HAProxy / Graphite / Heartbeat / Pacemaker / Postfix / Icinga / NFS / DRBD / OCFS2 / Ext4 / Varnish / Unbound / POSIX File Permissions / Git / Kibana / Docker / Awesomeness

Who We Are

Kumina has been around since 2007, but we’re slow growers. Our ideal is to grow no larger than 10-12 people. Expansion should be done by automating the hell out of our work and making ourself obsolete so we can persue new knowledge and improve our own workflow. We stand behind the ideals of open source software and prefer working with packages from Debian. Our customers are very diverse, from large magazines to stockphoto sellers, from large multinational corporations that cater to telecom companies to a small foundation that helps people who kicked a bad habit back to work. The biggest common denominator between the customers are that they all run webapplications. We want to provide top quality services, whether it’s on our own VM platform, a customer’s own hardware or somewhere else entirely. We’re always innovating and trying to find new solutions to old problems. We take the time to implement proper solutions and tend to dislike workarounds for problems.

Your coworker’s Linux experience range from 15+ years to almost 2 years of experience, so there’s always something to learn or teach.

Who We Are Looking For

The most important quality we’re looking for is someone who fits into our team. We can be pretty chaotic, direct, obnoxious, distracted, distractive, busy and hyperactive, all at the same time, no kidding. You need to be able to work in this environment and although there are lots of moments in which everyone is focussed on their task, it can change in the blink of an eye.

We’re looking for someone with Linux/Unix experience, Debian Linux experience is preferred, but mostly because that’s what we use. If you’re a CentOS person and do not mind switching and learning about Debian, that’s fine too. The top of this post has a list of software we interact with on a regular basis, knowledge and experience with a few of them would be appreciated. We do not have actual LPI certifications (although we have some good books in our bookcase regarding LPI), but having knowledge equivalent to LPI level 2 is definitely preferred.

Currently, we do most of our configuration management via Puppet. But we’re planning massive changes in our workflow, so experience with other configuration systems is appreciated.

Willingness to learn and teach is another important quality we’re looking for. We try to have weekly presentations regarding technology, varying from an explanation about Apache MPMs to building Kibana dashboards. You’re expected to pass on knowledge to your coworkers and document much (and a bit more) as needed. We do consider most of our puppet code documentation as well (and have separate documentation for classes and defines, of course).

We’re not really interested in your formal education or math skill, we do want to see some of your work regarding scripting in Shell script or Python or Ruby. Being fluent in English is a must and speaking/writing excellent Dutch is definitely a pre.

The Job

Most of our time is spent on innovating our own business process and this is a continuous process, expect a lot of changes. We spent time on testing new technologies and integrating that into our processes.

That said, we always make time to help customers. Requests vary from adding serveraliases (which we should automate!) to setting up entire new environments for customers. We tend to work with customers, so expect a lot of communication, but we do prefer email and irc over other forms of contact.

Another part of our work is troubleshooting of problems. We have a 24×7 service for which we operate with rotating weekly shifts. Once you have enough experience with the way we work, you’ll be scheduled into those shifts as well (don’t expect too many calls outside of business hours, tough, one time during a single rotation is considered a lot). Once you’re part of the rotating shifts, you’ll get a phone from us as well.

We work from the office in Eindhoven 4 days a week, generally. Since we prefer traveling by public transit and none of us actually live near Eindhoven, we arrive at the office somewhere between 8:50 and 9:10. Although we try to be flexible in working hours, it’s important that we can depend on you being there at the times we’ve agreed upon!

Lunch is on Kumina when we’re working at the office (we’ve got a grocery store next door, where we simply get bread and cheese and fruits and the like) and we’ve got our own coffee machine which grinds beans and makes awesome coffee. Should problems or projects require us to stay in the office late, dinner is on Kumina as well (but the last time that happened is almost a year ago).

Everything we do is a team effort and we expect you to be a team player. We do not have room for isolated individuals, we need you to complement our team. We expect you to be pro-active and pick up requests and problems from customers when they arrive (or even before) without being told to.

The Location

Our office is situated in the centre of Eindhoven, next to the train station. We’re on the 12th floor of De Groene Toren (The Green Tower, a pretty well known sight in Eindhoven) and its an office space with a nice view.

We expect you to be able to work from our office several days a week so if you live in close proximity to Eindhoven, that’s convenient, but of course it’s up to you how far you’re willing to travel. Working from home is possible (requires an internet connection, which you need to get yourself and a computer, which we can supply) but is not mandatory.

What Do We Offer

We offer a slightly chaotic but very open environment in which your are encouraged to keep exploring new technologies and ideas. Contributing to the open source community is highly encouraged. We are proud of our work and the things we do and we encourage you to improve on our processes so you can be proud as well.

Based on your skills, we can offer you a salary between €35k and €45k, depending on the level of your skills. If you’re truly exceptional, we might be willing to pay you even more, but you’ll have to prove your exceptionality. Your income will grow with the company and pay raises can happen often, depending on our success. If the company is doing well financially, so will you. A 10% increase is not unheard of.

Based on a 40 hour work week, you’ll get 25 days of paid holiday. This excludes national holidays, so those are extra. If you prefer to work less, those 25 days are scaled to match.

Interested?

Let us know! Mail us at jobs@kumina.nl with some details about you. Links to online repository which contains your commits are appreciated, but we recognise that not all sysadmins are programmers. Tell us about you and why you’re interested in the job. A resume is interesting, just like links to your LinkedIn account. If you have questions, you can mail those as well.

Or join us on IRC (channel #kumina on irc.kumina.nl). If you type ‘kumina’ in a sentence, we’ll get a highlight, just keep in mind that it might take a little while before we react, depending on who’s online and how busy it is.

We’re looking forward to meet you!

11 Feb 2014, 15:00
Tags: , , , , , , ,
Comments Off

Automated monitoring? Easy!

One of the things we take very serious here at Kumina is our monitoring. We’ve always done so, but even we must admit that during the starting years, we sometimes forgot to include all possible checks for a new service or host. And it sucks when you forget to setup the monitoring for a specific item, because you generally only find out about it when it’s actually down already…

We like to check as much as possible (if not everything). For example, we check if a service is up and running, we check if a vhost is returning the expected response, if an SSL certificate is still valid or if it will expire within 30 days, we check if OpenVPN certificates are close to expiration and if all loaded Apache modules actually come from a Debian package. And we check often, generally every 30 seconds, but we would prefer to do it even more often. However, these are not things you want to configure manually over and over again.

Automate everything

We’re using Icinga in two datacenters in failover mode, the second node takes over if the primary is unreachable. We currently monitor 319 hosts (including some failover virtual hosts) and a grand total of nearly 10000 checks. Although this fluctuates daily, since most changes on a server also adds or removes checks. It is all done automatically. This prevents us from forgetting to setup monitoring for a specific item or host and also allows us to quickly deploy new checks on the entire infrastructure. Consider the Fokirtor check we created last year, it’s very easy for us to simply deploy it on all those machines.

Using the tools at hand

We’re currently pretty heavy Puppet users, so we leverage the infrastructure we already have in place for that.

Since a puppet agent runs on our monitoring hosts every few hours, it’ll deploy new configuration a few times per day. It’s not exactly continuous delivery, but close enough for our needs for now. Equally important, it removes checks we no longer need. For instance, if we’ve create a redirect that was changed into a full-fledged site, the check is automatically changed to no longer expect a 301 response but a 200 with a correct string (that we provided, of course, it’s not that automated).

We started out using the power of puppet’s exported resources but over time as our config grew, it started to take way too long for Puppet to deploy new configuration on the monitoring hosts. We now deploy the configuration for both Icinga instances using a script that reads the stored config from the Puppet database.

Other uses

As you might imagine, we also do this for trending with Munin. We automatically deploy the Munin plugins on the clients when we deploy a new service and we automatically deploy the host configuration on the Munin server. As well as required firewall rules on the client side.

15 Nov 2013, 13:39
Tags: , , , , , , ,
Comments Off

Icinga check for Linux.Fokirtor

We were notified this morning of the specifics of the attack that struck Hetzner at the start of this year. Or rather, the backdoor software that was used to provide access to the machines. It does not detail what vulnerability was exploited to actually install the Trojan. But it’s still a good idea to make sure your current processes are not infected.

So we went ahead and created a check that can detect Linux.Fokirtor, based on the information provided by Hetzner and Symantec.

11 Jun 2013, 15:10
Tags: , , , , ,
Comments Off

Debian and Trac: No module named svn

If you get the error:

Unsupported version control system “svn”: No module named svn

When trying to connect your trac to a subversion repository, try installing python-subversion. This was needed on Wheezy for me.

8 May 2013, 14:34
Tags: , , , ,
Comments Off

Checking for Linux/CDorked.A

We’ve been reading a lot about a Linux exploit targeting webservers and since we manage quite a lot of webservers, we’re keeping a close eye on it. We recently already deployed a check for rogue Apache modules (since we mainly use Apache), but now we’ve also created a check from the code provided by ESET on their security blog describing the Linux/CDorked.A exploit. All it does is check shared memory for a segment of a specific size, but it’s still better than nothing.

As usual, the Icinga check can be found in our GitHub repository and if you’re on Debian, you can find the nagios-plugins-kumina package in our repository. This check needs to be run on the local machine, so you need to setup nrpe or ssh access from Icinga for that.

Let us know if this helps you or if we should improve on it! All kudos to ESET, since they provided the actual script (and research!) for this check.

3 Apr 2013, 11:54
Tags: , , , , , ,
Comments Off

Checking for rogue Apache modules

We’ve read a lot recently about attacks in which an attacker loads a modified module into Apache to insert iframes in outgoing data. Pretty scary, especially since nobody really seems to know how the hacks are performed. Recently, Sucuri wrote a blog article about how to check for rogue Apache modules on Debian. We’ve decided to implement this into an Icinga/Nagios check.

You can find the source for the plugin here. We also publish all our plugins via the ‘nagios-plugins-kumina’ package, provided by our apt repository.

Hope this helps!

Update: I packaged and pushed the wrong version of the script… Silly me. Fixed now!

1 Mar 2013, 12:12
Tags: , , ,
Comments Off

LOADays

We’re an official Gold Sponsor of LOADays! We’ll also have presence there, so if you’re attending, do stop by and say hi!

14 Oct 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-10-14

  • Going home after a long day at the office. Pretty exhausted. Wondering what is making Mondays so work-intensive :-\ #

Powered by Twitter Tools

7 Oct 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-10-07

Powered by Twitter Tools

30 Sep 2012, 16:12
Tags: ,
Comments Off

Python: Inheritance is not templating

This is something I forgot today, which bugged me a lot. Honestly, I don’t program a lot, but it’s a bit bothersome that I didn’t have this piece of knowledge on the top of my mind. The gist is simple, inheritance doesn’t work like templating. There’s a difference between local variables and class variables.

What I tried the first time:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Base:
    x = []
 
class A(Base):
    pass
 
class B(Base):
    pass
 
a_inst = A()
b_inst = B()
 
b_inst.x.append("foo")
a_inst.x.append("bar")
 
print a_inst.x
print b_inst.x

This resulted in the output:

['foo','bar']
['foo','bar']

That’s not what I expected. After asking around a little on #python, I was pointed to my mistake. The code should’ve been:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Base:
    def __init__(self):
        self.x = []
 
class A(Base):
    def __init__(self):
        Base.__init__(self)
 
class B(Base):
    def __init__(self):
        Base.__init__(self)
 
a_inst = A()
b_inst = B()
 
b_inst.x.append("foo")
a_inst.x.append("bar")
 
print a_inst.x
print b_inst.x

And this give me the expected output:

['bar']
['foo']

Hope this helps someone!

30 Sep 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-09-30

  • I hope I have lungs left by the end of the day… #cough #cough #

Powered by Twitter Tools

23 Sep 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-09-23

Powered by Twitter Tools

16 Sep 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-09-16

  • @GuildWars2 I can't seem to create an account for my just-purchased GW2 serial… Keep being returned to the screen to enter info, no error. #
  • @GuildWars2 I got a serial but can't create an account :-( It seems stuck in step 2,no error whatsoever :-( Any idea? #
  • @SirRoguepope at least I'm not the only one! I thought I was doing something weird or something… Hope they fix it soon! in reply to SirRoguepope #
  • @SirRoguepope I had success registering by using a different email address than I used for ordering. Maybe that works for you too! #GW2 in reply to SirRoguepope #

Powered by Twitter Tools

9 Sep 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-09-09

  • Die Petra hadden ze van mij achterwege mogen laten. Zonde van de zendtijd, ze staat alleen wat moeilijk te doen zonder inhoud. #WatkiestNL #
  • Awesome! RT @davecoveney: Our own big launch of the week – The Auditor is now openly available! http://t.co/uYOCQtKk Buy it now, and trac… #

Powered by Twitter Tools

19 Aug 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-08-19

  • @GrouponNED Jullie hebben gezien dat die tablet die jullie zogenaamd "goedkoop" aanbieden op het internet te verkrijgen is voor $63.15? #
  • @GrouponNED zie ook http://t.co/EQ74mlaz #
  • I'll remember today forever as The Day She Found Out About Thinkgeek. Especially the 4moms origami… #

Powered by Twitter Tools

5 Aug 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-08-05

  • I so dislike Linux acls :-( Never works the way I expect them to, it's always trial-and-error. So annoying :-\ #

Powered by Twitter Tools

29 Jul 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-07-29

  • Abraham Lincoln, vampirehunter? It's a comedy or parody, right?! #

Powered by Twitter Tools

22 Jul 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-07-22

  • I truly live in the middle of nowhere. Just saw a badger while walking the dog. It growled at us. We backed away. Awesome! #

Powered by Twitter Tools

8 Jul 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-07-08

  • @davecoveney In our defence, a lot of people were hit by that bug, check out #leapocalypse here on twitter. in reply to davecoveney #
  • @37signals Chrome is keeping complaining about 'Body can't be empty' when I try to add a comment. Is this a known bug? #
  • @37signals In Basecamp, I must add. #
  • Higgs boson has been confirmed. Awesome! #
  • @ariejan True, but if it talks like a duck, walks like a duck and quacks like a duck… in reply to ariejan #
  • Two weeks of free time, starting… Now! :-) #

Powered by Twitter Tools

1 Jul 2012, 2:31
Tags:
Comments Off

Twitter Weekly Updates for 2012-07-01

  • And then the strap of my almost three years old Samsonite bag broke off :-( Need to check if the warranty is still valid! #

Powered by Twitter Tools

  • Calender

    October 2014
    M T W T F S S
    « Mar    
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
  • GoodReads

    Tim's bookshelf: read

    The Blade Itself
    4 of 5 stars
    tagged: default
    Prelude to Foundation
    4 of 5 stars
    tagged: default
    Ik, robot
    3 of 5 stars
    tagged: default

    goodreads.com
  • RSS Delicious feed

  • Archives