Dada
|> Structures
|> Algorithms

Duolingo, The Negging Machine

I previously wrote about gaminification. While revising the drafts, I noticed that I spent a lot of time talking about Duolingo. So I decided to write just about the app with the cute, manipulated owl. So let's get to the main point:

Duolingo is an addiction inducing mobile game with a...

Review: Free Your Inner Nonfiction Writer by Johanna Rothman

The book, "Free Your Inner Nonfiction Writer" by Johanna Rothman is the best book on writing that I have read in my life. I am happy that I found it. I am sorry that it didn't exist before so that it could have been part of my life sooner.

"Free Your Inner Nonfiction Writer" is a...

How Sales People Use AI

Yesterday I saw a presentation on how sales people are usig AI. I discovered that they use it to automated their work. I found it very insightful.

So what did I learn?

First, sales people are doing a lot of manual, tedious work. Their before workflow consisted in finding emails...

In Favor of Human Written Documentation

You, the human, should write documentation when the document is meant to be useful for humans.

You, as a human, know your audience. You know what they know; what their background is; what they need.

Writing is mostly an act of empathy. We imagine ourselves as the audience. We...

The failure of Gaminifaction -- Summary

Gamification failed in the 2010s. This is my summary of a series of posts that I shared in Mastodon.

It failed because games are fun when they are not part of our duties. Adding badges and XP points to our chores won't fool anyone. So we feel manipulated, which leads to...

The failure of Gaminifaction

Gaminification and the programmed learning that went along with it failed. Especially the 2010s version, which still lingers, although the surrounding excitement has died off.

I enjoy games. I enjoy learning. I have loved educational games since I was a child; I still like them. So...

The Sketchbook vs The Machine

I find the current technological moment frustrating because it feels that we are engaging in many misguided practices in the industry. They are common, they are popular, so they are often presented as "best practices." These "best practices" are often applied willy-nilly everywhere, even to...

Thoughts on array puzzles

This is my first blog, maybe the last one too, who knows, where I review different type of computer science puzzles used on coding interviews. I am opinionated on silly topics, so why not? I will give a rating from zero to 4 saddy faces, because it feels so appropriate.

Array...

Thoughts on Inria's Advance Object Oriented Design MOOC in Pharo Smalltalk

Inria has created another great Smalltalk Massive Online Open Course (mooc) called Advance Object Oriented Design and Development in Pharo. It is a free,...

Getting Started with Rogue

As my entry for April Cool, I share a quick guide on getting started playing Rogue, the 1980s ascii adventure game.

I got into Rogue by playing Rogule, a daily minature roguelike online...

Reflections on Writing an Elevator Simulator in Scheme

This is another reflection on working with Scheme. I previously wrote one on writing a slot machine in scheme. This time I tried to write an elevator simulation game. Here is what I learned.

...

Reflections on Writing a Slot Machine game in Scheme

This is a quick reflection on my experience writing a Slot Machine game using scheme. Specifically, I used biwascheme All in all, I am so pleased with the experience. Here is a summary of what I have learned making this game

...

A set data structure in Racket

This is a little experiment with racket. I wanted to see how I could implement a set data structure. A set is a collection that can only have one copy of each member. This is the quick code that I came up with

...

Critical Thinking - Quick Tutorial

I complained that we talk a lot about critical thinking without telling people what or how to exercise critical thinking. So I wrote a quick tutorial

Critical thinking is having good skepticism. We strive for a golden mean: we don't accept everything as true, but at the same time we...

The Price of Renting Software

Renting software is considered the correct solution when we face the build vs rent question. There is an army of sales and marketing teams pushing the narrative that renting is going to be cheaper and better, allowing you to focus on your core business. As the common right answer, it is safer...

Documentation and Dreyfus' Background

At some point some manager will come up with a solution for people moving away from teams and leaving with knowledge of the system. We can document it well, so people can come and go without the team losing knowledge. We just need to be sure to document everything in our undocumented...

General Notes on Developer Documentation

Aphorism for better developer documentation

...

Try Vim and Emacs: Personal History

When I started programming, a lot of the experienced developers would encourage people to use vim or emacs. Some were so enthusiastic that they made it into a badge for being a real developer.

I wanted to be a real programmer, so I set off to learn them. I recall working through the...

Try Vim and Emacs

Vim and Emacs are old text editors, both created in the 1970s, about 50 years ago. Both of them have a steep learning curve. In both cases, the effort is worth it. You will learn new ways of working with text, code, and editors. You will learn tools that are free, easily available, and kind...

Grounding your Team in Reality

We should ground our teams in reality whenever we can.

As ridiculous as it sounds, it is necessary to remind us and remind others to reign in our hopes and dreams back to reality. Mainly because it is so easy to become untethered. Once we are disconnected from reality, it is hard to...

Business Innovation: Picking a computer language

You are starting a small, two-person company. You are the technical partner. You are bootstrapping. Your product will go against well funded competitors. You are counting on speed and innovation as your advantage.

You are about to pick up a computer language. This is how you do it....

Innovation in the US

One of the most attractive, powerful, and hard to imitate attributes of the United States is its culture of innovation. The United States generates a lot of new ideas, inventions, and new processes. Innovation appears in all aspects of society: engineering, yes, but also education, political...

The myth of fear of change

What happens when you suggest changing how work is done, let's say, adopting waterscrum, the hot new process that adopts the best of waterfall with the best of scrum, and your employees start pushing back?

You could listen to your employees. After all, they are the people doing the...

The meta story of modern software development

tl/dr: Writing software is facing our ignorance and faillability. Our practices mean that we don't know what to do, and when we do, we don't trust ourselves

Stories are the main way in which we communicate with each other. We want stories. We want them history, yes, but we also want...

Small Steps Towards Functional Programming

Functional programming has been one of those topics that is popular for developers to study for a while now. Unfortunately most developers are not using a functional language to use at work, so this reduces the possible adoption, even when team members agree that it would make things...

Quick jinja filter in Pelican

I have articles on this blog that has sample code. Sometimes that sample code appears early in the article. This causes a problem with the teaser sample because sometimes the code markup breaks the rest of the list of articles, so it looks ugly and broken.

I recalled that in Drupal you...

Your team's programming dialect

We in the software developer world believe that a programming language, let's say, Python, is a single language, which will look the same everywhere. Python in particular encourages this idea with their, "there is only one way to do it" philosophy. Yet as people hop from company to company,...

The social context of technology work

Software has a tech bias. Our culture emphasizes technology while ignoring social dynamics. We choose to lose ourselves in technological details. This gives us the option to ignore the social dynamics. Some of us do it more than others. Our current culture pushes us in that...

Personal Software

I have been writing personal software recently, small tech. Software that solves my problems in ways that adaps to how I think and work.

It is unpretentious software. It doesn't want to become a framework. Often, it doesn't want...

Zettel System with Vim and Rake

Recently I built a simple zettelkasten system using vim and Ruby's rake library. This was an exercise in personal software.

Zettelkasten is a method for keeping hyperlinked notes. Its goal is to organize ideas and...

Tables for Layouts: a Fable

A long time ago many web developers used tables for layout. It was handy. It was an easy to do a layout. It was easy to understand.

"It is wrong, dead wrong," said the Tech Prophet.

"Tables are meant for data. Developers are misusing it for layout. It data markup, not...

A Poor Philosopher

I am a bad philosopher. I admit that I don't have a philosophy degree. I don't write philosophy papers. I don't keep up with philosophical trends. I get paid to write business software.

Yet it is philosophy's method the one that use the most to understand the world. It is what I do. We...

It doesn't deserve it

A coworker from sales asks you if you can help her manage her list of potential clients.

You could start by designing a new kubernetes pod that includes Postgres as the database, Redis for caching, RabbitMQ for the queuing system. One container will run Node.js to serve the React user...

Simple Programming

I have been interested in Design By Contract. I don't have access to Eiffel. I want to try them out in Ruby. I looked into the frameworks provided by Ruby, but I don't fully understand how it works. I read that they have a lot of limitation. Frameworks are in fact little languages that one...

The Missing Tech Context

Recently I ran into a discussion on a Ruby forum about the "right" way to implement a .double function. One solution used a case block that checked on the object's type. The other one added .double methods to the Numeric, Array,...

What is good writing?

As I was writing a brief review of Strunk and White's "The Elements of Style", I began articulating what my current ideas on what good writing consists in. I haven't thought about it for about 20 years. I realized that it had change since then.

Good writing is about empathy. You have...

Thoughts on Python's iterators

I just read Dan Bader's blog on iterators [1]. Iterators were this fuzzy concept that sort of made sense, yet never did. I understood that they were there and how to use them. I read the blog, I try the example, and it clicks.

The...

Python's args and kwargs

tldr

The *args and **kwargs parameter pattern is a way to collect an unknown number of function arguments. The names "args" and "kwargs" is a convention; the important part is the single or double star. A single star will return the arguments as a list. The double start will return...

Python's doctest

tldr

doctest [1] is a library that allows you to write python examples in comments or text documents. This is handy because you can write examples, test them, and have the peace of mind that they work.

Here are...

Python's yield

The short answer

Python's 'yield' is used instead of 'result' when you are creating results via a generator function. Think of generators as some sort of a lazy, stateful function that returns one item at a time. Why would we want that? We would want this when consuming a huge amount...

Python's with

The point

The "with" statement can be thought as syntactical sugar that replaces a try: except: finally: block with a cleaner syntax.

Let's focus on the practical application of with. This is an example taken from the PEP. You will see how clear the code is. What you see is...

On Misspelling

English is notoriously hard to spell. It is perhaps one of the biggest hurdles that people learning English have to go through, after learning how to make English sounds. Yet language learners and native speakers can both share in the frustration of its spelling system.

One would think...

Slow writing

In the last year I have found it hard to write. It feels that it is hard to express what I am thinking in sentences. When I do write, I notice weaknesses in my logic; in my construction of sentences; in the grammar of the sentences; and a lot of misspellings.

I have thought a lot about...

pyenv starter pack

In my transition from Ruby to Python, I quickly found that there was a familiar experience that made me feel like I never left the Ruby: libraries won't work well in certain language versions.

The common solution for this problem is to find a version manager. For personal projects I...

Power makes you stupid

We all have heard how power corrupts and absolute power corrupts absolutely. Probably more worrisome is that power stupefies and absolute power stupefies absolutely.

Although we have been taught that intelligence is an individual trait, it is to a large extend a communal one. Humans...

Frameworks Should Make it Easy

Frameworks should make your work easier. Yes, there will be moments when you will have to fight with the framework to get something done. These cases should be rare. In general, you should not think about a framework or be happy when using it.

Ideally a framework lets you get your...

Why don't we practice self-reflection in Agile?

Self-reflection is my favorite part from agile. Call it a retrospective or a post-mortem; at the end of the day it is self-reflection. This is the self-correcting mechanism. You see what you have done. If it is not working, you do something else. If it perhaps the essence of agile. You can...

Goals over Process

Sometimes when we learn a new methodology we become eager to implement it. It is like buying a new board game and being eager to play it with others.

In our zeal to implement these methodologies, we may lose track that a methodology is a means to achieve a goal. The discipline is not...

Find and Replace Recursively

grep -rl "Chunky" . | LC_ALL=C xargs sed -i ".bak"  "s/Chunky/Bacon/"

Every so often we need to mass edit some directories. That should be the job of sed. Yet sed doesn't find files, so you need...

Listen instead of getting buy in

I learned recently that product owners and managers are trained to seek team members to buy-in into new process, goals, or plans. This was an unfortunate word selection. It undermines building trust in a team. It frames the relationship between managers and workers the wrong...

How to Design a Function

This is a small template that teaches you how to write a function. This template distills a number of great practices into a brief checklist. This short checklist, which is the core teaching of How To Design Programs book, concentrates writing code,...

Web App Challenge: Rails

Documentation

Rails has a lot of documentation. Finding a solution on Google is easy, and if one pays enough attention to the version number, correct.

Using postgres

The process of finding the documentation along with implementing it was easy.

Tools

I...

The Five Minutes Problem

In fields like chess, math, and computer science, you need to do the problems to learn. You cannot learn just by watching a lecture. It is a skill that one must cultivate via doing.

But the question is, how much should you spend on a problem that you cannot solve?

One school of...

Looping in Ruby

Looping in Ruby is usually a delight. ...

Getting Started With Byebug

This is a very quick guide/checklist on how to install and get debugging with Byebug, a Ruby debugger. ...

Functional Programming in OCaml, 1-2

Functional Programming in OCaml is an online book compiled by Michael R. Clarkson. It is used by Cornell University for their functional programming course.

I enjoyed reading chapter one. They explain the goals...

Survival Ruby Reflection

Ruby has a strong reflection system. This is useful when you are debugging. The more you know, the easier debugging will be. But if you are starting, the following ones will make your life better.

my_object.inspect

This will give you a string representation of the object. Very...

When you Are New To Rails

Are you an experienced developer? Have you been tasked to help out in a Rails project? Do you feel confused because there are no 'require' statements and variables seem to mushroom out of nowhere? Does Rails seem too magical to you?

If this describes you, don't worry. I have gathered...

Using Pelican

I am in the process of cleaning up the site so that I can start writing again. I have decided that I will do two kinds of writing. One is very careful; I think of them as real articles. The second type are quick learning notes. My ideal site would have a section for those more well thought...

Django, first impressions

I am working through the Django tutorial. Here are some thoughts.

There aren't any real controllers. Interesting.

The instant admin area is amazing.

Pluggable apps are such a great idea.

The way to define fields seems pretty straight forward. Using a more object...

A Friendly GUI Debugger for Ruby

I have been learning Smalltalk. Smalltalk is very similar to Ruby. And Smalltalk have these great programming tools. I am particularly impressed by the object browser and its debugger. Smalltalk was designed so that the system would be learnable. If you wondered how something worked, you...