CouchDB Indexing Benchmark

In the last post, we discussed how CouchDB’s external query server works by examining the raw protocol. In this post, we’re going to take a look at the performance of different query servers. The code used in this benchmarking is here. I listed below the method of the benchmark in detail. If you want you can jump to conclusion. The Setup The benchmarks are done on my laptop (Intel 6th-gen i7 processor, 8G RAM, SSD) with CouchDB 1.

CouchDB Query Protocol

Recently at $DAYJOB I had the opportunity to look deeper into how CouchDB indexing works and compared the performance of different indexers. Hopefully this series of articles will shed some light on how to get the most out of CouchDB’s view indexing. In this article we’ll be going over the concept of CouchDB views and find out just how CouchDB indexes documents with the help of external query servers.

Digital Ocean Published My Article!

Digital Ocean just published my article on How to setup Review Ninja on a Digital Ocean droplet using docker-machine and CoreOS. They have high standard for their articles, e.g., every step has to be crystal clear and assume the audience is blank slate. Their editors are technical. The editor I was assigned to was Brian Hogan who wrote the tmux book which I have read and loved a few years back.

Docker Security

DockerCon 2016 is here and this is the very first day with workshops on various topics. I chose to attend the Docker Security workshop as I’m interested in seeing how Docker tackles some security challenges. This blog post is my notes taken from the workshop. In order to talk about security, we first have to know how docker works on a higher level to know what to secure. The workshop addresses that question early on.

Ruby for Pythonistas

It’s been 11 years since I first encountered Python, and it’s been my favourite programming language ever since. However, I’ve always been curious about the Ruby language. On the surface, they have a lot in common: both dynamic, object-oriented, interpreted, vm-based, and optimize for developer happiness rather than machine speed. However, they have quite different data models, syntax and community culture. This post is a summary of my journey learning Ruby as a seasoned Python developer, and my thoughts comparing these two popular languages.

Docker...root...root...Docker (a.k.a. the docker group is a backdoor)

While working with docker related stuff and when I use volume mount to a subdir of my home dir, I always come across the issue of the container littering folders with root:root permission in my home folder and then I have to sudo rm ... it, for example: docker run -d $(pwd)/data:/var/lib/mysql/data mysql It always annoys me but today, it came to me like an epiphany that this is actually a pretty severe security vulnerability.

Software Engineering Podcasts Review

UPDATE: I’ve got a lot of great comments here and on reddit. Thanks everyone for the suggestions. As software developers, we need to always keep learning and keep ourselves up-to-date with what’s happening in the industry. Listening to podcasts is a great way to do so for myself since I have a 2-hour commute every day. In this blog post I’m going to review software engineering podcasts that I frequently listen to and hopefully this post will be remotely useful to anyone looking for software podcasts.

Use Python bytecode to solve puzzler

Learning Python Internals Recently I stumbled upon this wonderful set of videos on Python interpreter internals. (Thanks to Philip Guo for creating them and thanks to Michael Kennedy (@mkennedy) and his Talk Python to me show that brought this on my radar) I’ve been using Python for about ten years but I’ve never really truly been able to understand how the interpreter works, nor was I familiar with the Python virtual machine or the bytecode.

Use Python bytecode to solve puzzler

Learning Python Internals Recently I stumbled upon this wonderful set of videos on Python interpreter internals. (Thanks to Philip Guo for creating them and thanks to Michael Kennedy (@mkennedy) and his Talk Python to me show that brought this on my radar) I’ve been using Python for about ten years but I’ve never really truly been able to understand how the interpreter works, nor was I familiar with the Python virtual machine or the bytecode.

Use rabbitmq DLX to implement delayed retry

In this post, I’m going to describe the experience at $DAYJOB regarding implementing delayed retry using rabbitmq’s DLX combined with a TTL. The technique has been described at a few places but it is new to me personally and our company. I’d like to capture the experience we had both in implementing and in deploying to production. The problem At $DAYJOB we have a service that integrates with a 3rd-party API that processes credit card payments and when successful, records a payment object on our customer’s invoices, and change the invoice status.

Use rabbitmq DLX to implement delayed retry

In this post, I’m going to describe the experience at $DAYJOB regarding implementing delayed retry using rabbitmq’s DLX combined with a TTL. The technique has been described at a few places but it is new to me personally and our company. I’d like to capture the experience we had both in implementing and in deploying to production. The problem At $DAYJOB we have a service that integrates with a 3rd-party API that processes credit card payments and when successful, records a payment object on our customer’s invoices, and change the invoice status.

MySQL EXPLAIN explained

Below is my notes from watching the MySQL’s EXPLAIN demystified webinar. All credits go to Baron Schwartz for this excellent intro to MySQL’s query explain. How does MySQL execute queries? SQL => Parse Tree => Execution plan The execution plan is a data structure, not byte-code The executor makes storage engine calls Execution plan “Deep left tree” – always Explain output columns id which SELECT the row belongs to Labelled sequentially complex select: subquery: numbered according to the position in SQL text derived: executed as a temporary table union: fill a temp table, then read out with a NULL id select_type simple: there’s only one SELECT in the whole query, select_type is PRIMARY complex: subquery: numbered according to the position in SQL text derived: executed as a temporary table union: fill a temp table, then read out with a NULL id table table name or alias <DerivedN>, N correspond to id <unionM,N>, M, N correspond to id type describes how MySQL will access the rows Possible values: ALL: table scan index: full index scan range: range of an index ref: value as a reference to look into an index if rows in the index match the value eq_ref: like ref but unique (unique index or PK) const system: does not require accessing a table, e.

First dip into Golang's concurrency

I have been toying with Google’s Go language lately. The native support for concurrent programming is one of Go’s major selling point. Go has low-level primitives for concurrent programming such as mutexes and atomic, but also provides high-level language constructs for building concurrent programs via goroutines and channels. Goroutines are functions executing in the same address space as other goroutines, like threads, but unlike threads, they communicate to each other via channels, not shared variables.

Stripe Capture The Flag 2.0 - Problem 3

Level 3 Finally we get to level 3. Here’s the setup: After the fiasco back in Level 0, management has decided to fortify the Secret Safe into an unbreakable solution (kind of like Unbreakable Linux). The resulting product is Secret Vault, which is so secure that it requires human intervention to add new secrets. A beta version has launched with some interesting secrets (including the password to access Level 4) Here’s the code for the server (Python finally!

Stripe Capture The Flag 2.0 - Problem 2

Level 2 In level 2, we’re faced with a PHP app that allows you to upload a “profile picture”. The password to level 3 is contained in a “password.txt” file of the document root, as revealed in line 49. Of course, you won’t be able to click on the link and get the file. The directory is protected, and we have to somehow exploit the code. Reading through the code, it’s a clear that whatever file uploaded to the server will be under uploads/, and the file is publicly accessible through <base>/uploads/<your_file_name>, as seen on line 37.

Stripe Capture The Flag 2.0 - Problem 1

Level 1 Now we get to level 1. We are presented with a simple web form with the PHP code powering it. The PHP script checks if the input combination matches the combination in ‘secret-combination.txt’ file, and present the user with the password to the next level if the combinations match. Obviously, we’re not going to guess the combination. There are a few ‘handy’ methods in PHP that are extremely dangerous.

Stripe Capture The Flag 2.0 - Problem 0

Stripe just finished running a second “capture the flag” challenge. They ran a similar challenge this February and was more focused on system level. This time, it’s full-on web security. In the next few posts, I’m going to discuss the problems in the challenge, how I solved them and what did I learn from from each challenge. Problem 0 Here are the code for level 0: So you have a node.

Statically Yours

Migrating from wordpress to octopress I’m not an avid blogger but like everyone else, I have a blog which I casually write about life and programming. Being hosted by wordpress, it was an out-of-the-box solution and comes with a lot of bells and whistles. However, for a programming blog, it has some significant shortcomings: Conflation of content and style. A Wordpress post is written in a weird combination of HTML markups and custom wordpress macros, which means you have to rely on their WYSIWYG editor to generate the correct markups, which means you can’t use your favourite editor to write a blog post.

Use Python's sys.settrace() for fun and for profit

The itch to scratch Everyone in the software industry knows Kent Beck, the pioneers of extreme programming and test-driven development and the co-author of JUnit. One of his lesser known project was JUnitMax, which aims to reduce the time developers have to wait while tests are running. One of the ideas behind that is that when code changes, only the test cases that exercise the code need to be run, instead of running the entire suite.

Realtime notification delivery using rabbitmq

Our company has “hack-off” days once a while, where we developers get to choose whatever we would like to work on and present it to the entire company by the end of the day. I have been hearing this websocket buzz for a while now and would like to build something interesting with it. WebSocket Websocket is a persistent bi-directional connection between the browser and the server. With websocket, web browser can post message to the server, but what’s more interesting is that the server is able to push messages to the client (browser).

Writing a Simple Clojure Library

I’ve been learning/using Clojure on and off for about 2 years. The lispy syntax isn’t a deterrent for me at all, in fact, I’m quite fond of it and consider it very elegant. However, it does take some time to get used to. I don’t use Clojure or anything remotely close in my day job, but I love to find something useful to implement using Clojure. In the past few days I found such niche.

Building a Google Reader plugin using Chrome extension

OK, ok, I understand. The title is a bit misleading. Google Reader isn’t open for 3rd party plugins, and there’s no indication that Google will ever. However, with Google Chrome extension, we can build such local “plugins”. What are we going to achieve? Anyone uses Google Reader to read DZone feeds? I do. DZone is a very good tech news aggregator and you can vote and comment on stories. With Google Reader, you get DZone feeds like the following.

Spectrum.vim - My first Vim plugin

ver the past few months, I’ve been using Vim as my primary development tool at work and at home, and I have to say, I’m addicted to it! I’m thinking about writing a blog post of why I get hooked on walking without crutches, but for this post, I’m just going to introduce you to my first plugin in Vim - Spectrum. Introduction Spectrum is a vim colorscheme roulette. Ever getting tired of staring at the same colorscheme every day?

Scala Simple Build Tool -- Not so simple after all

Update: I got sbt working by building directly from the master branch from their github repo. The current version is 0.7.5. The tagged 0.9.4 version is actually an older version. Anyway, tried it and kinda loved it. This is just another late night rambling…I was trying to get a proper scala build system setup. I was using Maven scala plugin for a while, but longing for something simpler and more scalanic (is there such a word?

Write sudoku solver in Clojure

…yeah, because the world just needs another Sudoku solver. Well, I’m not trying to solve world hunger with it, but just an attempt to practice clojure, I took (read: stole) Peter Norvig’s sudoku solver algorithm (written in Python) and adapted it into Clojure. I put it up on Github under sudoku-clj. The algorithm itself isn’t that hard to understand. The porting to a lisp-y syntax made the code a little longer than its Python counterpart.

Cake - the yummy Clojure build system

About 10 minutes ago I heard about cake clojure build system, and gave it a try. And 10 minutes later, it won me over! Wow, it addresses all the pain points of leiningen. BLAZINGLY FAST!!! Sorry for using all CAPS but I’m very excited about this improvement over leiningen – OK, it may not be the fault of leiningen that JVM cold startup time is non-trivial but hey, someone came up with an idea of having a long running JVM process in the background, so subsequent clojure tasks reuse the same JVM instance.

New Year's Resolution

2011 here we come! In the spirit of continual learning, I’m going to write down the technology I’d love to learn this year. Haskell Now that I’m more interested in functional languages, I’d love to look into this “pure” functional language that inspired countless other ones of its kind. Lift Last year I scratched the surface of Scala, a hybrid JVM language. I’m very fond of it, and think it has tremendous potential.

Use Python decorator to curry functions

It’s been a while since the last time I wrote about Python. This morning, I was listening to a podcast on my way to work. They were discussing functional programming and dynamic languages…I learned Python before I went into Computer Science, and then I learned about functional programming and through learning of Scala and Clojure, my functional programming concepts have been enriched. As I was listening, it suddenly appeared to me that there isn’t a way in Python to curry a function.

My impression on Scala so far

I’ve been exploring Scala on and off for some time now. Here’s my highly subjective and very limited impression of Scala. What I like about Scala: 0) It’s statically-typed language. That’s right! I don’t care what you ninjas say. As much as I love dynamic languages, I just prefer statically typed language for big projects. The benefit of having type information is enormous for a project with a large code base.

Use function currying to reduce repetition and make code clean

Lately, I’ve been writing a parser using the Scala parser-combinator framework to parse some saves from a game. As a responsible programmer (:P), I write unit tests for each rule. However, I found myself having to write the following code over and over again: @Test def testRule1() { parserRule.apply(new CharSequence("someInput")) match { case Success(result, _) => { assertEquals("expected", result) /* other asserts if the result is a collection of something else */ } case NoSuccess(msg, _) => fail(msg) } } It’s worth noting that you cannot pass in a string value to a Parser.

Finding Happy Numbers using Scala

The problem was posted on Programming Praxis. The algorithm itself is pretty straightforward, anyone can do it with a few if/else/fors, but to coerce myself to think functionally, I decide to practice writing it in Scala. A number is a happy number if the sum of square of its digits eventually arrive at 1. For example, 7=>72=49=>42+92=97=>92+72=>130=12+32+02=10=>12+02=1, so 7 is a happy number. 17 is not a happy number because by applying the above process, it goes into a loop.

Launch Windows Explorer and goto the current working directory in shell

I like working in the command prompt - it’s fast and you can do batch processing, etc, but sometimes, I need a GUI (Windows explorer) to explore files in the current directory. I know I can type “explorer.exe” on the command line to launch Windows explorer, but can it automatically go to the directory I’m working in? The answer is yes, although hardly ever advertised Now, we need to find a way to find out the current working directory.

Google IO 2010 is here

This year’s Google IO conference is finally here! I don’t want to sound like a fanboy but I benefited a lot from last year’s IO sessions and looking at this year’s session list, I’m sure I won’t be disappointed. This year’s keynote speech is an overview of Google’s strategy to bring web to the next level. It seems HTML5 is rapidly gaining grounds. Although the specification is not finalized yet, many of the new features are already implemented in most modern browsers, such as AppCache, WebSQL, LocalStorage, Web Worker, and WebSocket.

GWT code split is awesome

For the past few days, I’ve been working on code splitting our existing GWT application. The application is fairly big with about 20k loc (excluding javadoc, comments and tests). The download size (with obfuscated mode) is about 1.5M, and with pretty mode, is a whooping 10+M. Obviously this is not acceptable. GWT2 provides developer guided code splitting feature. It sounds complicated and under the hood, it may very well be (involves a lot of graph theories to figure out dependencies and so on) but from the user’s point of view, it’s very easy.

Building a GAE+GWT application using the best practices (Part 5)

Building a GAE+GWT application using the best practices series Part 1 Part 2 Part 3 Part 4 Part 5 In the last post of the series, I’ve shown how to setup a client side GIN+MVP project. This post will discuss the actual building of the UI and GWT-RPC web service calls using GWT-Dispatch on the client side. Use cases Before we dive into the code, let’s go over again the use cases our little app has.

Building a GAE+GWT application using the best practices (Part 4)

Building a GAE+GWT application using the best practices series Part 1 Part 2 Part 3 Part 4 Part 5 In the last blog post, we went over how to write GWT-RPC handlers using GWT-dispatch and dependency injection (Guice). This section, we’re going to see how the client side is set up. Dependencies We need the following dependencies * Gin * GWT-dispatch * GWT-presenter * GWT-log They need to be on the classpath when you compile your GWT code, but not under the war directory like the server dependencies need to be.

Building a GAE+GWT application using the best practices (Part 3)

Building a GAE+GWT application using the best practices series Part 1 Part 2 Part 3 Part 4 Part 5 In this part of the series, we’re going to explore the designing of the web services for RateChecker and coding them using the command pattern from GWT-dispatch based on Ray Ryan’s presentation. The big picture To correctly implement web services using the command pattern, we first have to get the big picture.

Use delegation to write map/filter in Java

The problem In Java, imagine you have a list of User objects, each encapsulates the user’s id, first name, last name and age. Then you want to call a web service UserService.deleteUsersByIds(List<Integer> userIds) to delete the users from your data store. It doesn’t sound too hard, does it? All you need to do is to transform you List<User> to List<Integer>. So you go ahead and write the following code:

Building a GAE+GWT application using the best practices (Part 2)

Building a GAE+GWT application using the best practices series Part 1 Part 2 Part 3 Part 4 Part 5 In Part 2, we’re going to go over project setup for GAE and GWT applications, and wire the server (servlet) using Guice and GWT-Dispatch. Project setup I’m using Eclipse as my development environment. Install Google Eclipse plugin, and install the provided GWT (2.0.2) and GAE (1.3.1) with the plugin.

Building a GAE+GWT application using the best practices (Part 1)

Building a GAE+GWT application using the best practices series Part 1 Part 2 Part 3 Part 4 Part 5 This is the first installment of the series Building a GAE+GWT application using the best practices. Introduction In the next few blog posts, I’m going to present my experience building a simple (but non-trivial) web application using GWT and Google App Engine, while applying the best practices introduced by Ray Ryan in his excellent GWT best practices at Google IO last year.

GXT Widget Expander 1.0 release

This project aims to add flexibility to GXT row expander by enabling putting arbitrary widgets in the expanded row. GXT’s grid widget is great, especially with the RowExpander plugin, it allows the creation of a Google Reader style grid (a list with expandable rows). However, the current GXT’s RowExpander design only allows rendering by XTemplate. XTemplate falls short in a number of ways, especially when it comes to user interaction inside the expanded rows.

Setting up GWT2 project with gwt-maven-plugin

GWT2 offers a lot of exciting new features: OOPHM, SOYC, code splitting, declarative UI, to name a few. This evening, I experimented setting up a GWT2 project using Codehaus’s gwt-maven-plugin. I’m using Eclipse, so obviously, you need m2eclipse and Google Eclipse Plugin. First step is creating a Maven project: File->New->Project...->Maven Project In the archetype selection dialog, select org.codehaus.mojo.gwt-maven-plugin:1.1. We choose this to create an archetype but 1.1 doesn’t work with GWT2.

Solving a GWT deferred binding mystery

This morning at work, I was running our GWT application with some deferred binding logic in it, and all of a sudden I got this ridiculous message: [ERROR] Class 'mycompany.rebind.HistoryResourceGenerator' must derive from 'com.google.gwt.core.ext.Generator' [ERROR] Failure while parsing XML com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries) at com.google.gwt.dev.cfg.ModuleDefSchema$ObjAttrCvt.convertToArg(ModuleDefSchema.java:729) at com.google.gwt.dev.util.xml.HandlerArgs.convertToArg(HandlerArgs.java:64) at com.google.gwt.dev.util.xml.HandlerMethod.invokeBegin(HandlerMethod.java:214) at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.startElement(ReflectiveParser.java:257) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Abstract...) It was running fine yesterday when I left work, and now it tells me that my generator isn’t a subclass of the GWT Generator?

Setting up a Clojure Project with Maven

In this blog post I’m going to record my recent experience in setting up a Clojure project using the clojure-maven-plugin. Clojure-Maven-Plugin First you need to compile the plugin from source: git clone git://github.com/talios/clojure-maven-plugin.git cd clojure-maven-plugin mvn install Of course, you will need to have Maven2 installed already. After that, the compiled plugin jar will be in your maven local repository. Create a pom.xml file to use the plugin. I’m using the pom.

Programming Collective Intelligence in Clojure

They say the best way to learn a new programming language is by programming in it. Therefore I’m starting this project converting algorithms in the book Programming Collective Intelligence into Clojure, while learning the best practices and language idioms during the process. I’ve created a GitHub project for this. I’m not sure how far I’m able to go but let’s see.

Explore Clojure: Building a Bifid cipher

Lately I’ve been teaching myself Clojure, a Lisp dialect on the JVM platform. I still love Erlang and still learning it, but Clojure has a special draw for me being a JVM language and its Lisp roots. I studied Scheme (another Lisp dialect) in my college years and deemed it purely academic. However, Clojure has the potential of changing this and bring the expressiveness of Lisp and the power of functional programming to the Java world.

Enable Auto-complete in a PDB session

EDIT: 2012-06-19 There are so many other much better options now that renders recipe obsolete. See pdb++ or ipdb Pretty simple actually…Just put the following code in ~/.pdbrc and then you can use the Tab key during a PDB session to see the available attributes of the current context. import rlcompleter pdb.Pdb.complete=rlcompleter.Completer(locals()).complete

Fast and elegant way to sum primes in a gigantic range

The problem is taken from Project-Euler, which asks what is the sum of all prime numbers under 2 million. Traditional Approach Project-Euler has many problems like this which looks ridiculously easy in theory, but practically impossible when using the old-school brute force way to solve them. Even after applying some well-known techniques to shrink the problem space, the computation still takes a long time (too long for me to stick around and wait it to finish).

Fast and elegant way to sum primes in a gigantic range

The problem is taken from Project-Euler, which asks what is the sum of all prime numbers under 2 million. Traditional Approach Project-Euler has many problems like this which looks ridiculously easy in theory, but practically impossible when using the old-school brute force way to solve them. Even after applying some well-known techniques to shrink the problem space, the computation still takes a long time (too long for me to stick around and wait it to finish).

Integrating SmartGWT with ASP.NET JSON web service

Many web API authors are using third party libraries like JayRock to convert ASP.NET web service method return values to JSON. ASP.NET does have the ability to return JSON objects for web methods. It’s not a very well-known feature (I guess) as there are only a few places mentioning it. For example, suppose the web method we are calling is /ItemService.asmx/GetList, and it’s expecting a parameter “uid”. For JSON web service to work, we have to set the request content type to “application/json” and provide the request parameter as a JSON object and send it through HTTP POST data ({uid:'12345'}).

Hexspeak and Generator

EDIT: 2011-04-21 While browsing my old blog posts, I found the code here can be greatly improved. Here it is: def words(): with open('/usr/share/dict/words', 'r') as f: return (x.strip().upper() for x in f.readlines()) MAPPING = {'A':'A', 'B':'B', 'C':'C', 'D':'D', 'E':'E', 'F':'F', 'O':'0', 'S':'5', 'I':'1'} def main(): is_hexword = lambda word: all(ch in MAPPING for ch in word) for word in filter(is_hexword, words()): print word, "\t", ''.join(MAPPING.get(ch, ch) for ch in word) if __name__ == '__main__': main() So, it’s a relatively slow day at work, and I’ve been “stumbling upon” on Wikipedia when I found this:

Hexspeak Word List

BAFFLED BAFF1ED LIFE 11FE ASSAILS A55A115 SILLIES 51111E5 SEEDED 5EEDED BASEBALLS BA5EBA115 ACED ACED SISAL 515A1 BEFALL BEFA11 CLEO C1E0 BAFFLES BAFF1E5 FALL FA11 ACES ACE5 DILLS D1115 SAILED 5A11ED BLAB B1AB CLEF C1EF CODAS C0DA5 ABODE AB0DE LASS 1A55 FACIALS FAC1A15 DALLAS DA11A5 EASES EA5E5 ADDLED ADD1ED SADDLE 5ADD1E DODO D0D0 EDDIE EDD1E EDIFIES ED1F1E5 ALDO A1D0 COLLOIDS C01101D5 ACCOLADE ACC01ADE LASSIE 1A551E CALFS CA1F5 SCOFFED 5C0FFED CASES CA5E5 FOALS F0A15 ADDLES ADD1E5 COBBLES C0BB1E5 ABBESSES ABBE55E5 ILLS 1115 LOSS 1055 LELA 1E1A COLLOID C01101D FOAL F0A1 LABELS 1ABE15 BELLIED BE111ED ASSESSES A55E55E5 ASSESS A55E55 LADDIES 1ADD1E5 FEDS FED5 SABLE 5AB1E ASSESSED A55E55ED BELLIES BE111E5 BODE B0DE EDIFICES ED1F1CE5 LEASE 1EA5E DECODED DEC0DED DIAL D1A1 SCAFFOLDS 5CAFF01D5 LOBED 10BED DECEASES DECEA5E5 SOFIA 50F1A ABLES AB1E5 LASSA 1A55A LOBES 10BE5 FIDO F1D0 CEDILLAS CED111A5 DECODES DEC0DE5 SLICES 511CE5 BOOBED B00BED DECEASED DECEA5ED LASSO 1A550 ACCESSIBLE ACCE551B1E OLDIE 01D1E CODE C0DE LIEFS 11EF5 CODA C0DA SEAS 5EA5 DACCA DACCA DEEDS DEED5 FOIBLE F01B1E LOOSES 1005E5 CABBIES CABB1E5 COIFS C01F5 SOLACED 501ACED CODS C0D5 SEAL 5EA1 EBOLA EB01A BILLED B111ED FOLD F01D BAILS BA115 DOLLS D0115 BLOBBED B10BBED FOIBLES F01B1E5 ISABELLA 15ABE11A LIED 11ED ISABELLE 15ABE11E BEEFED BEEFED ACCEDED ACCEDED FEASIBLE FEA51B1E BESIDE BE51DE LIBIDO 11B1D0 OFFICIALS 0FF1C1A15 LOSE 105E SOBS 50B5 ACIDIC AC1D1C ACCEDES ACCEDE5 ALLIE A111E COOS C005 FLAIL F1A11 LOAF 10AF FLOSSED F1055ED BABE BABE SOLI 5011 DOLES D01E5 SOLD 501D ELSA E15A ELSE E15E CASALS CA5A15 DISCOED D15C0ED LESLIE 1E511E FLAB F1AB ASSAIL A55A11 DISCO D15C0 SOLS 5015 COOL C001 DECEASE DECEA5E SLIDE 511DE SAID 5A1D OODLES 00D1E5 CLASSICAL C1A551CA1 ALOE A10E SIDED 51DED SAIL 5A11 CICADAE C1CADAE DOODADS D00DAD5 BLOC B10C BLOB B10B LEAFS 1EAF5 DOODLE D00D1E SELLS 5E115 OILFIELD 011F1E1D ELISEO E115E0 FEED FEED CODES C0DE5 ELLIS E1115 FACIAL FAC1A1 ADIDAS AD1DA5 BASSES BA55E5 DEFIES DEF1E5 CEASELESS CEA5E1E55 CASED CA5ED ELLIE E111E LEOS 1E05 CODED C0DED LIBS 11B5 DADDIES DADD1E5 FILLIES F1111E5 ACID AC1D DEFIED DEF1ED DOSED D05ED EDSEL ED5E1 SLEDDED 51EDDED LOBBIES 10BB1E5 SOILED 5011ED CECILIA CEC111A CACAOS CACA05 DILLED D111ED DIDO D1D0 BLESSED B1E55ED DAIS DA15 CASIO CA510 CEASE CEA5E DOSES D05E5 BLESSES B1E55E5 BOOBS B00B5 BODIES B0D1E5 ALOES A10E5 FILES F11E5 SCAB 5CAB BLOBS B10B5 CEASES CEA5E5 ISOSCELES 1505CE1E5 LODES 10DE5 BASSO BA550 ELLA E11A ACIDS AC1D5 DEICED DE1CED BASSI BA551 ISABEL 15ABE1 IBIS 1B15 SCABS 5CAB5 ELLS E115 DIALS D1A15 DEICES DE1CE5 SOCIABLE 50C1AB1E SOLIS 50115 AILS A115 OSSIFIES 0551F1E5 CASELOAD CA5E10AD CICADAS C1CADA5 SLID 511D LABELED 1ABE1ED ACCESSES ACCE55E5 BABELS BABE15 SOLIDS 5011D5 SCALDED 5CA1DED LAOS 1A05 ACCESSED ACCE55ED BLOODLESS B100D1E55 SEED 5EED CALCIFIES CA1C1F1E5 CLOD C10D AISLE A151E LOBBED 10BBED CALLS CA115 CODDED C0DDED LELIA 1E11A SOIL 5011 COLOSSI C010551 CEASED CEA5ED SALABLE 5A1AB1E BAOBABS BA0BAB5 LOLLS 10115 FOSSILS F055115 SECEDES 5ECEDE5 SLICED 511CED LOOSE 1005E AIDED A1DED BLADED B1ADED FLOODS F100D5 SOLO 5010 BIDES B1DE5 SISES 515E5 ASIA A51A CALAIS CA1A15 CELL CE11 COAL C0A1 BLOOD B100D AIDES A1DE5 BALBOA BA1B0A BESSEL BE55E1 BLADES B1ADE5 ABSCISSAE AB5C155AE COIFED C01FED DOLLIE D0111E CLASSED C1A55ED SADE 5ADE CABLE CAB1E DOCS D0C5 SACCO 5ACC0 DICED D1CED ELIDES E11DE5 BLESS B1E55 CLASSES C1A55E5 FAISALABAD FA15A1ABAD ABSCISSAS AB5C155A5 BOLLED B011ED CODDLE C0DD1E FEEDS FEED5 FILIAL F111A1 FLEE F1EE FLED F1ED BABIED BAB1ED FLIES F11E5 ACCEDE ACCEDE BOBSLEDDED B0B51EDDED COLLIDES C0111DE5 SOCIALS 50C1A15 FILE F11E BAAS BAA5 CELLOS CE1105 SALES 5A1E5 CODICES C0D1CE5 BASAL BA5A1 CALI CA11 COLLIDED C0111DED COIF C01F BAAL BAA1 FLIED F11ED BABIES BAB1E5 SOFA 50FA DOLBIES D01B1E5 BALDS BA1D5 LILACS 111AC5 BIFOCALS B1F0CA15 CALF CA1F EFFACE EFFACE BOILED B011ED COSIES C051E5 BOBBLE B0BB1E LESS 1E55 SADDLES 5ADD1E5 BABEL BABE1 COBBLE C0BB1E FOALED F0A1ED BOOLE B001E SOFAS 50FA5 LESA 1E5A BABES BABE5 COIL C011 EFFIE EFF1E FACES FACE5 FILL F111 DELIA DE11A LILIES 1111E5 OILS 0115 SOILS 50115 DAILIES DA111E5 BILBO B11B0 SCAFFOLD 5CAFF01D OFFICIAL 0FF1C1A1 ILIAD 111AD DECODE DEC0DE LOBE 10BE DELIS DE115 DAFFODILS DAFF0D115 SEABED 5EABED FISCALS F15CA15 FADE FADE CELLED CE11ED CLASSICS C1A551C5 ODESSA 0DE55A LADE 1ADE COOLIE C0011E SOCIABLES 50C1AB1E5 BASS BA55 FIBBED F1BBED EELS EE15 DIODE D10DE CELLS CE115 ALICE A11CE CELLI CE111 FOIL F011 BASE BA5E ELSIE E151E CELLO CE110 FOILED F011ED BILLFOLDS B111F01D5 SICES 51CE5 BILLS B1115 SEEDS 5EED5 LESSEE 1E55EE ALFALFA A1FA1FA COALED C0A1ED BIDED B1DED ALIBIED A11B1ED SABLES 5AB1E5 CECILE CEC11E CEDED CEDED DADOES DAD0E5 LIBIDOS 11B1D05 FIEF F1EF DABS DAB5 CEDES CEDE5 LOCI 10C1 BODICES B0D1CE5 BLEED B1EED COOLED C001ED CLIFF C11FF CASSIAS CA551A5 ABSCESS AB5CE55 BASILICA BA5111CA SCALE 5CA1E BASED BA5ED CALICOS CA11C05 SALAD 5A1AD FOLLIES F0111E5 BASEL BA5E1 ALISSA A1155A BILLIES B1111E5 COLO C010 ABED ABED BASES BA5E5 FELLS FE115 ELIAS E11A5 BOLES B01E5 CABS CAB5 ABEL ABE1 COLE C01E DEED DEED ISOLDE 1501DE COLA C01A SELFLESS 5E1F1E55 CALLAS CA11A5 LIFELESS 11FE1E55 ALIASED A11A5ED DEIFIED DE1F1ED SILOS 51105 EASE EA5E SICS 51C5 BILBAO B11BA0 BADE BADE SISSES 5155E5 LOBS 10B5 LOCO 10C0 COOED C00ED CALLAO CA11A0 IDES 1DE5 DIABOLICAL D1AB011CA1 FIES F1E5 DEIFIES DE1F1E5 ALIASES A11A5E5 BEADS BEAD5 LIEF 11EF CODICIL C0D1C11 LOAFED 10AFED ELIDE E11DE SOBBED 50BBED LOIS 1015 LIES 11E5 DISCS D15C5 CLODDED C10DDED LOLLED 1011ED SOLE 501E AFIELD AF1E1D BOBS B0B5 BILLFOLD B111F01D CABOOSES CAB005E5 LEAF 1EAF LEAD 1EAD SADIE 5AD1E LILLIE 11111E BOSSED B055ED LEAS 1EA5 COILED C011ED LOSES 105E5 FLOES F10E5 BOSSES B055E5 SEES 5EE5 BALLADS BA11AD5 SAAB 5AAB BOIL B011 OBSESS 0B5E55 DISCLOSE D15C105E FOLIOS F01105 IBLIS 1B115 FACELESS FACE1E55 SALE 5A1E BEDSIDES BED51DE5 DISABLED D15AB1ED CODDLES C0DD1E5 AIDA A1DA COLDS C01D5 IDEA 1DEA AIDE A1DE FLEA F1EA BASEBALL BA5EBA11 DECIDE DEC1DE CELIA CE11A BOBSLED B0B51ED AIDS A1D5 LOADS 10AD5 CODDLED C0DD1ED DOABLE D0AB1E CABBED CABBED DEFACES DEFACE5 SASS 5A55 COLED C01ED DIDDLE D1DD1E IDLE 1D1E OILED 011ED FOCI F0C1 BALLED BA11ED DISABLE D15AB1E OFFAL 0FFA1 SLOES 510E5 BOILS B0115 ELISE E115E LEIS 1E15 ELISA E115A SEEDLESS 5EED1E55 DISCLOSES D15C105E5 CILIA C111A COED C0ED OSSIFIED 0551F1ED FILLS F1115 EDIFIED ED1F1ED SCADS 5CAD5 IDEALS 1DEA15 BELIE BE11E CICADA C1CADA DISCLOSED D15C105ED SALLIED 5A111ED LADLED 1AD1ED DOODLED D00D1ED LABEL 1ABE1 CLASSIFIABLE C1A551F1AB1E ACCOLADED ACC01ADED FALSE FA15E ASSAILABLE A55A11AB1E COBS C0B5 DIESELS D1E5E15 FOLDED F01DED DECAL DECA1 DISEASES D15EA5E5 SIDLED 51D1ED BEEFS BEEF5 SLOBS 510B5 ACCOLADES ACC01ADE5 COBB C0BB LISA 115A SLIDED 511DED OISE 015E ADDLE ADD1E LOADABLE 10ADAB1E LASSOED 1A550ED CADS CAD5 BEDDED BEDDED BASIS BA515 ABSCESSED AB5CE55ED DADA DADA ACACIA ACAC1A LABIAL 1AB1A1 LADIES 1AD1E5 LODE 10DE BELLICOSE BE111C05E ABBAS ABBA5 BASIE BA51E BLISS B1155 ALASES A1A5E5 BASIC BA51C ISAAC 15AAC SLOB 510B BOLAS B01A5 SCABIES 5CAB1E5 BAIL BA11 COCCIS C0CC15 ABSCESSES AB5CE55E5 COLLIE C0111E OLAF 01AF LILAC 111AC FIDEL F1DE1 DIBBLE D1BB1E IDIOCIES 1D10C1E5 ODDBALLS 0DDBA115 CLIFFS C11FF5 BOISE B015E EDDIES EDD1E5 LADLES 1AD1E5 DIES D1E5 COLLIES C0111E5 CALL CA11 LASSOS 1A5505 CALLED CA11ED ABASE ABA5E BIASED B1A5ED ADOBES AD0BE5 EFFACES EFFACE5 ADOLFO AD01F0 SOCIAL 50C1A1 DOODAD D00DAD LEASED 1EA5ED DELLS DE115 LICE 11CE BIDDLE B1DD1E EFFACED EFFACED ALSACE A15ACE BEAD BEAD LIBBED 11BBED LEASES 1EA5E5 COCCI C0CC1 FLEES F1EE5 DELLA DE11A BLISSED B1155ED FOCAL F0CA1 DICE D1CE FLOSSIE F10551E SOLID 5011D DAFFODIL DAFF0D11 ABODED AB0DED FIBS F1B5 BOODLES B00D1E5 BLOODIES B100D1E5 FEELS FEE15 IDOL 1D01 BESIDES BE51DE5 LIDDED 11DDED SALLIE 5A111E OFFICES 0FF1CE5 ABODES AB0DE5 EASIES EA51E5 ISLES 151E5 FAECES FAECE5 BASELESS BA5E1E55 LIFEBLOOD 11FEB100D LACE 1ACE OBOE 0B0E BELLE BE11E IBICES 1B1CE5 BELLA BE11A SIDLE 51D1E LADDIE 1ADD1E ASSES A55E5 SOLES 501E5 FOLDS F01D5 BESS BE55 SODDED 50DDED BELLS BE115 FOOSBALL F005BA11 FEES FEE5 SILAS 511A5 BAOBAB BA0BAB CALICO CA11C0 SOLIDIFIED 5011D1F1ED DEBBIE DEBB1E IDOLS 1D015 BALLAD BA11AD EBBED EBBED ASOCIAL A50C1A1 BIBLES B1B1E5 EDIFICE ED1F1CE COCOAS C0C0A5 CABLED CAB1ED OLLIE 0111E SALSA 5A15A SCOLDS 5C01D5 BOSS B055 FLOOD F100D BASICS BA51C5 COEDS C0ED5 ABBESS ABBE55 OLEO 01E0 BOSE B05E DEBS DEB5 SLABS 51AB5 FALLOFFS FA110FF5 EDIBLE ED1B1E FLEECE F1EECE ADDS ADD5 BIFOCAL B1F0CA1 DEBACLES DEBAC1E5 COIFFED C01FFED SOLED 501ED ADELA ADE1A FAILED FA11ED BEEBE BEEBE ADELE ADE1E CASELOADS CA5E10AD5 CLAD C1AD FOOLED F001ED LACES 1ACE5 BAILIFFS BA111FF5 FOOL F001 FIFE F1FE BACALL BACA11 BIBLICAL B1B11CA1 BELL BE11 CODIFIES C0D1F1E5 BIDS B1D5 BELA BE1A OFFS 0FF5 FIASCOS F1A5C05 SOLOS 50105 DEFACED DEFACED ACADIA ACAD1A ALBEE A1BEE BOAS B0A5 BIBS B1B5 FELICE FE11CE LIDS 11D5 CODIFIED C0D1F1ED ODDBALL 0DDBA11 LEES 1EE5 ISSAC 155AC FILLED F111ED FIELDS F1E1D5 DIDDLED D1DD1ED SEABEDS 5EABED5 DOFF D0FF COALESCE C0A1E5CE CABAL CABA1 OLDFIELD 01DF1E1D LESSEES 1E55EE5 EBBS EBB5 IDLES 1D1E5 IBISES 1B15E5 DECADES DECADE5 FACED FACED FADS FAD5 FLEAS F1EA5 BLADE B1ADE LIAISE 11A15E COLAS C01A5 FOOD F00D CADILLAC CAD111AC FLAILS F1A115 LIBELLED 11BE11ED DOFFED D0FFED DIDDLES D1DD1E5 LOBBIED 10BB1ED BOBBI B0BB1 SILICOSIS 5111C0515 SAILS 5A115 BOOB B00B DEICE DE1CE COLS C015 CLOSES C105E5 SABLED 5AB1ED BEEF BEEF CALICOES CA11C0E5 BABBLED BABB1ED ICES 1CE5 BEES BEE5 FIDDLE F1DD1E CLOSED C105ED LIABLE 11AB1E SOLIDIFIES 5011D1F1E5 FLOSSES F1055E5 SAFES 5AFE5 LEIF 1E1F BABBLES BABB1E5 LASSES 1A55E5 OFFICE 0FF1CE EASELS EA5E15 LOOSED 1005ED SEAFOOD 5EAF00D EIFFEL E1FFE1 IDEAS 1DEA5 ABIDE AB1DE SODAS 50DA5 DILLIES D1111E5 IDEAL 1DEA1 BIBLE B1B1E DODOS D0D05 SCOLDED 5C01DED FLAILED F1A11ED LOADED 10ADED ALIBIS A11B15 FALLS FA115 DISBELIEF D15BE11EF LOAD 10AD CASE CA5E OBESE 0BE5E DOLLIES D0111E5 ADOBE AD0BE DECCA DECCA OFFED 0FFED FLOODED F100DED SILLS 51115 BOODLE B00D1E DIED D1ED SECS 5EC5 DOES D0E5 LEEDS 1EED5 IACCOCA 1ACC0CA DOLED D01ED FLOSS F1055 BLEEDS B1EED5 DEFILE DEF11E SAFE 5AFE BALL BA11 BALI BA11 SALSAS 5A15A5 CALLIE CA111E BALE BA1E BALD BA1D SCOLD 5C01D FALLACIES FA11AC1E5 FACADES FACADE5 SCALED 5CA1ED FIELD F1E1D DABBED DABBED FECES FECE5 ESSIE E551E BOLDS B01D5 FAIL FA11 BESSIE BE551E BILLIE B1111E LEOLA 1E01A LIAISES 11A15E5 BILE B11E COBBED C0BBED DECIDES DEC1DE5 DOLLED D011ED CABOOSE CAB005E BEFALLS BEFA115 BILL B111 LEADS 1EAD5 SELF 5E1F DECIDED DEC1DED FIASCO F1A5C0 COLIC C011C SIDE 51DE DAISES DA15E5 BOOBIES B00B1E5 BOLA B01A BELIEF BE11EF OLDIES 01D1E5 BELIED BE11ED FEEL FEE1 OILFIELDS 011F1E1D5 ALCOA A1C0A SCAD 5CAD BAILIFF BA111FF DOSE D05E BELIES BE11E5 BASIL BA511 DISEASED D15EA5ED SLICE 511CE ASOCIALS A50C1A15 BOLE B01E LEAFLESS 1EAF1E55 IDLED 1D1ED LOLA 101A LIBELS 11BE15 SALEABLE 5A1EAB1E ODELL 0DE11 LEAFED 1EAFED LOLL 1011 LEDA 1EDA DEFOE DEF0E OASIS 0A515 DICES D1CE5 SILICA 5111CA AFFABLE AFFAB1E LILIA 1111A BLOODED B100DED FELLED FE11ED LESSIE 1E551E LIDIA 11D1A SISSIES 51551E5 COLOSSAL C01055A1 ODDS 0DD5 ASIDES A51DE5 AISLED A151ED DECALS DECA15 ALIAS A11A5 DOILIES D0111E5 SELASSIE 5E1A551E FIFES F1FE5 FACADE FACADE AISLES A151E5 CLODS C10D5 CABLES CAB1E5 DAISIES DA151E5 FISCAL F15CA1 DADO DAD0 OFFSIDE 0FF51DE FOBS F0B5 OSLO 0510 EDDIED EDD1ED ABASED ABA5ED SIDES 51DE5 ACCESS ACCE55 FELL FE11 SEALS 5EA15 ABASES ABA5E5 DADS DAD5 SALADO 5A1AD0 COILS C0115 LACED 1ACED LOSSES 1055E5 ASSAILED A55A11ED LADS 1AD5 DEAL DEA1 DOLL D011 FOOLS F0015 LIBEL 11BE1 DEAF DEAF DOLE D01E FICES F1CE5 LISLE 1151E BOBBED B0BBED FAISAL FA15A1 LABELLED 1ABE11ED OBSESSED 0B5E55ED FIASCOES F1A5C0E5 DOODLES D00D1E5 COLLIED C0111ED SALADS 5A1AD5 FEEBLE FEEB1E CLEFS C1EF5 ADELAIDE ADE1A1DE FECAL FECA1 CLASSLESS C1A551E55 SCABBED 5CABBED DEBASE DEBA5E SODS 50D5 COALESCED C0A1E5CED CLASSIC C1A551C FIELDED F1E1DED FOILS F0115 LILLE 1111E SCOFF 5C0FF SECEDE 5ECEDE COALESCES C0A1E5CE5 COOLIES C0011E5 SADDLED 5ADD1ED SODA 50DA SIDESADDLE 51DE5ADD1E FALSIFIABLE FA151F1AB1E DIALLED D1A11ED SEASIDES 5EA51DE5 FELECIA FE1EC1A ALCIBIADES A1C1B1ADE5 BOBBLED B0BB1ED BASILICAS BA5111CA5 BOLD B01D DIBBLED D1BB1ED ALBA A1BA FABLE FAB1E ASCELLA A5CE11A BLABS B1AB5 BALSA BA15A BOLL B011 SLED 51ED DIBBLES D1BB1E5 CECELIA CECE11A SLABBED 51ABBED BIAS B1A5 BOBBLES B0BB1E5 DIODES D10DE5 DECIBEL DEC1BE1 ALBS A1B5 DIABOLIC D1AB011C DISSES D155E5 LOCALED 10CA1ED BAAED BAAED ICICLE 1C1C1E CALEB CA1EB COLLIDE C0111DE ALES A1E5 DISSED D155ED DEBACLE DEBAC1E COALS C0A15 CABALS CABA15 FLEECES F1EECE5 ALISA A115A LOCALLED 10CA11ED EDIBLES ED1B1E5 LOCALES 10CA1E5 ALEC A1EC SOLACES 501ACE5 FLACCID F1ACC1D CLASSIFIED C1A551F1ED ADOLF AD01F BLOCS B10C5 LASSIES 1A551E5 DISCOS D15C05 BLABBED B1ABBED ASIDE A51DE LABS 1AB5 DALLIED DA111ED BIASSED B1A55ED DOFFS D0FF5 CODICILS C0D1C115 CASSIA CA551A FLEECED F1EECED LASSOES 1A550E5 CASSIE CA551E FOES F0E5 COBBLED C0BB1ED ADDED ADDED LILA 111A BAILED BA11ED BEDE BEDE LEADED 1EADED BEDS BED5 DELIBES DE11BE5 DEBASES DEBA5E5 ALLIED A111ED FALLIBLE FA111B1E BOBBIE B0BB1E FOSSIL F05511 LADLE 1AD1E ALOOF A100F BASSOS BA5505 DIOCESES D10CE5E5 CECIL CEC11 BODICE B0D1CE SLIDES 511DE5 DECIBELS DEC1BE15 SEASIDE 5EA51DE CABBIE CABB1E SEALED 5EA1ED DISABLES D15AB1E5 SIDESADDLES 51DE5ADD1E5 ACIDIFIES AC1D1F1E5 BEADLE BEAD1E DISEASE D15EA5E DEALS DEA15 OAFS 0AF5 SACS 5AC5 BEFELL BEFE11 DALLIES DA111E5 LOCALS 10CA15 OFELIA 0FE11A ACIDIFIED AC1D1F1ED BIDDIES B1DD1E5 ELBE E1BE ABBASID ABBA51D ELBA E1BA SOLACE 501ACE CLASSIFIES C1A551F1E5 BOOED B00ED DIESEL D1E5E1 FALLOFF FA110FF SCOFFS 5C0FF5 ISLE 151E COCOA C0C0A BEADED BEADED LAID 1A1D FILED F11ED SECEDED 5ECEDED CALCIFIED CA1C1F1ED BIASES B1A5E5 SCALDS 5CA1D5 DILL D111 FIDDLES F1DD1E5 FELICIA FE11C1A ELOISE E1015E COOLS C0015 BABBLE BABB1E CABOODLE CAB00D1E SCALD 5CA1D SCOLIOSIS 5C0110515 BLED B1ED LEILA 1E11A ALAS A1A5 FIDDLED F1DD1ED SOSA 505A CASCADES CA5CADE5 DOCILE D0C11E CLIO C110 CELEBES CE1EBE5 SILL 5111 BELIEFS BE11EF5 DISS D155 SILO 5110 DOSSES D055E5 ISIS 1515 LOCAL 10CA1 EDDA EDDA BALED BA1ED FOODS F00D5 SALLIES 5A111E5 SLOE 510E DELICACIES DE11CAC1E5 OFFSIDES 0FF51DE5 EASEL EA5E1 CLOSE C105E EASED EA5ED DEEDED DEEDED BALES BA1E5 CEDILLA CED111A FADES FADE5 FAILS FA115 FABLES FAB1E5 BOBSLEDS B0B51ED5 BODED B0DED ICICLES 1C1C1E5 BOLLS B0115 BALSAS BA15A5 BOBBIES B0BB1E5 CASCADE CA5CADE FABLED FAB1ED ASSISI A55151 FADED FADED AILED A11ED OFFLOAD 0FF10AD SLAB 51AB CACAO CACA0 BODES B0DE5 DIALED D1A1ED OBSESSES 0B5E55E5 DABBLE DABB1E CLASSIFIEDS C1A551F1ED5 DADOS DAD05 BLOODIED B100D1ED BELLED BE11ED SALAS 5A1A5 BOOS B005 ABLE AB1E DABBLED DABB1ED BELLES BE11E5 BEDSIDE BED51DE DABBLES DABB1E5 FOBBED F0BBED BIDE B1DE BOCCACCIO B0CCACC10 DIESELED D1E5E1ED FACILE FAC11E DALE DA1E COFFEE C0FFEE ABACI ABAC1 LOAFS 10AF5 OASES 0A5E5 ALIBI A11B1 LOCALE 10CA1E CADDIED CADD1ED FLOE F10E ALICIA A11C1A DALI DA11 LADED 1ADED ASSAD A55AD BAFFLE BAFF1E FOLLICLE F0111C1E DISC D15C ODIS 0D15 ODES 0DE5 LADES 1ADE5 FACE FACE SOLOED 5010ED COLD C01D CADDIES CADD1E5 BLOODS B100D5 CEDE CEDE DODOES D0D0E5 ABIDED AB1DED DIOCESE D10CE5E DECLASSIFIED DEC1A551F1ED SCALES 5CA1E5 ADDIE ADD1E BACILLI BAC1111 ALSO A150 LABIALS 1AB1A15 ABIDES AB1DE5 DEAD DEAD FOLIO F0110 OBOES 0B0E5 LIAISED 11A15ED DECLASSIFIES DEC1A551F1E5 DEFACE DEFACE DEFILES DEF11E5 ELIDED E11DED BALLS BA115 BLISSES B1155E5 LABIA 1AB1A DELI DE11 SIDLES 51D1E5 FALSIFIES FA151F1E5 DELL DE11 CASCADED CA5CADED OSCEOLA 05CE01A DALES DA1E5 FIEFS F1EF5 CLASS C1A55 SADES 5ADE5 DEFILED DEF11ED COFFEES C0FFEE5 ALLIES A111E5 ACACIAS ACAC1A5 FALSIFIED FA151F1ED DECADE DECADE DEBASED DEBA5ED SELL 5E11 DECAF DECAF ABSCISSA AB5C155A CALLABLE CA11AB1E FOLLICLES F0111C1E5 SASSED 5A55ED LIBELED 11BE1ED BOLDFACE B01DFACE BALDED BA1DED SASSES 5A55E5 SLEDS 51ED5 ICED 1CED

Genesis

Well, I’ve been thinking about going back into blogging for some time now…I haven’t been able to make the determination. However, now I think the era I’m going through right now is too precious to go wasted and without any trace. So, I’m going to try my best to write blog more often to record this period, although not everything is wonderful and pleasant, the memories will be there forever and will remain part of myself.

Gloomy Monday - Rant on VT shooting incident

This is a typical Monday…alarm clock goes off in the morning but you just don’t want to get up and go to work…finally when you have enough determination to go to work, the weather is as gloomy as sh*t. On top of that, it was drizzling all the way and heavy wind, which is perfect to start a week with… Barely made it to the company thanks to the roaring north wind.

About Me

I’m a software engineer living in the Greater Toronto Area, Canada. I graduated with distinction from University of Toronto, Computer Science program. My favourite programming language is Python while I admire the beauty of Clojure and Scala. I also write Go, some Ruby and JavaScript (of course). I love docker, rabbitmq and ansible I use console vim with tmux for almost all of my coding; Arch Linux at home and Ubuntu at work.