Update

I don't post here much.

I've been working in the bay for the summer. I have been getting out a bit on the weekends and mostly focusing on work during the week. I'm going to Africa in September after missing a flight to TZ early in the morning in June.

I'm working on a thing that parses your food journal and gives you a dashboard/insight into your eating habits, perhaps one day providing suggestions.

Merced Lake and Yosemite Valley Trip Report

This weekend a hiking group from school went to Merced Lake, near Yosemite Valley in Yosemite National Park.

Gear List

Sleep & Eat Tools

  • stove - cat food can with hole punches
  • fuel - half liter denatured alcohol
  • cook set - spoon, fork, small pot w/ handle
  • sleeping bag - big one, slept outside and was not cold. heavy though
  • sleeping pad
  • trowel
  • water filter
  • purification tablets (also drank out of the lake)
  • backpack (red coleman)
  • drawstring pack to hold clothes
  • tarp stakes, various ropes and ties
  • bear box to hold food

Clothing

  • boots (thanks dad)
  • light thermal
  • wool sweater - (worn) too heavy for what it does
  • gloves
  • running tights
  • running shorts - for swimming, day time chillin'
  • khaki levis (worn)
  • 2 underwear (1 worn)
  • 2 pair socks (1 worn)
  • sandals
  • backup poncho (didn't use)

Food & Water

  • water - 2L bladder (thanks mom & dad) and one squeeze bottle
  • quinoa
  • coconut oil - small bag (infused with seasons this time)
  • gorp
    • salted almonds
    • unsalted cashew pieces
    • yellow rasins
  • celery
  • almond butter
  • dried apples
  • all my vitamins/supplements
  • gin-gins

Diddies

  • semi roll TP
  • toothbrush & toothpaste
  • carmex
  • camp towel (like a sham-wow)

I was happy with my gear on this trip. I didn't feel like anything was unnecessary, and had enough of everything. I ended up with a leftover bag of apple slices and a quart of GORP, but had actually planned on staying out a day longer than we did. Will take more quinoa in the future though.

My intention and preferred 3-day plan is: day 1: drive up and hike in, day 2: enjoy, day 3: hike out and drive back.

2/14/15

Met at meeting place at 5 am. Drove to Yosemite. On trail at noon. We explored the valley a fair amount, there are a lot of attractions and sights here. The trail was gorgeous and 13.1 miles. In the first five miles we saw ~2000 people, last 8 miles we saw ~7 people. The trail led up around the falls and beautiful sights that I cannot fully detail here. We passed a fair amount of ice in the higher elevations, which was gnarly once it got dark around 6 or 7. We made it to our campsite by the lake around 7:30(?). It was dark, so we set up and ate some food. I slept outside in my sleeping bag and was not cold at all.

The trail ended up taking the group longer than planned so we decided that walking back and driving in the same day would be too much. We had tried to reserve a campsite in the valley the previous day, but they were on a first-come-first-serve basis. We were unable to make a reservation. So, the plan became to hike out Sunday, sleep in the valley, and wake up and drive home Monday.

2/15/15

Wake up and hit trail by 11:00am. I explored the lake a lot this morning, walked on some ice and took a dip. It was absolutely stunning. Yosemite absolutely lives up to the hype it receives. We walked back and took an alternate route for the last few miles. We eventually drifted apart and my group ended up on a longer route. Not a big deal, but we were split for a few hours. When we got back to the valley it was around 6:00, so we decided to eat and find our campground. Some folks already didn't want to sleep in the valley, so one car decided to go back that night. There was horrible traffic so we had time to kill. We walked around the valley through the shops and pizza parlors next to the camp sites. Pretty funky. It was incredibly crowded. We split and our group went to find the campsite. It ended up being full. We cooked our last meals and hit the road, arriving in SLO around 2:00am :(

It was a terrific trip and I will be doing it again. Next time, I want to hike into the lake and establish camp so I can do some runs to the other lakes.

Sespe Creek Hot Springs Trip Report

Over MLK weekend a hiking group from school went to Sespe Hot Springs in the Sespe Wilderness, in Los Padres National Forest. The trip was about 38 miles. Here is a gear list from memory, and I will detail the trip below.

Gear List

Sleep & Eat Tools

  • stove - bent
  • fuel - half liter denatured alcohol
  • cook set - spoon, fork, small pot w/ handle
  • hammock - slept in twice, once on ground
  • tarp - put under me in hammock or around me on ground
  • sleeping bag - small one, not super comfy in sub-40 degrees
  • trowel
  • water filter
  • purification tablets (didn't use)
  • backpack (red coleman)
  • drawstring pack for day hike
  • tarp stakes, various ropes and ties

Clothing

  • boots (thanks dad)
  • running long sleeve - from an old marathon, not warm at all, breathable
  • waffle thermal - (worn) too heavy for what it does
  • wool sweater - (worn) too heavy for what it does
  • gloves
  • running tights
  • running shorts - for swimming, day time chillin'
  • khaki levis (worn)
  • 3 underwear (1 worn)
  • 3 pair socks (1 worn)
  • sandals
  • backup poncho (didn't use)

Food & Water

  • water - 2L bladder (thanks mom & dad) and one squeeze bottle
  • quinoa
  • 5 can sardines (ate one or two a day w/ quinoa and coconut oil)
  • coconut oil - small bag
  • gorp
    • salted almonds
    • unsalted cashew pieces
    • yellow rasins
  • dried fruit
    • 3 pack dried bananas, trader joe
    • 4 pack dried mangoes, trader joe
    • 1 pack dried "sweet" apples, trader joe
  • salad
    • 20-30 radishes
    • 3 bell peppers, cut up
    • two handfuls of spinach
    • parsley mixed in

Diddies

  • half roll TP
  • toothbrush & toothpaste
  • carmex
  • camp towel (like a sham-wow)

1/16/15

We got to the trail head (Lion Campground) around 11:30pm. It was very crowded. After much deliberation we concluded it would be a good idea to send a few people in to secure a camp site and have the other 8 people hike in the next day. I was in the small group so we left around midnight. I don't know when we got to Oak Flat (8 mi from trail head) to camp, but I was asleep by 4am. Hiking at night was cool, we cut down off the trail once and had to climb about 10 feet to get back out. The rocks were a little loose and a large (tortoise sized) bolder pulled out of the wall and I fell back and it rolled over my leg. I thought it could have been broken but it wasn't.

1/17/15

The next day the rest of the group hiked in. I went back about 2 miles to meet them. We camped and ate the rest of the day. Oak flat is right by the creek so there is plenty of water. The next day we headed to Sespe Hot Springs (9 mi from Oak Flat). I only took a day pack with water and some food. Sespe hot springs was very restorative but we got eaten by some strange bugs. We walked back to camp that night.

1/18/15

The next day we broke camp around 8:30 and were driving away (8 mi from Oak Flat) by noon.

Sorry for the brevity, but I wrote this once and didn't save it and don't have time to go into detail.

A Month Developing on a Acer C720 Chromebook

I bought an Acer C720 Chromebook (11.6-inch, 4GB) recently. It was refurbished for $200.93. This was a very different purchase than the $1,300 MacBook Pro I bought after working all summer when I was 15. The trusty steed I rode during my first galactic endeavors into the universe of computation. The words do not exist to explain my love for that machine. I guess I don't love the machine, but the memories and knowledge it has provided. 5 years is a long time. I still use it as an alarm clock and to make music. I refuse to let it go.

The Machine

With that over, let's talk about the C720. You can find tons of reviews that can be summarized with: it's pretty good. Chrome OS can be criticized, and the trackpad and display are cheap. It was $200. My old MBP was heavy, big, and the battery only lasted 1-2 hours. The progression of OSX was beginning to constrict my 4GB of ram. The C720 is light, small, and the battery lasts plenty long. It is liberating to not need to think about sitting near a power outlet at school. My criteria were cheap, light, and good battery life. All of these are present in the C720.

The Software

Chrome OS is funky. Chrome itself becomes the interface to virtually all applications. Some applications appear standalone (like a text editor), but I am positive it's all WebKit underneath. The settings are incredibly sparse, essentially Chrome's settings and settings for the desktop.

Printing was delightfully easy, although I have yet to try it at school. However, it was only easy because I was fortunate enough to inherit a new-ish printer with Google Cloud Print capabilities. I don't think there is an option to print without this. It is cool that I can print from anywhere on earth.

Development and crouton

Ignorance disclosure: I don't entirely know how crouton works. "It stands for ChRomium Os Universal chrooT envirONment ...or something like that." You can put your Chromebook in Developer Mode, and quickly have a fully featured Linux environment. From here, everything is just a sudo apt-get install away. It's a little screwy, because your shell lives inside Chrome, and there are sometimes random issues. The only directory available to the native Files app is ~/Downloads. This is odd and I don't like it. My 1.4GHz CPU, 4GB of RAM and 16GB SSD isn't much. However, since most of my development exists in space (school servers, work servers, personal servers), I don't really need a ton of processing power in my pocket. It is good to be lightweight if you spend your life in the cloud.

There is obviously no way to do iOS development. I am keeping my old MBP for this, along with other things. There is no Logic Pro, there is no Photoshop. The web can be restrictive. However, most of my development lately is Java (school), PHP (work), and Python (life). Since I lived in the terminal on my MBP, things haven't really changed since switching over. I usually only use the SSH "webapp" within Chrome, but I could launch an xfce desktop environment if I need to. I could run GIMP here. I don't really ever use this.

Google and God share some letters

To nobody's surprise, Google has taken a lot of control in ChromeOS. Google Drive syncs files in your only visible directory, ~/Downloads, which I have tried to ignore by working inside other directories. The only real option for an office suite is Google's webapps. Google syncs all of your Chrome data, which is almost everything within ChromeOS. The only printing option is Google's Cloud Print. Sure, these things are handy, but Google has a whole lot of data.

I don't even know what else I wanted to say. I really like the little guy.

Tags: 

Finger Tracking

I cut two peices of a red plastic cup to play with a new camera module I got for my raspberry pi. I am now working on using these numbers to control a synth.

One Hand Words

These are some words that can only be typed with the left hand, 'qwertasdfgxzcv' and are longer than 9 letters.

aftercataract aftereffect aftertaste afterwards cataracted exaggerate exaggerated extravagate grasswards gravestead gravewards reaggravate reaggregate reasseverate redecrease redefecate retraverse revegetate stagecraft staggerweed starveacre statecraft stewardess streetward sweetwater tartarated terracette terracewards tessaradecad tesseradecade tesserated tradecraft versecraft waterstead waterwards westerwards

The right hand has 'poiuylkjhmnb', and can make these words. I don't know what any of them mean.

bibliophily bibliopoly hypnophoby hypolimnion hypophyllium hypophyllum miminypiminy ophiophoby phyllophyllin polyphonium polyphylly

Summer 2014

This summer I'll be working on iOS at Wealthfront in Palo Alto. Here is an article that describes the company and recent funding. I don't have much to say about it yet, but I like to post large life events like this here for anyone to read. I'm excited to be doing mobile full time and have a good summer in Palo Alto. Now to find a house...

Special Projects

I was fortunate enough to stumble across a project at school that has intereseted me, and I've began development on some new robotics projects that I'd like to discuss here.

One important portion of botanical research involves surveying and collecting plants from their natural habitat. A herbarium (pl. herbaria), is a collection of plant samples. They usually consist of a bunch of file cabinets containing large peices of cardstock that have a sample pressed to them and relevant information written down. If the plant is in danger, the physical sample can be omitted, and the information about the plant will still be useful. The field botanist will write down as much information as possible, such as surrounding species, physical details of the plant and position (soil composition, grade, sun quality, location, etc.). These physical files are digitized. Because herbaria have existed for over a hundred years, not all digital entries contain a GPS coordinate.

Samples will be dealt with at whatever organazation the collector belongs to (Cal Poly, Yosemite NP Herbarium, UCLA, etc.) and later combined into a huge database at the Consortium of California Herbaria. This is hosted at UC Berkeley. There are a few hoops before getting the entire data set, but you can search it online at ucjeps.berkeley.edu/consortium/.

There are a few issues in the pipeline, and finding solutions to these Special Problems will be a goal of mine next quarter. (I even get a faculty advisor and credit for my work.) Currently, the entire set of Cal Poly's data is in an Excell spreadsheet. Each herbarium has a different data housing style, which was designed to give each institution control and resposibility of their data. When the Consortium recieves a new set of data, they have scripts to convert each institution's data to the Consortium's database system. Then, if other institutions comment on the entry, that info never comes back to Cal Poly. There are entries dating back to 1880, and might be located at "Sierras", not a GPS coordinate.

Lastly, I am hoping to work with people smarter than myself to search through the data and use the massive data set to answer questions such as: are there plants where we didn't expect them to be? How have things changed over time? Where haven't we looked and should be?

That will be a self-guided class for school. The other project I wanted to write about will be worked on in free time, and is some new robotics projects. I recently picked up a Raspberry Pi, and it gives a much more powerful programming environment in a portable, low cost, low energy computing unit. With $30 you can have a Linux box with 1080p HDMI output, with a bit more you can get a keyboard and HDMI dongle and have a full functioning system. The GPU is cheap, but GUI's are always optional.

I am currently collecting parts for a quadcopter, or possibly a hexcopter. Multirotors are increasingly popular due to ease of control and stability. There are relatively cheap flight controllers that use user input as well as gyro/accelerometer data to stabalize the flight. The user can focus on autonomy or interesting flight details rather than low-level rotor control.

The projects I want to investigate include filming (and stability), search/rescue and surveying applications, and speech based expert systems. These are difficult tasks, so progress will be tedious.

Well, I usually loose my drive to write around now, so have a good day.

Telescopes and Programming

"Computer Science is no more about computers than astronomy is about telescopes" - (Disputedly) Dijkstra

A distiction that many choose not to make is that between computer science and programming. This is (as always) my naive opinion. Programming computers is a creative act, in that you are creating something. We happen to live in an era where programs, the things you create while programming, do things that make people money. I bring up this simplicity to contrast it with computer science - the heavily mathematical endeavor of modeling and theorizing computation. Now, they both eternally entwined, as are telescopes and astronomy, but they are distinct pursuits.

My primary frustration, and reason for writing on this topic, is people thinking computer science is just programming. I see it in students and course material both. It stems from the fact that just programming can make you hundreds of thousands of dollars, and make your university famous for supplying great software engineers. But at a personal level, considering computer science just programming disregards a vast and beautiful body of literature that makes you wonder about the nature and extent of these machines.

Pull to Refresh

A few exciting changes have happened over the last couple weeks, and I usually talk about career progressions here. I also want to test out the posting workflow with Pelican.

Quitting

I quit my job. I was working for an awesome software company here in San Luis Obispo. I wanted more time to work on my own personal projects. I don't need the money for now, and my time is worth more than that money. I liked the people I worked with, and that was most of why I stayed there. The work was enjoyable, but I have a huge list of projects that I've been meaning to work on. Time is scarce, and I needed to reallocate.

Hackathon

This weekend I was lucky enough to hear about the Launch Hackathon and attend. There were 1000-some hackers, 48 hours, and a few winners. We hadn't really expected to win, and we didn't, but we ended up with an awesome seed for a project. Companies could "buy" a presence at the event, which in turn bought me a ton of awesome food. I slept a solid 8 hours between the two days. I got to meet some cool people and write a ton of sloppy code. The event could have been handled better, but I had a great time.

New Things

I didn't leave work to have more free time. I am pursuing a few projects that can potentially make revenue, and pursuing them with equal or greater effort than what I put into work. First I'm going to finish our Hackathon project because we have an awesome design and it deserves to be finished. If it succeeds, we will have an interesting place in the private-social photo sharing arena, and if it fails I have an awesome portfolio item and a heaping tablespoon of experience. After that I have some fun business projects to try out. I am in a safe position to fail financially
so I should take the oppourtunity to do so. There is a long list of ideas, so talk to me if you're curioius.

I am going to launch a company, but illegitimatly so. And not for financial reasons.

When someone asks you if you want to go camping, "I have work in the morning" seems to be a perfectly understandable reason why I don't want to go. But saying "I want to be in my room programming in the morning" (and not camping with you) is nearly offensive. People love to leech your time. It's usually in good faith, camping is fun, but there is often a need for blocking out areas of time to work on projects. Saying "I have work" is universally understood as important. What I'm getting at is this. I'm going to make a company to be able to express my goals and organize my time, even though the actuall business wont be doing anything for some time. I've considered going back to freelancing, and it'd be cool to have a brand to work as.

Also, creating and branding businesses is super fun. I got the domain bigtre.es! There is nothing there right now though.

Aaaaand end ramblings.

Bit Costumes

Considering programming analogous to doing puzzles is a cliché, I know. A simple heuristic for saying "oh, that utilizes this one half of your brain organ or something." Aside from the absurdity of the left and right duality of our noggin, the programming-is-a-puzzle metaphor has provided me some revelations.

When programming, you get these pieces. Usually considered data, or something you want to interact with, and these pieces have plugins of sorts. Proprietary plugins that have a few select other pieces they can plug into. Pretend you have a signup form that needs to check on the database if an email already exits. At a high level you might say "oh we are going to expose that database query as an API on the server, which the client side JavaScript can interact with to alert the user if the email has been used." That doesn't really sound like a puzzle. That sounds like sequential list of verbs. But let's look at the data involved. Human (data in the brain) types in web browser, the field becomes a string, becomes an HTTP request,  goes through an array of routers and DNS lookups, becomes TCP transmission, arrives at Apache (web server), gets sent to PHP, is processed into a SQL statement, is sent to the database, is sent back from the database, is processed by PHP again, then becomes HTTP then TCP then arrives on the client, is processed by JavaScript, and tells the human if the email has been used or not. Whew.

My point is not about the granularity or multitude of the pieces but the nature of the pieces. The data is always being processed, converted, and given little costumes so it can get into all the different parties it needs to get into.* When drawing out programs, I like to think of the data as much as possible, because a close look at data forces you to consider up front the processes that need to happen.

*The costume metaphor was a stretch, but let me explain. An email 'me@gmail.com' has a bit representation on the clients computer, being processed by the client JavaScript. When processed into an AJAX call, it's given a costume of HTML. Another costume might be a SQL costume, containing that same bit representation of 'me@gmail.com' but with other bits around it.

The final note: consider that SQL, HTML, HTTP, TCP, AJAX and XML are some acronyms. Cool. But dig one level and you'll see that every one of them has either 'language' or 'protocol' both of which mimic human behavior.

It's a fun game to play.

 

The Shoulders of Giants (er, turtles)

I constantly want to point out the reality that we all stand on the shoulders of giants. Despite the oddity and humor, this photo by @substack accurately describes how the internet, and other facets of modern technology are built. The progression of technology is much like the progression of government (although quicker), in that new rules and facts are heavily based on previous rules and facts.

When a person builds some software, we think of it as similar to building a house. Let's say it's some very impressive software, it may be thought of as similar to building an impressive skyscraper. On the contrary, I like to consider building software like building a mathematical proof. An impressive proof contains references to past work, and the proof would not exist without them.

This removes the emphasis from the individual software developer, but isn't meant to belittle them. It helps me realize the importance of cooperation. It's a nice thought really, to know that we need to work together to progress. Noticing the shudders we stand on gives a humanistic perspective to the work we do, and that's nice.

 turtles

Here's to Technology

I've had this setting for a book in my head for like 7 years, but the implications never really hit me. The premise was that much of our "technology" was no longer functional; computers, cars, even guns were out of the picture. I thought it would be an interesting thing to observe, whether war broke out, civilizations shifted, or we all died because we are grossly incapable of life without engines.

I was thinking about this the other day when I realized: I would have literally no applicable skills.

I frantically tried to inventory my abilities to find something I could do in this situation. Most of my focused skills are directly related to pressing buttons on computers trying to create value, whether it's writing, programming or music. Ultimate frisbee isn't very useful for feeding myself in apocalyptia, nor is juggling, and that pretty much exhausts my collection of skills.

The other day when I was waiting for class I picked a weed out of the ground and harvested the fibers that were in the stem. They were just tiny little strings, but pretty strong so I braided them together. I guess I could make rope from weeds, but it took me 15 minutes to make three inches, and then it fell apart when I tried to make it into a bracelet.

Here's to technology lasting for a few more decades.

What I do at Work

I realize my job description confuses people, so I usually just say "I write code". This is true, but I wanted to write a bit more technically on what I do and how it benefits the company.

Summary: I make software robots that poke websites to see where they are broken.

I work at a software as a service company here in San Luis Obispo. That means people give them money for access to a software on a monthly basis. Our product is a website that takes care of a wide variety of business needs (scheduling, payroll, client care, etc) for health and wellness businesses. Yogis don't want to do accounting.

The codebase is giant. When developers introduce new features, stuff can break. "But why not just write better code and be smarter and not break things?" Any software of any complexity will break. Every single piece of technology/software is built on the shoulders of giants, in huge layers of abstraction, the top is a website you interact with and click on, and the bottom are electrons moving around in servers. No human can keep that in their head. This is why black-box abstraction is a good thing. However, one change can have unexpected results, and things can go wrong.

This is where my team comes in. It's mostly college students working part time, so we aren't the heart of the company. We're the left kneepad on the toddler riding his scooter. Our team does many random software projects, but one main focus of mine is an automated regression testing framework. What? Automated just means that once we tell it to begin, no human interaction is needed. This saves money and time. Think of a regression as a bug, or a problem, so regression testing is just looking for bugs. A framework is a codebase that others can use to actually write regression tests.

A test actually begins an instance of Chrome or Firefox and performs actions as if it were a human. Hundreds of these run in parallel on a server, thousands of tests a day.

The tests range in complexity, but one might look like this.

  1. Open the website
  2. Go to a certain page
  3. Click on something
  4. Type something
  5. Go to another page
  6. Make sure things are how we expected given those inputs
  7. Report the results if something went wrong

Other people who work more closely to development are actually writing the tests, so when I say we build the framework, I mean we work on the code that is referenced to write these tests. We build the infrastructure to test the software. For example, when someone writes a test like the example above, we would have written the code to make things like "click on ____", and "type ____" and "make sure ____" actually be automated in a browser, so the people writing the tests just have to think through the test case.

People write tests, they get ran, and we hopefully spot bugs.

So, yeah! I'll be fulltime for the summer, so I'm staying in SLO. Then back to school!

Baselines

In a good study, you needs baselines to tell you if you have actually caused change. I've been doing a little research into self knowledge through numbers. (An eloquent way of putting it, via Quantified Self.)

The idea is to track various metrics about yourself, change something, and see what other metrics change.

When I stumbled upon the idea, it was very appealing for a few reasons. I like numbers, I like graphs, I like numerical analysis, I like myself, and I like making myself better. Science is making pretty good progress in a variety of fields, and numbers are used everywhere in science. It's almost like "the science of x" is just "quantified x". So the science of Clay Jones is quantified Clay Jones. Call be selfish, but I'm pretty interested in the science of Clay Jones.

Another proponent of finally taking the time to quantify my habits was what I saw with running. For a few years I've tracked my running habits, and I've had a positive experience with it. Sometimes I don't run for months, but when I do, I always get back into tracking them. It validates my runs and keeps me honest when I skip a month (or year).

I also decided to see what would happen to my body if I quit meat for a week. Since last Tuesday, the only meat I have consumed was one hamburger and one chicken sandwich. Both were in social situations, but that was part of the experiment. I was testing my internal willpower, and failure to adhere to a new diet is a data point on willpower. I failed at being vegetarian, but the experiment was a success. The flaw, however, was a lack of numbers. I often felt hungry, or perhaps tired that I thought could be attributed to a lack of protein, but I never took the time to do any real numerical analysis. That is why I am now quantifying my habits.

Tracking these numbers on yourself is especially useful when you want to create a change in your life. For example, I have been thinking about the idea of drastically reducing my caffeine intake. I worry my brain will be useless, I will slog around, fail all my tests, drop out, and have to fall back on my taco business. Having tangible data will help me analyze these changes. I've also wanted to avoid white breads, avoid dairy, avoid meat, just to see what happens to my body. I can't stop eating all of these things at once, because in the event that I notice some small benefit, I won't know which caused it.

For now, I am going to not change much, but start tracking some numbers just to set a baseline. I have a small paper chart that I carry around. I've found physical things make me stick to something, rather than a phone application. I then put them into the website Chart Myself. It may seem like a timely process, but it only takes a few minutes a day and keeps me conscious of my choices and my body.

If you're curious, here are the things I'm looking at for the next couple weeks. These are pretty specific to me.

  • Physical Vitality
  • Intellectual Vitality
  • Mood
  • Pulse (BPM, average late morning and early evening)
  • Acne
  • Canker sores
  • Anger
  • Anxiety
  • Appetite (Cravings)
  • Sleep duration
  • Stress
  • Study duration
  • Nap
  • Exercise duration
  • Caffeine
  • B12
  • Melatonin
  • Vitamin D
  • Meditation
  • Programming Duration (time spent on things not school related, those would go to study duration)

Mornings

I love mornings. I love relaxing for the first hour of every day and I love slowly going about my morning routine.

Around 7:30 this morning I had a brief conversation with the dude making my breakfast sandwich (It was delish).

Him: "How's your schedule today?"
Me: "Good, no class until 2. How's yours?"
Him: "Oh that's awesome. I have class at 12."
Him: "Wait, if you don't have class until 2 why are you up??"

For me, mornings are void of interruption and contain hours of peak energy. I simply get a lot done. If I were to shift my sleep schedule 4 hours later, sleeping 2am to 10am (as student-culture often promotes), I would get less done. I know hours after 9pm aren't productive for me. Waking up early also sets a peaceful standard for your day because you don't rush through your morning routine.

We all know the scenario all to well. Alarm, snooze, alarm, snooze, alarm, snooze... Alarm, oh dear I need to be somewhere in 20 minutes. RUSH RUSH RUSH. We've all been there! I hate that feeling with excessive passion.

If this sounds like you, I ask you to give peaceful mornings a try. Still get 8 hours of sleep (let's do the math real quick... yeah, 10pm bedtime), but get up at 6 one day and do something you've been meaning to do. I like to read or work on a project, usually programming. It's really peaceful and sets a peaceful standard for the day. That's what it's really about.

Interest

It was somewhat random for me to become interested in computing. At the time I wouldn't have even been aware enough of the industry to say what I'm interested in. I might have said I really like Python and I really like making computers do stuff. At 16, I realized that I couldn't live off playing Call of Duty, but maybe I could live off of making computers do cool stuff. I hadn't considered the money beyond that.

When I tell people I'm in computer science, some of them will bring up money. Other CS majors probably told them that they got into it for money.

(These assumptions are mostly directed at just first year students, but definitely not all first year students.)

The people in computing statistically aren't going to make the money that doctors or lawyers or high profile financial and business professionals will make. If your passion is money, and you're willing to work 20 hours a day for it, I advise you to take one of those paths. Computer science ends up with some people who don't want to put in the work to become one of those professions, but they are focused on money enough that they decided computing had a favorable effort-to-earning ratio.

I have noticed in industry that a lot of software engineers are actually pretty interested in what they're doing. I'm excited to see when the light switch goes off in peoples head, because a lot of my peers aren't excited about what they've chosen to do.

Every once in a while, I overhear a common theme in one of my computing or programming classes, "I don't care why it works, as long as it works." or "Just fix it for me." or "Let me see your code." That's suicide in computing, or any technical field. You might still get a job, make 80k a year until you're 60, and die. But it's suicide of any attempt at doing something you're genuinely passionate about. It's not going to foster interest. You would never hear somebody write an effective piece of prose or poetry and say "I'm not sure why this was effective, but it was. Cool, let's move on." They would dive deeper, beyond "school requirements", just to get better at something they love.

Some people ended up in a technical industry because they wanted to make money, their parents told them to, or they thought it might be fun. But some, rather, were fortunate enough to have had the opportunity to explore the field as a teenager, and made a confident choice to spend the next 60 years with it.

That's why I feel fortunate. I knew I liked it. And I like it now. I enjoy going to class and I enjoy doing homework.

Sometimes I end up sort of tutoring other students, meaning I'll offer to study with them because I know they're failing, and I know teaching it to them will help me remember. It's selfish but not selfish. Anyways, sometimes I'll ask if they went over practice problems, read the chapters, whatever. When they say no, I ask why. The responses range from "I didn't want to", "I forgot", "I was busy" to "It was my friends 19th birthday so we got drunk" (Seriously? It was a Tuesday!). Regardless, I like to remind them (brutally enough) that this is what they'll be thinking about at work for the next 40 years, and if they really, honestly dislike the work, they should change majors.

The last thing I'm going to briefly discuss is the weekend. It blows my mind how many people (in the US) think weekends should be without productive work. If you have a goal, and I think most people come to college with a goal of getting better at something, you should always be working on that goal in some way. Why is it strange to spend weekends doing school work, or extracurricular programming/writing/sculpting/dancing/reading about architecture. I appreciate balance. You'd probably die if you read programming and math books for every waking hour of your life. I realize people can have multiple interests, that's good. Relaxing is good. I am just frustrated at the amount of wasted time I see around me, especially on a college campus. If you want to do something, do it, and do it a lot. This is something that everyone can benefit from.

Tags: 

Project: Ray Casting In C

For my CSC 101 course, we built a ray caster to create images from numerical input of spheres. It translates a viewport to a image depending on the size of the output. We used a format called PPM3 for it's simplicity. PPM3 is just a header and rgb integer values in a predefined scale for every pixel in the image. The files end up being huge, but the images are super simple to make. A 1024 x 768 image was around 10mb. The images below are png screen captures. Here is a zip of the source [ray_caster.zip][]. It's pretty convoluted, but if you have any questions feel free to ask.

The input is a file of "spheres", represented by a string of numbers, in a specified order. They happen to go x, y, z, radius, color(r, g, b) finish (ambience, diffusion, specular, roughness). You can optionally input data on the light source, viewport, eye, and ambience.

A file like this
rc0
Would become this
rc2
Or after some command line arguments to move the light source, it would be this

He provided us with some silly files of numerical representations of thousands of spheres for us to generate with our programs images like these two. Although not as beautiful, this is actually similar to the way companies like Pixar generate their images. They use millions of tiny triangles and ours are thousands of tiny spheres.
rc3

rc6

A few more images, messing around with the ambience and such. The background is just a giant sphere pushed far back. It create a nice place for a shadow to land.
rc4

This one is my favorite.

rc7
I'm not sure why this sphere looks like Hey Arnold. I need to look back through and see what was wrong. It could also be from the viewport and "eye" not aligning right.
rc5

Getting Stuff Done

It's not an astounding conclusion that time becomes more valuable when you have less of it. That's economic law. But then again, time isn't a commodity. Life fortunately isn't an awful Justin Timberlake film. Time just goes and goes.

This is where I contradict myself on an almost hourly basis. I have this idea (which many would agree with, but not realize) that our minds are in a constant struggle between two separate ideologies. Meaning our idea of what is "important" in life change. Almost hourly.

It starts with this: we're just a bunch of cavemen. Pretty much monkeys. You can argue theology, but truth is, our bodies often react to the world in a way that solely focuses on furthering our species. Want to see this in action? Let someone punch you right in the reproductive system. Wham. Yeah, hurts.

We're resistant to putting ourselves out there. We all have an ego. In prehistoric Pangea, what happened to that dude who left the pack to go to do his thing? He probably got eaten by a large cat. Guess what happens today if you don't conform to the pack? Nothin'. It's awesome. But our bodies are still instinctually afraid of being different because it once led to death. It's wired in our noggin, like a software bug. It's hard to do something "different", even if it's in your best interest.

In prehistoric Pangea, slight failure meant dying. Today, slight failure means next to nothing. The possibility of slight failure (meaning risk) can actually benefit you. Think of asking for a raise. The boss could say no (slight failure, but death not included) or he could say yes. But that caveman part of you still thinks you're going to die when you ask for a raise, and you feel your stomach wrench and your palms get sweaty.

But this isn't about how to get a raise.

What does this have to do with the value of time? Well, high productivity is how I try to get the most of my time. But my productivity goes to nil every so often, and I try to think why. I mean, I completely understand the benefits of finishing writing this speech a week before it's due. Want to know who doesn't understand the benefits of finishing writing this speech a week before it's due? My caveman half. He doesn't think my speech is going to further the human race. So I subconsciously prefer more comfortable activities, which create a (false) sense of security, which let's my caveman half know that everything will be alright. Our species will continue.

So my conclusion is this: try to ignore those primal instincts. They're designed for a world much different than ours. They're designed to avoid getting eaten by large cats. But large cats aren't around anymore.

Reading and Writing

"I do not always love to write. I love having written." -Anonymous.

I do not always love to read. I love having read.

Maybe that's how you know something is worthwhile.

This Kid Who Lives Below Me

This kid who lives below me apparently likes soccer. Because he kicks a soccer ball at a wall every once in a while. Sometimes I notice, but it doesn't bug me. That dude likes soccer. So he plays soccer.

Some people complain because it's loud, and it's repetitive, and it's intrusive to their little noggins. But I'm happy for the soccer man, because he likes soccer, and he somehow found a moment in his day to kick a ball, at a wall.

We're just zoomin' around on this huge rock through the universe. And he's kickin' a ball because he likes kickin' balls.

And others are zoomin' around on this huge rock through the universe complaining about this dude kickin' balls.

I'd rather be kickin' balls.

Gentleman's Guide to High School

The following is an array of tips that will set you up for conquering high school in a successful yet respectful manner. The "Gentleman's" prefix is to indicate this is an honorable guide, not to say ladies couldn't benefit from the following.

​1. Respect your Teachers. Over respect them. Avoid students who don't respect them. Teachers aren't supposed to pick favorites or grade your work based on personal preference of you. But they're human, and it would nearly impossible to erase all bias of you when grading your work. If you're on friendly terms with a teacher, you will be more inclined to ask questions regarding something you're confused about, or ask about something beyond the material you're currently on. This is especially impressive.

Say hello everyday. Say goodbye. Tell them to have a good weekend.

​2. Do all of your Homework. The mentality that you can skip "just this assignment" and still keep an A will not get you an A. The homework is meant to take the idea that you learned that day and dig it deep into your little noggin, deeper than you will feel or realize or expect.

Do your homework, every night. If it feels repetitive, you're doing it right. (Unintentional rhyme)

​3. Try to Skip as few days as Possible. Whether it's doctors appointments, sick days, family vacations, or "personal days", try to be at school as much as possible. Missing a single day can set you back for the rest of the semester. The teacher will not want to repeat a 30 minute lecture just because your cat died. They'll instruct you to read the book, and you will try, but only retain a tiny bit of the material and probably fall asleep.

Be there. Be on time. Be awake.

​4. Respect Education. It's easy to get into the habit of disliking school. Most other students will whine about how unjust the system is, how they aren't learning anything, and how this is all "stupid". Ignore them for now, but remember this moment when they want a job. To conquer high school you must have the highest respect for education. When you see the purpose of something, the mundane difficulty becomes an interesting challenge, and it's easier to push yourself.

School is important. Believe that.

​5. Have Smart Friends. One of the many benefits of higher level courses in high school is that they attract interesting people. You are an interesting person. Become friends. Discuss things you both find interesting, discuss the class, discuss politics. Your friends can have the largest impact on you, so set your self up to be impacted in a positive direction.

Friends are good. Smart friends are the best.

Alan Turing

"It was fortunate that the authorities did not know during the war that Turing was a homosexual, otherwise the Allies might have lost the war" - I. Jack Good, colleauge of Turing at Bletchley Park.

One of my favorite traits of Alan Turing was his complete disregard for people's opinions of him. He often biked miles to work at Bletchley Park wearing his (\~1938) British government issued gas mask to avoid hay fever. Another day, after biking to work in the rain, showed up soaking wet. He removed his pants and marched through the complex, with hairy legs and garters on display. He put his clothes in an oven to dry, forgot about them, and caused a fire.

Turing's forgetfulness is both humorous and reassuring to me. It's good to know that geniuses lost things at times. Turing once thought that Germany was going to invade Britain, so he spent all of his money on two silver bars to bury in the woods. He carried them in a baby carriage and injured his back while burying them. When the war ended, he went back with a metal detector and a sketched map, but was unable to locate them.

On Languages

The thing about programming languages is that they shouldn't matter. They're tools. They're arbitrary. And yet I'm always wasting time shifting languages and learning unnecessary syntax and missing the big picture. It's often said that knowing multiple languages is a huge benefit in the industry, but I haven't the ability nor time to synchronously learn langages, so a starting point is what I seek.

The big ones for me are C++, Java, and Objective-C. PHP has it's place in my heart, as does Python, but the former three are what tear me apart.

C++ has it's powerful, bloody fast, low level appeal. My BPA competitions are with C++. Many games are written with it, and it can be cross platform. If I were to write a specific purpose (personal) project, I'd probably use C++ as of now.

Java is used on our First Robotics Team robot, thus I've been writing in it for the last few weeks. The cross platform nature is a huge appeal, as is web capabilities. The classic "Java drive by" has built a negative connotation, but Java still has it's place in the internet.

Objective-C is what I used to write for Mac and iDevice applications. It's a beautiful language. At this point in my life, it's the most promising for any opportunity of profit, but I'm not a profit drivin programmer (yet). It's essentially platform specific, to the Apple side of things.

I think I'm going to move on from here to a project in c++ in order to prepare for the BPA state competition. But knowing all of these languages would be beneficial, and I hope to be able to say that some day.

And in closing, languages, or knowledge of, doesn't make a programmer. Projects in any language will benefit and reinforce my conceptual mind, which is far more important than language and syntax memorization.

Amendment A

I've been working a lot with little microcontrollers lately. Mostly parallax models, which use PBASIC, Parallax's version of BASIC. It's fun because my programming has finally met the real world. It's interesting how fuzzy the real world is. You don't think about that much when writing purely software applications. Things aren't so concrete in the real world.

Anyways, using PBASIC reinforced the idea that languages are simply tools. PBASIC is disgustingly ugly. I don't like it at all. Blocks of code are denoted with words, not the familiar curly braces. However it's what I must use for now. I may purchase an Arduino and be able to program in C, but for now it's PBASIC.

Languages are tools. They can be loved, they can be hated. Focus on the project and the end goal. Use what works the best for that solution. Be a fanboy of good products, clever successes; not languages.

Finding Myself

When I run at night, I like to point my headlamp into the sky and imagine it is the Bat-Signal.

And I am Batman.

And I have found myself.

A Public Service Announcement

At some point in your life, you will simultaneously have coffee and hot chocolate mix in your possession. You will recognize the success of many coffee-based chocolate beverages, and there might be marshmallows in the hot chocolate mix. The possibility and desire will be overwhelming. You cannot help but attempt to create this homemade concoction.

I'm here up tell you it is bad. Outright disgusting.

That is all.

I can't Tie a Tie

Hello. I'm Clay Jones. I'm an 18 year old male and I cannot tie a tie.

It's been a bit of a fundamental reluctance over the years, and when I needed to wear one, my dad would do it around his neck, then loosen it, take it off, put it on me, and tighten it up. There was no need.

But I've found this is somewhat culturally unacceptable. It's seen as a lack of manhood, of ignorance to a "very important" thing a man should how to do. As I head off to college, some would expect I'd take time to learn to tie a tie.

But I'm still not going to.

I'm not going to because I have faith that internet will teach me how. I have faith that our information age will not fail me in this very basic bit of knowledge. I believe intelligence is moving from knowing facts and basic procedures to something bigger. So it's not that I don't need to know, but I really don't want to know.

How to be Happy, Version 1

Recognize the things that make you awesome and do more of them.
Recognize the things that make you suck and do less of them.
It's all about knowing yourself and self control.

Things I'd like to see Solved or Created in my Lifetime

I have goals for myself, which I prefer to keep secret, but I also have goals for humanity.
1. Wave/Particle Duality
2. Artificially Intelligent Assistants
3. Useful Direct Neural Interface to Computers
4. Energy Crisis
5. Sub \$5000 (or inflated equivalent) Commercial Space Travel
6. Epic Digital-Home Integration

Project Euler - Some Math

Project Euler is a terrific website for mathematics and programming challenges.
The one I'm working on is to find the largest prime factor of a composite number.
Here are a few concepts I've been working on. Let's assume "n" is the composite number. A composite number is just a positive integer that isn't a prime.

1) Brute force.
Take every number from 1 through n/4, and test them for being a factor of n. The problem with brute forcing is that it can take a very long time if you are using a large number. Even if you are computing these numbers very, very fast, if your number is 600,851,475,143 (like the question asks), you may not to be able to pass the one-minute rule. The one minute rule states that any Project Euler solution should be able to run on a modest computer in under one minute. Let's just assume brute forcing every number from 1 to n/4 would take longer than one minute. We could already knock out all of the even numbers, because n is odd, but I want this algorithm to work with even numbers as well.

2) Integer factorization.
Using factor's compliment's rule, for every factor we find, we can also get the factor's compliment, or n/factor. This means if we brute force, we only need to look up through n/4.
If our number was 20, testing 2 would yield 2 and 10, 3 isn't a factor, 4 would yield 4 and 5, and we could stop there.

3) Testing for Primality
Testing for primality is also something I will probably have to brute force. Go from 2 through number/2, and see if the number to be tested modulo any number equals zero.

I just had a thought while writing this. This is why I write.
If we start at 2, and test for factors going up, using the factor's compliment, then we will effectively also be testing for the largest integers, going down. This would go much faster than testing upwards and simply storing the largest one. We will have to test far fewer numbers for primality and the whole thing will be more efficient.

I've been writing in C lately, using Vim and gcc from the terminal because I feel like it's more educational because XCode does so much for you. C is good for these kinds of operations, and CS 101 is a C course at Cal Poly, and CS 102 is Java. There is an intro course in the first quarter that we use an MIT language that I forget the name of, and do little art projects. It should be fun.

If you like math and want to up your programming skills, check out Project Euler.

Subscribe to