Posted by knorby on May 5, 2010 under Android, Apple, Linux, coding, facebook, firebug, firefox, flash, google, internet, javascript, media, mozilla, rants, video |
First off, I hate flash. I use linux, and I have a netbook; I know very well how bad it can suck. For reasons beyond my comprehension, flash audio just breaks occasionally on me, including in AIR. On top of that, I have done a lot more web app development in javascript in an attempt to push browsers to their limits than I ever have flash. Aside from Sound Manager 2 (which doesn’t really count), I think the last time I did everything in flash was flash 7, so aside from some side knowledge, I know very little about flash. I really hope HTML5 is successful, but I don’t think it is a direct replacement for flash, no matter how much Steve Jobs bullshits. Here’s why:
Content Control
In the mad rush to move any web video over to flash, a serious point has been overlooked. Youtube may be able to set up backends for HTML5 video formats, but can Hulu? It is possible to save hulu apparently, probably though some strange use of rtmpdump, but from what I could see, those methods were convoluted at best. The question comes down to how something like Hulu, which must have ads on each video to survive, use something other than flash. I know from experience that ad block can stop the streaming of hulu ads, but hulu forces a longer black screen on you otherwise. I haven’t looked into the specifics of what goes on in the whole process, but it is safe to say that it is easier to restrict how content is handled on flash than the standard browser environment. The problem comes down to this: if uncompiled code is sent to clients, the client has the final control on how content is rendered. I wrote up a now broken approach to eliminating some facebook ads with simple css in firefox a while ago, but such approaches have only become more widespread. Site owners are starting to take notice of things like ad block, and some take serious offense. Facebook went as far to send a C&D to a firefox extension that modifies facebook rendering, of course they are pretty evil at this point (I am thinking of deleting my account, but that is a different story). I predict that in the near future, the question of how clients are allowed to modify the rendering of content will become a central issue to many web apps. The simple truth is that a compiled flash swf provides better code security than javascript obfuscation by several magnitude. Both on the front of audio and video and on just general content, flash provides content control that a browser just can’t match.
Standards are Slow to Adapt
If you have been following any of the debate over H.264 vs. Ogg Theora (better format vs. open), something will be apparent: content hosters have a bad deal. Which standard will prevail (probably H.264)? Is it worth doubling the number of videos to accommodate firefox? The questions go on. When flash introduced video, it was simply a matter of “run this version” on all platforms. The thing with browsers is that they are big projects. Chrome, which doesn’t even have the task of maintaining a full rendering engine, suffers from problems already as a result of being too big. I submitted a bug to Chromuim about 6 months ago for an SVG issue in the developer tools; I submitted the same bug to firebug first, and what I have seen says a lot about chromium. The firebug issue was tagged (for triage) on the same day I submitted it, and the fix was in a beta 4 months later. It took 3 months for chromium to do what it took a day for firebug to do (look at it), and all I have seen in about 6 months is a couple extra tags, and a few irrelevant comments. Mozilla is quicker with firefox bugs, but it is also safe to say that chromium has focused more on performance. These stats don’t even consider the number of developers on each, many of which professionally work on firefox and chromium, which can’t be said for firebug. I am not trying to raise questions in how open source development goes, but once HTML5 features lose focus, what will happen with bugs? What will happen when a better video standard exists? You can’t just fix standards; that’s why javascript and css are what they are. There is something to be said for keeping stuff in third party apps.
Maturity
Flash games have a special place. Traditional games don’t fill that niche; mobile games can’t fill that void; the truth is that it will take a while for javascript + canvas to substitute. It is a new technology, and one with interesting potential, but it is new, not mature. You can’t expect normal flash game developers to all of a sudden start writing stuff for the pure browser, especially when it gets harder, not easier. That doesn’t even consider SVG+javascript, which is actually a more near equivalent of flash, and even as that is more widely deployed, I will just say that it is even farther from being in a real production state. I wrote a web app on it, and I encountered, and still encounter, all sorts of weird browser bugs. To keep it short, it isn’t better to develop on an immature standard on 5 different platforms on 3+ different OSs than flash.
Conclusion
I think there are a lot of pros and cons in both directions of Flash vs. HTML5, and I hope and think that HTML5 will take over many of the uses of flash now. I think my defense of flash is rather incomplete, and my love of the browser environment is hardly expressed. Regardless, java, flash, or other plugins have served as the innovators of new approaches for a long while, and there is something to that. I hope third party methods don’t disappear, as I think the web ecosystem will suffer as a result.
I realize this post was mostly a rant, so if you have anything to add, please leave it as a comment, or send something to me.
Posted by knorby on October 23, 2008 under Python, coding, javascript |
I have always enjoyed putting as much work as possible into a line, especially in higher level languages. In the crazy javascript (speaking of which, MochiKit 1.4 was finally release!) system I wrote (still need to put the final touches on that….), I was thrilled when I was able to combine all of the parts of my system into one one line. Since I mainly program in python, list comprehensions and generator expressions make it pretty easy to use one liners a lot, and at least with generators, it often means that is efficent too. Basically, what I am trying to say is that I love the one liner. Last night, while I was bored while doing my discrete homework, I came up with a memoized factorial function one liner. The standard, niave version is straightforward:
fac = lambda n: int(n==0) or n*fac(n-1)
Since I was bored, I wanted to see if I could memoize that expression, and still keep it in one line. Here is what I came up with:
fac_dict, fac = {}, lambda x: ((x in fac_dict or fac_dict.update({x:(lambda n: int(n==0) or fac(n-1)*n)(x)})) and False) or fac_dict[x]
which can be simplified slightly to:
fac_dict, fac = {0:1}, lambda x: ((x in fac_dict or fac_dict.update({x:(lambda n: fac(n-1)*n)(x)})) and False) or fac_dict[x]
There are still issues with recursion depth for large values, but a helper function could probably solve that.
I needed to write something for my blog, as I have gotten out of the habit, and this thing seemed as good as anything.
Posted by knorby on January 4, 2008 under Python, coding, javascript, personal |
This post is really for myself. I started a new project for myself last night, just another simple utility, mostly for my own use, that shouldn’t take me anytime at all. I say that before I start most things, but I think it will probably be true in this case. Anyways, I have a pretty large pile of projects that I have to work on or complete, and I wanted to make a list so that I might be able to judge which ones to work on and to just have a list.
(Mostly) Completed/There is Always More to Do
- pyXSD – pyXSD was my first big project. It was what I worked on at ORNL as a student intern over the summer of 2006, between high school and college. It was also my first program in Python, my favorite language. It is an XML Schema Validator, which works in some funky ways. It fills a small void in th python+xml world, but it still has a few bugs to work out, and there are a few features I would like to add. It has stayed at 0.1 for some time now, and I don’t know when I will get back into it. I have been kind of hoping for a few people to submit some changes, but only one person has (and that was barely anything). I really just can’t get excited about this project anymore. I don’t use XML Schema (RelaxNG all the way!); I really don’t have a reason to do much more with it. I am guessing it will stay at 0.1 for a while….
- ACLUofC Website – I mostly included this one, because I didn’t want this section to be one item long. There is really very little to this site. It has a simple design that I am mostly happy with, considering that I did it fairly fast. It needs content still, but I don’t really worry about that one too much.
Almost There, but Still Needs Some Work
- xmlViewer – My project at ORNL over the summer of 2007. Basically, it is an xml-based expert system to create an editor for a specific xml format. The system is currently written in javascript. It is a really nice system, and there is a lot in it that I am proud of. It just has a few bugs at the moment. I have been planning to write an xhtml editor with it as well, as I figure it could really do some interesting things. It also needs a better name.
- lambdaCarte – I was working on a project for a class, and I needed a nice command-line menu system in which I could associate actions, which usually are small. I did some quick searching, but I didn’t find any python packages that did just what I needed. I wrote it mostly in a night, and it seems to work surprisingly well. It needs a lot of cleanup, but it works. It’s really simple, but such things just make life easier.
- DOIT Fortune Library - I am not going to try and justify this thing’s existence here, mostly because I have none. It is not as much a project as it is a mission; I feel it is my duty to make available in any form I can conjure (that doesn’t take that much time and requires no money) to spread a list of bad ambiguous sex jokes from USENET I found when playing on the twenex.org computer. There are few things to work out on what I have so far, but I have been planning to make a DOIT of the day rss feed, and I recently started to look into making a DOIT facebook app. I must DOIT to the world.
Partially Complete
- xmlTools – I wanted to work with xml from the command line or in scripts, and there isn’t any easy to use toolset that I am aware. It is written in python and it uses the lxml library. A bunch of them work, but it needs further tests, and there are a few functions I want to add.
- pySchedule – A python scheduling library. I haven’t touched this thing in a while.
- packagemapWriter – A simple utility to create packagemaps for google code search. It is really a simple utility; I just wanted to something to pass the time over this last break, and I wanted it for some of my projects.
- deviceXmlFileSync – I have a bunch of gadgets with file storage, specifically mp3 players. I often will get a new album and need to load it on to several different devices, but I don’t remember which ones I have put it on. This python utility helps to queue up transfers. I haven’t worked on it in a while.
- fireScraper – The project resulting from the method I outlined to screen scrape using Firefox from the command-line. Still has a lot of work to be done, but I have already done much of the needed work.
- Political Networks – A research job I have.
- rstDocs – I write a lot of technical documents in reStructuredText (rst). Basically, I wanted something like google docs to write rst on and render it (except just for me and maybe some friends). I started this thing a couple nights ago. It was partly an excuse for me to play around with php.
- New Print System Interface – I work in the Mac and Linux Lab at the UofC, where we have a print monitor to prevent users from printing things they didn’t write and to enforce a quota. As staff, we have to be able to make exceptions and correct errors. We also have to maintain kiosks so that users can select which jobs they want to print. I started to rewrite it to use ajax techniques as opposed to a simple php script with a page refresh every few seconds. I also wanted to add a few possible actions that maclab tutors and users could use on documents.
Barely Scratched
- xmlDebt – I didn’t want to use any of the account tracking software I found, and it seemed like something simple enough to code, so I started on one, but I guess my love for accounting is not that great….
- rsoFundTracker – Simple system designed for RSOs (clubs at UofC). Financially, most have a lot in common, as they all have to fight..err…..deal with ORSCA.
- cssExtended – Basically, I think css sucks. It would if it was written using JSON instead, and it would be nice if the selectors included XPath and regular expressions. I started outlining this format, and a javascript engine to implement it. I was also thinking of writing a python script to implement it in the xhtml server-side or to files after any changes are made. I was also thinking of calling it jss.
So now I have a list to remind me of all the things I started so I don’t start more when I want to code. For the ACM, Cord and I have been working on PhoenixForge, a gforge server for UofC students wishing to work on projects on campus. Hopefully, it will cause me to be more productive.