Advanced Programming: Google Engineer

This past Tuesday we had a developer from Google come to our school and give us a talk about working at google, and some practices. Along with a few pointers to tools that could be useful. This speaker was so much better than the last, IMO. Then again, the material covered by the other person was denser; Operating systems. I’m going to post my notes, and a do a little bit of research on the tools and tips given to us.

Alright, he started with an introduction, and his name, though, I will probably leave that out, incase he accidentally said something they shouldn’t. Which, for the most part, I doubt. He did stop himself mid sentence once. So, guessing their secrets are safe. 😛

He mentioned something called BOOST, while he was talking about version control. Now that I’ve started using git, I’m probably going to become an addict. So, what’s boost? I don’t know, but he kept talking about it, so I just googled it, ha.

Boost provides free peer-reviewed portable C++ source libraries

I would book mark it and read it later, then do some sort of overview of it, but I know that book marks are were intentions go to die. Hence, I will read over it a bit now and see what’s up. Based on their site, I am very sure it has everything to do with C++ libraries. Also saw something about python, so they might be doing a variety of languages. Boost itself, is a set of libraries that lets you do cool stuff. Not gonna go into too much detail, since this was one of a number of things covered in the seminar. And, I will most likely not use it anytime soon, at least not for academic purposes, since there is a standard to maintain. It does look like something I could use on a side project then.

He mentioned fancy things like using various versions of the same code. And how that is hard to monitor. A snippet about frameworks. And, why does wordpress keep changing every  time type something!!! If.. I wanted to look at other sites… while.. I was typing a post… I think I would just completely not do a post… That’s just annoying, and distracting… give it to me when I’m done, thank you.

Back to the notes. He discussed building from head, and how great it was. There was only one source tree. Which he said was “by far the simplest solution” to how to store and edit code.

-Faster bug fixes
-Scales well

-Constant code churn: a “real bad situation” since it takes a long time to build, and each build is a compilation.
-Changing APIs may affect the world: If you change an API, then you’re changing it globally! And the code is seen by everyone in Google! Careful!

One of the niftier things he said was how everyone was encouraged to edit anyone else’s code. So, if you find a bug in someone’s code, you can edit it. Then tell the group you edited it and send it for review. I believe he mentioned a few more steps that you realistically needed to take later in the talk.

He did mention a strict styles guide… which was probably evident, given the company and the amount of code they deal with. And I believe they are available online, let me take a look. Yeap, there are a number of styles guides available from google. I knew they had a C++ one, and now I found them all: Google Style Guides!

Map reduce seemed pretty interesting as well. Apparently it’s a method of compiling large amounts of data in a very fast amount of time. It seems a lot like something in F#. When you map something to a function, or filter. Though, he didn’t go into many specifics. Just praised how great it works.

ClangFormat was another one of those nifty tools available to the normal people. It’s apparently a tool that help, or completely formats your code. I can see this coming in handy when dealing with huge amounts of code! Apparently made for the C language families; no support for the black sheep though.

I’ll finish it up with their version control, since this post is already longer than I’d like it to be. Then I’ll start up another section with Google’s famed 20% time.

He mentions how the general belief that google has a distributed means of version control and that is not the case. They use a centralized means of version control; probably why all Googleites have the ability to edit code directly, and why they need to be reviewed by the owners.  So, how do the developers get that centralized code to their machines? 2 ways, from what I gathered. A client in the Cloud~. The code is 100% available in the cloud… a form of code heaven… 😛 And the second means of getting access to that code is! A locally distributed version.

So, the person has a form of git, or version control, that is their personalish version control, along with the Cloud. They can experiment with code, and play with it, without actually committing it to the Cloud~. I’m guessing they’re issued their personal repository, along with one of the many glorious tools he hinted at during his talks… he had a little glint of joy in his eyes, I was just waiting for him to start giggling at the mention of his Google GI developer tools. So! This centralized version control, it’s pretty nice. This is what makes the Google wide changes so easy.  He did say something about Google3… not 100% sure, but it seems to be the root of all Google code… looking at my notes, not sure if he said that, I suspected it, or it’s a diversionary tactic to lure people to or away from their secrets.

That’s it for now, I’m about half way through the notes, and the rest may be trivial, so either another long post, or a short post in the near future.

Playing with git and gitHub

I’ve set up the repository earlier, and have just cloned it onto my machine. Aside from that, I installed the gitHub app for mac on my Air (there is apparently a windows version, and a mobile version?) First thoughts, I like it. It’s direct, and shows me what’s on the site, without having to be on the browser. Having a little fun with a test file, and am ready to help anyone install and do some basic commands. Looking to learn how to use the branch and merge commands to git. I do most of my coding on the command line, but will also be practicing with QT.

Continuation of CS 340 computer design project

So far we’ve come up with the ideas for the project, and have a generally sketched idea as to what it will look like. 

I’ve been thinking about what structs and functions to create. Also, what exactly will be needed inside of the structs. I’ll have to interact with all of the other frames within the game, and need to figure out how to integrate our parts together. Currently, I’m expecting there to be a shift in frame during key points. If something is selected, like p for pause, the pause menu will come up. If a person searches, and an adversary is found, then the battle screen will come up. Once the final boss is beaten, then the credits will roll! Never used QT before, but it doesn’t seem like that will be a problem.

I was thinking I could use the bubbles as nodes, since only one can be checked at a time. Also, I will need a function to make a next node available, along with one that changes the node from visible, to unvisited, to visited. A function will take a HERO node, and change the iamhere pointer to the current world. The world is going to be a list of nodes with a pointer to top, bottom, left, right. Once that is created, I can set each one to a specific coordinate in the qt window. The HERO will be able to traverse in the directions mentioned above. The node strut will need a few booleans, at least: inspected?, available?, requireKey?, color?. 

We currently have a seminar today, and have notified the rest of the group members that I will not be going to the today. The seminar is on operating systems, which is 1. related to a course that I am taking, and 2. a very interesting topic! The lab today is going to ask us to create a github account and install git. I’ve already created a repository on bitBucket, but had to change it yesterday to gitHub since the professor insists on using this. I’ve already created a new repository. The other members have created their new accounts, and are now contributors for our project.

I am requesting a meetup soon, since we need to see how everyone is doing. Discuss the structs, styles and other brainstorming for the project. If any of the other members decide to go to the seminar, I am also going to help them set up git on their machines, if they need help doing so.  (reading gitPro)