Wednesday, September 20, 2017
Summer Progress
I got to learn about managing memory and pointers and public/private classes (and why those things exist at all!), and if this course represents the general direction that Software Engineering will go, then I'm sooo ready for it!
I've also been able to create an OpenGL 3+ context through SDL and start playing around with it. Previously I had done something similar through Python + QT, but I ended up realizing I was usng OLD OpenGL tutorials. Honestly, I had tried really hard to make sure what I was learning was relevant! It's pretty tricky getting started sometimes...Anyway, so I decided that with my newfound C++ knowledge I would give OpenGL another go. VBO's and shaders made things a little more difficult at this stage, where I'm just trying to display a triangle, but I finally got it working. Now I can accept keyboard input, play sounds and music, and change colors. I had to follow two different tutorials--this one was mostly about SDL but showed me how to get things compiled and running on Linux without using Visual Studio and this one had the most recent OpenGL information. I compiled the program in Linux and put it up here. Not sure if it's going to work on anybody's computer but mine for the time being...
Also, I made a video tutorial about Flask on YouTube, but it's not complete and the audio is pretty bad. I couldn't help it though! It's one of those videos you create more for yourself than anybody else...
Sunday, April 30, 2017
A chapter in my life: Leadership Course and Flask
The last few months have been absolutely insane. I just finished with a 3-month leadership course for College, bringing me to the two-year mark in my degree. This was a particularly challenging course because it involved a lot of interaction with other people. These interactions happened a few different ways: talking to people I already knew at work and Church, group chats online and also a 4-day long "Capstone" that I went to in Estes Park, Colorado. That was a ton of fun!The weeks after have been hard. Some of that I credit to the fact that something really fun had just ended, but I think there was just a lot of stress, too. Finishing up the rest of the course, taxes, meetings with people--not to mention my car had a timing belt go out, which meant the engine pretty much blew up! Everything piled on and it was really tough for a while there. But my taxes are now done, I have a new (to me) car and the course is completed. I think I've come to the other side of that whole mess, and boy am I glad!
But here is what really got me excited during those months: flask, a framework for integrating Python code in webapps. Boy, did I discover a whole new world here! I had been trying, for quite a long while, to make the tools I've already built at work accessible to the other technicians. The main problem I was running into was all the different computers I needed to install it on.
I had what I call "Techassist" running just fine on my computer: I could query databases for our customer manager, Email server, spam filter and our rate limiter along with a few spreadsheets full of equipment with their respective IP addresses. What this allowed me to do was automate certain parts of my work, allowing me to enter data once and have it reflected in three different places. No typos, no 5-minute repetitive typing process.
I'd been using this program for months, but every time I tried installing it on another tech's PC, I ran into two problems: first, I needed to do it when they weren't on their computers. That's pretty rare. Second, their platforms were vastly different from mine. One tech is still running Windows XP for crying out loud! The others had different versions of Python running, QT failed installation for some reason, all sorts of little annoying things.
So one weekend I just asked myself: how long would it take to implement those features through a webapp?
Now maybe you're reading this and thinking I am taking the wrong direction. If you do, please let me know your reasons! This was actually a really hard choice for me to make. See, I love KDE. I love QT. I love applications that work, on or off-line. For those reasons, I've tried to make my programs work using those technologies as much as possible. But I realized an app like this is going to need to be on our internal, private network anyway because it's constantly running queries to our servers. If I did this through a web server, giving everyone with a web browser the same consistent experience, I save a lot of headaches while ensuring I have complete control over the only device that's going to be making these automated queries to so many different databases!
Plus, I'll be honest, I'm a visual guy, and I love Material Design. It's so easy for me to create what I want with CSS because I've used it forever, and this was a nice way to demonstrate what I could do in a way that was made more difficult (for me) with QT.
So I experimented with Django and NGINX for a few hours that weekend. I've always wanted to learn Django, but I quickly learned this would take several hours more than what I was ready for, just to get something simple working that day. Then I found Flask. It's similar, uses some of the same components (Jinja2 Templating language), and I had a basic webapp up in, I think, just under an hour? (Maybe I'm slow at learning from tutorials, but it was still faster!)
Fast-forward three weeks: I have been given my own virtual server hosted on our network at ATC Communications. I've got that server successfully talking to 2 different databases and we can import a service order by typing in one number. From that one number, we can now create a whole new user account just by reading data from one database and inserting it into the other! There are also actions for updating and removing accounts. I've implemented a search function that can find the device we're looking for by name and can launch a telnet session, separate browsing window or local management program based on the type of device!I can add to any of these features or implement new modules without taking everyone else down or asking them to update. Everyone can get to this program and use it with no installation*! I set up a link where they can report errors directly to me. And, of course, it's all tracked with Git. I feel like Flask has enabled me to go crazy with all these tools I've had working but had no way to share! I'm so glad it's working and am looking forward to adding to it in the coming weeks.
*Okay, fine, you got me. If you want launching of what I defined as "radwin://" URL's to start a client-side batch script I wrote you'll need to download and run the custom registry file I created and the script I made. Let me tell you, that part is pretty sweet! You just click on a link and our manager program opens up with the username and password already entered and pointed at the right IP!
Sunday, January 15, 2017
Fresh Start on OpenGL
I think I've also figured out one issue that's been bothering me to no end. On my side project, PyQt2d, I kept running into the same problem. The program would run fine on two computers I have, but totally crashed on another, saying GLEnd was causing an error. Well, I now know, that's because my current computer doesn't support the by-now incredibly outdated GLBegin and GLEnd functions that were abandoned waaay back in 2010 with the release of OpenGL 3.3! Silly me.
So now comes the next task: getting my head around Variable Buffer Objects and GLSL shaders. I think this will be really good, though, because before now, I didn't know that's how most OpenGL applications are working now. Anything WebGL, OpenGLES, etc., uses VBO's. So if that's the future, by golly, I'm fine with learning!
On the plus side, I really look forward to starting to understand GLSL shaders. I've always been intrigued by how they can make incredible Chrome Experiments come alive, or turn my MineCraft world into a photo-worthy thing of beauty! Many of the things which I'm learning here also translate into C++ code, which gives me a head start on my college courses, which is always a nice thing.
With the end of the year comes the end of a successful college term. Some progress ahead, some behind, but at the end of the day I've got the number of credits I was shooting for. This next year, I'm going to be tackling more mathematics courses, finally starting some C++ coding courses and will also be finishing up with the last Leadership Course from College Plus. With this last one, I'll be attending a leadership "Capstone" event, where I'll travel to Colorado and meet with other College Plus students for a week. It's going to be a big jump for me--a long drive, time off work, etc.--but I think it will be good.
Looking forward to what this year will bring!
Monday, December 12, 2016
Stuff from December
First off, my project at work is finally coming together! I am able to query our MySQL database (after much research, trial and error) from one of our programs and am utilizing the REST API from another to bring two of our programs under control, inside one PyQT-powered interface that any of us can use from any workstation in the office! This makes me very excited. I've also been pulling giant lists of email addresses, going to each record and asking, "do you exist here? How about here?" until I came up with this massive list of accounts that I'm still wrapping my mind around. Big data, I guess.
![]() |
| Basic, early visualization of what the program should look like. Early. And very basic. Don't forget--basic. |
I hit the 1/3 mark on my college in November, and I'll know in a couple weeks if I passed a six-credit course over last Tuesday. Sometimes college feels like a slow, long trek. And, really, in a lot of ways it is. Persistent work over a long time isn't really a bad thing. But boy is it good to look back and realize I'm almost halfway there. It's going to be great to get there!
StackOverflow continues to blow my mind with their job search engine. Every once in a while they bug me to update my Developer Story, and I can't help but think that's the way of the future.
Found a great and I think rather insightful video about the over-complexity that comes with hundreds of people doing the same thing, or abstracting to a perhaps ridiculous level without making the process simple. I take it as a good reminder that anything I create really isn't useful to other people when it's hard to understand.
I purchased a green screen recently after realizing I have an entire room of my house just sitting empty. I have a lighting set from my time in professional photography and a few backdrops, but I knew I had to get a green screen when I saw this guy. I'm sorry, but live programming in front of the screen you're working on? That's just way too cool. I fully expect to embarrass myself trying to imitate this guy within the next few weeks.Okay, I think that's it for now. Having lots of fun as the family is getting closer and closer to moving to Nebraska! Sounds like we'll all be together for Christmas. I couldn't have expected how meaningful that would be at the start of the year. What a great way to end it!
Saturday, November 5, 2016
Hackathon 2017
This month has been so much fun! Between projects at work and going to a hackathon in Denver I've been growing in so many ways. I've been learning things about Python, QT, JSON, jQuery and the REST API. It has been a huge learning experience--a wonderful month of learning new programming skills and improving on old ones.
First of all, the hackathon was amazing! I joined on a team led by Josh Kruger, who I knew from the year before. We had a lot of fun working on a program that was originally his idea this year. Essentially, it's competitive giving: you give a set amount of money to a charity of your choice, and you challenge a friend to do the same. Then the two of you play a game (in our example we used Rock, Paper and Scissors). Whoever wins gets the combined money donated to their charity of choice! Win or lose you're still giving but it gives you a reason to want to win the game.
It was really hectic all weekend long: the first night we spent a lot of time just setting up the get repository getting everybody on the same page. When that was done, I worked on the front end and started learning how to use Bootstrap. This was new to me, but nothing all that crazy--I learned to appreciate it as lots and lots of CSS helpers that look really nice! The others had come up with a schedule and started working on game logic/server side code. I also designed the icon theme which was a lot of fun because the let me do what I wanted with it. I love material design, so I made some cool-looking buttons and icons that (I think) worked really well with the material theme. Of course, I was using inkscape for that. I love inkscape and I really impressed some of my teammates with what it could do while I was there. Josh introduced me to the atom text editor, and while I love the KDE text editor, Kate, I found some pretty cool features (usually installable packages) that made Atom an editor I can't ignore.
Once we had the interface working the biggest challenge was to get the animations done for the little game just to show who was winning and who was losing. We didn't get as far as we'd have liked, but we did at least have an interface and some basic pages that showed people the core ideas. It must have been enough because our team actually won! Best project started before the Hackathon. It's kind of funny, that's exactly what we won last year, too, with the Library Box project! Crazy how that happens sometimes.
There were some other seriously awesome some projects at the hackathon. One of those was an Amazon Echo artificial intelligence that would read you recent news articles from the internet, then it would read you a Bible verse that actually had something to do with the incident! It felt like science fiction listening to it at the demo. Another thing was an app to help people grow their relationship with God by helping to make daily habits. It would show you your history and things you'd learned recently. Looked pretty awesome! If they release that app I would love to use it Some day.
On my way back I was able to visit friends and family in Pueblo. It was a blast meeting people that I hadn't seen in months, especially my sister and Mom.
At work I have been having lots of fun working on linking up our mail server, spam filter and customer management software to automatically sync with each other. This means finding an API for each, learning how to use it, getting data from them all then intelligently acting on it. The first goal is to figure out where our duplicate accounts are, and which ones are broken or left over from old customers. Eventually, we'd like to automate account creation, too, and this is all possible so far with the tools I've seen that are available.
Our spam filter program has a REST API, which made things real easy. They even had a python wrapper for it, to boot! It was a little old, used Python 2, so I updated it to 3 and have been able to do everything I need. Our mail server uses perl scripts, and they already have put several on the website. Those pretty much do what I need. We keep a lot of the information in a MySQL database, and I've been able to log in and pull data from that, too. All these different parts are finally coming together. Automation, here we come!
Tuesday, October 4, 2016
Plasma LTS!!
https://www.kde.org/announcements/plasma-5.8.0.php
Wednesday, September 14, 2016
Flexbox!
Combining that with the media queries I am finally adding to my pages, I am finally understanding for the first time how responsive web design works. See, I only did enough to create a semi-fluid website (with some fixed-width elements, shame on me) for the website at work. Designing for mobile was always a goal, something I'd like to eventually do, but it was lower on the list. I finally got to it, and am realizing that designing for mobile quite possibly should have been my first step.
In addition, I've found some amazing resources straight from Google about responsive web design. I've been pouring through those materials as quickly as I can, and am finding lots of things I can improve on my templates. I'm having lots of fun with different layouts right now, and am finding the sweet spots for different layout types. Applying the new mobile styles to the existing site is taking some time, but I am so excited to see the way it will look and feel when I'm done with it.
Also, I am really considering spending $5/mo on a virtual server from Digital Ocean. If you have any advice, pros/cons, let me know in a comment below! Eventually I'd like to move this website over to something I can control a little more. Blogger doesn't allow me to edit the actual HTML and CSS of the site, which has always bothered me. It would be wonderful to liberate my pages! Let me know what you all think.
Monday, August 29, 2016
21
Oh, and, by the way, thanks to John giving me a tip while at Sturgis, you can now also access this website by going to zacharyhubbell.com. As it turns out, I'm incredibly lucky to own my name as a domain for less than $2,000, and when I found it cheap, I jumped. Perhaps this way I'll be scaring off less arachnaphobes...you never know!
Thursday, June 30, 2016
New Toy
I made sure the keyboard was something I enjoyed typing on, as I plan on using it as a portable, low-power programming machine. So far, so good!
Monday, May 16, 2016
New House
I may not have time to program on my own projects for a little while, but I'm coming up with ideas all the time! Codecademy never stops creating new courses that I want to take, but alas, I have to make time for it.
At this point, I'm just focusing on getting steady standing on my own two feet and finishing my college mathematics course on time. Keeps me busy, but busy is good.
Also got my motorcycle running and am developing the habits of mowing my lawn and taking out the garbage. Like it or not, adulthood, here I come...
Friday, April 1, 2016
What's Going On - April
I also found a promotional video for the hackathon I participated in back in November. I can't believe I missed it! It's pretty cool. Try to find yours truly in there, I think I was in the background at least a couple times. I made a TON of friends there. Man, I really need to get in touch! Nebraska gets lonely!
Other than that, still plugging along. Trying to blow through college courses when I can, work on Python/QT projects when possible, but things are hectic right now. I think that over the next few months things will start to get a little less crazy. But then again, a crazy busy schedule isn't always a bad thing...
Wednesday, March 16, 2016
Web Dev for a Weekend
Had a really bad/kind of good thing happen at work a week ago: our website got hacked. We had to take it down entirely for a few days, but it gave me the chance to do something I didn't think I'd be trusted with for a few months yet: rebuilding the whole thing.
To be fair, most of the main content has been copy/pasted back in. But what I did do is re-implement the pages using HTML and CSS, rather than the WordPress template we were using before. We needed a way to customize the page in some specific ways, and things just got simpler when we got WP out of the picture. If you want to see what it looks like now, feel free! But keep in mind it's still a work in progress...
I've had fun with web development since I was twelve, and it's always been one of those skills that is just plain handy. I've made basic websites in the past for other small organizations, but this one needed to be ready in as little time as possible. I spent some time over the weekend getting things in usable shape, then tweaking the interface to something that looked and felt pretty good. Granted, there is still a lot I'd like to change, but now that things are up and running again, I can implement things over time.
Otherwise, things are still going along like normal, my time split between work, education and coding projects (currently playing around with PyOpenGL and QT). After a couple months spent mostly on moving and settling into the new job, I finally earned another 3 college credits with "Introductory Psychology." What did I learn? The more we know about brains, the more we realize we have no idea what is going on up there.
As a side note, I played a game I think is very worthwhile. If you enjoy stories of hope and grace even through death and despair, you should try playing a game called "That Dragon, Cancer". I won't go into much more detail than that, it's really something you just need to play in order to understand it.
Friday, March 11, 2016
Spidey's back!
It's been kind of disappointing to see how long it took to bring Spidey to the Avengers--but that's not to say I didn't enjoy the films along the way. I grew up with the Sam Raimi films, so when I think of Spider-Man, that's the version that tends to come to mind. There will never be a true replacement for the characters of those films--Aunt May, J. Jonah Jameson, Norman Osborn--all were cast perfectly. I also enjoy the huge moral emphasis in every film. No matter who the bad-guy is or how many team up against him at once, at the end of the day, Spidey is left with the choice to do what is right and what is easy. Time and time again, though he doesn't always get it the first time, he chooses to do the right thing. That's inspiring, and that's what superheroes are supposed to do: inspire us to do the right thing.
Of course, I don't hate the reboot either. The Amazing Spider-Man films were great in their own way, and really showcased a playful, cool version of Peter that I enjoyed. No matter how many people down on the Amazing Spider-Man 2, I will always love that movie. You've got real dedication from a growing man who's trying to do the right thing mixed with one of the coolest looking (and sounding) bad-guys I've ever seen to boot! Add in to that some amazing swinging footage, and you've got a fun ride.
But now we get to see somebody take up the mantle again. I'm glad to see this finally take place, even though it means yet another reboot. It'll be great to see him with the others, even though he's coming in at a tense moment. But it sounds like the new actor will be a great fit for the role, and the design seems to draw from the older comics while pulling in some contemporary details. Expressive eyes are a huge part of how Spidey communicates in the comics, and I think they found a way to pull that off realistically. Here's to hoping it will turn out great!
</geekrant>
P.S. It's cool to see how they integrated a hexagon onto his suit. Much like the icon I've been using...hmmm....
Saturday, March 5, 2016
Image manipulation fun
Yesterday I was playing with an idea on my brother's favorite hero, Deathstroke. I created an outline of his mask, filled in some textures and played with effects until I got this:
Just some things I do for fun, when I feel like it.
Saturday, February 27, 2016
New Pad and OpenGL
![]() |
| Shares same code-base as "Kontinuity" |
I had a breakthrough with some of my PyQt coding a few weeks back when I was trying to insert an entry into a database and actually alert my data visualization (in this case, a grid or list) that the data had changed. I fought with this for several weeks, but finally was able to figure out the right way to pass the signal. Before, I had to close and re-open the program in order to see saved changes. Now, when you add an entry, it just shows right up in the main window! I also added a save database option, that actually writes changes to the hard disk (kind of important).
The difficult part comes next: OpenGL. See, I want to be able to put all these events on a timeline. There isn't some QT widget for a timeline that I know of, and aside from that, I want to have precise control over how this timeline acts. For that, I require OpenGL. I want to be able to draw a timeline my own way and be able to do just about anything with it--say, change the color of background for the era you're looking at, expand an entry in a certain year, or zoom in and out to look at weeks, months, decades, whatever you want to see in your view. A pre-built solution will not do because this would be a core part of my timeline program. So I figure it's best to get down to the nuts and bolts and learn how to do this right.
![]() | ||
| Both programs look pretty similar right now... |
While in the world of OpenGL, I went down a rabbit-trail on game development. I read an article that really got me thinking about how the medium of games is very much like that of films. Anybody who has known me over the past four years will know that I love telling stories through film. But many of the principles that apply to films also apply to games. Look at how both can be merely cheap entertainment or, if done correctly, they can tell a story in a unique and meaningful way. I'm curious about telling a story in this way, and would certainly like to experiment with it in the future. I don't need anything amazing to drive a point--for example, you tell a story using nothing but small squares. Just another thing that arrests my interest. When I want to learn about how to build a quality game, I watch videos from ExtraCredits, because I think they have some very valid insights. They treat games as an art form, much like how I was learning films need to be treated. In the same way, I view every program I create as a (potential) work of art.
Now that I am on an internet connection of my own, I can fully utilize some tools I'd like to share: Kiwix allows me to download an offline copy of Wikipedia's current state, while Project Gutenburg has an FTP server I intend to utilize. Also, I'm interested in the KA Lite project, and would like to have all three of these sources of information on my home server. Because, you know, I can! Data, data, data...
Sunday, January 10, 2016
Nebraska
My work as an IT Consultant, paired with my CompTIA A+ Certification, have landed me a full time job with an internet service provider in rural Nebraska called ATC Communications. It's a huge opportunity, and if I can do well at it (I'm learning the ropes ahead of schedule so far), I'll have a solid career option laid out for myself. I'm currently staying at a friend's house and looking for a place of my own to call home.
Right now I'm dealing with all the little details of a move--storing things, changing addresses, assuring friends and family I am still alive. One of the biggest changes has simply been meeting new people while adjusting to living away from those I knew before. My family is a long way off and every house, meeting and town I go to is new to me. It's going to take a while to get used to Nebraska. But the people here are more than friendly, which is particularly meaningful to me as I go through all these changes.
It's going to take me a while to feel really competent at my new job. There are a lot of things to master, but right now I'm learning to take calls from people whose internet, cable or phone connections are having issues and do some basic troubleshooting before dispatching a technician to fix the problem in person. It's challenging, but it is the kind of work that requires a fascination with information technology that I enjoy in a perhaps strange way...
I'm in the process of getting a more permanent residence (hopefully a house--I'd like to avoid an apartment). I'll keep working at my job, learning more every day. I plan on working on my college education at home, though I'll have less time to dedicate to it. And, of course, I'm always working on programming projects like Kontinuity. I've made a few small steps here and there, but for now my main focus is going to be making sure this move goes as smoothly as possible.
Perhaps the strangest part of the move is the greater sense of responsibility over my life that I feel. Nobody is going to tell me to put paperwork in on time or to check my oil before I ruin my engine--those responsibilities are mine alone. That's an intimidating thought at first, but I remember that this process will make me a better, more competent adult in the end, so I feel ready for the challenge.
Saturday, December 19, 2015
Kontinuity Progress
December has been a busy month. College goes on steadily, I am always busy at the Geek Squad, and there always seems to be just one more Christmas meeting or White Elephant gift exchange to attend. But throughout all the craziness that is life, I keep working on this strange little program, trying to coax modules to work for me, making different parts and pieces link together and start working. Slowly, but steadily, I am seeing something take shape.
Every step, every feature that I am writing requires a bunch of research to make sure if I'm going to be using the right tool, using it the right way, and if it will be compatible with the other tools I'm using. For instance, I could be using Python 2.7 or 3.5. I could use CSV files for data storage, or I could take a little more time and figure out how to use SQLite3 (more than that, there are tons of Python modules for using SQLite3)! Do I want to use QT4 or QT5? What about OpenGL--do I need to create a context or should I try to get by with QT's painting tools?
For the most part, I've decided on what tools to use. Now I am making them work, and that's the hard part. An SQLite3 interface is built into python, so I have a class that lets me input and request data. Easy enough. Thanks to ZetCode for helping me along the way.
I had some trouble getting that data into an actual QT widget. I have been pouring through the QT documentation and converting the C++ code into Python with mixed success. Most of it makes sense after I work with it for a while, but I am still perplexed at times. However, with some time and persistence, I was able to use QTableWidgetItem to throw my python strings into a widget. However, I noticed that after adding an item to the database, even if I tried to redraw the widget, I had to restart the application before seeing the changes take effect. Pondering this problem at about 1AM, I took a few minutes to research the root problem.
It's easy for me to look at the problem as a short-term one. I just need to force this widget to do what I want! Then it will all work, right? Wrong. I'm taking the wrong approach to displaying my data. With a widget like the one I'm using, the entire database is being duplicated for one representation. That means I've got two databases and I'm not modifying the one that's on the screen. I need to be using a model view.
So today I am reading this page which leads me to watch videos on YouTube where the problem is properly explained. (Again, I have to thank someone else on the internet for helping me move along--this time, the shout-out goes to Yasin Uludag--thanks!) Hopefully, when I understand better the base problem, I'll be able to use one database and represent said database in several different formats.
I'd like one of those formats to be using OpenGL, but I spent several hours on creating a context and just never quite got to something that works. I was really close, and I think I can get it with just a little more time and research, but I'm just not there yet. I found a tutorial from KDAB to be immensely helpful, even with it being written in C++. I can't quite get the "versionFunctions()" part working properly in PyQt5, and I suspect it might be because of the differences in how PyQt4 used to handle OpenGL. Not sure on that one, I need to keep researching and testing...
All in all, I'm finding that the only way I can build the tools I need is to keep doing my research. I have to rely on the work of others to get help in figuring out how to tackle the problems I face. But that's the beauty of building and sharing. When we create things, we want to show them to others, to inspire people to create even bigger and better things! I love it when I get those "oh, wow, you can do that?" responses, not because my ego feels like it deserves compliments, but because I know I am inspiring others to to greater things!
I really can't just get on my laptop and code for several hours, expecting to have some brilliant product in the end. That's not how it works. Coding is a process of research, testing and collaboration, and if I have any success, it's because I'm standing on the shoulders of giants.
I look forward to the days ahead (Christmas!!!), and to furthering this project. It's on GitLab for those who are interested, but be warned, it's not very impressive! (yet?)
Monday, November 9, 2015
LibraryBox
Had a great time at the Rocky Mountain Hackathon this weekend! There's nothing like staying up late coding and hearing a fellow student of Computer Science explain the basics of calculus at 3am!* I learned so much in such a small amount of time, and was actually able to make a difference with a team!I spent a lot of time learning about the various projects and how they are going to make a difference in our country and the rest of the world. Some of them were apps for connecting communities to church, others were more about getting resources and information to countries around the world. There was one that helps make translating the Bible easier, and possible to do online with others. Another team worked on an artificial intelligence bot to scan social media for clues of human trafficking transactions and report them to police.
The team I joined was working on a portable device that shares educational materials to others over a built-in wireless network. You might be wondering how that can be useful in areas of poverty if people have to have an electronic device to access this content. But that was one of the most surprising things I learned at the hackathon: these people may not have enough money for clean water, but most of them do have feature-phones capable of accessing digital media content! From what I understand, they often need them for online banking transactions. I hadn't thought that could be the case, but several representatives from WorldVenture and Faith Comes By Hearing backed it up.Because there are so many people with devices that can consume content, there is a huge opportunity for us to get them the materials they need. It gets really exciting when you think of it this way: before, you could bring physical books, which are much larger than this little device and could only be read by one person at a time. Now, with this pocket-sized battery powered router and a USB drive of our choice, we can send gigabytes of data at a time to dozens of clients at once! As long as they have a web browser on their phones, they can download the resources. You can put anything on the devices, really. We were loading them with multiple languages of Khan Academy lessons and K-12 Wikipedia articles (also in multiple languages, depending on the country).
To add to the challenge, we need something that is not culturally or religiously offensive. It also needs to be so simple and understandable that a completely illiterate child could look at the menu and find what they need, in their own language! That's quite a task. That's what I was working on late into the morning for a couple days, and I have to admit, it was a ton of fun.
I was on a team with four other people. I worked a lot with Josh, who was worked a lot on the backend, trying to get a chat interface and other features in working order. We had a graphic designer on the team who created an amazing new logo and several icons. Kirk, the head of the team, knew the most about the devices, and helped us get them set up and running with the custom firmware.
Although we didn't finish the project in the couple days we had, we were able to get an experimental interface more or less working, and we have a clear idea of what to do in the days ahead. I plan on keeping in touch with the team as I continue to develop the frontend. Josh helped me start adding some JQuery to my HTML and CSS code so it could become interactive. I've never used JQuery before, so a lot of my time was spent learning as much as I could in a short time, then trying to put that knowledge to use. I ended up with mixed success, but I put the project on a git repository so I can keep ironing out the kinks.
A little icing on the cake came when we were awarded "Best Overall started before the hackathon!" I was honored and amazed. I felt so undeserving because I just did some web design--nothing real special. But I was on an amazing team, and that team had an amazing goal: giving people a chance at education using the best technology possible who wouldn't have it otherwise. I'm so glad I was a part of that!
I can't believe how hard it was to say goodbye to people I had met just two days ago, but it was. I made some really great friends, met some incredible people and had an amazing time using technology for good. I look forward to keeping in contact and collaborating with the team in the future, and, of course, to next year's hackathon!
*No sarcasm there. It's strangely serene coding in the early morning, and I can't wait to learn calculus in more detail now.
Friday, November 6, 2015
Rocky Mountain Hackathon
While looking ahead, I am also experimenting with graphical programs. I don't have much right now, but I am currently using Python 3 and PyQt5 to create a program that can record a name, a type and a date, then output that in a new window. It's not much (yet), but I plan on having it spit the information into an SQLite database and display all the results on a timeline. I think it will be pretty cool, and it would certainly have helped me when studying for my Western Civ 1 college course!
The goal with this program is less about mapping the history of the world, and more about giving people a platform to create any timeline for any history and share it with other people so they can see what you want. That's what gets me excited about it!Wednesday, October 21, 2015
Lynx Program Downloader
You can attach your initials to signify who downloaded the program, and look through the logs to see which files succeeded and which ones failed. A filter decides what files to consider good (.exe's, .deb's, etc.) or bad (.html). Because of its open nature, anyone can take this program and make it run on as many programs and categories as they want by simply editing a CSV file that acts as the program's database.
In my runs, when I tell it to download all files, it takes hours and goes through gigabytes of data because I have so many programs in the spreadsheet! All on its own. It's pretty cool.
I encourage everyone who finds this at all interesting or helpful to give the program a try! You can clone or fork it on GitHub or download the source as a .zip or .tar.gz. You can also report bugs and request features here.
It has been quite a process: I started it at work as my very first scripting job. At first, it worked...unreliably. I never really was happy with it, so I continued on my own, tweaking it every couple weeks. Eventually I got people to try the program and review the code! I went through a ton of editing, changing aspects of the program, adding and removing certain features to bring it to a stable state. I think I have finally gotten to the point where it is stable, and I want to share it with as many people as I can to get it reviewed and tested. So here it is!
I am always getting ideas for another project, and in the future I'd like to use python and QT to create a program with a graphical user interface. I'd like to create a program that presents a timeline--something that a person could use to view certain events in history, whether ours or in a fantasy. I have ideas for filters, events and people to be stored in a database, and I want to be able to zoom in and out of any period in history. This project will be a little more ambitious than this last one, but I am excited to get started and look forward to seeing my work represented in more than a terminal.
I'll be supporting Lynx Program Downloader and working on this new project in my spare time between college and work. I look forward to it and am so excited to start working with Python and QT! Some day, hopefully, I'll be able to use these skills professionally, and I'd also like to work on some KDE projects. Until then, I've got some programming to do!










