ilang – a new programming language

I have been working on developing a new type of programming language over the last few months.  From a physiological perspective, it is interesting to try to create ones idea programming language and see what they create, what features does one add, change or remove.

ilang is still very pre-alpha-ish software, and I don’t expect anyone to jump and start using or even download and try it at this point, there are still too many things unimplemented at the moment to call it a complete language.

An overview of what is different:

  • The power of anonymous.  In may programming language, functions, classes and may other types are given names that can be looked up inside the type system.  However in ilang, attempts to have classes and function and other basic types anonymous, or without names.  The names are viewed as being useful to the programmers who are writing the programs.
  • Short access to making function: a function is anything between {}.  this means that to create function main, it looks like: main = {};
  • optional typing: This seems to be a new and growing trend in programming languages that are coming out now.  By default the types on variables are not checked at all.  This means that more than one check can be imposed on a variable.  Also additional types can be easily encoded with some additional C++ code, and soon ilang code from within the language itself.  The type checking can also do some other interesting things, more later.
  • Built in database: This has always been a feature that I think higher level languages should include, now web browsers include localStorage for example.  This feature can already take all primitive types and objects.  classes and functions can not yet be encoded into the database.  However the advantages having this built in as already noticeable in testing.
  • Python style imports, but only at the top and no ‘as’, *.  I originally made it this way, because I was annoyed when some code I was reading through would import something in the middle.  One you have to find where the import was performed to figured out what is being included into the source, also if you go back to modify above the point where the import was performed then you have move the import up so that it will be available.

To come/planned/supppppper pre-alpha features:

  • Access to the parse tree of files and the ability to modify the tree, changing the code that is running.  There will be the typical system where it is able to access the direct parse tree in a ‘raw’ format, however I plan to experiment some and try and find some natural way to access and modify the syntax tree.  In the aspect of natural modification, I have already noticed some of these properties being easily implemented as a function can easily be replaced by simply overwriting its value.
  • Network distribution.  I am hoping to turn this language into something that is useful when it comes to processing large amounts of data.  The trend at this point has been to utilities a large number of computer and attempt to distribute tasks in a sort of map reduce framework.  The plan at this point is to allowed for unstructured computation across the network where the system automatically determine if it is most effective to move a copy of the code for the computation or to move the data that the computation is working on.

Very incomplete documentation

Link to Github repo

This is only the first intro post.  I believe that there will be more to come as the language further advances and develops.

Comments about another state

This post was written over a number of days in a disjoint fashion. You were warned.

Already in the first days of this vacation I have come up with a number of amusing comments and I felt that it was only right that they be recorded somewhere.

First the air port that we flew into had something like two terminals. I was joking that there would be one person working TSA and when we came back through they would simply look at us and ask if we are going to blow up the plane and then let us through. I was somewhat close in that there were two people working TSA, however they did appear to have the basic requirements to be called TSA.

Second when we got in the car the radio came on and started playing the most stereotypical country music came on and started saying “she thinks my tractor is sexy.” The next time that we turned on the radio it was a song about loving their front porch more than anything else.

The place that we are going to for our volunteer activities was considerably farther away then originally expected. As a result my mother was driving somewhat above the speed limit. As she claims this is her first ticket in a while, gg. No California roles here.

We are the volunteering on the blackfoot reservation this last week. It has been somewhat slow, it appears that it has something to do with the native culture. They believe that it will end up working out and stuff.
The main thing that we have been doing this week is helping the community college get themselves together for their next semester. They are quite small with only 500 students and a few classrooms.
When we are not helping Getty the college ready, we have been interacting with the community.

Today we are leaving the volunteering group. We are going to be driving up and around to do a ‘normal’ vacation.

A review of a year

Looking back, it has been a while since I last updated this blog.  I think this is because it was a crazy fully packed year.  Additionally my time was consumed by great projects such as EDD of which we worked in secret to prevent our opponents from discovering what we were doing.

Looking back this year start like a typical senior year.  There were good and there were bad classes all wrapped up.  Thinking back to first semester I was talking 8 periods worth of classes filling every second of my school day.  On top of the classes there was the constant need to work on college applications and the constant draw to manage the EDD project.  Just thinking about this now is making me tired.

Second semester was not any less tiring than the first.  While I decided to take one less class giving myself some free time during the middle of the day, FRC and EDD started their full on attack.  During the six weeks of the FRC season there was a lot of complications.  For starters there was the complications of figuring out how to shoot the ball.  Additionally, there was the complication of balancing on the bridge at the end to get the absurd amount of bonus points.  In an attempt to accomplish this we built a challenging frc robot.

At the same time as the FRC build season, there were many complications in the EDD class.  We were having to save the rover team as a joint effort between the two EDD teams.  The rover was designed by members of both teams to be the robot that we were going to rescue during the mission, but what happened is the rover team was unable to accomplish their mission of building the rover and thus required the attention of both teams to ensure its success.

After the build season for FRC, EDD started stepping up its game.  We started really working on our countless iterations on our frame designs for our sphere bot and adapters that we were working on for the propellers.  It was during this time when we discover the complications with the propellers and lift.  Our complications stemmed from the beginning with the RC community and not a full understanding of aerodynamics.  According to the RC community if one were to spin the propellers infinitely fast there would be an infinite amount of thrust.  Of course this does not make sense, but the point at which the equations were said to break down is where the pressure above is not able to replenish the air quickly enough to provide lift.  What we did not know is there are also the limits of the propellers flattening out which causes the propellers to not provide more thrust at a higher speed.  At this point we started our many iterations in an attempt to find possible solutions to our problem.  Out first attempt was to greatly reduce the mass of the robot, we were able to cut the weight in half.  Second we attempt to the most complex parts to date in our machine shop, the manufacturing of our own propellers.  Additionally we looked into making a larger frame, as going to propellers that were only 4″ larger in diameter were designed for 1.5 Kg vs 200 g helicopters which was a lot closer to the range that we were looking for.  We tried all of these designs in parallel which was a stunning effort and props (pun intended) to everyone who contributed.  In the end there were still complications with getting the flybar working, and at the last second our last flybar broke and we were unable to replace it.  In typical EDD fashion, we look back and say if only we had another month we could have accomplished what we set out to do (or if only we did not waste 6 weeks attempting to build the rover then maybe the sphere would have flown).

After all of the academics and robotics for the year was over, there were what now seems like an eternity of senior activities and gradutation to sum up the year.

First day of FRC robotics

Today is out first day of the robotics competition.  There is still a lot of work that needs to be done.For starters, the robots drive system needs to be rebuilt.  What happened when we shipped the robot was they were unable to find the right size gears.  Second the intake system needs to be taken apart and have is belts put on.  Finally the bbad needs to be installed (we just finished machining 2 days ago).
Once the mechanical team finished the electrical and programming team get to go to work.  The robot has not even begin to be weired.  Additionally programming team has written a bunch of code hopping that robot will work, but because the robot was “finished” only minutes before we bagged it there was no chance to test.
All in all, if the robot I’d working by the end of Thursday, it is going to require a miracle.

…Government

Before I start, this post is about the Obama administrations’ new online voting system: https://wwws.whitehouse.gov/petitions

The Obama administration has set “We the people” as a new service that allows for citizens to get involved in government.  All one needs to do to participate is click create an account at the lower right hand corner of the page.  Once one has created an account one can show support of a petition simply by clicking vote on this petition.

Here are a few petitions that I believe are worth note and votes:

Abolish software patents
Today there are thousands of bogus patents in the system for different software ideas. One time I was looking through Google patents to see how bad software patents really were, and I found a patent for a watch dog timer that was from 2009. I then went to look up a watch dog timer and found (as I suspected) that watch dog timers have been around since before the 90s. Continuing this search, I found two patents in the same generic Google patent search that were infringing on each other.

Freedom of the Internet
This petition is against the E-parasite act that congress is currently attempting to get passed. What this act is basically set up to do is allow for BIG companies to take over the internet. For example, if a large corporation determines that you are doing something “illegal” then they can get you thrown off the internet. This bill will also allow for websites to be thrown off the Internet in much the same manner. A number of security experts have said that this bill will enable a major vulnerability in the Internet as it will enable a “group” to decided what should not be allowed and modify the DNS records (if abused you would not be able to ensure that you are on the site you think you are on, for example you bank website could be replace when this technology is abused).

Funding NASA
Science and technology is constantly getting its funding cut when times are bad. NASA is a prime example of a successful origination getting its funding cut. This should not be allowed and NASA should be funded.

Eliminating vibration on the Perfect Horizon

For this summer I have been interning with Motion Picture Marine which designs and builds the Perfect Horizon.  The prime use of the Perfect Horizon is to keep a camera level with the Horizon.  This is especially important when working on boats and shooting off into the distance.  In the near future it is also expected that keeping a camera shot level with the horizon will become even more important because 3D moves on average have shots that are twice as long, and any movement in the image is many times more likely to cause motion sickness of the audience.

ph-dsc5776-2-1024x661

The way that the Perfect Horizon works is by compensating by movements of the boat or moving vehicle using two motors, to move the platform in the opposite direction.  The problem comes from when the Perfect Horizon is not mounted on a stable platform.  This is because when a 100 pound camera is mounted on top, there is a large deal of inertia, and thus the platform underneath ends up getting pushed.  If the platform can be moved even a little bit, then the Perfect Horizon will detect this and attempt to compensate as it was designed to do.  In turn this causes the system to begin to vibrate.  (This problem can easily be seen on a crane arm, or any poorly designed mount)

This problem can basically be broken down into two major components.  The first being the detection of the vibration, without miss detecting normal operation.  And the second is modifying the internal parameters of the system to prevent it from vibrating.

For my first attempt at detecting the vibration I just attempted to use simple signal processing filters.  This ended up working on my test rig as it was a stationary platform.  In moving to a moving platform I began to notice some problems with the solution.  The first being that it would miss detect jolts or changes in motion as vibration.  This was simply unacceptable as this would degrade the quality of the system and prevent it from doing the job that it was designed for.  With some internet research, I found out that jolts are visible on all frequencies while vibrations are only on a select few.  (link)  This lead to using fourier transform for processing the signal.  What a fourier transform basically does is it converts signals in the time domain into signals in the frequency domain.  This basically means that when looking for a vibration, we need only check for outliers in the set of data.  This has turned out to be a better solution, and combining it with simple check to ensure that there are enough samples that indicate vibration there has not been any false positives as of thus far.

The second problem came in with modifying the gain of the system to prevent it from vibrating.  I believe that part of the problem with the vibration comes from the fact that the system produces thousands of tiny jolts while moving, this is because the system will determine where it wants to move to, and then it will move to that point up to a maximum speed.   Once it has reached that point, it will stop and wait until the next sample is ready.  The solution here is to slow down the motors so that they do not reach the end before the next sensor reading.  The obvious answer of just always slowing down the motors will not work, as then the system would not be able to deal with the larger movements because the motors would be moving too slow.  In implementing the solution the motors are only slowed down when the system determines that it is vibrating.  This essentially gives the system some form of adaptive control over the internal parameter used in the system.

Recent downtime

In the last 24 hours, JSApp.US was down for the majority of the time.  The problem started with a power outage at the Linode hosting facility.  This brought the server down at first.  The system then had a problem getting back up as there was a super block failure on the root file system (not the database).  Linode continued to do maintenance on the system, and it is currently my belief that there was underlying problems causing the issue.  Earlier today I was able to get back into the system, but it was having problem still booting up into the normal system.  After some more work with the lish interface and loads of reboot attempts the system is now running again.  I have tested the system to ensure that it will reboot into the correct configuration, and it seems to be ok at the moment.

Reflections on FRC world

So this was my first time at FRC world.  It ended up being a lot of fun, and was very enjoyable to be able to interact with other FRC teams, and see a lot of the booths that were from the various suppliers of FRC materials.

First off, congrats to our admin team for winning the entrepreneurship award.  This just shows how much time has gone into this.  Something that winning this award made me realize was that there are hundreds of teams that were at world, and that they were representing thousands of teams.  Just being one of the few special teams that have won an award on the world stage, is a great accomplishment.
Something that did happen at world, was there was a lot of talk with regards to what will happen next year with our team.  We are planning to do a lot of major overhauls to the build side of our team, so that we can produce a quality robot.  There are a few plans floating around right now with regards to the issue, and I think that if we are able to implement some of them that we should be in good shape.

Some of the plans that we came up with that are somewhat interesting.

  1. Build a second robot and practice driving
  2. Start a lot of researched based projects
    1. The first idea is a variable controlled pneumatic system
    2. Kinect integrated into the control system
    3. full on autonomous robot (more just the idea of having the sensor feed back developed)
  3. Build a number of robots during the off-season
  4. Train more members to be able to machine the parts

FRC world 2011

This coming weekend is the FRC 2011 world robotics competition.  After this, the 2011 FRC season will be over.  We are hoping to do decently well, as we feel that our robot can perform, but the question is going to be how it holds up against the other world-class robots.

While this will make the sad end of 2011 FRC, it will also mark the beginning of next cycle for our team when it comes to FRC robotics.  Next year we are already planning to get a lot more training in for everyone on the team.  It should be interesting to see everyone getting trained at all the various parts of the build season.  This should differ greatly from what we had this year with a few main people doing large chucks of the work.

I am hoping that next year will be able to be a lot of fun, as there are some thing that should be different from this year.  The first is being that we (as a team) are wishing to build more practice bots during the off-season.  Our goal is three different drive systems and then articulations to go along with said drive systems.  As the current programming leader, I would also like to see more people getting on the programming side of the robot.  I have big dreams with wanting to see a robot that could drive itself completely autonomously.  I am currently thinking that a xbox kinect could be used as the primary sensor for the system.  When in an indoor condition, the kinect is able to give distance data up to 27 meters away, which would be more than enough for decent robot control.  The kinect also packs a decent resolution camera into it.  The main problem with the kinect is that it is USB, and the cRIO has no interfaces for USB.  So my current plan is to use a pc104 like board with USB and ethernet to interface between the two devices.  This second processing unit could also serve as a video co processor on the robot possibly providing a lot more computational power.

First frc robotics competition of the year

This masks the end of the first frc robotics regional.  There are two sides to this update.  The first being that the robot is working a million times better than when we shipped it, but we still have a long way to go.
We only scored one of the rings on the pegs, this was for a few reasons, the first being that we did not have the arm working till later on Friday, the second was that many of our alliances wanted up to just play defense.
We also received a  big hit in the face when it came to the mini-bot.  We found that the bot was not as fast as we thought it was when compared to other mini bots, but we have a good idea of how to fix it, so it will become a competitive mini-bot by the next regional.

The flood of twitter

I originally added the plugin to add my tweets to this blog.  At first it seemed to work really well, but now looking at the content on this blog, there is only tweets, and there is a very limited number of post in comparison to tweets.  So now I am turing the updates of tweets off, and assume that anyone that wants to know every tweet is fully capable of following me on twitter (@matthewfl).

I hope to add some blog post that will make this site somewhat informative about various things.

2011 FRC game

So this is the start of the 2011 FRC game.  We are about 4 days into the season right now, and if our team stays on schedule, which it seems that it will, then we should start CADing the robot today.

Being the programming leader of the team, my main responsibilities at this point is to start getting the systems ready, so that when the robot is built it can be quickly programmed, and to also start programming when we start to know the design of the robot.

Seeing that the first task of prepping the system should not end up taking that long, this should give me the chance to help with the mini bot.  Having been concerned for the building of the minibot, and the only leader figure without major responsibility at the present moment/Experience with FTC.  I should be able to start CADing the minibot soon with the rest of the team.  I think that the minibot is going to become less about making one design and being able to stick with it, but after initial CADs, being able to quickly go through design changes, to try and knock a few seconds off the climb and deploy time of the minibot.

In all I think that this is going to be a good season of FRC, the major problem is going to come down to if we are able to get the robot done with enough time so that we can practice driving it.  This is going to end up being a critical portion of our success, along with the time to test and “debug” the system.

npm/coffee update

It seems to be that I have not updated this jsapp blog in a while.  If you care about getting updates you should definitely join the jsapp mailing list where I tend to be announcing new features.  https://groups.google.com/group/jsapp-us

There seems to be a few features that have happened since the last update of this blog, so I am going to try and cover them all in a list now:

  1. There is not support for using a custom subdomain, check out the deploy command
  2. There is a profile view for all users, the profile can be edited using the profile command
  3. Files can be made public for other users to include into their own projects, to do so use the files command and click public
  4. There is a new jsapp command that can be installed using npm (npm install jsapp) this is useful for anyone that wants to work with jsapp through their own filesystem on their computer, or  use version control on their own system
  5. jsapp now has support for coffee script (demo) all one has to do to take advantage of this is to add the suffix .coffee to any file and it will be compiler with the coffee compiler prior to running

Again if you what to be kept up-to-date on the new features of jsapp, check out the mailing list: https://groups.google.com/group/jsapp-us

The Surge

Seeing as today seems to be the one month adversity of jsapp.us, it seems only fitting to have a small reflection on what has changed and happened over the last month or so.  When I first started announcing Jsapp.us, I was doing it through the node.js irc room.  In fact it was from a conversation that I had in irc, where I got the idea to add the sidebar.  I think that this sidebar greatly helped people understand some of the capabilities of the system rather then just seeing a coding editor.

Within the first week of jsapp, it was on the reddit/programming page and hacker news.  This is a graph of the bandwidth that the site was using during this time.  The smaller section is about 24 hours after it started on reddit.  And the larger spike is getting onto the hacker news page for about 3 hours.

During this time of rapid growth, most of the actions only dealt with running the test of node.  From the comments that I was reading, a large number of people had been wanting to try node out but found it to be somewhat difficult to get up and running on a windows box.

Now that the number of people coming to the site has died down, the deployment system is getting used more as more and ore people are getting use to the idea having a web editor and being able to deploy their apps.

There have also been some features added to the system after its initial upstarting.  First there is now support for an http client. before this was just left blank and was not working.  There is also a profile view, in which all user have a profile that they can write content in, and view their applications and shared files.  Along with the profile view there is now support for importing files from other users when they have made said file public.  This can make it convent by not having to load in ones own version of the library to their own file system to use it.

Some stats: In the first month there were 500 accounts created, 100 applications deployed, and 20,000 visits