tag:blogger.com,1999:blog-38247026447695658542024-03-07T20:29:31.823-08:00The Fortified HillA personal blog from Arlo White. Thoughts on life, technology, etc.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.comBlogger16125tag:blogger.com,1999:blog-3824702644769565854.post-78140235713518193782009-08-27T19:15:00.000-07:002009-08-27T19:31:39.220-07:00The Extreme MiddleWhy is it always the extreme right or the extreme left making a fuss? What about the middle?<br /><br />People only protest when they're upset. But they create this false sense that lots of people are upset and share their view because they're the only ones running around shouting. The majority of people in the middle just want to get on with their lives and know that everything requires compromise and that the people actually in charge will do their best to come up with good solutions.<br /><br />I sometimes find it amusing to think about going to a protest with a sign along the lines of:<br />"I'm generally ok with everything."<br />"I'm angry that people are angry!"<br />"I trust my representative to make a good decision."<br />"None of this really matters."<br />"I'm just here cause I'm bored."Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-83908074441126981822009-08-27T19:00:00.000-07:002009-08-27T19:13:10.658-07:00Visual User Interface DesignI often wonder why more user interface tools aren't designed visually from the beginning. Why bother coming up with a text based abstraction that needs an interpreter. Why not just start writing a gui editing tool from the beginning and just spit interfaces to a binary format?<br /><br />I guess this is why <a href="http://glade.gnome.org/">glade XML</a> and <a href="http://trac.enlightenment.org/e/wiki/IntroductionToEFL">EFL</a>'s edc files bother me. I feel like all this work is being put into the interpreter and the ui text language when the developers could just spend more time making a kick-ass gui tool.<br /><br />Maybe it's because making good guis is hard...Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-19270542666257875132009-08-27T18:09:00.000-07:002009-08-27T18:58:37.005-07:00Pondering Software Design, ripping on HTMLIn Software you design using various languages. These languages are used to create abstractions, which combined describe your intentions for the computer. These abstractions are arbitrary, just as the words and gramar of language are. However, once you create a language or abstraction, you are bound by its limitations.<br /><br />So, lets look at a bit at how we program today, specifically web applications. We write code in some primary language (Java, Python, Ruby, php, etc), which generates HTML, which your browser interprets and renders. On top of HTML you also have Javascript and CSS. In addition there are a number of software layers in between (Toolkits/Libraries). Sound confusing? It is...<br /><br />The problem with the web programming model, is the fundamental separation of your primary language from the browser and its languages. The other problem is that there are so many ways to abstract concepts. The same design can be done within different layers. But the abstractions are always difficult to translate between the layers. The limitations of HTML often force you to do certain design across layers. Part of your user interface design may be done in template languages connected to your primary language, and some of it is HTML. Even if you abstract everything with these template languages you're constantly having to tweak HTML to achieve your desired effect.<br /><br />So, what's the solution? To cleanly layer the languages and abstractions. HTML never should have been both a rendering layer and a ui abstraction layer. Either it should deal with primitive drawing, or higher order concepts such as form elements, not both!<br /><br />What's the whole purpose of a browser anyway? Really it's just to preload code and abstractions on the client side so that you don't have to transfer so much data to create the visual effect you want (render an HTML document). We shouldn't be scared of changing these abstractions and improving the way we program.<br /><br />We have to separate web concepts from web technologies. Certain concepts, such as the link, will forever be part of our technological culture. But the abstract idea of a link is separate from it's implementation (an anchor tag in HTML). HTML is a mess that we can and should discard. Links can be described and created with other languages and technologies. We should focus on finding and developing better languages, abstractions, and tools rather than constantly patching the broken concept that is HTML.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-13095286946794143572009-08-19T10:45:00.000-07:002009-08-19T10:53:48.727-07:00Mysterious EmailSo I just received a strange email:<br /><br /><blockquote>Dear Arlo,<br /> <br />On the eve of the final test in this wonderful Ashes season myself and my wife were faced with a dilemma as to what to call our new born son. Out of nowhere the wonderful lady suggests Arlo which has always brought to my mind an exciting sports report after the humdrum miserableness and gloom that is the news. So it has been decided upon and with a bit of luck the new Arlo will either open the batting for England or play for Leeds when he is 16 and they are top of the premier league!<br /> <br />I hope that you don't mind my message and hope even more that this brings England all of the luck that they need to finish off the Aussies this weekend. Enjoy the coming days and if you have any advice for a newborn Arlo J Cook then it would be most welcome I'm sure.<br /> <br />Cheers<br /> <br />Tony (his Dad)</blockquote><br /><br />At first I thought it was spam, but it doesn't really solicit any information from me. The email headers seemed legit. I ran traceroute on the ip address of the domain and found that it did indeed originate in England. I visited the website and found that Tony is the manager of a real estate agency in England.<br /><br />So, this person seems real...the question is why did he contact me. I googled my name and found a wiki page for Arlo White:<br />http://en.wikipedia.org/wiki/Arlo_White<br /><br />Apparently, there's an English sports commentator with my name and Tony was trying to get in contact with him. It looks like he may have just grabbed my email from the second google result (my profile page at the Atlassian Forums). I suppose I'll email back and tell him he's got the wrong Arlo.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-61150523203842655592009-04-25T08:17:00.000-07:002009-04-25T08:18:20.213-07:00Rejecting the CloudMaybe this seems radical to you, and maybe it doesn't. To understand the reason the Cloud is a bad idea, we need to look at the short history of the web since the late 90's. The best example to look at is e-mail, but the same arguments apply to most Cloud applications. In those days, you got email access through POP and later IMAP. The service you were paying for was just a reliable email server and an account on it. Some free sites generated ad revenue by injecting text ads into the bottom of your emails (some still do). Since then, various web clients have come about. The main reason for the exodus to web clients was not that the web email clients had a better user-interface but because users could have the same user interface at any computer terminal. This is incredibly attractive to many users who do not care that much about their email client's features.<br /><br />There are a number of problems with "Cloud" applications.<br /><br />First, is that you cannot access the service unless you're online. You may argue that you're almost always online, but this is hardly true for mobile users. The fact is that a user should be able to access their data even when offline. This is the reason Google has their Gears project. There is another implication: you don't posses and own the data. You don't actually know if it's safe, being sold, or even managed securely. You just have to take it on faith that the service provider is doing their job. In some cases you may not even be able to extract your work or data in a usable way. What if the provider goes under, what if they are bought and the service is canceled? Not completely owning and possessing your work should be a major concern for users.<br /><br />Second, the user gets an augmented version of the service. By this I mean that the service starts to be branded and enhanced by the provider. It gets integrated with the providers other features and starts delivering unique features. At first this seems like a good thing, a result of competition between providers. The reality is that this results in broken APIs and interoperability issues. These enhancements make it difficult for a user to leave a provider or to integrate a provider's features with their other work.<br /><br />Third, the browser is a bad platform for these kinds of applications. The browser was never designed to be a host for dynamic applications of this complexity. Their are numerous development and usability issues in web development. Almost all web work involves hacks and workarounds to accommodate situations where browsers don't adhere to the web standards. The browser has been contorted to fill a role that your computer environment should have filled all along.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-15198267687624483622009-04-16T12:38:00.000-07:002009-04-16T12:40:47.227-07:00A more profound Enlightenment, Part 2There's been some good feedback from people on e-users, though the developers are understandingly cynical. Here's a reply I just posted:<br /><br />Thanks for the feedback. I have seen clips of Microsoft Surface. However, it doesn't look like it's targeted at replacing our working desktop. It seems like more of a social toy with a few useful features rather than a new user interface that will replace our current operating system. Though I'm sure Microsoft is looking at incorporating some of the ideas into Windows.<br /><br />Well, realistically I need to sort all of my ideas into what's possible for a first release. For example, the visual database design kind of stuff will need to wait. My general plan is that at first it would be a Linux desktop. If it gains interest and as features are added it will make more sense and may even be necessary to make it its own distro. At some point in the far future there may come a time to make a commercial arm and really push it into everyone's lives, but that's just a dream at this point.<br /><br />I kind of look at this project in terms of what applications/services can it replace and bring into your native desktop. So for the first Linux desktop release, I'd like to complete wrap around email, im, address books. Then there's the object hierarchy/ontology, spaces, tagging, etc and the scripts/tools standardization. I still have to work through the exact details of how the layers will interact.<br /><br />Raster just replied:<br /><br /><blockquote>basically you want us to re-implement every application in existence so it<br />works with your idea. you know that isnt going to happen? (from photo editor to<br />text editor and so on...)</blockquote><br /><br />Not every application. I think big apps always will have a place, e.g. 3D Studio Max, Music Mixing software, etc. I just think that many of the applications out there would be unnecessary if your computer was just more capable. It sort of ties into Tim Berners-Lee's talk on linked data. Why create brand new apps or websites around each data set? Why not just naturally access and manipulate the data with your computer? Use a collection of small tools that have uses if different contexts rather than one big tool that has just one useful domain.<br /><br />It's exactly like the GNU command line tools. This time the command prompt is your desktop and each program can be executed through a discoverable interface rather than having to know the name of the tool. And just like GNU tools, you can install new tools and have them integrate with your desktop easily.<br /><br />Think of why you use the command line and the power of piping programs together. This project would bring that kind of power to the average user in a visual form. Take grep for example. In this desktop, when you have muti-line text selected you'll have the option to filter lines. Under the hood the system will be using grep. It's just a matter of gluing everything together in a clever way.<br /><br />I'm not naive enough to think I can do all of the work alone. But if I can just get a few developers to help design the core user-interface and concepts. The rest is just plugins and tools written to the standard. As these tools mature you'll bring them into the core set of tools that people will begin to expect from the system.<br /><br />So for example: Somebody wants to watermark a bunch of pictures. This tool doesn't exist in the default system. They go to an online repository of tools and search for watermark and find something. The developer of this tool just had to think about an array of pixels and what parameters the tools has, such as the location of the watermark and the watermark image. After the user installs the plugin they can create a selection of images and use the tool to watermark them.<br /><br />Think about the difference from the way its done today. Both the user and the developers job is easier! The developer didn't have to worry about designing a user-interface or a full-blown application. They just had to write a little script that adheres to a certain API. The user didn't have to learn a new user interface. More importantly they had to do less work in terms of clicks. The simplest application would require you to go through an open dialog or drag-drop pictures onto your watermarking app.<br /><br />What's more is that combinations of plugins will increase the power of the other tools. So say in this situation I have 1000 pictures all in the same folder. Their names are a mess, and I only want to watermark a portion of them based on size. If I get a selection tool that lets me filter my selection of images based on size, then I just use the watermarking tool on that sub selection. With another authors image file filtering tool I've increased the power of the watermarking tool and any other image processing tool.<br /><br />Again, in the current (old) model, you would have to rewrite your watermarking applicaiton to have image filtering features built-in.<br /><br />I think it's possible, and more importantly, it's possible to do incrementally and distribute the work. The hard parts are creating a good API and standards for the tool plugins. Handling dependencies, API changes/upgrades, that kind of thing.<br /><br />So as I see it, this system has two fundamental core components that would be independent standards:<br /><br />1. The organization of objects, their properties, and how they can be accessed through an API. Classification of objects (simply mime-type?), inheritance of properties? How do you expose an object to a tool? How can ui tools search for objects and move them around (move between spaces, contexts, share them).<br /><br />2. The tool standard. How you write a tool to plug into they system. Ideally you could write a tool in any language (C, Python, JavaScript, etc.) There's a lot of work in gluing the languages together. The API the tool has access to. For example, a tool working on an image would be interested in finding the image type, size, etc. The tool spec in terms of versioning, compatibility, dependencies, etc. Also, there would be different kinds of tools: object tools, ui tools, filter tools.<br /><br />Then there's just the user interface built on top of these two standards. Your selection widget is just core tool. The selection widget listens for ctrl+clicks. When you ctrl+click something, the widget decides how to highlight it. Then it uses the previous APIs to query its objects, query the system tools, and match up the right tools for your selection. This means that if people don't like the way selections work in this system, you can just uninstall the default selection behavior and install someone elses widget.<br /><br />In a way, the selection widget acts very much like a shell, executing other programs based on user interaction.<br /><br />Hopefully I've made this idea seem more feasible.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-20580790944850939672009-04-15T15:00:00.000-07:002009-04-15T16:48:05.737-07:00A more profound EnlightenmentI've been following the Enlightenment project for years, always impressed by the strength of vision and dedication of the developers. Every once in a while I take an inventory of the graphical toolkits out there and am always disappointed by the fact that the EFL is the most progressive desktop gui system out there and yet hasn't really broken into the mainstream. All the other GUIs (QT, GTK, Windows) are built around boring components (boxes, pull-downs, radio, etc.) The concepts behind these mainstream toolkits are decades old.<br /><br />When I look at the web, I see all of the excitement about Web 2.0 and the Cloud and "Linked Data". But it's all branded and contained within different application spaces. You go to GMail to access your contacts and send an SMS. You go to Facebook to update your status. You also have your status to set on GMail, AIM, and every other application. These things are really just implementations of a concept. This is especially confusing to less intuitive computer users. Users have to learn a ridiculous vocabulary to do things they already naturally understand: (eMail, Instant Message, AIM, GMail, Yahoo, Facebook, MySpace). Instead users should just have to think "I want to send this to Bob" (Email/IM) or I want to tell everyone who cares about me something (Post a Status). As the features these companies offer all coalesce, one wonders why we need to be branded at all? Why not just standardize on these features and give users more intimate access to them through their own computer.<br /><br />To make things worse, this is all implemented on a HTML/Javascript layer that was never designed for it. Developers have to wrestle with browser eccentricities and code hackery becomes a necessary part of the development cycle. Instead of looking for a better platform than the browser people have over-inflated its ego (and purpose) and made plugins for it. Now we have Ubiquity, a great idea built on the wrong platform. Rather than take a step back and design a new standard rendering layer we now have Flash, Silverlight, and JavaFX. The browser is tired and overloaded, it's laden with features that belong on your desktop, not next to your web page.<br /><br />If you've read sci-fi, or watched movies like Minority Report, you know what could be possible. Direct meaningful interaction with visual representations of data. I think now is the point in computer history where that vision can actually become a reality. It's simply the intersection of the browser, your desktop, the Web 2.0 services, and personal management tools like OmniFocus or mind-mapping tools (Freemind, Xmind, NovaMind, etc).<br /><br />So let me try to explain this idea more concretely...<br /><br />Imagine your desktop as a space with context. When you start working on a project, you create a new space/desktop for it. As you open files/email/urls it all gets associated with this context. When you decide to work an another project, you'll close this space. Later you come back to it, and everything is as you left it. When you search your computer you can search within a space or all spaces, and move or link things between spaces. A desktop will dynamically adjust to the contents. If you have 3 pictures you're working with, they'll just be thumbnails. If you're working with 1000 pictures, they'll be abstracted as a list that you can manipulate.<br /><br />Now imagine that all of these things you work with have meta data and tools associated with them. Your computer has a hierarchy of objects and tools. For example, a picture can be scaled, rotated, color filtered etc. Text can have different fonts, colors, be translated. These tools are really just simple programs or scripts that are visually abstracted. Eventually there might be a database of tools you could download for different purposes. This is one of the more difficult components to design well, but I think it can be done.<br /><br />Within a space you can create selections of different objects and save the selection. Once you have a selection you can act on it in different ways. You can act on their common properties. So since all objects have a creation date, you can sort by creation date. If they're pictures, you could rotate all of them.<br /><br />Now expand your concept of desktop objects. Not only can they be files, but they can be objects from a database or a website. They might be widgets like you would see on any of the portals (Google, Yahoo, etc) or desktops (Google Desktop, Gnome/KDE/E widgets). They might even be objects from the local database.<br /><br />Any of these objects can be acted on in certain ways. You can annotate, tag, categorize, or set a due date on them. You can also create basic elements and combine them. Rather than fire-up gEdit to take some quick notes, you just start typing notes on the desktop. You can tag these notes or set due dates for them, and they become todo items. You can type some text and then start formatting it. Then convert it to HTML or a Word Document or whatever.<br /><br />If you're still with me you have some kind of image of a desktop that understands many kinds of files and data objects and can represent them visually. A desktop that might look something like what you see in sci-fi movies where you can visually drill down, make selections, apply operations, etc.<br /><br />Imagine that you have a list of contacts that's deeply integrated with this desktop environment. When you open a message from someone on a space, the attachments can be moved onto your space and be manipulated as objects, you never have to open a save dialog. Also, the person becomes associated with the current context. These contacts have email accounts, im accounts, facebook accounts, etc, but you don't really care about that. You never open an email or instant message client. You simply get messages from the person and send messages. If the person is currently online through an im service the message is sent with that method. You can drag any object onto a message. The computer intelligently translates the data. So if it's a selection of rows from a database, it inlines it in the email as an html table. There's no new data formats or apis, when you get an email with an html table in it, you can drag it out into your space and manipulate it and break it apart. Imagine the power of this kind of easy communication and imagine that every object can be sent to someone. If an object is "online" it will give the person a link, if it's small it may inline it. In addition, you could invite people to collaborate on your space while you work on it. Or maybe work with online spaces stored elsewhere?<br /><br />I'm also thinking that this kind of computer environment would replace a certain amount of work done with data mining and database tools. I don't do much consulting work but I've encountered a few people that had a conceptually simple problem that required a database but the tools were just too hard to use and maintain. They really just needed a few tables with very simple associations. Imagine if you could just visually setup a database and define its entities and then manipulate and search it just like any other object on the desktop. Instead of developing custom reports for every database, you give people the availability to create tables and charts using any kind of object. Say you select a list of pictures, you can then graph the picture dates on a time line. Say you have rows from a database, you can do charts with the measures found within that data.<br /><br />Hopefully you understand what I'm getting at. The paradigm shift is huge, but I think it's the way computers need to go. Think about it, what does your email client or instant messaging client really give you. Aren't they just different interfaces around the same fundamental concept? If your computer was effective at organizing and archiving your email why would you even use an email client application? I believe this type of integrated desktop would completely replace your need for separate email, instant message, task management, photo management (Picasa) applications.<br /><br />I've been thinking about this project for a long time now and would like to begin serious work on it. I'd like to create a collaboration space, gather interest, and start documenting more concrete ideas and organize all of this into realistic releases and milestones. I plan to start coding in 2010 after I've had a chance to talk to different experts and design the main concepts. I'm curious though if this could become the Enlightenment Desktop or maybe the next release (0.18 or maybe 1.0)?<br /><br />If the developers are not interested in this vision than I'll probably just start a separate Linux desktop project that uses the EFL. Maybe call it Nirvana?<br /><br />Tell me what you think. Has anyone heard of similar ideas? I've tried to find projects related to this but I don't even know what to search for. It's a bit cynical but I truly believe that this is something that won't ever come out of the big companies and can only be developed through open source. Large web companies won't be interested because it essentially obsoletes most of their products. No need for Google Docs, GMail, Picasa, Yahoo's Portal/email, etc. I'm not sure Microsoft or Apple has the vision or desire either.<br /><br />Also, tell me if I'm totally crazy or not. Do some of you think about these concepts too?Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-42447898031110074242008-12-30T11:28:00.000-08:002009-04-15T16:49:08.660-07:00Web User Interface Programming ThoughtsI've been thinking a lot about how we program web applications and user interfaces in general. There seems to be an extraordinary amount of repetitive coding and “boiler plate” code that we just ignore and assume that's the way it has to be. We spend little time doing the actual user-interface design because it takes so much time to just get a simple interface going and write all the supporting code. In my mind something conceptually simple should be simple to implement. For example, I want an ajax type paging grid with server side filtering using some data. Now this is a complex entity if you look at the details of its operation, but we shouldn't have to. We should be able to call a standard API and say “I want a grid here, connected to this data”. This is the path Adobe is going down with Flex and AIR. My question is how we can use similar technologies or develop our own libraries and standards to achieve this same effect?<br /><br />One problem is in deciding how you abstract your interface through an API. This is further complicated by the layer at which the API works and how a toolkit renders. Let me try to illustrate what I mean with an example. Say I want to put a Date box in my page. Say we're using Dojo for implementation. If we write code using Dojo's API we'll have to follow a certain pattern. In this case, load the Dojo .js file, create our HTML node, and then load up the calendar by programmatically creating the widget or using the dojo.parser. Now what if we decide one day to switch to extJS. Now we have to rewrite all of that code, multiplied by the number of instances where we used it. So the sensible solution is to abstract the Date widget. Since we work primarily with XSL stylesheets maybe we'll create a template stylesheet that we import, than call a date template. Essentially we've just created an API. With this abstraction we have to decide on standard parameters that the implementation will need. How do we refer to the data in the request, we need to pass in the form name or id of some sort. What if we want to disable some dates, now we'll add another parameter. What's the syntax for a date range? Dojo can do this, but will other toolkits? What happens when switching implementations invalidates some of our API abstracting the implementation? Even more troublesome, what if we can't wrap a certain implementation because our API language (XSL) is incapable of processing the parameters and translating them? Even worse, say we want to use Flex, or GWT. They use completely different rendering pipelines that will be nearly impossible to implement with just stylesheets. Now we need to involve the Java layer (for GWT). So this xsl API would really only work for toolkits that can be initiated purely at the HTML layer.<br /><br />We've revealed a sort of classic programming dilemma, one that I'm sure has a fancy name given by someone who thought about this before me. How do you abstract something as complicated as user interface widgets with an API and not be bitten by implementation eccentricities, limitations of the programming language your API sits in, or major differences in the approaches of different implementations?<br /><br />If we step back, we'll realize that the problem is in where the API sits. The problem is in how the web rendering pipeline works. The current paradigm touts model-view-controller and separation of data from view. They claim that this separation occurs at the XML > XSLT stage, or even HTML > CSS. But this separation really occurs between the database and your web application programming language (Java in our case). Once you enter your app code, you inevitably affect the rendering and user interface. The app code controls your page state, your cache, your ajax servlets. It's impossible to do anything with ajax and not involve the app code. So your UI toolkit must interact with the app code and this is where your API abstraction must reside if you want to do anything as complicated as ajax.<br /><br />This seems to indicate that GWT or Flex is really the right way to go. Maybe it's just too difficult to abstract your interface through an in-house API. Maybe you just have to pick a powerful toolkit such as these and be married to the implementation. And as long as these toolkits are designed to be themed and let you extend, and create new widgets, you should be able to achieve nearly everything you could want.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-53200512892435862802008-10-30T12:24:00.000-07:002009-04-15T16:47:42.028-07:00Defining MarriageOn a more serious note, one of the main issues surrounding gay marriage is a matter of semantics. Some people define marriage as strictly the union of a man and woman. Others interpret a broader meaning.<br /><br />At first, this seems trivial, why not just broaden your interpretation? If a homosexual couple says: "We're married" then marriage has a broader meaning. The same word can be used in other scenarios as in the example from webster: "seafood marries with other flavors". So why restrict the usage of the legal world?<br /><br />Well, there does have to be a legal definition somewhere. Otherwise, if the legal word and dictionary word were the same people could go around marrying inanimate objects and whatnot. So marriage does have to be defined somewhere in our legal framework and does need to specify who can marry whom.<br /><br />So to appease those with a strict marriage definition legislatures created a sort of euphemism: "civil union". But if we have marriages and civil unions and both have the same legal consequences, what legal difference is there between them? The only difference I see is a label. And that label allows government official to discriminate. If both unions have the same legal purpose then they should be the same thing and labeled the same. Either we call unions between people marriages or civil unions.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-45687862784179789852008-10-30T11:01:00.000-07:002009-04-15T16:47:42.028-07:00Gay Marriage and the future of humanityI've begun to wonder if humanity will ever change. Will we continue to argue over civil rights every time the world changes a little bit?<br /><br />In the 20th century we argued over women's rights and racial rights. In the 21st we're arguing about homosexual's rights. I'll predict that in the later part of the 21st we'll argue about genetically modified human's rights, in the 22nd we will argue about robot rights and in the 23rd alien rights.<br /><br />Now you're thinking I'm a crazy person who just wants hot alien robotic sex. Maybe...but I'm trying to make a point. And besides, the issue is not about sex. It's about love & marriage. Otherwise people would be up in arms about blow-up dolls.<br /><br />In response to something like gay marriage, people against it often bring up the slippery slope argument. They ask what prevents someone from marrying their sister or a horse? Well, the first is actually genetically damaging. But if you weren't to have children one could argue for it, though it seems psychologically disturbing to me. The second (the horse) isn't sentient or able to communicate at the level necessary for meaningful love or marriage.<br /><br />So, if the requirements for marriage are sentience and the ability to communicate then there's no reason people won't be marrying robots and aliens in the future. And there's no reason homosexuals shouldn't be able to marry now.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-88660457231125463692008-08-15T15:33:00.000-07:002009-04-15T16:48:42.481-07:00BumpTop desktop criticismThere's a desktop project called <a href="http://bumptop.com/">BumpTop</a>, which aims to make working with your computer files just like working at a real desk. The thought that this is the future of computing interfaces makes me cringe. It's almost as disturbing as the idea of shopping for real items by navigating a virtual avatar through a virtual shopping mall.<br /><br />Now I'll give BumpTop some credit. It's a good example of how radically different our computing experience could be and how much potential there is for innovation. The project shows how the idea of physical position is significant in the human experience and can be used in user interfaces. Unfortunately, BumpTop just takes the physical analogy to literally to be useful.<br /><br />One of the most obvious problems with BumpTop demo is the lack of labels. How do you know which PDF is which? If you make a little thumbnail of the content can you really identify the file when it's just a half-inch square on your screen? If you turn on filenames they'll overlap each other and be difficult to read. What if I want to look at additional information such as size, modification date, etc?<br /><br />Next is physical usability issues. Is simulating a physical environment really that useful? If I toss a file onto a bunch of others do I really want it to move the files it impacted? How will BumpTop represent thousands of files in a directory, won't this be a big mess? How is rotation of icons useful, doesn't it just make my brain work harder to recognize them? What if I can't see something because it is obscured by other files?<br /><br />I think the greatest and saddest irony of BumpTop is that it aims to improve the problems with the contemporary desktop by replacing it with something better but instead extends the central idea of the current desktop (physicality) to an even more frustrating and extent. Think about it this way:<br /><br />Imagine we're all using BumpTop. Someone comes along and says "BumpTop is great and all, but it's got some problems: it's annoying when your files get rotated and I always accidentally bump files with each other and sometimes the 3D perspective prevents me from seeing files hidden behind large stacks". Then someone comes along with a solution: "Know what'd be great, a desktop where files can't rotate upside down, and they can't bump each other away, and instead of using stacks, we'll have folders that contain all of the files without obstructing other files on your desktop". Sounds a lot like what we've got doesn't it...<br /><br />Now I do believe we should have better desktop UI's, but BumpTop just isn't it. I'll elaborate on what I think <u>we should do</u> in another post.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com3tag:blogger.com,1999:blog-3824702644769565854.post-78581040316684469852008-07-07T14:44:00.001-07:002008-07-07T16:09:51.981-07:00More thoughts on the future of the webThis is a continuation of my earlier post titled <a href="http://thefortifiedhill.blogspot.com/2008/07/its-time-for-new-web.html">It's time for a new Web</a>. I wanted to ramble more on the subject.<br /><br />So fundamentally what we're talking about is bridging the gap between the internet and your operating system. Letting web applications install libraries that have direct access to graphics, sound, I/O, and File System layers. The trick is exposing all of the important interfaces in a useful and secure way. The question, is how low-level do you go and how much freedom do you allow?<br /><h4>How low?</h4>One idea would be to simply take standards such as OpenGL and OpenAL or maybe SDL and make that your base API. Of course you would need additional APIs for other things such as networking and local file storage. Most programers would be more than happy with this level of access. In fact, most would be using libraries that acted on top of OpenGL and simplified and abstracted even further.<br /><br />But why stop at the level of OpenGL? What if you just exposed the base hardware layer in a way that OpenGL would just be an internet library on top in the sense I talked about in the previous post.<br /><h4>How much freedom?</h4>The question of how much freedom you give the programmer is important. For example, if you just gave direct access to your local filesystem malicious sites/applications could wreck all kinds of havoc on your system. So in this case it makes the most sense to just have a space allocated to the application that is managed by the browser. This space would be insulated from all other applications. The downside to this is that you would lose the ability to interface directly with other applications data. However, I feel that it's a better design to have the application provide interfaces on it's own with some kind of communication protocol.<br /><br />Another problem with too much freedom is the loss of structure. I mentioned this earlier as well. If the programmer is just thinking about pixels and the pixels are making up text what tells other applications that the pixels equate to ASCII characters? In other words, how do we apply semantics to different concepts so we can do things like Copy-Paste.<br /><h4>Self-Aware</h4>One critical part of this vision of the web being a success is to have self-awareness. In other words, an API that lets you do things like query the applications and libraries that are installed.<br /><br />The idea is that the browser doesn't have a defined UI (though there would be a basic default one). Your home page is your desktop environment. So users would chose different home pages such as Google or Yahoo and those pages would provide the user with their Application links, taskbar, tray, etc.<br /><br />Of course certain interfaces would need to be defined. Such as the concept of an application being open, it's window properties, user messaging (toaster gui), and other basics. However, these would not be concepts with attached graphical standards though they would often be graphical. What I mean is an application wouldn't know how it was being accessed or represented; it would only know if it was visible or not and its size. (maybe some other info as well, but not much) Of course, the application could attach to events and query the other windows if it wanted to interact in some way.<br /><br />Part of being self-aware is having an event system that all applications could access. So events would be fired when applications are closed, shown, entered, exited, etc. This would let the desktop app do something like track time spent in each app.<br /><h4>Breaking out of the box</h4>While we're at it why not consider implementing things such as P2P as a standard. Wouldn't it be nice if you just downloaded an application update from your coworker next-door instead of the main site? What if P2P was a standard resource for programmers?<br /><br />What about user interface considerations. Multiple mice, multiple keyboards, multiple monitors/screens. How would all of these interfaces be provided/queried? How do you abstract their input or do you give the raw input and let libraries deal with it? What about new kinds of devices? For example, multi-touch-pressure screens could be abstracted as multiple cursors but they're really a whole array of pressure values. Do you let the browser layer abstract such a device as a cursor or provide its input directly to applications, or both?<br /><h4>Ending thoughts</h4>Hopefully some of these ideas made sense and you understand what I'm imagining. In a sense this is the holy grail, the thing that would remove operating system barriers and completely standardize computer software while letting programmers achieve anything they could imagine. I don't think it would be easy. You'd need to have a good core group designing the specs and then a marketing engine that could convince people to develop with the new standard and gradually bring it to the mainstream.<br /><br />I think if such a system were to arrive it would first be like today's browsers. It would have it's own HTML rendering engine and act just like any other browser with the exception that it could do so much more. As developers began releasing internet applications through it and converting existing ones people would live in their browser more and more. There would be a point where it seemed like you had two desktops. (you already have two taskbars with tabs in your browser) People would begin to fullscreen the browser most of the time; eventually operating system distributions would focus solely on getting the user loaded in the browser and not even bother with its own desktop environment.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-52248695471604346262008-07-01T15:16:00.000-07:002008-07-01T15:34:32.274-07:00Thoughts on Web KnowledgeForums suck. Email archives suck. In fact, pretty much all the web content you get from a google search for the solution to a problem sucks.<br /><br />But let me start at the beginning...<br /><br />I recently got a second monitor and got in running in Ubuntu Linux. I'm running an Nvidia card in a twinview configuration. I had one major frustration: Windows would maximize across both monitors and dialogs would appear right in the middle of the virtual screen across both monitors instead of within the middle of one.<br /><br />Today I decided to find a solution to these issues. So I went to Google and did a number of searches.<br /><br />I dug through a number of forums and email archives looking for the solution. I finally found half the solution on a blog and the other half in one of the forums. (I ended up having to remove xserver-xgl and adjust compiz settings)<br /><br />Anyway, the point is that across the internet there's a huge duplication of knowledge and it's incredibly unorganized. Also, it is often misleading, out-dated, and unhelpful.<br /><br />The biggest culprit is forums. Forums are poor organizers of knowledge. Threads are often duplicates and experts are often dubious. And sometimes the gold nugget is a comment 3 pages into a thread surrounded by 2 idiotic posts.<br /><br />So what's the solution?<br /><br />I'm thinking something like wikipedia, but directed at practical knowledge. And not a wiki per se, but another type of user submitted content system with more structure and a better sense of context as well as dimensions such as time.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-14155064039511901632008-07-01T12:52:00.000-07:002009-04-15T16:48:19.052-07:00It's Time for a New WebThe visual web is being pushed to its limits. What developers call Web 2.0 is really just a creative use of Javascript and a maturing of web design practices, which are mostly a result of better server side technologies and development techniques. Unfortunately, behind the scenes of every "Web 2.0" site is some pretty horrid technology layers that are being used in ways they were never designed for.<br /><br />Many of the layers and interfaces in a site don't stack perfectly and have cross-cutting concerns that are hard to reconcile. For example, with CSS and HTML the idea is to separate your presentation layer from your structure. However, there is a significant amount of cross-over. For example, order of content, which is presentation, is largely defined in HTML. (the order of columns in a table, the order of sections of your page, etc.) You can absolutely position divs in your page with CSS, but you are limited in how you do so.<br /><br />All of this aside, there are major rendering issues with HTML. First is the lack of pixel perfect rendering and browser inconsistencies, which add significant frustration and development time for designers. The next issue is that HTML was designed for static content. Animating and dynamically changing large portions of the page, as the new sites do, appears choppy at best and may have visual flaws.<br /><h4>The success story</h4><br />HTML has had enormous success as the premiere communication medium on the web. I just wanted to highlight its virtues and explain why I think it has been so successful.<br /><br /><ul><br /><li>Hyperlinks: The defining concept of the web is the hyperlink - the idea that one HTML page can point to another</li><br /><li>Powerful/Extensible: As we've seen recently, with some clever use of CSS and Javascript you can do some pretty fancy things. With plugins such as flash and java applets you can do even more</li><br /><li>Human Readable, Low barrier of entry: You can pop open a text editor, type in some HTML and view it. You can copy this file to a server and serve it</li><br /><li>Open Standard: The fact that HTML is a standard that anyone has the right to implement a browser for is essential to its acceptance</li><br /></ul><br /><h4>The Essence of HTML</h4><br />I want to look at the fundamental technological essence of HTML. Basically, you have a Client and a Server. The Server has some content, the Client wants to see it. HTML is the medium or language you use to describe the content. There are many hidden aspects to it, such as how a hyperlink works, what meta-data a site has, asynchronous communication, etc. However, I want to focus on the media aspect of HTML. (Audio-Visual)<br /><br />There are two essential aspects to HTML as a media.<br /><br />1. It's like a compression algorithm<br /><br />If I want the client to see some text I could send it as an image. But it's far more effective to just send the ASCII characters and have the client's font engine render the text. Essentially, this is compression. I give a few parameters: the text, the font metrics (size, weight, family, etc.) and at the end I get my rendered text.<br /><br />2. It has semantic meaning<br /><br />Certain concepts within HTML gain semantic meaning within the client's computing environment. For example, screen readers can read the text. If I copy HTML into my word processor, the word processor translates it into it's own markup. I can also copy things like tables into my spread sheet program. The same thing goes for things like images. This interface to the rest of the user's computing environment is incredibly useful.<br /><h4>A blank canvas</h4><br />So lets start talking about a new web medium. If we could start again, if we had a blank slate, what would we want, how would we design things differently?<br /><br />From an idealistic point of view we want a blank slate, complete technological freedom. Just give me a accelerated 3D canvas with a primitive drawing API and I'll build everything on that foundation.<br /><br />But why limit it to graphical freedom? Why not have complete freedom?<br /><br />Imagine your browser had a library versioning system. When you visit a new site the page defines the libraries it needs and where they can be found. Any libraries a client does not have, it downloads. There would be a number of standard libraries most sites would use: font engines, image format rendering, etc. Imagine the possibilities: You could provide new image formats, new font engines and fonts, on the fly.<br /><br />On the other hand, this would be complete technological anarchy. What's to limit the number of libraries? What are the security implications?<br /><br />There's also the whole side issue of maintaining semantics within the web. However, I feel like this is actually fairly straightforward. It would be each library's responsibility to attach semantic data. The font engine would attack text semantics to its rendering. The image library would do the same.<br /><br /><h4>The New Web</h4><br /><br />If this could be achieved you would have completely redefined the internet and desktop computing experience. Instead of firing up an application, you would go to a certain url. If done right such a standard would erase operating system barriers and become the defacto standard for software distribution.<br /><br />You might say this sounds a lot like Java Web Start. I would say the goals are similar but the key is that such a system would be language agnostic. Not only language agnostic but future language compatible.<br /><br />Let me go over a detailed example. Imagine I wrote a new scripting language called Ascript. I write its interpreter in C and compile it for a few different processors and package it according to some web library standards. I then write an application in Ascript. My application has a standard web header, which specifies the Ascript dependency. I put this application on my webserver. When I client visits the url, they download Ascript if they don't have it, then the browser launches my Ascript script with the downloaded interpreter.<br /><br />There are a lot of issues to resolve at this point. What would the API be like? Would you have a direct interface to OpenGL? How would the user control application access? Maybe have dialogs such as "X wants to access your file system. Approve/Deny" How would the distribution work? Could you assist distribution with automated Bit Torrents? How would applications be organized? Would they have desktop/start menu icons? What other APIs are available? Where do you draw the line? Could you execute assembly?<br /><br />I'll probably elaborate more on these ideas in the future.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-29734663472324433232008-06-12T15:52:00.000-07:002008-07-07T16:07:27.503-07:00Synchronizing your computerOnce you begin interacting with multiple computers you inevitably start duplicating a lot of work and things fall out of sync. You have two sets of contacts, two sets of bookmarks, duplicate files that have been independently worked on, etc. This becomes incredibly frustrating and unproductive.<br /><br />One solution these days is to do all your work on the web. For example, write all documents in Google Docs, use your email web application's contacts system exclusively, etc. This way all of your work is stored in one location (on the web application's servers) and presumably backed up by the web service.<br /><br />But this doesn't work in all cases, and inevitably there will be files you want to synchronize between computers.<br /><br />I only have a small number of files I want to synchronize:<br /><ul><br /><li>Personal Contacts (Thunderbird)</li><br /><li>Bookmarks (Firefox)</li><br /><li>Personal passwords in a <a href="http://passwordsafe.sourceforge.net/">password safe</a> file.</li><br /><li>Notes/TODO lists, often using <a href="http//freemind.sourceforge.net/">Freemind</a></li><br /><li>Other files I want to access from work & home</li><br /></ul><br /><h4>USB Stick</h4><br />One solution would be to carry around a USB stick with you all of the time and always work off it or use something like rsync to synchronize the files with it.<br /><br />This wasn't going to work for me as I'd inevitably lose it one day and be screwed...<br /><h4>Setup a server</h4><br />I thought about turning some old machine into a server and using Subversion or something similar to synchronize my files. However, managing a server is a pain. Properly setting up backup scripts and keeping the machine running is a lot of work that is better handled by a professional company.<br /><h4>Online file backup/synchronization solutions</h4><br />This is the best solution in my opinion. You basically download a little program that sits in your taskbar and synchronizes your files with the company's servers whenever you make changes to the files. My main criteria were that it be cross platform, synchronize easily, and have good performance and design.<br /><br />Unfortunately, these conditions eliminated a lot of candidates.<br /><br />I ran across a slick little web app called <a href="http://www.dropboks.com/">DropBoks</a><br />This lets you just upload and download files but you have to do a lot of clicking. What I really want is to just point some software at a folder and say synchronize this.<br /><br />The next one I looked at was <a href="http://www.powerfolder.com/">Power Folder.</a> I tried the 30 day trial and it worked sort of...but the UI was terrible and there were performance issues. My roommates complained of lag spikes when I had it running.<br /><br />After more searching I found <a href="https://spideroak.com/">Spider Oak.</a><br /><br />Spider Oak seemed to be everything I was looking for. A clean UI, good performance, a progressive development team. It's even free unless you need more than 2 gigs. However, in its current state, Spider Oak doesn't support 2-way synchronization. It only backs up a folder you select and makes it available for download on other machines, keeping those folders up to sync. It does not update changes to the folder on the second machine back on the first. I contacted the developers and they responded with:<br /><br /><blockquote>As of this moment, we do not allow the true 'syncing' of folders across computers. However, we will be releasing this functionality within the next couple of months at the latest. That said, you can easily view and download data you have stored on any number of machines from any one of the machines. You can accomplish this by downloading the SpiderOak software on other machines you want to back up. Once complete, you will see the other machines on your SpiderOak Network on the 'View' tab. If you then click on another device than the one you are on, you will be able to browse all of the data on that machine as well as download it.</blockquote><br /><br />So I'll just have to wait until they implement the feature.<br /><h4>Firefox and Thunderbird</h4><br />I use a couple Firefox/Thunderbird addons for Contacts and Bookmarks.<br /><br /><a href="https://addons.mozilla.org/en-US/thunderbird/addon/2533">Addressbooks Synchronizer</a> uses IMAP to synchronize your address books.<br /><br /><a href="https://addons.mozilla.org/en-US/firefox/addon/2410">Foxmarks</a> is a free service that synchronizes your bookmarks online.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0tag:blogger.com,1999:blog-3824702644769565854.post-14076911637864139712008-06-12T15:38:00.000-07:002008-06-12T15:42:54.161-07:00I have a blog!Well, I've decided to try blogging...it was bound to happen sooner or later.<br /><br />Why "the fortified hill"? Well, apparently that's what my name (Arlo) means. I guess it applies to me in that I can be stubborn and unmoving, that I don't easily change. But then again, most people don't.<br /><br />I'll start filling this blog with some more substantial posts soon.Anonymoushttp://www.blogger.com/profile/15851943802865327557noreply@blogger.com0