Categories: Portfolio, Software Development

Use JSON in Perl 6, article published

I wrote an article for codementor.io on how to use JSON in Perl 6.

It’s a good tutorial and introduction to Perl 6 which hasn’t seen wide adoption yet. It’s a solid language which has had a lot of thought put into it and the libraries that exist for it so far are good. Since it’s still Perl, it has that hack-y, fast-paced feel to it where you feel like you can quickly put together a one-off script to get the job done or put together an MVP (Minimal Viable Product). However, since Perl 6 is better designed, you can build a well-structured, well-engineered large project.

Learning new languages and how they work can help make you a better programmer and introduce new ways of thinking that can make it easier for you to find solutions to technical problems.

Categories: Leadership, Portfolio

Quoted in “The Secrets Behind Great One-on-One Meetings”

I was recently quoted in the free ebook from O’Reilly, “The Secrets Behind Great One-on-One Meetings”. As an aspiring interview coach for software developers, it feels great to offer advice especially on the subject of one-on-one meetings.

It’s a great short ebook and very useful for those wanting to see the value of one-on-one meetings. Teams function more smoothly when team leads and managers take the time to have one-on-one meetings. While it can be tempted to put them off or to try and broaden your reach by using surveys instead, a one-on-one is more useful and personal.

Check out the book and look for my quote!

Categories: Portfolio

Presentation: FreedomBox on RaspberryPi

Last weekend I did a technical presentation on the RaspberryPi, a small computer, running the FreedomBox GNU/Linux software.

Click here to download the presentation PDF “FreedomBox on the RaspberryPi”

In the presentation I walked through how to setup and configure the FreedomBox software which includes Tor, Privoxy, IkiWiki, XMPP and other tools.

While this presentation was technical, I am also available to give presentations on the tech industry and leadership in tech. The presentation was one hour long with a question and answer period and a demonstration of the working hardware and software. The key take-aways from my perspective are that it is possible to build something cool with the RaspberryPi within a weekend as a fun project and that it’s valuable to consider personal privacy and security as enablers of freedom and liberty.

Continue reading “Presentation: FreedomBox on RaspberryPi”

Categories: Portfolio

Slides for Open Source, Open Allocation talk given at 2015 Software Freedom Day

I just posted the slides for the talk I did at Software Freedom Day on 19 September 2015. The topic was open source and open allocation and how the two relate and how the future of companies is to mirror the open source development methodology. Open allocation allows workers to choose what they’re working on, with some caveats and limits of course. It works best when developers are aligned with the company mission and organization goals.

Categories: Portfolio, Software Development

node-oauth-libre

Update: node-oauth-libre 0.9.15 ALPHA is out, please download and test and report any issues with the new promises support.

In the last month I was looking for a Node.js library for authenticating with APIs that use OAuth 1.0a or OAuth 2.0, and found a pretty good library: node-oauth. It was great but it would have been nicer if it had promises instead of callbacks, and maybe if the OAuth 2 class implemented more methods. I started to worry that the library didn’t seem maintained, there were lots of issues and pull requests that are still waiting for a response or to be merged into the code.

I’ve also been reading Free as in Freedom and The Cathedral and The Bazaar and the hackers of each book, Richard M. Stallman and Eric S. Raymond, both took other projects and improved them and contributed back their changes and improvements to the community. With their maintenance, the projects (Emacs and fetchmail) had vibrant developer and user communities.

So I have decided to basically adopt the node-oauth project under the new name node-oauth-libre. This blog post is the announcement that I’m doing this and yes that means I’ve really forked the code. The node-oauth-libre project uses the GPL version 3, with the original code and patches to the original project licensed under the MIT license.

Continue reading “node-oauth-libre”

Categories: Portfolio

Did a talk at Software Freedom Day in Toronto on “Open Source, Open Allocation”

Click here to see more information about software freedom day in Toronto.

The talk was on 19 September 2015.

Open allocation: people get to decide what to work on and how. Gives people an opportunity to contribute to strategy, business objectives, etc. It’s bottom-up in terms of organization hierarchy.

Closed allocation: people get to decide how to work on something, they’re given the what by their boss, other department, client, etc. This is the typical way things work at a job and in most jobs this will continue to be the case.

Open source projects are open allocation; the maintainer or developer decides what they want to create and then creates it. There’s no external incentive making them give up control over what they want to create.

I’ll be writing more on this subject and hope to do a few more presentations to clarify the ideas, but basically open allocation is the future of (most) work. Our productivity levels are high enough that we can let people have 20% time to think of new projects and to work on them. At a typical company you’re losing value if you don’t let the employees on the front-lines make contributions to the strategy or business objectives of the company.

Categories: Portfolio

gcal-invoice/MountainView Invoice coding update

So I shared gcal-invoice/MountainView Invoice with a few people and they looked at the code and thought it was pretty good and I realized that I’ve neglected the project for too long because it wasn’t even possible to hit a running copy of the web app. So yesterday I spent the day getting JSCS, JShint added, the unit tests passing and documenting the setup/install process for the project.

What’s been done

This is what’s been done for the project:

  • fixing unit tests, adding some mocks/spies/stubs using Sinon for googleCalendar module, testing selectCalendarAndFilterEvents (which is one of the main parts of the app)
  • getting the unit tests to run with PhantomJS rather than Firefox
  • measuring code coverage with karma-coverage
  • integration with Codacy to check for code issues and automated code review
  • integration with Codacy for code coverage using node-codacy-coverage
  • fixing style of JavaScript code and unit tests to match Google’s JavaScript style guide (using JSCS for the style checking)
  • cleaned up a few small issues that JSHint caught
  • making the app webserver work with Cloud9 (using environment variables for binding the hostname/port rather than hard-coding the values)
  • getting the Gruntfile updated to run jshint, jscs, codacy
  • locking down some dependency version numbers
  • TravisCI integration

What is it?

MountainView Invoice is an AngularJS web app that lets you login to Google Calendar and select a bunch of events, enter an hourly rate, enter any other fees/discounts and gives you a nice daily table with the total, perfect for an invoice. I needed it while I was consulting because there were some days where I worked in 1.5-3 hour blocks, I had a few half hour blocks too and it was such a pain to go through them.

I didn’t feel the need for a time-tracker like Harvest because that’s too task and minute specific. I wanted the clients to look at how much value was delivered in the day rather than having them focus on minute-by-minute tasks. High-level view vs low-level details.

So anyway, it’s hard to up 1.5 + 3 + 0.5 + 0.5 + 0.75 + 1.5 + … for every day in a week for months was getting to be a pain big enough that it could use some automation.

With MountainView Invoice I would just select all the events in bi-weekly chunks, copy/paste the table of hours per day worked into an invoice. Then send it off to the client. Much faster and after double-checking the calculations manually and checking them with unit tests I was confident that I could just breeze through invoice creation.

Very important note: the code is licensed under the GNU GPL (General Public License) version 3 or later. I was considering making it AGPL and may do so if I continue to work on it.

Categories: Portfolio, Software Development

grunt2gulp: a tool for converting Grunt task-runner files to Gulp.js

grunt2gulp is a tool for converting Gruntfiles to Gulp.js files.

There’s a new task runner around, Gulp.js, and it’s supposedly very good (haven’t had a chance to try it yet) but there are still many projects using Grunt. If you want to try out Gulp on an existing Grunt-based project, it can be tedious to start rewriting things because Gulp is imperative and based on the idea of streams while Grunt is more declarative.

grunt2gulp a tool for converting Grunt to Gulp.js files
Click here to check out the source code for grunt2gulp on Github.

grunt2gulp.js helps make the transition from Grunt to Gulp. I used the files on this blog post as a test case, and I also used a Gruntfile from a strongloop project as a test case. Both test cases are included in the examples directory.

What I like about gulp from what I saw is that it’s a wrapper around orchestrator and vinyl-fs and it’s straight-forward. Grunt is monolithic from what I’ve seen and I think moving to Gulp will be a good move over the long-term. However, I think there is still a place for a declarative sort of task configuration file.

grunt2gulp

In any case, if you’re trying to move to Gulp from Grunt, check out grunt2gulp! Feedback would be great, and patches would be awesome.

Into Frontend Web Dev? Check out some of these articles

2017 Update: grunt2gulp is still being used but it seems now that people are moving from Grunt and Gulp to webpack (or Rollup.js). Gulp is still a very cool build tool to use. However, I recommend that people move away from Grunt as soon as possible on to more modern tools like Gulp and Webpack and Rollup.js.

2019 Update: it looks like webpack is the winner as the most popular JavaScript frameworks, Angular and React, are using it.

org-doing

org-doing

Inspired by the doing command line app for logging progress on to-do items and tasks, I decided this would be a neat feature to add to Emacs. The org-doing add-on lets you track what you are doing now, what you want to do later, and anything you have made progress on or completed.

It is an add-on for Emacs that hooks into org-mode. This means that, with timestamps, you can create an org-mode agenda-view that displays the tasks you have done in the last day and the tasks you have remaining to do. From there, you can add more notes or clock in the time or do whatever else you can do with org-mode.

The idea is to keep a worklog and notes for each task as you are completing them or making progress on them with just a few keyboard shortcuts.

Feel free to check out the code or the site.

StackOverflow Search (SOS) mode for Emacs

Emacs Stack overflow: StackOverflow Search (SOS) mode for Emacs

I was reading about a PhD student who created a plugin for an IDE that integrates searching for questions & answers on a knowledge base that included an easy way to insert code snippets from the answers in their own source code.

I use stackoverflow as often as I can and try to contribute answers but sometimes I have questions of my own so it would be nice if there were a quick, integrated way of using StackOverflow from within Emacs.

Type in M-x sos and then type in your search and the results are listed using org-mode. Eventually I want to be able to ask questions from within emacs and allow question buffers to be opened that are refreshed once in a while to see if there’s an answer yet.

Emacs Stack overflow SOS mode
Emacs StackOverflow SOS Mode

Update July 2017: Extending Emacs and creating plugins for it to increase productivity is something I enjoy doing because the pay-off can be immense over time. I’ve done this for running PHPUnit unit tests from within Emacs, highlighting AngularJS JavaScript code with Emacs, and highlighting Flow type annotations with React.js’s JSX syntax.