Thursday, April 13, 2017

Bitcamp is an college hackathon (programming competition) held annually at the University of Maryland. With roughly 1,000 attendees, it is a major one.

Corey Sheldon and I attended it this year as Fedora project ambassadors.

Overall, the event went well. Some highlights were:

Numerous people had used Fedora. Some hadn't, but had used CentOS or RHEL.

One person came up and said that he had been using Fedora heavily, and would like to contribute to it. We referred him to #fedora-join on FreeNode and to whatcanidoforfedora.org.

2 people came up and wanted to see Wayland. One was particularly delighted to see it on Fedora 25. I showed off the smooth animation in GNOME Shell, and the fact that apps resize perfectly smoothly ("Every frame is perfect.")

Ubuntu's recent announcement that they will migrate to GNOME made it easier to sell Fedora Workstation.

The OLPC XO-1 drew lots of attention, as always.

A user came along who loved Linux Mint. I showed him that Cinnamon is available in Fedora, and he was pleasantly surprised.

A user came up and asked about running Fedora under VMware. I was able to tell him that Fedora includes the VMware drivers (and the guest tools.)

We received some interesting questions:

1 user asked if there were any benefits to using Fedora when other are using it (a network effect.) He used the example of iMessage (on iOS) only working properly with other iMessage users. This was a perfect opportunity to explain how open source does things differently. We prefer to implement open protocols, and often multiple protocols, as in the example of Pidgin. And we do not limit apps to running on our Linux distro; we create upstream open source projects that can be packaged for other distros, and often ported to other operating systems.

There were some interesting requests for help with projects:

1 user was trying to setup a web application written in node.js. He was using http-server and Chrome, but Chrome limited the usage of certain features (specifically, accessing the webcam) to https. So I helped him generate an ssl certificate and have http-server use it.

Some things that did not go well:

Starting with Fedora 24, DevAssistant was removed from the workstation DVD. This was a major selling point at hackathons last year, since it makes it easy for hackers to get started on their projects. It was also a clear demonstration of Workstation's emphasis on developers.

The live DVD sometimes ran out of ramdisk space as we were installing software.

The Wi-Fi became painfully slow once attendees pored in. Fortunately, we got a switch later on.

We ran out of pens and the stickers that say "fedora."

Since this was a college hackathon, I would like to end with a quote from a computer science professor:

I wish students would stay up for 36 hours working on my programming assignments.

Monday, December 19, 2016

LISA is a conference that stands for "Large Installation System Administration." Corey Sheldon told me how awesome it was last year, and that is one reason why I went this year. I was one of one of the Fedoraambassadors along with:

Matthew Miller (it's the only event he serves as an ambassador at each year)

We had Cockpit on a big display. Although it generally worked, the SELinux feature did not at all. Even when we went out of our way to generate an SELinux error that was logged, it did not show up in the Cockpit GUI.

Thursday, March 10, 2016

(Technically I am not an ambassador yet. But I've been told that I should feel like I'm one already.)

Shouldn't the short guy (your's truly) be in the front?

The event went very well from both the event's perspective and from Fedora's perspective.

I went as a coding mentor in addition to a sponsor, but there were very few requests for mentoring (and they were very brief.) Instead, most people who came up to the booth wanted to know about Fedora!

(And they wanted stickers and case badges.)

I remember one person who had an interesting reason for wanting to try out Linux: She liked Bash after having used Git Bash on Windows.

Many student develops were particularly interested in DevAssistant. They loved its concept of easily setting up a development environment / project.

DevAssistant drew a lot of interest

There were a total of 16 projects submitted to the FOSS category, and were thus eligible for the prizes. Considering that Microsoft received 24 project submissions, and they were giving away a far more lucrative set of prizes (~$1,000 Surface Pro 4 tablets,) I'd say that people were pretty self-motivated to release their project as FOSS.

Although the FOSS category winner (an online card game in HTML5) was worthy of the prize it received, I would like to give an honorable mention to another project. They implemented an email client and server with end-to-end PGP encryption. The client is in HTML5.

There was one student, Mikhael, who completed his project early and wanted help installing Fedora to dual-boot along side OS X on his Early 2015 11" Macbook Air. Although we had to resort to using the broadcom wireless driver from RPMFusion, which involved transferring RPMs via USB key, by the time we were done he was very pleased. He also wanted basic instructions on using Fedora, so I made sure to show him how to use gnome-shell, GNOME Software and gedit with developer plugins.

I would also like to thank Ben Williams for his work on the updated live media; we used it to install Fedora Workstation for Mikhael. Also I would like to thank the liveusb-creator team; DVD drives are a rarity nowadays.

Here's what I did differently:
(In terms of generic MMO game jargon. To those who think this is all Greek, bear with me, or skip this 1st list.)

As I walked backwards for health, I watched the team fight/skirmish rather than my character.

I focused on my surroundings rather than on a progress bar.

I'd cast my very powerful "ultimate spell", which has an instantaneous cast time, but has a long delay. During the delay, I did not focus on watching it so that I could ascertain whether it would succeed or not., Instead, I focused on re-positioning my character. After the delay, I observed whether it had any effect.

Think "fire and forget"

That video describes it as a "short delay". But it normally seems like an eternity! It is long enough for you to get ambushed if you do not reposition properly (which is likely because you have to get close to the enemies to cast it.)

I played against a character with an extremely tricky stealth move (Wukong), and the player was very good at faking it! He faked it part of the time, but not always. Yet I quickly recognized some of his patterns, and cast my basic spells in anticipation of what he was likely doing, rather focusing on saving my own hide..

I normally HATE playing against Wukong!

It was super-effective.

LoL Players: Remember that Zyra has AoE rooting & damage. So whether WuKong started faking 1 second ago or is still faking, he is likely without the radius/fat-line of your spells when they land.

I was not afraid to use my gap-closer (snowball) to maximize the effect of my ultimate spell. I instantly recognized each opportunity to do so, and acted on it.

Zyra's ultimate is extremely powerful, but you need to be close enough when you cast it. And the timing on when to affect the team fight with it (hard CC + damage) is critical.

When we seemed to be deadlocked, I viewed the scoreboard and determined that Lux was the biggest threat. After about a minute of skirmishing, our Thresh hooked (pulled + CC'd) her successfully. I took advantage of the opportunity to kill Lux with the rest of my team.

Lux had the highest KDA on enemy team, and Lux's frequently are the biggest threat.

Earlier, our team was flaming Thresh for failing to land hooks. So after that successful hook and subsequent killt, I said something like "gj thresh" and then "Lux had the highest KDA." He replied to the 1st message like "you too."

The team chat was more positive the rest of the match.

Also, in general:

I was more willing to take risks. These risks didn't always pay off, but they generally did.

To determine how much risk there was to a move, I relied on my previous knowledge and my sense of timing.

What do I mean by "sense of timing"? It is very important in LoL. For example, the timing in terms of how long until enemies arrive back on the front-lines after dying and respawning. (The time increases throughout the game, and you have to factor in when each enemy player died.) Similarly how long until spells (powerful/flexible abilities) can be used by the enemies again.

Generic MMO Jargon: For example, I gap-closed and cast my basic spell combo on enemy players when they were presumably retreating through the bush (invisibly) after they blew their combo (visibly.) (I can do this because my gap-closer (snowball) also makes them visible.) There was a risk that I would not see all the other enemies when I gap-closed, or that they would arrive in time to help the retreating player, but eyeballed that risk by being observant enough.

I noticed opportunities for myself, or mistakes that the enemy players were making. And then I would capitalize on them within a split second.

Yet prior to that split-second, I was distracted!

Generic MMO Jargon: For example, I noticed when enemies blew all their spells and were on cooldown, and were probably escaping through the bush (where they can hide). Then I would gap-close with snowball (which also makes enemies visible) and cast my combo of basic spells.

I focused on surprising the enemy team, and was generally successful.

It is easier to surprise enemies when they're distracted by your teammates. (Obviously)

I focused more on the positioning / actions of enemy players than my own positioning and resources (health and mana) throughout the match.

I focused on where enemy players (especially a lone Lux) were moving towards, and were likely to change their movement towards, rather than focusing on my position & their position over the next 0.5 seconds.

I remember when I first started driving. I learned to focus on the road far ahead of me, rather than the road right in front of me, in order to successfully drive down the center of the road.

I did not focus on what other players were presumably thinking of my playstyle, or whether any of them thought I was contributing successfully.

And perhaps best of all:

I noticed these changes in my playstyle after I subconsciously made them!

And yes, this post is specifically addressed to one of my friends.
(He screams in anger while playing LoL, and convinces himself that matches are lost, despite still winning afterwards about 1/6 of the time.)

Saturday, August 29, 2015

A lot of people have been asking why I wrote my last blog post, or have been blogging in general.

Here's why:

I failed to adopt the pomodoro method about 2 years ago. If I blog about it, and highlight the important details, I feel like I am more likely to stick with it.

Consider the analogy of learning to program by typing out the code vs merely copying & pasting the code. If you type out the code, you learn it significantly better.

Consider the analogy of learning how to derive an equation vs merely knowing the equation. If you understand the theory behind something, you understand it better, and you value it more highly.

My family has told me that I should use a diary over the years. I've only used it occasionally. I am essentially using a private diary again, but some lessons I feel like I should share with others.

My family has tried to persuade me repeatedly over the years that playing video games is a waste of time. Although they are indeed a less productive use of my time than contributing to open source projects, they are extremely good ways of teaching people lessons about life.

Just as Star Trek is a "morality play set in the future", video games are often great ways of teaching people lessons too.

To a degree, it wasn't that I was playing video games that was a waste of time. It was that I was playing the wrong video games. I played "Prince of Persia: The Sands of Time" in 2003-2004, and that game was all about rewinding time. But I recently played Assassin's Creed III. And the lesson from AC3 is that the past is read-only, the present is read-write, and you have to learn from the past to save the present/future.

I feel like my family/friends (fraternity brothers) will be very happy for me when they read my blog. Some fraternity brothers already have, and they have given me great feedback (although not in the form of comments on my blog.)

Yes, I do feel like I have lessons to share with open-source projects. But I have now learned that I need to persuade them with code rather than with words.

As Scott Adams (Dilibert author) wrote for his "Robots Reads News" comic strip:

Middle School: Perfectionism & Math

From 1999 to 2001 (7th to 8th grade), I attended middle school. In 7th grade, I was promoted from regular math class to honors math class.

It took me a while to understand the theory behind each equation, but once I understood it, I understood it extremely well. And I could infer things from the theory extremely well.

And I daydreamed about math! In addition to video games.

At one point I went to a math competition at my future high school's annual math competition for middle schools. Each middle school team had 5 students. Our team received 50 points. I received 20 points.

40% of our team's score! I scored higher than some entire schools even! Why? Because I understood the theories extremely well.

High School: Perfectionism & IT

Starting 9th grade, I attended that high school. I applied to the IT internship there. But I wasn't initially accepted.

Although my resume was not as impressive as at least 1 of my friend's who was initially accepted, I was rejected for another reason. As I walked past the office of the 2 IT employees, I heard them reading aloud the "referral" letter from my math teacher. She mentioned that I was "slow" to learn theories.

:rollseyes:

I was accepted into the IT internship program mere days later. And over time, IT replaced math as my passion. Nay; it was my obsession. I daydreamed about IT instead of math, and less and less about video games.

However, throughout those 4 years, my math skills deteriorated.

I have always been a slow writer, but a decently fast (or very fast) typist. So as the derivations got longer, I could not keep up in in my notebook as my teacher derived equations on the board.

And I spent the minimum amount of time possible doing math homework. I spent the maximum amount of time on IT (and video games) instead.

So needless to say, I had a very poor understanding of the Math theory, even though I received "good enough" grades.

Until I started reflecting on my life over the last week, my greatest regret has always been neglecting my math skills.

Sophomore year, even though a got an OK grade in the class, I failed the semester geo-precalc exam! It was the first F I had ever seen!

I was devastated, and daydreamed about going back in time.

Needless to say, that daydream did not come true.

I did great in almost every other class though, especially history. But there were still signs that I was a perfectionist.

For example, senior year, I took multiple AP exams. The last exam was the AP history exam, I was not quite good enough at budgetting my time. I had 10 seconds more of writing. The school administrator shouted:

Pencils down.

I kept on writing. So he shouted again:

Pencils down!

It was clearly directed at me. I got to complete the paper though in those 10 seconds though.

And I did not get penalized.

Case Western Reserve University: Electrical Engineering FAILURE

For 1.5 years at CWRU, I tried to become an electrical engineer.

At one point I told my (IT intern) friend that I wanted to design and develop operating systems. He told me that I should go into computer science instead.

I am not sure what I was thinking. I was probably thinking that EE was more "well-rounded."

I had always been fascinated by operating systems. "The most complex things created by man." And remote desktop was my favorite feature of them.

Yet with my poor math skills, this was hopeless.

So I failed. And I did not let go.

I made other mistakes too. Do to my actions, I was not accepted into a generic-sounding-but-nerdy fraternity. Only years later, did I realize that those actions were social mistakes.

So I moved onto a new college. And just like a video game score, my GPA was reset
But years later later, I would daydream about being conferred an honorary degree from CWRU. So I still hadn't learned how to accept failure.

Penn State: IST & Superficial Success

For example, in 1 class, my instructor said that another student and I were the 2 best students in the entire class. There was a group project due and he put the best 5 students into the same group, so that we would not "do all the work" if talent were evenly distributed across all groups.

That other student and I were the only 2 who knew how, and were willing to use version control though.

I also joined an engineering fraternity. So clearly my social skills had improved. They actually offered me a bid after I rushed only 1 evening; they were that impressed.

And I met a business major who failed to become an EE also. He failed Calculus II 3 times! And he had a better attitude than I did.

I did internships, and landed a job.

But there was one class where I did not complete the work, and did not withdraw in time, so I got an F. Again!

And that F continued to haunt me. I wanted to retroactively withdraw. I felt like I had "unfinished business" and that "I'll be back" (in person) to get the retroactive withdrawal completed.

Working World: Pencils Down

As I have been working, I have heard repeatedly from my manager:

Pencils Down

Although I have heard it less often over the years, so clearly I have been improving.

The Last 2 weeks: Learning Long Overdue lessons

And I have been doing a lot of self-reflection over the last week. And reflection about open source.

And the fact that I hated playing Game of Thrones was the perfect example of what I was doing wrong.

I have long thought about about my education like how I played Monkey Island. I cannot reload the past. I have to make more decisions on my feet, If I want to survive in George R. R. Martin's video game. Because Game of Thrones is more similar to the real world than Monkey Island is.

To avoid perfectionism, I should follow the pomodoro method. 30 minute blocks are great for budgeting time.

Yes, my physical pomodoro timer broke (on its own) 2 years ago. It was a piece of crap. But I can find a smartphone app if nothing else.

I feel I have lessons to share about The Init Wars. And I could spend time trying to explain them.

But then I realized a great lesson that was already shared by Jonathan Corbet.

Some of us will remember the multi-year dispute over the devfs filesystem,

He goes onto explain:

If systemd turns out to be an equally bad idea, it can be removed in the
same manner. It is entirely possible that we'll eventually look at it the
way we look at devfs — as an experiment in the wrong way to solve a
problem. Or perhaps it will be seen more like sendmail: the best solution
available at the time, but one that few of us wish to deal with now.
However things turn out, if it becomes clear that there is a better
solution than systemd available, we will be able to move to it.

So what Jonathan is essentially saying is that "it should be OK to fail."

And in general, I feel like every open source project needs an upstream project, or an experimental branch. Perhaps even some upstreams even need an upstream? Where it is OK to break APIs and ABIs. Or merge features that the BDFL won't accept yet. Where it is OK to fail. Where failure is cheap.

How can failure be cheap in today's open source projects?

Cloud infrastructure. You should be able to re-spin up your entire open source project's infrastructure automatically. And give out numerous badges for breaking it.

100% insistence on best practices like automated testing, and packaging standards. If a package/feature cannot meet these, let downstream decide whether to accept it. Even if downstream is an upstream for something else.

The way I see open source based on Scott's advise, it is not enough to be passionate about what you love. You need to be passionate about it, and then realize that your are failing in 1 aspect or another. Either through your own self-reflection, feedback from others, or both. If you spent 12 hours solving a problem, but solved it successfully, you probably should have used a pomodoro timer. After 2 30-minute blocks, you should have used your judgment about whether to continue.

Some lessons are worth spending 12 hours on. Most are not.

I told myself I would finish this blog post by 22:00 tonight. And I shall do so.

America may have lost the space race initially. But we made steady progress towards the moon landing, largely by testing our stage 1 rockets on the ground; where failure was cheap. We had to build test facilities before we could test them, which the soviets did not do. But that was project management; and that's why we need business majors, not Commisars.

My failure at EE may not have been cheap financially. But it became valuable personally once I reflected on it.

Same thing for my other failures.

And remember those AP exams? I got a 3 on Calculus. But I got 5's Microeconomics, Macroeconomics, and History.