Jekyll2023-03-07T17:14:48+00:00https://www.andrewapperley.ca/feed.xmlApp Developer | Avid Coffee Drinker | Analog PhotographerI'm an experienced Full Stack Software Developer that has a passion for writing well architected, elegantly implemented, and scalable code across the entire stack, though I primarily focus on mobile.Andrew Apperleymail@andrewapperley.caThe Blips Servers will be shutdown2015-06-16T07:42:00+00:002021-04-19T12:11:11+00:00https://www.andrewapperley.ca/blog/legacy/development/update/the-blips-servers-will-be-shutdown<p><em>This was the most stressful, yet most intriguing project I have ever worked on.</em></p>
<p>I started Blips back in 2013 when my now Fiancée and I wanted to have a central place to share photos or videos which was secure and easy to use, I also wanted to work on a project. Little did I know it would amass into such a big endeavour. The original designs were horrid compared to the final designs, but that was mostly due to the fact that I didn’t think the public would ever see the app and I was more focussed on the engineering side than the design.</p>
<p>A few months had passed since I started the project with a basic understanding of what I wanted to accomplish and the building blocks of a server and client side application to show off to people. Nothing really worked, the designs weren’t the greatest, and the server was held together by strings yet a colleague of mine still wanted to join the project to flush out Blips to its fullest potential. Having him join the team was such a blessing as he has an eye for design, knows when something can be better, and brought top notch iOS skills to the table that really helped propel Blips forward for the better. While I mainly focussed on server side development and integration with the client side, Jeremy focussed on polish client side. The beautiful timeline view in the app is all due to his hard work over a few months.</p>
<p><img src="/assets/img/posts/timeline_view.png" alt="Blips Timeline View" title="The beautiful timeline view in the app is all due to his hard work" /></p>
<p>The project as a whole is completely over-engineered and covers far too much ground feature wise for such an app in it’s first version. We didn’t want to launch an incomplete app but also didn’t want to keep adding features, even though at the time they made sense but by the end even the features that did make it in were too much. We had private and public timelines, per user timelines, favourite timelines, full profiles, CDN based asset management, load balancers with 4-5 servers waiting to be deployed, dedicated database servers, a robust video creation workflow, a very well thought out database schema setup, multiple CRON jobs setup to handle daily tasks, etc. Not everything was unnecessary but we could have shipped with less and added later, which is one of the reasons it took us over a year and a half to complete the project from inception to ship date. Once it launched we submitted two bug fixes and started discussing next steps. From these discussions we came to the conclusion that we were burnt out and didn’t want to touch another personal project for a long time, which I have moved on to other projects but they were mostly experiements or smaller ones. We have learned a lot from this experience but the servers must shutdown soon. At the end of June they will be turned off and the app will be pulled from the App Store. It simply comes down to cost to run the servers vs user traffic, which there is virtually none to speak of. Which is sad but a reality that we have come to terms with. Thank you for everyone that supported the project and to anyone that used it I hope you enjoyed your experience, even if it was brief.</p>
<p><img src="/assets/img/posts/blips_banner.png" alt="Blips Banner" title="Thank you for everyone that supported Blips!" /></p>
<p>Until next time, I must get back to work.</p>Andrew Apperleymail@andrewapperley.caThis was the most stressful, yet most intriguing project I have ever worked on.Working with Dart, Polymer, and CloudMusic Progress2015-03-08T11:25:00+00:002021-04-19T12:11:11+00:00https://www.andrewapperley.ca/blog/legacy/development/update/working-with-polymer-and-dart<p><em>Overall First Impressions</em></p>
<p>When I started the <em>CloudMusic</em> project I needed to do something new and different. I didn’t want it to simply be an app that I pumped out quickly and did nothing interesting with. The server component is built on a highly modified version of the Blips server, which I cleaned up significantly and made more modular, also much more secure. The server technology was set in stone the day I jotted down the idea for the app but I wasn’t sure about the client. I wanted to experiment with Swift but after a few weeks of struggling with the language I threw out all the code. I began working at Publicis and for the first few weeks I didn’t have a concrete project to work on so I started researching emerging web technologies, where I found Dart then Polymer.</p>
<p>I’m a few months into the project and my overall impressions of the platform are: intimidated, satisfied, and impressed. Dart has a lot of quirks to it, mainly because of the fact that it’s so new and being rapidly developed, but being on the bleeding-edge has it’s advantages. I get to write a web application with a fully class based, statically and dynamically typed, feature rich and modern language where only javascript or languages loosely based off of javascript are used. I am fully aware that Dart is compiled down to javascript when not the app is not run in Dartium but I don’t need to deal with that code unless I’m debugging a browser specific issue, which I have not come across yet. This app is being built for evergreen, mobile browsers and takes advantage of all the newest HTML5 features that are making their way into the spec. One of the most interesting features is the ShadowDom. Polymer uses this extensively and delievers a blazing fast experience which wasn’t even possible before. The shadowDom is a virtual DOM that is encapsulated in a single Element. The <em>lightDom</em> then takes the delta changes and reflects them on the screen. You can manipulate the DOM without as large of a performance hit. This performance gain is very prevalent when using the <strong>Core-List-Dart</strong> component which provides an <em>infinite list</em> without having all the list-items in the DOM at the same time.</p>
<p>With regards to progress being made on CloudMusic - I have the server in a state where I’m happy with it but still need to improve the overall CMS UI, Authentication is finished, the different sections are being populated with real data, and the client’s UI is taking shape. Nothing is set in stone but the app’s look and feel are spot on with what I envisioned in the design phase. The next steps will be playing an actual song from the server, inner page creation: if I select a top level list item that isn’t a song-item I need it to show the next view (ie. I select an Album and I need the songs to be listed in a new view) and a user menu where they can change a few settings.</p>
<p>Until the next time, I must get back to work.</p>Andrew Apperleymail@andrewapperley.caOverall First ImpressionsIntegrating Polymer2015-02-12T07:31:00+00:002021-04-19T12:11:11+00:00https://www.andrewapperley.ca/blog/legacy/development/update/integrating-polymer<p><em>I’ve discovered Polymer HTML Elements and I’m never going back</em></p>
<p>Polymer is this unique framework for creating truly modular web UI. It allows you to segregate each core UI element on your webpage, which you attach a script and stylesheet to that are sandboxed to that element. What this allows the developer to do is import a UI element in the same fashion they import Classes or other libraries. It’s truly modular web programming but this time at the UI element level.</p>
<p>In addition to the flexibility Polymer provides the developer they also have two UI libraries that work with Polymer out of the box: Core and Paper. Core Elements are mostly unstyled yet complete Polymer elements that can be extended with either Javascript or Dart to fit the developers needs. On the other hand Paper Elements are fully designed and elegant UI components which are based off of Google’s Material Design Specs.</p>
<p>In CloudMusic, I will be using Polymer for the entire frontend design and more specifically Paper Elements. I find the aesthetics of Paper Elements to be very much aligned with my overall vision of CloudMusic’s UI so instead of reinventing the wheel I will be leveraging their design in the creation of the app.</p>
<p>Until next time, I must get back to work.</p>Andrew Apperleymail@andrewapperley.caI’ve discovered Polymer HTML Elements and I’m never going backStarting a new project2015-02-07T14:27:00+00:002021-04-19T12:11:11+00:00https://www.andrewapperley.ca/blog/legacy/development/update/starting-a-new-project<p><em>A different kind of project than I’m used to.</em></p>
<p>Blips has been completed for sometime now yet with existing changes I still want to make but I needed a break from that
app. I had been working on Blips for roughly a year and a half by the time we launched it and put out our first update.
I was at the point of exhaustion even when thinking about working on it, so I took a break and didn’t work on anything.
Knowing me though I eventually was needing a project to work on, that’s just how I am. I genuinely love working through
problems, solving complex issues, designing experiences, and being innovative. This must be why I’m a software developer.</p>
<p>While I was driving one day I noticed that my music had stopped playing, I ran out of music. This is my fault because
when I got my iPhone 5 I never transferred the music from my iPod onto it or didn’t make sure I had the iPod on me.
Regardless of those two facts, the truth remains the same: I don’t have enough room on my iPhone to store all my music,
have a nice selection of apps, and develop new apps. What I’ve come up with to remedy my situation is slightly backwards
thinking but it also presents me with a unique opportunity to develop a service I might not have thought of otherwise.</p>
<p><img src="/assets/img/posts/earlydrawings1.jpg" alt="Early drawing of CloudMusic" title="Early concepts of what I wanted the CMS to look like" /></p>
<p>I wanted to create a service or a tool rather that lets you store your music in a central location, have be secure,
easy to use, and work on any device(the streaming portion, not the CMS which I wanted to be desktop only). What I am
calling <em>CloudMusic</em> is just that, or at least it will be. It’s essentially a self-maintained iTunes in the cloud, it actually
uses iTunes’ servers to gather some extra metadata when you upload music files. I’ve only just begun the process of building
CloudMusic out and have a long journey ahead but I have the same feelings that I had when I started writing Blips, back then
it was called <em>Video-a-day</em> or <em>VAD</em> for short, which is joy and wonder and excitement.</p>
<p>I’m taking a lot of risks with this project but that’s what makes it so exciting. It’s not a project for others, while it
sure could be at some point, but it’s for me and will solve a real problem in my life. I’m writing the client in Dart,
the server in Python using Flask+Tornado which is the same server technology the Blips server is built on, and it will
run on a Raspberry Pi. I want to also incorporate a physical aspect to it beyond simply running the server on an embedded
system in my car. I’m thinking of showing basic information on a heads up display using an LCD that connects to the Pi’s
GPIO pins, they are inexpensive and will let me see what’s playing without having to look at my phone, or I might use the
display to tell me when the server is up and running and some stats about what’s going on under the hood.</p>
<p>I’ll keep producing updates on this blog as I make progress with the project, which is why I started the blog in the first
place. Until then I must get back to work.</p>Andrew Apperleymail@andrewapperley.caA different kind of project than I’m used to.