I’ve never paid much attention to podcasts. Up until a few months ago I was
commuting to work by train and used that time to either read books, or play
games. All of that has been great and I’ve enjoyed the time I have had to read,
relax, or learn something new. Recently, I’ve had to begin commuting to work
which completely threw the routine I had developed.
Since I can’t really read or play games commuting, I had to find another
alternative. I remembered my iPhone has a Podcasting app built in so I decided
to dive in. After a bit of Googling, I came across Developer on
Fire and decided to give it a spin. The very first
episode I listened to was with Woody
Zuill. By
the time I had pulled into the parking lot, I had an idea I had learned from the
podcast I wanted to share with my team.
That experience hooked me on how useful a Podcast can be. I spend so much time
commuting each day and I don’t want to be wasting that time only driving. Since
then I’ve been searching for a range of podcasts to listen to. Here are the
podcasts I’m currently listening to.
At first, I was just listening to Developer on Fire and Developer Tea but it has
been great to expand that list with a few podcasts on other topics I’m
interested in. For example, The Psychology Podcast with Dr. Scott Barry Kaufman
is a great podcast that focuses on a range of topics in psychology. Some great
episodes have been on understanding and supporting people with ADHD and learning
about the concept of Grit.
Edit Your Life is also a great podcast about simplifying and decluttering your
life. Hosts Asha Dornfest and Christine Koh have episodes on varying topics from
parenting, personal finances and general relationship tips. I’ve found their
episodes to be fun and very informative.
Really branching out and listening to more than just podcasts has been a really
great and informative time. I’ll wrap this up now, but if you have any podcasts
you enjoy, please let me know on Twitter!
I like JavaScript, I really do, but I just haven’t been able to keep up with the
insane change that is going on in that world. Over the last several months at
work I’ve been building out a project that is mostly back end work. When I have
been able to do any sort of front end work, it has been in a desktop Windows
application using WPF.
While working on this application I started to realize I don’t have my finger on
the pulse of the JavaScript world like I once had several years ago. Things have
changed since Node and NPM made it incredibly easy to write JavaScript on both
the server side and client side and to distribute that code. I’ll be honest, I
got a little scared when I realized I just don’t know what all the latest and
greatest changes in the world of JavaScript. What’s going to happen if people
find out I don’t know what the next great Flux framework is? Or that I don’t
really know what all is going on with the next version of JavaScript? Is it
called ES7 or is it ES2016?
All of that got me pretty worried until a co-worker of mine dropped this
statement:
It doesn’t matter if you step away from JavaScript for a while. As soon as you
pick it back up, the next big thing will have come out just yesterday anyway.
I still think it is silly how much things are changing and how much churn is
happening, but I can take comfort in one thing. Everyone else will basically be
working on the next new awesome JavaScript thing for as long as I have.
Most of my posts are going to be something technology related but I do happen
to have other interests. For a while now, I’ve had a Sony a6000 that I’ve been
very happy with. I’m very much an amateur at photography but I find it fun and I
like the images I get of my family more than the ones I can get from my iPhone.
So I’ve been slowly trying to level up my photography skills. I’m definitely not
over 9000 yet, but maybe one day I’ll get there.
This Christmas, I finally got a tripod and it has gotten me interested in trying
to do some time lapse photography. Sony has a time lapse app but I wanted to see
what other options were out there. After a bit of Googling, I came across
DslrDashboard. Confusingly, the apps have been
renamed to qDslrDashboard, but there is an app for just about every platform.
Since I own two iDevices, I went ahead and threw down the $10 it cost for the
iOS app. At first, I was hoping to find a free option to do time lapse, but I
definitely feel better giving a developer my ten dollars instead of just throwing
it at Sony. Since I didn’t have my iPad right on hand, I started trying things
out with my iPhone. It took me a while to figure out how to get the app to work
with my phone, and honestly, I’m still not 100% sure how to get the thing to
work consistently every time. Here’s what it took me to get my camera and my
iPhone running the qDslrDashboard app running.
Create an account (PlayStation Network account, ugh.)
Go to Menu -> Applications
Application list on the a6000
Select PlayMemories Camera Apps
Application select PlayMemories Camera Apps on the a6000
Find Smart Remote Control app
Install it
I still feel pretty gross about having to create a PlayStation Network account,
but there you go, all the steps to get the Smart Remote Control updated.
Getting qDslrDashboard and the a6000 working together
To get the a6000 to be controlled remotely, you have to open the Smart Remote
Control application. This is as simple as going from Meny -> Applications -> Application List -> Smart Remote Control. Once you open the Smart Remote
Control app, the a6000 will create a WiFi network. Simply connect your device to
that network using the SSID and Password from the screen and the camera will
start in remote control mode.
This is where it gets a little odd with the qDslrDashboard app.
Tap the button until it works
The first tap of the Sony Wireless button has not worked for me, I often have to
press multiple times until it works. A little weird, but it does eventually
work!
Once you’ve tapped the Sony wireless connection button enough times, you’ll be
greeted with this screen of buttons. I don’t know for sure if qDslrDashboard
defaults to using a live view, but if it does you’ll see what the camera is
seeing as well. Otherwise you can tap the little Lv button in the top left
corner.
To get to the time lapse portion, you need to tap the time lapse button on the
right.
The time lapse button
The time lapse screen has a whole bunch of options to choose from. In the image
below, I captured a sample, it then displays a bunch of information about the
image you took to help you figure out what settings you’ll need to make the time
lapse. I don’t know what much of that means, but one day I will!
The time lapse screen
At the most basic level, you really just need to scroll down and click the
stopwatch icon. The stopwatch icon will let you configure the interval timer
which is the heart of doing the time lapse.
The time lapse interval timer screen
Setting the interval timer is pretty simple, but you do have to think a little
bit about it. When I first set it up, I wasn’t really reading what the screen
was trying to tell me. I set a frame count and then set the interval to 20
minutes. In my mind it was going to take pictures until the 20 minutes ran out.
When nothing happened for a minute or two, I realized my mistake.
The time lapse interval timer setup
If you want to have a time lapse go for a specific amount of time, you need to
factor in two things. The interval, which is how long to wait between shots, and
the frame count. The frame count is exactly what it sounds like, the number of
frames to capture. So, if I wanted to shoot for an hour and I was taking a frame
every second, I need to work backwards to get the number of frames.
If I have an interval of 5 seconds, it is going to look something like this:
(60 seconds / a frame every 5 seconds) * 60 minutes = 720 frames
So to capture an hour of time at 1 frame every 5 seconds, I need 720 frames
total. This will capture an hours worth of time, I do wish qDslrDashboard had a
way to say how long to capture as well, but it isn’t too difficult to figure out
on my own.
After that you simply press start and the camera will start taking pictures at
the interval. Easy! So how about after you’ve taken the pictures? Well, after
some Googling and playing around I’ve found two different ways to use the
time lapse. One is by making a gif and the other making a movie.
Resizing the images
Since the a6000 takes 24 megapixel (roughly 6000x4000), I resize the images
first. This is where ImageMagick comes in handy. The script below will find all
the images and use ImageMagick’s mogrify command to resize the images in
place.
for file in *.jpg do;
mogrify -resize 3840x2160^ -gravity center -crop 3840x2160+0+0 +repage $filedone
Note: This script resizes images in place, I do this because I export the
pictures from Apple Photos. If you don’t want to resize the actual image, you
can add -write resized/$file before the last $file. This will write out all
the images to a resized folder.
Depending on how you want the images cropped, you might want to play with the
-gravity setting. This script will crop all the images directly in the center
of the image. The 3840x2160^ resizes the image to a 4k resolution but will
preserve the smaller of the width or height.
I’ve played around with resizing images with ImageMagick before, but the credit
for this script goes to Dan Loewenherz’s great blog post Making a time-lapse on
the command line using FFmpeg and
ImageMagick.
There are many great tips from his post, so you should go read it.
Turning the images into a gif
If your time lapse is pretty short, you can convert to an animated gif quite
easily using ImageMagick. The command looks something like:
convert *.jpg -set delay 1 my-time-lapse.gif
This is the most basic way to create an animated gif from a series of images.
This only works if the Jpeg files are ordered. You can play around with the
-delay time and see how it turns out. ImageMagick also has a million other
things you can do so take a look at the
docs.
Turning the images into a movie
Once you have the images resized how you want them, converting to a movie using
ffmpeg is pretty simple.
This command will take the series of images and put them together into an MP4
video file. The -c:v libx264 command tells ffmpeg to encode the video using
the libx264 codec. This will encode it as an h264 video. The -pix_fmt option
sets the pixel format of the video. This is the color format of the video, video
players will use it to know how to display the video properly.
And with that, you will have the final product! Ffmpeg has a ton of option and
is a very powerful tool, I’m certain I will have more to write about using
ffmpeg to convert or create videos.
Choosing a new programming language to learn is difficult. What do I want to
focus on? Do I want to learn something low level like C? Do I want to go all out
functional and learn Haskell? What about Go? Everyone seems to be glowing about
that language. Elixir? I hear Rubyists are really digging on that language, and
it is built on top of Erlang! So many choices!
As you’ve probably guessed from the title, I ended up picking the Rust
programming language as the language I’d like to focus
on and learn about. So lets take a little bit of time to talk about why I made
that choice.
A way to delve into “systems programming”
“Systems programming” feels like this mythical place of expert developers
writing bare metal code to do things I can barely even understad. It is so
different from my day-to-day job that it feels almost unattainable. I’ve never
written anything in assembly, I can’t really read hex, and I’ve only barely
tried to write anything in C. It really feels like such a daunting task to get
into what seems like such a complicated topic.
Fortunatly, Rust really feels like an accessible language that could get me
learning about systems programming. I can learn how to manage my own memory, how
to write performant code, how to work safely with pointers and many other “low
level” bits of code. For whatever reason, Rust just feels like I can jump in and
actually do something. I haven’t felt that way with C or C++.
A C replacement
I swear, one day I actually am going to get around to learning C. When I do I’m
going to do it the hard way. But until
I do, one of the reasons I picked Rust is that it is explicitly aimed at
replacing C and C++ as the programming language of choice for prople writing
performance critical or low level code. I’ve started and quickly stopped
learning C and I haven’t found the motivation yet to stick with it and really
learn the language. I’m sure I will eventually, but I think the barrier to entry
has still been too high for me.
With Rust, I have been able to get going pretty quickly in the language and
start to learn bits and pieces about Rust while doing interesting things. I’m
sure I could also do this with C, but so far I just haven’t had the willpower to
stick with it. Rust, on the other hand, has kept me very interested and very
motivated to learn the language.
No GC
Another specific reason I chose Rust was that I wanted to try out a language
that does no garbage collection for me. Throughout my career as a developer I’ve
worked in a garbage collected language, and honestly it is pretty awesome most
of the time. But, since it is the only thing I’ve used before and I want to
learn lower level programming skills, I have to learn how to walk away from
garbage collection and learn how to manage memory myself.
Modern language features
As a final deciding factor, the language features that Rust provides are very
compelling to me. Generics are available and I am familiar with how to use them
in C#, Traits (i.e. Interfaces for C# people), pattern matching, etc. are all
language features that feel very compelling and interesting to use.
So there you have it, a few of the reasons that I’ve decided to spend time
really trying to dig in and learn the Rust programming language. I have much to
learn and will likely be sporadically sharing what I’ve come across so far here
on this blog.