What is compiling?

Compiling a computer program uses another computer program, a compiler, to transform/translate a program’s source code into another compiled form. The source code is typically written in a high-level programming language and the output code in another programming language.

The level of abstraction of the output code determines whether the process is called compiling or transpiling. When a program source is written in a high-level programming language and is transformed into a low-level programming language it is called compiling. When a program source is written in a high-level programming language and is transformed into another similarly abstracted level of programming language it is called transpiling.

Compiling: the Go programming language
Transpiling: the TypeScript programming language

 

High-level programming language

A high-level programming language is a programming language which abstracts away some of the details needed to program a computer. A computer requires such components as a processor, memory, and storage. These low-level components can be programmed directly, but most often they are not important when one is interested in programming a high-level program such as a web application for instance. To minimize the details a programmer must consider when writing a program, a programmer can select a high-level programming language to take care of the low-level details automatically.

There may be ways to access the lower-levels while programming in a high-level programming language, but this comes later on in a program’s life. Typically when programming with a high-level programming language at least in the beginning, one is interested in accomplishing some goal with little interest in the underlying details of how a computer is ran. There may be a time when these details become important such as when one wants program to go faster. This may mean increasing the speed at which a unit of work can be performed or the number of units of work can be performed in a duration of time.

Examples of high-level programming languages are: Javascript, Python, Ruby, PHP

Graph Sinks

A graph comprises of nodes and edges. The nodes can connect to another node when an edge connects the two. The edge can be directed or directional in that it describes a starting node and an ending node. The graph with nodes and directed edges is called a directed graph.

When a directed graph has a node with no outgoing edges, perhaps it has only other nodes connected to it via directed edges, the node can be said to be a graph sink.

An example is the following graph:
A -> B
A -> C
B -> C

The node C has only ingoing edges with no outgoing edges.

Transitive closure

Apart of learning more about Reactive programming, I came across the term Transitive Closure which has roots in Mathematics. Below I set out to decompose the concept into smaller concepts to clarify understanding.


A “set” is a strict list of elements. For example, set X can be a list of numbers {1,2,3}. An element, or number in this case, is said to be a member of the set X if it is found in set X. The number 1 has membership in set X.

Let’s also define another set Y to be {4,5,6}.

2 elements can be paired together to represent a list. The numbers 1 and 2 is a list of 2 elements or a pair. In addition to defining what elements are included and how many elements are in the list, the order can be specified. We can order 1 to be first and 2 second, or we can order 2 to be first and 1 second. In Mathematics, this list usually is written via a tuple, more specifically a 2-tuple to specify that there are only 2 elements, by arranging the elements in a specific order within "( )" Parenthesis. The tuple is a limited or finite ordered list able to contain an arbitrary number of elements. The lists described above can be written as two 2-tuples or ordered pairs; (1,2) and (2,1).

Multiple ordered pairs can be grouped in a relation which represents elements within an ordered pair are related. In this example, the specific relation is a binary or 2-place relation. The word “binary” indicates or involves the quantity of two. This is typically found in Computer Science to mean the Binary numbers 0 and 1; On or Off.

Here is a binary relation for the sets X and Y denoted by the letter R.
R = {(1,4), (1,5), (5,1)}
1 is related to 4“. “1 is related to 5“. “5 is related to 1“.

Notice there are only 3 ordered pairs in this binary relation. This is a subset of the Cartesian product of the sets X and Y. The Cartesian product is a set of all combinations of all the elements in the sets. The full Cartesian products of sets X and Y is

X * Y = {1,2,3} * {4,5,6} = {(1,4), (1,5), (1,6), (2,4), (2,5), (2,6), (3,4), (3,5), (3,6)}
Y * X = {4,5,6} * {1,2,3} = {(4,1), (4,2), (4,3), (5,1), (5,2), (5,3), (6,1), (6,2), (6,3)}

With the ordered pairs and binary relation defined, the word transitive can be explained. The transitive relation means by knowing the two relationships of some elements, a third relationship can be established. If we said a is related to b and b is related to c, then the relationship a is related to c can be established.

A more concrete example can be the following. John is friends with Jane. Jane is friends with Fred. There is a transitive relation between John and Friend since they both share the friend Jane in common.

The second word in Transitive Closure is Closure. In Mathematics, a set can be said to be closed or exhibit the Closure property when some operation or procedure done on a set only strictly outputs members already in the set. In the context of sets and binary relations, the relevant operation or procedure can be finding the relations of elements in a set. 

Let’s now pull all of this together along with continuing with the previously defined set X, set Y, and the binary relation R.

set X = {1,2,3}
set Y = {4,5,6}
R = {(1,4), (1,5), (5,1)}

We see “1 is related to 4“. “1 is related to 5“. “5 is related to 1“. Looking at the two relationships “5 is related to 1” and “1 is related to 4“, we can establish a new transitive relation “5 is related to 4“. No other transitive relations can be established. This new pair (5,4) can be added to the ordered pairs in R. Since R is a strict set, we’d have to define a new set which includes the new ordered pair. The new set can be written as

R' = {(1,4), (1,5), (5,1), (5,4)}.

Since no other ordered pairs are necessary to represent all the relations of the numbers in the original R set, we have found the transitive closure of the binary relation R.

The formal definition of a transitive closure is:

In mathematics, the transitive closure of a binary relation R on a set X is the smallest relation on X that contains R and is transitive. Wikipedia


This was an explanation of the concept Transitive Closure using underlying concepts.

For more resources, I found this video helpful in understanding Transitive Closures since it explains the concept further with a graph: Transitive Closure Video.

Let me know your thoughts or whether there are any inaccuracies in the explanation.

Amazon Dash Button and Raspberry Pi Scripting

At home, I have several Amazon Dash Buttons throughout the house with a Raspberry Pi listening for clicks. I mainly use these buttons to track whether I have completed a specific task near the Amazon dash button. For example, I have have a button in my bathroom I click when I have flossed my teeth at night. Clicking this button would then mark the corresponding daily task completed.

Below is the script I use to mark a task done (some details omitted).

from scapy.all import *
import requests
# it takes a minute for the scapy sniffing to initialize, so I print this to know when it's actually ready to go
 print('Init done.')

USER_ID = ""
API_TOKEN = ""

mac_address_to_task_data = {
 "40:b1:cd:24:e2:1d": ("task_id", "task_name"),
 "18:74:fd:eb:82:17": ("task_id", "task_name"),
 "38:f7:3d:ca:32:dd": ("task_id", "task_name")
}

def execute_task(task):
 url = "https://task-management-app.com/tasks/%s/%s" % (task[0], "up")
 headers = {
   "x-api-user": USER_ID,
   "x-api-key": API_TOKEN,
 }
 requests.post(url, headers=headers)
 print "Executed '%s'" % task[1]

def detect_button(pkt):
 if pkt.haslayer(DHCP):
   if pkt[Ether].src in mac_address_to_task:
     task_data = mac_address_to_task.get(pkt[Ether].src)
     execute_task(task)
   else:
     print "Unknown: " + pkt[Ether].src

sniff(prn=detect_button, filter="(udp and (port 67 or 68))", store=0)

For more info, then check out this blog post on hacking the Amazon Dash Button which helped in getting started with this.

Apply To All Jobs on AngelList

TL;DR: Copy and Paste this code snippet into AngelList Jobs page to apply to all jobs.

$('a.interested-button').each(function(_, button) {$(button).click()})

AngelList is a useful resource for startups, investors, and individuals looking for startup jobs. For this post, I fall into the latter category. As part of my recent job search, I perused the jobs section of AngelList, and I even expressed that I was interested in a few startups. As I went through this job search process, I asked if there was an easier way to go about this.

AngelList Jobs

My solution was to apply to all the jobs within a given search. The first thing I noticed was that a user must click on an “Yes, I’m interested” button. When I examined the source code closer within Google Chrome’s Inspector, I realized that the “Yes, I’m Interested” buttons had a class of .interested-button and that each startup item had its own button already rendered to the page.

interested-button

The actual solution took only one line of jQuery to implement:

$('a.interested-button').each(function(_, button) {$(button).click()})

The End You scroll to the bottom until you have all the search results loaded onto the page and you see “The End”

Apply all using the script in the console

Apply script with the console

Expressed Interest Now you’ve successfully applied to all the jobs within a given AngelList jobs search by pasting the above snippet into the console.

One Catch Add note to show interest There is one catch however. You will not be able to apply to jobs that require a note as part of you showing your interest in the job. For a bulk apply all, this seems like a small problem. Pareto’s Principle applies here.

This being said, I do believe that a more targeted approach to job searching is more effective. A strategy where you find a handful of companies you are interested and you express interest via a warm connection or at the very least a direct email to someone within the organization with hiring authorization. You could use a tool like DirectContact to find these individuals’ email addresses

A Fix In case someone at AngelList is reading this, here is one possible solution to prevent this script from working in the future. Instead of POSTing a user is interested directly from an .interested-button click, require a user to have opened the startup job description. This way a boolean variable must be toggled before an interest is POSTed.

My modeling/acting career in the Philippines

Want to fast-track your modeling career in the Philippines? Start your modeling and acting career in the Philippines. Click Here to Join The Program Be Discovered.

I’m writing this on the flight back from my three months endeavor to become a model/actor in the Philippines. Here I want to write about my experience.

For the longest time, my brother and I have heard from other Filipino family and friends that we were good looking and that we could become ‘Sikat’, popular. We would hear, “If you went back to the Philippines, then you could become ‘artista'”, or an actor. For the most part we appreciated the compliment but left it at that for many years. It wasn’t until I was not attending school and I was considering interesting experiences I wanted to try, did I finally decide to take the leap and try to become an actor in the Philippines.

The conversation with my mom started with me telling her my plans to return to college in the Fall after taking a year off after my sophomore year. This was around the end of May and during the Summer months of the Philippines. She was planning to go to the Philippines anyways for my Grandmother’s 70th birthday, so she asked me if I wanted to go. Lastly, off the cuff and casually she suggested that could also try becoming an actor while we’re there and she would help.

When such suggestions are made I typically ask myself, “Why not?” I’ve been told that I could make it for a good part of my life. I had nothing locking me down to being in the States until school starts in September. It sounded like an unique experience to say the least. Best to take chances and risks while you’re young and without too much responsibility. All of these thoughts eventually brought me to say yes.

May 24, 2014, I arrived at Ninoy Aquino International Airport. The week I arrived consisted of seeing family and hanging out with the family. While we were catching up with family, my mom and I talked about how I came to the Philippines to try to become a model/actor. Once they knew, they supportively told me about people and places I should talk and go to. An uncle I only just met, though I was told otherwise, told me co-founded a talent agency in the Philippines and knew a lot about the entertainment industry. He gave me a few contacts I should try to get in contact with.

The contact’s name was Patricia AKA ‘Pat’. My uncle describe her as a socialite. She supposedly hanged out with people in the industry and could provide introductions. We started messaging, and she asked for a “set card”. I had to good what a set card was and create one in Photoshop. [SET CARD]

We tried to setup a lunch with one of her director friends, but the scheduling didn’t work out. Despite her being quite responsive and promising via messages, nothing really came from talking to her. A dead end.

At the same time I was messaging Pat, I followed up with a someone my aunt knew. This person, Jane, knew talent agencies in Manila and even had her daughter in appear a few times on TV and in print ads. She was willing to bring us around and show us the agencies to register at. These agencies included Discovery and ModelShop. Discovery ended up being another dead end, but ModelShop ended up being one of the three agencies that messaged me the most with new castings.

When my mom, Jane, and I arrived at ModelShop we got out of the elevator around the 30th floor of a tall building right in the middle of hot and humid Makati. I had a white t-shirt on, but a yellow sweater in my hand. This was my first time visiting an agency, so I nervously rushed to the the bathroom to change before anyone saw me in my street clothes. I really had nothing to worry about since I eventually realized this agency wasn’t as good as Jane brought me to believe. Nonetheless, I got dressed and filled out the necessary paper work to register my contact info and bio data. Then I was off to the shooting room for my first VTR, Video Tape Recording.

The VTR is the most fundamental thing every talent has to do for each casting. It is the only thing they really judge you own to begin with. So what is a VTR? [VTR VIDEO]

Please follow the following: 1. Your name, age, and height? 2. Any previous commercials or acting experience? 3. Any sports or hobbies? 4. Please turn to the right, turn towards the camera, and smile. 5. Please turn to the left, turn towards the camera, and smile. 6. Face front 7. Facial expressions. Please make the facial expression for each word I say while saying “Yes” 1. Happy 2. Sad 3. Surprised 4. Scared 5. Thinking 6. Worried 7. Super Happy 8. Thank you.

This whole process typically takes less than a minute to complete depending if the caster has extra things for you to do, in which case it is a good sign that they might like you. When I said this is the fundamental thing you’d do for castings, I meant it. You don’t only do this for filings agencies but for every single casting you’d do.

Some VTRs or Go-Sees vary on what they want you to do. Sometimes there’s fun and memorable VTRs. I remember one where you had to pretend that the camera was your crush and you needed to do cute things towards the camera. Another casting had me drink coffee with an expression of it tasting great. I specifically remember this one because the room was so cold. It was serious cold. I think they actually put the air conditioning on the highest they could in order to have all the talents actually cold for when it was their turn to drink the coffee. I felt sorry for the girls in their dresses.

I am not sure how I got this far into this post and I haven’t mentioned the girls. As you can imagine the girls you’d see at VTRs are attractive. Even though we were in the Philippines, there were some from Brazil, France, and other parts of the world. I joked with my brother that if I wanted to find an attractive girlfriend, then I knew were to go. Although my type isn’t Filipinas, I actually found a few I was attracted to. This all being said, after being surround by attractive people for a while, it becomes the norm. Not to say the girls were less attractive, but the effect you get lessens.

After doing a filing with ModelShop, I also filed with Reco and Monaco. These three were the agencies that I got casting texts from the most frequently. The way you find out about castings was through text messages. You would just wait for a text with a time, place, and any special requirements like type of clothing. The interval between VTRs spanned somewhere between a day and a week or so. I’ve had it where there were multiple VTRs in a day that took up the whole day.

The VTRs take up the whole day because of the waiting. For anyone interested in doing the model/acting route, I definitely recommend going earlier. If the text says you have a VTR between 1pm – 5pm, then get there a little before 1pm. Not only would you get done quicker, but it also has the effect of you staying in the mind of a caster longer. [Reference to casting tips about getting there early]

The combination of both the wait and the doing the same exact VTR was so annoying I actually consider creating a SaaS, Software as a Service, online web app to streamline the whole process for both the talents going to the castings and the casters selecting which talents they want in the commercial. This is one of those startup ideas I wish was out in the world but not so much that I want to actually build it, thus I’m writing it here for anyone to execute on. You’re welcome.

The core inefficiency in the casting of talents for commercials etc are the agencies. The agencies receives 30% of the the project’s payment for representing a talent. The agencies justifies this 30% because of their overhead in finding more opportunities for their talents. Since I did not sign a contract with any agency, although I was offered two contracts with one including a free gym membership at Gold’s Gym, I was technically a freelancer for three modeling agencies. Sometimes the agencies would send the same exact message with the same details on when and where to go. The only difference would be the name they attached to the bottom. So obviously they all had similar sources but wanted to “brand” the message so they get the proper credit for when a talent is selected. If only a talent had access to these “White-label” castings, then a talent would not need to share that 30%. Aside from finding opportunities for a talent, an agency can also help with career advice. This advice would have some bias of course.

Another inefficiency I alluded to earlier was the wait and the VTR itself. Depending on how many other people are also there and how early you get to the venue, the typical wait can be anywhere from 30 minutes to as much as 5 hours… After the wait you’d be asked to do the same exact thing you are always asked to. There are exceptions, but the base VTR stays the same. The way to solve this is to have each talent have a profile page with a video doing the normal VTR. It’s really that simple. The internet has had profile pages since the day of Myspace.

After you create a profile page, you open up models/talents to be messaged with more opportunities directly. That means the talents get more of the project’s fees and spend less time waiting to do something repetitive. The casters benefit by having a larger pool of talents to pull from and at lower overhead. This has the potential to even lower how much a project’s budget is as well. Of course you can’t just allow any person on the internet message these people, there should be some sort of verification that the person/organization indeed has an real opportunity for work and is real.

This type of web app should sound familiar. It’s a marketplace. Like all marketplaces you have the chicken and the egg problem. Which side should you focus on? I would suggest focusing on the models as they are open to more work and a larger cut of the project’s budget. The companies and faster searching are fewer but are more frequent in their search for talent. The business model could be priority listings, ads, or transaction fees. This marketplace tries to eliminate the middleman, the agency.

There you go a startup idea that anyone can take and run with. I would love to hear if anybody actually does work on this or even if someone has critiques to give. Feedback welcome.

Back to the story about my career as a model/actor. By mid-June my brother had joined me in the Philippines to also pursue this whim, this dream, this notion of becoming an “artists”. We both enrolled in singing and acting classes. Our 14 singing classes were taught at Ryan Cayabyab School of Music in Ortigas. Our month-long acting class was taught at Actor Studio East in Cubau.

Part two some time in the future…

Possible Email Ruby Gem

PossibleEmail Gem on GitHub PossibleEmail on RubyGems

This is a continuation of my projects relating to using the undocumented Rapportive API. My previous project, Find Anyone’s email: A Ruby script, was a popular project that spurred an issue on Github requesting the script to be written as a gem. After some work, here is the final product.

There were a few motivations in making this gem. When I first released the find-any-email script, I always thought of it as a proof-of-concept instead of the end all be all. Not only did it feel like a hack, but I thought about how easy and interesting it would be to integrate the functionality into a web app if the script was converted into a gem. Another motivation I had going into this project was to improve on my RSpec specification writing. I recently finished reading through the RSpec Book, and I wanted to practice writing specs for this project. If you actually take a look at the gem’s source code, then you might notice there are 75 tests for the gem. Those 75 tests were the result of going through TDD process of Red-Green-Refactor numerous times.

I’m interested to see how this gem would be used in other people’s projects. I was actually considering of creating a sort of SaaS product around the gem or an iPhone app. It seems that these types of email-mining things are of value to some people specifically sales and business people. I actually have something up that I built a few months ago, DirectContact, but I put it on the shelf at the moment. The ideas still seems to have value for people, so I might pick it back up after finishing another project. It gets a bit old thinking about a fairly simple idea after you’ve been thinking about it for awhile.

I would like to tip my hat to Jordan Wright for being a big inspiration for this gem after he wrote his python library Rapportive

CS139P Red and Black Playing Card Suits

I am currently going through Stanford’s CS139P iPhone Application Development Course for iOS 7. I came upon the problem of having my suits only showing black for diamonds, spades, hearts, and clubs.

I started to look at other repos on GitHub of the same project, and I saw I had the same exact thing as the working solution. I then tried to copy validSuits class method in PlayingCard.m directly into my own project, and that fixed it. The problem might have been with choosing the wrong special character from the special character panel. After some looking around in the various tabs, I found the correctly colored suits and I was able apply them again.

+ (NSArray *) validSuits
{
    return @[@"♦️", @"♠️", @"♣️", @"♥️"];
}

You can copy the above class method into the PlayingCard.m to have red and black Playing Card suits.

I tried searching online, but there were no solutions to this problem. Hopefully the search engines indexes this page for others running into the same problem.