Categories: Portfolio, Software Development

Speaking at PyCon Canada 2017 on “Python as a Philosophy”

I’m going to be in Montreal this weekend for PyCon Canada to give a talk on “Python as a Philosophy”. It will explore some of the ideas that are part of Python, built into its core and affect its community and how those ideas have spread to other software and software developers:

A number of programming languages that have not been used quite as frequently as others contain “profound enlightenment” that a developer learns through their use. Languages such as Lisp and Smalltalk are in this category.

This presentation suggests that Python is also one of those languages. Python and PEP20 The Zen Of Python can affect how a developer writes code and then translates their practice into using other programming languages.

And more:

For example, my own hands-on programming in Python has allowed me to carry on a number of practices into JavaScript and Ruby. The talk will specifically cover “explicit rather than implicit” code and the value of documentation as a developer-user experience.

I will outline several examples and counter-examples of Python-inspired code practices within the context of JavaScript and Ruby.

Slides for the presentation:

Categories: Portfolio

Presentation on FreedomBox and Pokemon Go at ActivateTO

On 17 October 2016, I gave a presentation at ActivateTO, a Toronto-based non-profit that hosts a speaker series. It was located at Toronto City Hall which is a very nice venue, very organized with great audio/visual gear (projectors and mics). My presentation included FreedomBox.

The topic that night was Pokemon Go and its implications for society, including its impact on personal privacy, ethics and responsibility of the game developers to their audience, and how game players interact with one another.

My presentation covered community-building alternatives like Loomio and privacy protection like Signal and the FreedomBox, a suite of software for the Raspberry Pi (and other hardware). The idea is that Pokemon Go encourages people to form small communities but that they’re all within the service of one commercialized game development company that has profits as its overriding goal. I pointed out that Pokemon Go had, within a month, started to explore how to inject more advertisements into the game and I predict, at some point (maybe during the winter months) when player engagement drops and there are fewer people playing the game, that they will be look at selling data to marketers and advertisers.

presentation by Rudolf Olah on FreedomBox, Loomio and Signal related to Pokemon Go

The presentation was great to give and there were quite a lot of people in the audience and I hope I enlightened them as to the other possibilities that exist out there.

I also made a few choice remarks about the ethics and responsibility that software developers have to their users/audience and how in 2016 we can’t ignore basic privacy implications in the code that we create. We have to be far more responsible and communicate more with our users to ensure that we’re doing the right thing.

Categories: Leadership

4 Things To Know About Teamwork

Here are the four things to know about teamwork:

  1. When the situation is tense, call a timeout, it’s the only thing that will work
  2. Information needs to be as close as possible to the team members that can make use of it
  3. Be aware of the message you’re sending as a team leader, senior developer, CTO because it affects how the team works together
  4. Some team members want to learn new things and develop their skills, you absolutely must help them do that whenever possible
Continue reading “4 Things To Know About Teamwork”
Categories: Leadership

How to apply cause and effect diagrams in IT and Software Development

Cause and effect diagrams, also known as Ishikawa diagrams, are one of 7 basic tools of quality. You won’t see them used very often in software development or IT projects though they should be. So today we’re going through what cause and effect diagrams are, why they’re useful, an example diagram, and case studies.

You will learn:

  1. What a cause and effect diagram is
  2. The usefulness of cause and effect diagrams
  3. Using industry-wide common causes as a starting point
  4. Example cause and effect diagrams
  5. Case studies, example cause explorations based on real-world experience
  6. Applying cause and effect diagrams, applications of the diagrams to explore root causes

Continue reading “How to apply cause and effect diagrams in IT and Software Development”

Categories: Software Development

VirtualBox Helpful Links

I was setting up some virtual machines with VirtualBox in the last few weeks and stumbled upon problems that I’ve encountered before.

Here are some helpful links for when you’re setting up a virtual machine in VirtualBox:

Continue reading “VirtualBox Helpful Links”

Systems Past: the only 8 software innovations we actually use

In the article, “Systems Past: The Only 8 Software Innovations We Actually Use”, David A. Dalrymple, writes that the major innovations in the tech industry were invented between 1955 and 1970. Since then, his position is that we have been incrementally improving on those concepts by lowering costs, improving performance and enhancing memory usage and optimizing various parts of the concepts.

I find that all the significant concepts in software systems were invented/discovered in the 15 years between 1955 and 1970. What have we been doing since then? Mostly making things faster, cheaper, more memory-consuming, smaller, cheaper, dramatically less efficient, more secure, and worryingly glitchy. And we’ve been rehashing the same ideas over and over again. Interactivity is now “event-driven programming”. Transactions are now “concurrency”. Internetworking is now “mesh networking”. Also, we have tabbed browsing now, because overlapping windows were a bad skeuomorphism from the start, and desktop notifications, because whatever is all the way in the corner of your screen is probably not very important. “Flexible view control” is relegated to the few and the proud who run something like xmonad or herbstluftwm on their custom-compiled GNU/Linux.

Can Bringing More Academic Ideas Give us More Room to Innovate?

Perhaps the solution to this incrementalism is to bring the ideas of computer science academia to the industry, especially the more esoteric ideas. For example, all the benefits of Haskell and type inference should be in mainstream languages. This is in fact starting to happen with Elm providing a better type system for front-end web development.

Though, on second thought, using better type systems and functional programming seem like more of an incremental improvement in terms of programming languages rather than a new innovation.

Can Using Formal Methods Give us More Space for Innovation?

It may be that when we reduce the costs of using formal methods, such as design by contract and model checking with Alloy, we will unlock more room for the abstract thinking that can lead to innovation. As it
is, in the daily life of a programmer (whether a web developer or or
embedded software developer), the main tasks are to piece components
together, find what functionality exists to be re-used and re-combined
and built upon, and to revise the code of others and to write many
many test cases to ensure the code is functioning as correctly as
possible.

Potentially there may be a reduction in innovation because we are not
giving developers more space to come up with revolutionary ideas and
not only to come up with those ideas, but to try them out and to
implement them in real-world systems.

Maybe we Just Need to use the Innovations we Already Have?

Maybe we do not need as much innovation, just the knowledge, skills
and time to implement the previous decades’ innovations. In the tech
industry, it is still possible to run across systems that have
absolutely no unit tests and have low quality assurance standards or
that do not use version control. How can we innovate when we still
have to deal with the security issues caused by the C programming
language? How can we innovate when we have created an industry where
the majority of work is in maintaining legacy systems?

How can a Software Developer get Started on Being Innovative?

A good first step toward innovative ideas is for software developers
to consider the bigger picture whenever they work on a project. By
this, I do not mean trying to bundle everything into a framework
(which we see happening with front-end JavaScript development and the
explosion of frameworks over the last decade with each stating they
contain brand new advances). Instead I mean keeping in mind that some
of the concepts used to solve everyday problems can be used to solve
harder problems. For instance, if the enterprise is building CRUD apps
or transforming data from one format to another, there must be some
other problem in there that needs solving. This problem could be a
deeper problem that cannot be solved easily by switching frameworks or
just adding a new library. It may require a new way of thinking or a
new algorithm or data structure to solve that the root problem.

Or maybe it is time to clamp down on the other parts of the
development process, and to discourage the poor management and poor
business practices that lead to failures in delivering projects and
lead to low overall quality in the development process. Possibly,
there is a knowledge/project allocation problem where we just need
developers to work on better projects where their talents can be
harnessed. The typical example of that would be letting the
junior-level developers worry about yet another CRUD app, while
allowing the senior developers and chief architects to work on higher
level skills. Maybe we need to go further and allow the bridge the gap
between academia and industry to be formed earlier.

It is interesting to think that the beginnings of the tech industry
spawned many great innovations and to consider that we are merely incrementing on those and re-implementing them.

Learning JsonCpp

Learning JsonCpp: a C++ JSON parser tutorial, is a code repo I put together for learning how to parse C++ with JsonCpp.

Read on to find out how to:

JsonCpp is a good solid C++ library to work with. I hope the code samples below show that you can easily work with C++ and JSON files. What’s interesting about JSONCPP is that even Google uses it in their C++ library for their Data Layer API.

Another cool thing about JsonCpp is that it gives you the ability to open JSON configuration files. This means you can re-use configs and build a faster more performant project out of a frontend web development project. You can use C++ and Node.js and get the best of both worlds through sharing JSON files and JsonCpp!

How to use Json Cpp for Parsing JSON files in C++ with iterators
JsonCpp Cheat Sheet
Continue reading “Learning JsonCpp”
Categories: Portfolio, Software Development

Presentation: Why PyCharm

Just created a short presentation for work about why I’m checking out the PyCharm IDE.

I wrote an article about trying out PyCharm for Python development. I learned to use it when working with Django (though I have used Emacs for web development usually). PyCharm has a lot of advantages and what I like about it, and RubyMine, is that you can use Ctrl+Click (on GNU/Linux and Windows) or Command+Click (on Mac OS X) to see where a method or class is defined or to find where it is being used in the code base.

Update: found a nice post by a VIM user who switched to PyCharm and found it awesome how integrated everything is.