Thursday, December 4, 2014

HFOSS Quiz 2

0) Expand the following acronyms:

  • a) FOSS
    Free and Open Source Software

  • b) OLPC
    Stands for One Laptop Per Child, could also refer to the actual devices distributed (XOs)

  • c) tl;dr
    Too Long; Didn't Read

  • g) LGTM
    Looks Good To Me

  • h) RTFM
    Read The Freaking Manual
  • i) PEBKAC
    Problem Exists Between Keyboard And Chair (User Error)
  • f) LOL
    Lots Of Ligaments

1) Define the following instructional theories:

  • a) Didactic
    Focuses on engaging the student in a consistent scientific and educational style

  • b) Dialectic
    Also known as the Socratic Method it engages the student by asking questions and having the student deduce the answer on their own

  • c) Constructivist
    A system of learning that focuses on real world applications and hands on learning

  • d) Multiple Intelligences
    The idea that there is not one general intelligence on its own but rather human intelligence is derived from different intelligences that focus on different skills. For example someone may have a high level of linguistic intelligence that gives them a proficieny in language and writing but may have a lower logical intelligence and have a harder time with logic problems.

2) Describe the role of the instructor in each theory.

  • a) Didactic
    This is a traditional teaching style popularized by the old schools of Europe wherein the teacher is the one with the knowledge who imparts it onto the students. Teachers simply lecture to engage the students who must then engage themselves in what the teacher is saying to absorb the knowledge

  • b) Dialectic
    This style of teaching is more about leading a student to a conclusion of their own rather than telling them what the answer is to one problem and having them deduce the answer to another. Herein the teacher's goal is not to impart knowledge but to facilitate learning by administering questions.

  • c) Constructivist
    Similar to Dialectic learning where the teacher is again more of a moderator than an authority figure in this theory the teacher would be providing a "playground" for the students to work in to derive their own answers to more physical problems. A teacher following this style of learning may impart a concept to the students and then follow that up with a hands on demo to extrapolate the concept.

  • d) Multiple Intelligences
    Under this instructional theroy a teacher would be concerned more with which intelligence they are targeting with their curriculum. The teacher would also be concerned with which other instructional theory would best fit that type of intelligence they are trying to foster. A teacher of physics may feel that the intelligence that are concerned with is Logical-Mathematical intelligence and follow a more Dialectic or even Constructivist method of teaching while a teacher of rhetoric would be using a strictly Dialectic method to target a more Linguistic Intelligence.

3) What are the three key aspects of a lesson plan?

A Basic Lesson Plan's three elements are:
  • Objectives
  • Methods
  • Evaluation

4) How does Sugar integrate and implement constructivist learning theory?

The Sugar interface is based around the concept of "doing" things. Programs are "Activities" and the interface is designed to be explored. It's not holding your hand telling you what to look at, it's providing resources and paths to additional resources. On top of that I'd argue that the internet can do much of what a teacher would be doing in a perfectly Constructivist environment; the vast amount of information provided is a great asset when learning anything new and since the OLPCs can connect to the internet that already makes them a great facilitator of information. The internet however does not provide any sort of moderation.

Bonus: Where can new Sugar users and contributors go to find out more information, ask questions, and get involved?

The Sugar Labs wiki
Any IRC channel friendly to Sugar such as:
  • #rit-foss @ irc.freenode.net
  • #olpc-help @ irc.freenode.net

Tuesday, December 2, 2014

Lit Review 2: Hacking Politics TL:DR

Who
    Aaron Swartz, Alexis Ohanian, Andrew McDiarmid, Brad Burnham, Casey Rae-Hunter, Cory Doctorow, Dave Dayen, David Moon, David Segal, Edward J. Black, Elizabeth Stark, Erin McKeown, Ernesto Falcon, Gabriel Levitt, Huffington Post, John Perry Barlow, Jonny 5, Josh Levy, Joshua Bauchner, Julia O’Dwyer, Kim Dotcom, Larry Downes, Lawrence Lessig, Mark Zuckerberg, Mike Masnick, Nicole Powers, Open Congress, Patrick Ruffini, Ron Paul, The WGAW, Tiffiniy Cheng, Victoria A. Espinel, and Zoe Lofgren.

What
    Hacking Politics: TL:DR

Where
    Hosted on the RIT HFOSS class site here: http://hfoss-fossrit.rhcloud.com/static/books/hackingpolitics_txtwithcvfb.pdf

When
    Published in 2013

The Gist
        The TL:DR of Hacking Politics is a collection of quotes and anecdotes from a variety of hacktivists and politicians who were active in the fight against SOPA/PIPA and COICA. The various contributors talk about the causes, concerns, emotions and issues that surrounded the bills and the campaigns for and against them.

The Good
  1. Did a good job of drawing the reader in; it's just a collection of quotes, but it is by no means boring
  2. Even if you don't know the names of everyone in the book, their words have no less impact
  3. It does what a TL:DR is supposed to, and it does it well. By the end of it you know about the various issues surrounding SOPA/PIPA and what the bills would have actually done
 The Bad

  1.  Suffers slightly from obviously preaching to the choir
  2. Nothing in the TL:DR is cited or sourced; they're just quotes from prominent figures
  3. Felt a bit like it almost wasn't supposed to be read all at once; there was so much jumping around between voices it was a bit confusing.
The Questions
  1. The Writers Guild strike is mentioned briefly, I'm curious as to how much that impacted public opinion of SOPA/PIPA
  2. How much of the SOPA/PIPA bills were actually drafted/demanded by the entertainment industry's lobbyists?
  3. Was the goal of the bills aimed at curbing the 1st amendment or simply to turn a higher profit by attempting to shut down piracy sites.
Your Review
        If you weren't interested in SOPA/PIPA before, you will be now. If the TL;DR of Hacking Politics doesn't suck you into the book then nothing will. An excellent collection of quotes from many of the prominent figures in the fight for free speech and net neutrality. 9/10 Wombats.

Monday, November 24, 2014

Component Based Programmin'

Like every good Game Dev student interested in low level graphics I started writing a small game engine for my Data Structures and Algorithms for Games and Simulations class. I've learned a lot but what I wanted to write about was the magic of writing a component based system.

There's a reason Unity uses a component system for it's engine. It's elegant and modular; intuitive and powerful. It's a really great programming paradigm whether you're writing something simple or complex. Needless to say that actually writing a system like Unity is far from easy, but it's also really rewarding.

The way my engine is structured is that there are GameObjects and Components. GameObjects store Components, and Components store a reference to their parent GameObject. This creates the first architectural problem I ran into; making sure that there's no recursive header includes can be a bit tricky when the GameObject needs to include every derivation of Component.

From there I can have all the logic of the game modularized into core components and drastically cut down on the complexity of the architecture. Each GameObject just runs the Start, Update and Draw functions of its components. As an end user all I'm really doing is changing the core values of these core components and I can make some neat stuff appear on screen.

The big upside to all of this is that it makes it really easy to add scripting to a system like this. After some more core functionality gets sorted out an the game loop is modernized a bit I'm hoping to add Lua or Python scripting support.


Meetup 3: RocPY

Roc Py happened again. What even happened. I can't really remember all that well because I pretty much fell asleep. Not really, that would have been rude but the talks were far from engaging.

First up was the talk on the python module itertools. A neat little module that seems to double up most of the basic functionality of python with an iterable return value. I guess that's useful and flexible but I feel like that just adds an added layer of complexity on top of the possible Python Programming Paradigms. It's just another thing that you have to decide to use when writing something in Python. Are we using classes? are we doing a more functional style? are we using tabs or spaces?  are we using default or itertools? There are so many questions I ask myself whenever I write something in Python and I end up just getting confused.

Next were the lightning talks. Franky I can't really remember what they were about. I know that Ross Dylan gave a nice talk on distributed systems but as a game dev student it largely went over my head. Deployment isn't really a thing I ever have to worry about, or at least not yet.

The main talk was completely beyond me. I could not pay attention to it in the slightest. Something about using python to script advanced camera equipment? I feel like what took over an hour could have been summed up in 20 minutes. I get that not everyone is a great presenter but it was a tad ridiculous how long it took to reinforce the point that Python is a useful scripting language. There were very few useful code examples and the slide deck was just kind of a mess. I'd much rather have preferred a shorter talk with more hands on demo which I didn't even have time to look at.

Maybe it would have been much more enthralling if I enjoyed using Python but as it stands I was thoroughly unimpressed.

Thursday, October 30, 2014

Vid Review 2: Simple Made Easy

Who
    Rich Hickey

What
    Simple Made Easy

Where
    It's on Infoq over here: http://www.infoq.com/presentations/Simple-Made-Easy

When
    Date Published: Oct 20, 2011

The Gist
        It's a talk detailing a big problem with production level code which is the extreme level of complexity that software today is written with. Hickey details the sorts of programming paradigms that are inherently complex and goes into detail about the alternative programming styles that can help lower complexity of your software.

The Good
  1. I like how he explained how things fit in the mind and how we can only focus on so many things at a time
  2. In conjunction to the above I think the point he made about needing to bring in the understanding of any dependencies of your code into your mind as well and this can lead to a large amount of things required to understand an originally small piece of code.
  3. Did a good job at giving alternatives to the common complex programming paradigms he described
 The Bad
  1. His opening explanations of easy and hard, simple and complex falls pretty flat
  2. The video didn't show his graphs and slides :(
  3. I think he overstates the importance of the need for simplicity just because the end user wants it to be easy, not necessarily simple and that need of ease inherently leads to a higher level of complexity; you can't expect a client to relearn things just because you made them simple.
The Questions
  1. Does he actually expect people to write code with minimal complexity?
  2. Why is syntax inferior to data and is there anything we can do about that anyway?
  3. Variables are complex, does that mean we shouldn't use variables?
Your Review
        A nice video if you're interested in complexity in code and the state of the software industry. It's a bit trimmed down from the original talk because the slides aren't part of the video but it is interesting. If you're a higher level programmer writing corporate level code this would be interesting, if not it may go over your head. 6/10 levels of complexity.

Tuesday, October 28, 2014

XO Smoke Test

Well smoke testing my XO went mostly fine.

Everything worked except for running external bundles. When I put the Sudoku activity on either one of my flash drives, copying it to the XO didn't end up with a running activity. What happened was that the XO would recognize the files, let me launch the bundle from my flash drive, but it would fail to run. I tried copying it to the XO's memory and got the same result. This happened with two flash drives.

Then when I tried to install the StarChart activity from sugar labs I got an even worse result. The download completed surprisingly quickly but when I opened the journal there was no Icon, unlike the bundle copied from the flash drive. Also telling this downloaded bundle to open yielded... nothing. No error, nothing. The device just acted like nothing happened.

Everything else worked as planned. Audio plays, books can download, connections work everything besides side-loading bundles works fine.

Another thing I noticed was that there was a strange issue where if the laptop was nudged a little bit the wrong way, or if it was having some sort of hissy fit, the mouse would move around like crazy and just kind of click all over the place. Not sure what caused that, it would just seem to happen but I did notice it particularly after accidentally nudging the computer a bit.

Only idea for what could have caused the issues was that I left the XO on battery for a week or so with no charging, and then moved from the Gnome desktop to Sugar with no reboots. A full power cycle may fix some things.

Thursday, October 23, 2014

Meetup 2: ROC Py

I went to ROC Py, the Rochester Area Python users group again this Tuesday. The talk this month was mainly focused around Bridging Python with other languages. The speaker outlined and demoed the use of python with languages such as C, Fortran, .Net and even Java. Overall I liked the talk, it was well delivered, gave a good walkthrough of the procedures of extending python and for the most part I was interested throughout the whole thing. Where I draw issue is with the concept of bridging libraries.

In my opinion, you should never bridge languages for anything other than a library. If you need to do some very fast computational procedures and you're considering writing CPython, your best bet is to just write it in C or C++. I don't care how familiar you are with Python and how much you love it, there's a rule with programming. You choose the right language for the right job. Python is good for simple scripts and other lightweight applications. Many people choose Python over C for simple programs because of its ease and readability. You sacrifice both of those when you start bridging Python with C. If you need to do things very fast, just use C or C++, please.

The exception to the rule here is libraries. Why? because sometimes you need to do something that's just not exposed to your language without going deeper. For example I had to write a native plugin to Unity and I used C++. I've also written android plugins and for that I used Java. Why did I do this? Because Unity C# simply can't access DirectX and OpenGL the way I needed to. This was a plugin to be distributed next to Unity, not as a core part of a project. If you wanted to write an OpenGL layer into Python (for whatever reason) fine, use CPython, but even in that case I see C being a better option overall.

Something like Jython or IronPython (Python in Java and C# .Net respectively ) I understand a little bit better. Jython compiles down to java classes which should make it about as fast as Java on the bytecode level, but I doubt that the compiler is really doing a good job of optimizing that Python so the speed may not be actually as fast as Java in practice. IronPython is pretty much the same but .Net compiles down to machine code. Again the compiler optimizations are going to matter here so you may not quite get the speeds you'd expect from C# or VB. At least with Jython you keep the portability of Java but IronPython I don't really get. I don't really trust the Mono compiler all that much and Mono runs in a VM outside of Windows so you'll be taking a performance hit even further.

At the end of the day it doesn't seem like speed is going to be a big enough gain to offset the complexity of bridging Python to another language. I think it's a better idea overall to use Python to what it does well.

RIP: A Remix Manifest Vid/Lit Review

Who
    This was a film Written and Directed by: Brett Gaylor

What
    RIP: A Remix Manifesto

Where
    It's on Vimeo over here: http://vimeo.com/8040182

When
    Date Published: 2009

The Gist
        It's an overview of the state of "Remix Culture," the challenges it faces and the social implications by the precedent it sets. It outlines the battle between consumers and corporations over who controls media and why you should care about who wins.

The Good
  1. Did a good job outlining what copyright is and what is currently wrong with it
  2. Gave good examples of the current effects of the copyright laws
  3. Made you understand and sympathize with the opinion of the author
 The Bad
  1. Spent a bit too much time with Girl Talk
  2. A bit overly doomsday-ish to subvert your emotions 
  3. It preaches to the choir a bit
The Questions
  1. Where is this out of date
  2. Has Girl Talk received any legal action
  3. What are the current actions being taken to fix copyright law other than breaking it
Your Review
        While it may be a bit inaccessible to those unfamiliar with copyright laws or to those who don't care, if you want a good overview of the state of copyright law and you want to learn a bit more on the subject this is a good watch.

Thursday, October 16, 2014

Team Proposal - Number Munchers

Members:

Honeybunch - amt3824@g.rit.edu
Faokryn - faokryn@csh.rit.edu
Susan - slunn@csh.rit.edu

Project - Number Munchers:

Our team decided to work on a Number Munchers clone. Number Munchers is a game where you need to eat all numbers that meet certain criteria (i.e. multiples of two) while avoiding nasty monsters.

Roles:

We're kind of forgoing roles at this point. We don't need a whole lot of graphics or sound so everyone's job is just going to be writing a bunch of code. 

Source Code:

Will be hosted here

Upstream Mentors:

Easy Parts:

Setting up PyGame
Getting the basic game working
Making sure that the content matches up with the NY state math requirements

Hard Parts:

Optimization
Troggle AI
Balancing random content

How to overcome obstacles:

Getting the base game done is the main goal and overall should not be that difficult. It's a game praised for its simplicity so re implementing it should not be impossible. Obviously we won't be doing the exact content from the original but will be mixing it up with Fractions, Geometry and other requirements from the common core for 4th graders. The hard parts are just going to take work. Troggle AI is going to take a decent amount of work without overloading the hardware as later levels will be having multiple AI routines. It's just going to take a lot of playtesting to make sure the game is fun yet challenging.

Super Late Roc Py

So I'm really late on this one but I decided to do it anyway. Last month I went to something called Roc PY, the Rochester area Python meetup. I'm not really one to go to Hackerspaces, they're nice for socializing but I never seem to get much out of them. Roc PY wasn't really much different for me but that was for a lot of reasons.

First off, I'm not a Python guy. It's never been my language. I appreciate it and I think it's great for small scripts, web development and as a scripting language paired with something like Blender, but it's never my go-to language for projects. It's very easy to write but it lacks decent performance and frankly I don't like the syntax.

About the meetup though. It was tucked away in a dark scary corner of one of the back rooms at the University of Rochester. Okay it wasn't dark or scary but it was tucked away where if I wasn't in a group, I would have probably gotten lost. Besides the abundance of HFOSS students there weren't really too many other people there. A few U of R students showed up but other than that it was just a few older guys who use Python a bunch.

Really throughout the meeting nothing really stood out to me except for one guy who wanted to do a lot of geometry tessellation with Python. Not CPython or something like Blender scripting, just Python. While I did mention that Blender would probably be the fastest pure Python solution he said he had already brought Blender to its knees. I feel like this was a problem of "Use the right tool for the right job." Python's forte is not speed, it's ease of use. If you need to do complex things really fast, especially something like tessellation, you use something like C or, ideally, you use GPU accelerated compute shaders. That kind of irked me more than it should have.

I honestly don't think I'd go again by myself. I don't think I could find my way back to that room on my own to be honest, and Python just really isn't my cup of tea. Heck even if I was into Python I feel like hanging out on /r/Python or /r/LearnProgramming or some other Python related board on your website of choice would be a better way to interact with the Python community.

Monday, October 13, 2014

NY and MA Math Curriculum Comparison

How are the NY and MA 4th Grade Math Curriculum Similar?:

Well since the Common core has been implemented, they are virtually the same. They both focus on:

Multi-Digit Multiplication and Division
Dealing with operations in Base 10 up to 1,000,000
Understanding Fractions
Dealing with Measurements and Data
Identifying lines and angles

I really haven't been able to find many differences. In face both seem to be line for line identical save for the following discrepancies:

In MA, students are expected to "Know multiplication facts and related division facts through 12 x 12."

One that seemed an interesting concept to explore with a game was 4.G #2:
Classify two-dimensional figures based on the presence or absence of parallel or perpendicular lines, or the presence or absence of angles of a specified size. Recognize right triangles as a category, and identify right triangles.

I thought it may be cool to make a simple matching game but with images of different angles and intersecting lines instead of generic images.

The IGM Department and Curriculum

Depending on who you talk to at the school of Interactive Games and Media at RIT you'll get very different answers to the question "How do you feel about the curriculum?" Most of us will give a general thumbs up. While I'm in the general thumbs up boat I feel like there's a disconnect between what we're taught and what we need to know.

Lets talk the intro sequence. When I was here under quarters we started with Java and moved to C#, now in semesters it's all C# with XNA & Monogame. Frankly the move to just one language was probably a smart one, however there's something C# really lacks and that's a decent Command Line Interface (CLI). Anyone who does C# will straight up laugh at you for wanting to use the Microsoft or Mono command line tools.

Many of my peers will give me hell for saying that using Visual Studio for everything is a bad idea. Everyone here loves Visual Studio, even I do, but it's not a good learning tool. It's true that you'll spend a lot of time, when doing actual development, plastered in front of an IDE like Visual Studio but IDEs will change while the Command Line is timeless. I'm not saying that CLIs don't change or that the *nix command line never changes but that being comfortable without a GUI is really important. Anyone who uses Git on a regular basis will tell you that no matter now nice SourceTree is, you will still need to know how to use the Git CLI.

This is getting to the point where I'm sure you're asking me "Well what's your alternative?" And that's a totally fair question. Frankly there is no right or wrong way to learn programming, but every programmer will need to learn to use the command line at some point. I suggest moving from C# and Monogame to Java and a library like the LightWeight Java Game Library (LWJGL) which powers Minecraft. Java's command line compiler is robust and a good set of debugging tools. Not to mention LWJGL gives a better intro to OpenGL and transformations / matrices than Processing does.

Now I don't expect students to be using Vim to write Java and manually link LWJGL for the entire intro sequence, but spending at least the first semester in the command line would be largely beneficial. The lack of auto completion would facilitate more direct learning, Java is a widely used language, especially on Android and being competent with the command line will make learning other essential tools like Git and Mercurial much easier later on.

Thursday, October 9, 2014

Texture Leaks in Unity

Textures in Unity are easy. Super easy. Until you mix them with editor scripts. That's when all hell breaks looks. For you see, with C#, you cannot clean up your memory by yourself the way you can in something like C or Rust; you're at the mercy of the Mono Runtime. Now this makes games pretty easy to write, but when you work outside the game runtime and start writing editor scripts, things can get out of hand.

The short of it is, if you make a texture, and it's not passed to another texture variable, clean it up. Use DestroyImmediate or else you will be leaking dozens of megabytes every GUI update cycle. This sucks very badly. For Tyle, my tile editor, this problem was pretty nasty and the only way to see if I was making any improvements on the texture leaking was with the Unity Profiler. The profiler rocks, but is only available in Unity Pro, so I didn't always have access to it. This means that Tyle had some nasty leaks for many many commits.

The worst was with the selection texture. If you hover over a tile with the mouse, you'll get a nice transparent texture over the map texture to show you where you're selecting. Neat huh? Well turns out it wasn't so neat. because I wasn't destroying the previous texture before assigning a new one (it would change color or disappear depending on various settings), it leaked textures like no tomorrow.

If you create a texture in a script, you can still run into this problem but in an Editor script it can be much worse. It's not just about eating up memory of your game, it's about eating up memory of Unity, which can get very scary very quickly.

But Textures are just variables right, how are they leaking? You have to remember that Textures and Materials in Unity are not regular variables. They represent assets that could be on the disk, or written to the disk potentially. Not only that but caching them means that the engine can actually render them. Textures and Materials don't get cleaned up until you clean them up. Most of the time this is no problem because normally you'd just load a texture from the disk and apply it to a blank material. If that material already has a texture though, delete it before you apply the new one, or the old one will remain in memory.

Friday, October 3, 2014

Hudl Presentation

So last night (Thursday) instead of heading to the regular HFOSS class we were shuffled over to the MAGIC center at RIT for a presentation from the folks at Hudl. For those not familiar, Hudl is a service for coaches to upload and annotate footage of games and share that with their athletes to break down and analyze game performance easily. It's a pretty interesting concept and it's been doing well. They have about a third of the video traffic of YouTube which is an impressive 32 hours of minute uploaded a minute.

The presentation was done by a nice fellow named Rob, a software engineer at Hudl who has been responsible for a large deal of interaction between Hudl and the Open Source community. He gave a nice run down of why businesses do or do not use open source software. He also explained where OSS is used at Hudl and how it's been a generally positive experience and their goals to contribute even more back to the community.

Overall I really liked the presentation. It was well delivered and well thought out. He did a nice job juxtaposing different businesses that would or would not use OSS and why. He also did a great job remaining mostly agnostic when it comes to the holy war that is OSS vs Proprietary. My only real complaint was that, well, he was kind of preaching to the choir. Maybe that wouldn't have been the case for anyone there that wasn't a student in HFOSS but I think most of the people were. I think, in general, most of use want to be using OSS but I guess I'm speaking too much on the behalf of others.

I would have recommended the talk to anyone not familiar with OSS or curious about the role OSS plays in the business world.

Tuesday, September 30, 2014

Waifu Quest

So apparently I'm supposed to be doing more blog posts OOOPS.

I figured it was time to write about something then. How about Waifu Quest? Yea that sounds good.
What is it? Well it's pretty much the best game that's not out yet.

For my Game Design & Development 2 class (GDD2) we have to make a game every 5 weeks. We started with an analog game that we called Jailbreak which turned out pretty okay, and now we've concocted something weird. Waifu Quest is a working title for a JRPG + Visual Novel hybrid. It's so strange we don't even know what to call it yet. I don't want to talk about the game design just yet because it's still in the fledgling stage but I can talk about what I've been programming for it so far.

We decided to use Unity 2D for this because we were all somewhat familiar with Unity and it seemed like it would streamline the process of making this game. The only thing that Unity 2D doesn't have that would have helped though, is a tile editor. This was a problem considering that our top down maps would need to be done somehow and it's not nice to do tile based work in Photoshop exclusively. So I set about trying to write a simple tile based map editor before we started really had the whole game design ironed out.

My first idea was to have an editor script generate Quads in Unity in a grid. I thought this would be awesome, I just change the associated tile and I can save the whole map as a prefab; Perfect, right? No not really... Turns out that having 10,000+ game objects in a scene is a bad idea even with 2D. The engine could take a while to generate a big map and trying to move a big map after making it would be hell. Also I never even tried to consider what would happen if the user moved a tile off the grid. So that was a bad idea.

What I've done now is create a texture based system that allows a user to paint textures from tile sets found in their Resources/Textures/ folder. Creating maps is simple and painting them is even easier. I got smart and just implemented a way for tiles to be saved into a map object that can be serialized out. This way we don't have to actually *save* the texture that we're painting, just the metadata about where the tiles are on the map. This makes saving collider data also really easy because we can just save it all as metadata in the JSON file.

Loading maps is going to be kind of challenging but WyrmTale Game's MiniJSON fork makes it pretty easy. It's MIT Licensed too which is pretty handy. Just using MiniJSON wasn't enough because I have custom Tile and Map objects that I want to serialize out, but MiniJSON doesn't take care of custom data structures very well. WyrmTale's JSON script lets me define how my objects get read and written as JSON object. It makes my life super easy now that I know how it works.

That's it for now, I'll probably post more about WaifuQuest later seeing as it will be a cool, open source and ongoing project. Maybe next time I'll talk about the completed tile editor!

Commarch Report

For our Commarch Report we decided to analyze the great media player VLC by VideoLAN

If you're looking for our slides you can find them here.

Here we have links to:

    1. The project's IRC Channel
    2. Source Code repository
    3. Mail list archive
    4. Documentation
    5. Forum
    6. Project Website


A. Describe software project, its purpose and goals.

    VLC is, to put it simply, a media player to end all media players. It supports nearly every video codec, audio codec, metadata/tag type, subtitle format etc. It’s not designed to organized your media, but play anything you throw at it.

B.  Give brief history of the project. When was the Initial Commit? The latest commit?

    VideoLAN was started in 1996 as part of a school project by students of École Centrale Paris. The original goal was for the students to watch television on their PCs. They began writing VLS(VideoLAN Server) and VLC(VideoLAN Client) to stream and run MPEG2 images. In 2001, the school’s director agreed to change it to the GPL License and developers from around the world started working on the project. VideoLAN hosts Dev Days once a year, which they call a technical “unconference”. The last meeting was September 19th-21st, 2014

C.  Who approves patches? How many people?

    All patches are submitted to the mailing list, which has four admins: Konstantin Pavlov, adminvideolan (an unidentifiable person), Jean-Baptiste Kempf, and Felix Paul Kühne.

D.  Who has commit access, or has had patches accepted?  How many total?

    Rafaël Carré is in charge of the GitHub repository currently. They don't identify who else has commit access. Over 800 contributors have had patches accepted. List: https://github.com/videolan/vlc/blob/master/AUTHORS

E.  Who has the highest amounts of "Unique Knowledge?" (As per your "Git-by-a-bus" report. If there is a tie, list each contributor, with links if possible)

F.  What is your project's "Calloway Coefficient of Fail?"

    We calculated the Callaway Coefficient of Fail for VLC and the project scored a solid 40

G.  Has there been any turnover in the Core Team? (i.e. has the same top 20% of contributors stayed the same over time? If not, how has it changed?)

    Many of the top 20% of contributors have only joined the project since the last few years. The initial contributor, according to GitHub, Jean-Paul Saman, is still on the project but has not contributed as much in recent years.

H.  Does the project have a BDFL, or Lead Developer? (BDFL == Benevolent Dictator for Life)

    Jean-Baptiste Kempf is the President of VideoLAN, the non-profit organization that started VLC.

I.  Are the front and back end developers the same people? What is the proportion of each?

    The backend and the frontend are mostly separate. LibVLC has one set of contributors, and each platform's frontend (iOS, android, OSX, etc) each seem to have their own core developer(s).

J.  What have been some of the major bugs/problems/issues that have arisen during development? Who is responsible for quality control and bug repair?

    Feature Implementation:
   
    There are tons of on-going projects and features that people are implementing. Each feature has its own page and wiki, with pull requests being decided by developers of the current project. The wiki page for mini projects contains dozens of small projects sorted by “short”, “normal”, and “long”. One warning that the wiki page contains is Be careful, some projects may be unrelated, or deprecated, because of fast evolving software! Ask before you attempt! This lets people get involved in the community, and to be assorted rank.
   
    Bug Fixes:
   
    VLC has a rather in-depth bug tracker. This bug tracker is for issues specifically with the software and bugs, not for support, where there is a seperate forum named VideoLAN forum. There are detailed instructions on how to submit bugs. A warning suggests "Keep in mind that abuse of “high” and “highest” priorities will only attract ill will".

K.  How is the project's participation trending and why?

    Participation seems to generally be linear. The project is active and a stroll down the git log will find many commits to various parts of the project from the core devs every week.

L.  In your opinion, does the project pass "The Raptor Test?" (i.e. Would the project survive if the BDFL, or most active contributor were eaten by a Velociraptor?) Why or why not?

    Definitely, the development on VLC is very active from a wide range of contributors. And there are a few "Core" developers so if any one of them died, there would be other people to take over.

M.  In your opinion, would the project survive if the core team, or most active 20% of contributors, were hit by a bus? Why or why not?

    Yes and no. By far the most active 20% of contributors have a large percentage of the commits and know the code the best, however VLC has been around for a long time and has a large following and community around it. It seems like the kind of project that the community would try to support and continue development on if the core dev team got wiped out.

N.  Does the project have an official "on-boarding" process in place? (new contributor guides, quickstarts, communication leads who focus specifically on newbies, etc...)

    The onboarding process for VLC is quite detailed and helpful. There are several links in the Developer’s Corner on their wiki for things such as Get started at coding on VLC, the source code and lists of projects. There is also a hacker’s guide as well as extensive information on the different types of documentation. They also heavily suggest you join the mailing list to become involved with the community. In short, if you want to become involved in the community, it is more than possible and even easy.

 O.  Does the project have Documentation available? Is it extensive? Does it include code examples?

    Yes, the documentation for VLC is quite extensive. It uses DOXY generated styling, so most documentation is code generated, as opposed to a wiki.

P.  If you were going to contribute to this project, but ran into trouble or hit blockers, who would you contact, and how?

    The Mailing list and the IRC seem to be the places to be for VLC development. I would probably check the mailing list to see if anyone is having a similar issue and then jump into the IRC channel and ask if anyone is familiar with the project.

Q.  Based on these answers, how would you describe the decision making structure/process of this group?  Is it hierarchical, consensus building, ruled by a small group, barely contained chaos, or ruled by a single or pair of individuals?

    VideoLAN is a massive community, and there are tons of developers and contributers. That being said, the most active 20% of contributers seem to be in charge and generally work in a community census. That being said, the term “controlled choas” would also be an accurate representation of the VLC process. These guys really believe in open source and it completely a community driven product. There are thousands of people that contribute, even though it seems the original students that designed VideoLAN in the first place still regularly contribute. Final decisions for each merge to master are usually designated by the leaders of a specific project.

R.  Is this the kind of structure you would enjoy working in? Why, or  why not?

    I think it would be pretty interesting to work in. It’s definitely structured well and there’s a clear set of project leaders. VLC is well known and has been in development for a very long time so I imagine that the structure has to have been supporting that kind of growth.

Thursday, September 25, 2014

Team Proposal Commarch Report

List your other team members below

Name Email
Susan Lunn(susan) slunn@csh.rit.edu
Jennifer Stanton(AnnStan) jas2715@rit.edu
Arsen Tufankjian (HoneyBunch) amt3824@rit.edu
Colin O’Neill (Faokryn)

Which project did you chose?

VLC

2-liner description of the project?

VLC is a free and open source cross-platform multimedia player
and framework that plays most multimedia files as well as DVDs,
Audio CDs, VCDs, and various streaming protocols.

What will each team member's role be?

Person Role
AnnStan Question 4: Parts A - G
susan Question 4: Parts H - M
HoneyBunch Question 4: Parts N - R + Git by a Bus
Faokryn Question 5 + Question 6
Together we will hack things.

Source code repository URL?

git clone git://git.videolan.org/vlc.git

Commarch Assessment

In progress

List your upstream Mentor

In progress

How will you communicate with them?

IRC - freenode/#videolan
Mailing Lists - https://mailman.videolan.org/listinfo/vlc-devel

What are the easy parts?

*Running “Git by a Truck”

What are the hard parts?

*Getting people to respond on IRC

How will you overcome both?

You snooze, you lose.

Bugfix 1

So for my first actual bugfix in the FOSS community I wasn't sure what to do. There wasn't a whole lot of time to hunt down any new bugs in any big projects I was familiar with like CyanogenMod or Firefox (though I would have liked to) and any existing bugs that I found were WAY out of scope for the time frame. The bigger the project the more code to wade through and there was simply no way I could even get through the Firefox Gecko source code in a few days. So I settled with a cool little project I found on reddit called Cool Retro Term. 


Initially I tried to tackle a bug with the Bloom not scaling properly when you edited the settings. However despite the project being in QT5 which I am familiar with, the project is written in QML which I am not well versed in. So instead I opted to do a more trivial task. The README that was on the project had some screenshots that were pretty out of date and so I took some new ones and opened a pull request. Later that day the author responded and nicely asked for some changes before my pull got accepted. I made the changes and I'm still waiting on a response, hopefully the pull will be accepted but we'll see.

The conversation and pull request can be seen here

Wednesday, September 24, 2014

Software Freedom Day 2014

So normally I'm not a big Hackathon guy. They scare me to be totally honest. I've always been a competitive person but I've always been competitive at things that I was never very good at. Programming, something I take very seriously and something that I consider to be my "profession" becomes terrifying when put into the world of the competitive. I went to a Hackathon once before this and I stayed for a few hours, had a hard time and gave up. It was hardly a positive experience.

I went to Software Freedom day for a few reasons. One was that I needed something really exasperating to keep my mind off of personal things. Another was that I really wanted to win a Firefox Phone which I had heard would be the grand prize of the hackathon. I guess I'm kind of vein when it comes to competition.The glory and all is pretty neat, but I just don't want to buy my own cool little trophy, I want to earn it.

What did I actually do? Something kind of silly. Wanting to win the phone I decided I'd try to write an app for said phone. Of course my app idea was an old fallback. I really like Last.FM and wanted to make a scrobbler knowing well that there would be nothing like it on the Firefox OS platform. I learned exactly why that was as I struggled for well over 24 hours trying to write a simple application that would submit track info to Last.FM automatically. Turns out Firefox OS has no good way to communicate between applications so I was left with almost no real way to write this app.

At least not easily. I had a couple of ideas on how to nab some metadata from the music app. One was something that callahad (the mozilla guy at the event who's actual name I cannot remember for the life of me) stumbled across. The lockscreen of the device displayed metadata, how was it getting it? Turns out there was an event handler that it was using from an experimental IAC (inter-app-communication) API. Hacking that into the project would have been a nice solution. However thanks to the lack of documentation and not being able to get it working after a few hours I opted to try to hack in my original solution.

When I pitched the app idea to everyone my goal was to hack up the Gaia (FxOS frontend apps) Music app to write out metadata to a JSON file that I'd parse later with my own app. This hit so many problems. First one was weird, turns out that unless you rebuild Gaia, none of the Gaia apps have access to localization. This kills the app when you try to run it. After figuring that out and cloning down Gaia I ran into another issue. You can't debug Gaia apps in the FxOS Simulator which makes any sort of Gaia hacking very difficult. Especially when FxOS descides that it doesn't want to let me write anything out to the SD Card ever. I could not for the life of me get any of my code working inside of it. Callahad offered me the use of his Flame phone to try debugging the defunked muisc app. Turns out that replacing the music app files will just remove the app; I would have had to reflash Gaia to see my code running. What a headache.

By the time I got all this figured out it was all over. There was no time left and I was exhausted. The other projects were all really cool and I was certain that what I had spent my time working on was not going to stack up. Apparantly the point of a hackathon is to hack things, WHO KNEW, and I wound up with a fancy new Flame phone. Pretty neat, right?

What will I do with this neat new phone? Maybe I'll post a review of some sorts, or maybe I have some super secret plans for it.

Thursday, September 11, 2014

Quiz 1: The Pillars of Open Source

What are the titles of each Pillar?


  1. Open Exchange
  2. Participation
  3. Rapid Prototyping
  4. Meritocracy
  5. Community

What are the titles of each General Principle?


  1. Make it Interesting and make it happen
  2. Scratch an Itch
  3. Minimize how often you have to reinvent the wheel
  4. Solve problems through parallel work processes wherever possible
  5. Leverage the law of large numbers
  6. Document what you do
  7. Release early and release often
  8. Talk a lot

What are the similarities between Weber's eight principles, and the five pillars?

The principles and the pillars share quite a bit in common. What I noticed from the get-go is that they both aim to answer a lot of questions that people may have about open source and its community. They seek to provide a starting point from people looking into open source from the outside. 

What are the differences?

The main difference I see between the two is what questions they're actually answering and who those questions may be asked by. The Pillars seem to answer the question "What are the general ideologies that the open source community considers to be core." It'a s more political question than anything. The General Principles seems to be answering the question "What are some rules I should follow if I want to participate in the open source community." These read almost more like an employee handbook; they're a bit more "casual" and much more practical for a curious programmer wanting to get his/her feet wet. 

Monday, September 8, 2014

What Is Open Source - Lit Review 1

Who: Steve Weber

What:What Is Open Source and How Does It Work?

When: 2005

Where: HERE!

Gist:
The text gives a nice summary of Linus Torvalds and his fathering of the Linux Operating System and goes on to give a good description on the Open Source movement and the philosophies surrounding the phenomenon. It also does a decent job of comparing Open Source development to typical commercial development.

The Good:
  • A concise and interesting history of the early works of Linus
  • Good explanation of why people give away their work without compensation
  • Gives a nice summary of different license types

 The Bad:
  •  It is extremely dense and by no means easy to read; especially for something aiming to be an introduction
  • The "The Software 'Problem'" drags with lots of allegory that seems to miss the point.
  • While the opening history of open source was enthralling, everything else was rather a chore to read
Questions:
  • Who were some big players in the early open source movement? I only ever hear about Linus
  •  How do I actually go about licensing my software? Do I just add a license to the project?
  • Where can I go to contribute to the Linux Operating System? Where is the base kernel code hosted?

Review:
Weber provides a very in-depth introduction to Open Source as a whole that remains fairly accurate even today. It could really go more in depth with the history and the modern licensing types and could ease off a bit with the exasperating description of how corporate development differs from open source development. Despite being a somewhat difficult read it provides a host of information that anyone interested in Open Source development would need to know. 7/10 Would recommend if you like lots of words.