C&Lís Late Nite Music Club with Norah Jones Legendary music producer Arif Mardin died Sunday night. This was a very classy man, much loved by all the artists he ever worked with. And the artists he worked with were as diverse an array as anyone has ever tackled. For decades he was a star in-house producer with Atlantic Records, making records with Willie Nelson, Aretha Franklin, the Bee Gees, Average White Band, Barbra Streisand, The Rascals, Phil Collins, John Prine, Halls and Oats, George Benson, Average White Band and dozens more[sigma]
He retired from Atlantic in 2001 and a few months later he went into the studio with an unknown young woman for his pals at Blue Note Records. The result was the Grammy-winning, multi-platinum debut by Norah Jones, COME AWAY WITH ME. And our song tonight is my favorite from that album, a cover of Hank Williams[base '] classic "Cold Cold Heart."
In honor of Arif[base ']s passing I have 2 brand new box sets called WILLIE NELSON[^] THE COMPLETE ATLANTIC SESSIONS. If you wanna play this game, be sure to include an e-mail address. Just send us your top 10 songs (could be "my top 10 songs of all time," "my top 10 songs by women singers," "my top 10 songs with a political message," "my top ten songs with an alto sax," "my top 10 songs from the 80[base ']s"[sigma] anything). Tomorrow morning I[base ']m going to look [OE]em all over and pick one and John[base ']s gonna look [OE]em all over and he[base ']ll pick one too. And the two winners are going to each get a box of Willie.
(guest blogged by Howie Klein)
I missed the death of Arif Mardin, not hitting the mainstream news.His is a name I remember seeing on so many albums as I grew up. All those wonderful soul albums. I will always associate him with the sound of Aretha Franklin.
Web development incorporates all areas of creating a Web site for the World Wide Web. This includes Web design (graphic design, XHTML, CSS, usability and semantics), programming, content management, marketing, testing and deployment. The term can also specifically be used to refer to the "back end", that is, programming and server administration.
NewsForge This is ground zero for Linux and Open Source news. Stay up to date on business, hardware, wireless, trends, programming, jobs, software, product reviews and much, much more. Subscribe to the news feed with you favorite aggregator, or try dnews. read more:
Skills for Access If this site isn't a testament to beautiful design, and advocating, demonstrating and teaching accessibility, then I don't know of a better example. Also covers multimedia accessibility: Flash, Shockwave and external viewers. Great resource, thanks RJ. read more:
The CSS Box Model Hierarchy For developers new to CSS and the box model, this is an excellent 3D visual aid. I also highly recommend following the link to Douglas Livingstone's interactive Flash demonstration version. read more:
How to get high Google rankings with Flash sites Flash movies are a great way to add multimedia elements to a web site. Unfortunately, Flash cannot be indexed by most search engines. For that reason, it is very difficult to get high search engine rankings for Flash sites. This article explains how to get top rankings on Google with Flash sites. read more:
How to rank well with Flash movies Flash movies are a popular way to make websites more compelling. They are useful if you want to impress your website visitors or if you offer web design services.Unfortunately, if you use Flash movies, or if you even design your complete website based on the Flash technology, your odds of getting listed in the search engines are greatly reduced.Read this article to find out how to rank well with Flash movies. read more:
Product Analyst & Web Developer If you live in or near Cary, NC - and are as adept at system analysis and QA as you are at web programming, then here is an ad in TriangleJobs.com that you may way want to consider.... read more:
Tutorials - Photoshop,Dreamweaver,Vb.Net. Photoshop, Dreamweaver, Excel, Flash Mx, Vb.Net, Spyware + Windows Xp Video Tutorials from $14.95 to $49 - Affiliates earn 50% read more:
The Art in Computer Programming By Andrew Hunt and David Thomas, Pragmatic Programmers, LLC In a way, we programmers are quite lucky. We get the opportunity to create entire worlds out of nothing but thin air. Our very own worlds, complete with our own laws of physics. We may get those laws wrong of course, but it's still fun. Click here for the full article. read more:
Improving Developer Productivity With Domain-Specific Modeling Languages By Steven Kelly, PhD What is DSM? How is it different from UML and MDA? Can DSM languages produce significant programming productivity gains? Can software development be truly model-driven? Click here for the full article. read more:
AmazType - your word in book cover artwork Amaztype is a nice new application from Japan, drawing your words using Amazon book cover artworks... your have to check this out - Flash is required and it's definately fun to play around there and zoom in/out of the covers...... read more:
At War with Ourselves I read this a while ago but it seems somewhat relevant recently.
The Vietnam of Computer Science "Although it may seem trite to say it, Object/Relational Mapping is the Vietnam of Computer Science. It represents a quagmire which starts well, gets more complicated as time passes, and before long entraps its users in a commitment that has no clear demarcation point, no clear win conditions, and no clear exit strategy."
Solutions: "Developers simply give up on objects entirely, and return to a programming model that doesn't create the object/relational impedance mismatch. While distasteful, in certain scenarios an object-oriented approach creates more overhead than it saves, and the ROI simply isn't there to justify the cost of creating a rich domain model. ([Fowler] talks about this to some depth.)"
Fowler's piece I believe is, "GetterEradicator" which links to "Tell, Don't Ask", which makes an important point about Design by Contract, "According to Design by Contract, as long as your methods (queries and commands) can be freely intermixed, and there is no way to violate the class invariant by doing so, then you are ok. But while you are maintaining the class invariant, you may have also dramatically increased the coupling between the caller and the callee depending on how much state you have exposed."
"Developers simply give up on relational storage entirely, and use a storage model that fits the way their languages of choice look at the world."
"Developers simply accept that it's not such a hard problem to solve manually after all, and write straight relational-access code to return relations to the language, access the tuples, and populate objects as necessary."
"Developers simply accept that there is no way to efficiently and easily close the loop on the O/R mismatch, and use an O/R-M to solve 80% (or 50% or 95%, or whatever percentage seems appropriate)..."
"Developers simply accept that this is a problem that should be solved by the language, not by a library or framework...bring relational concepts (which, at heart, are set-based) into mainstream programming languages, making it easier to bridge the gap between "sets" and "objects". Work in this space has thus far been limited, constrained mostly to research projects and/or "fringe" languages, but several interesting efforts are gaining visibility within the community, such as functional/object hybrid languages like Scala or F#, as well as direct integration into traditional O-O languages, such as the LINQ project from Microsoft for C# and Visual Basic. One such effort that failed, unfortunately, was the SQL/J strategy; even there, the approach was limited, not seeking to incorporate sets into Java, but simply allow for embedded SQL calls to be preprocessed and translated into JDBC code by a translator."
"Developers simply accept that this problem is solvable, but only with a change of perspective. Instead of relying on language or library designers to solve this problem, developers take a different view of "objects" that is more relational in nature, building domain frameworks that are more directly built around relational constructs." read more:
Concealed Weapon Permits Win Sheriff, Police Support? Watch Video News Blog (8 min) A growing number of Sheriffs and Police Officials have joined the debate over Concealed Weapon Permits (CCW) as shown in an eight minute Full Disclosure Network™ Video News Blog featuring high ranking law enforcement officials in the Western United States. Available FREE at this URL: http://www.fulldisclosure.net/flash/VideoBlogs/VideoBlog31.php 24/7, on demand as a public service. (PRWEB Jul 5, 2006) Trackback URI: http://www.prweb.com/zingpr.php/Q3Jhcy1TdW1tLUluc2UtUGlnZy1JbnNlLVplcm8= read more:
TattooFinder.com Announces Free Premiere Accounts for Tattoo Industry Professionals TattooFinder.com announces the release of Premiere Accounts (TFPA) as a free upgrade from a standard TattooFinder.com account. This service is offered exclusively to tattoo industry professionals, providing top level discounts on design purchases to tattooists and their customers. Premiere accounts can increase overall business at a studio by offering numerous competitive advantages, and a TFPA operates under several different business models to best fit a shop’s needs. A TFPA provides the ability for customers to purchase flash for the tattoo studio that the studio can store online and access again for future use at no additional charge. (PRWEB Jul 13, 2006) Trackback URL: http://www.prweb.com/chachingpr.php/WmV0YS1Qcm9mLUNvdXAtU3F1YS1JbnNlLVplcm8= read more:
Error ''Codec Initialization Error'' when attempting to export as Flash Video (FLV) (Premiere Pro 2.0) IssueWhen you try to export a Timeline as Flash Video, the export fails and Adobe Premiere Pro displays the error message "Codec Initialization Error".DetailsYou are exporting to a hard disk with low disk space.SolutionsDo one or more of the... read more:
Supported file formats in Adobe Premiere Pro 2.0 This table lists the file formats that Adobe Premiere Pro can import and export. For more information about importing and exporting files, see Adobe Premiere Pro Help.Format Import ExportVideo Flash Video (.flv) - - xMicrosoft AVI Type 1 (.avi)... read more:
Aware IM 2.0 Makes Creation of Web Database Applications Easier than Ever Awaresoft Pty Ltd today announced the release of Aware IM 2.0 - a new, more powerful version of its popular easy-to-use web database management software. Aware IM™ 2.0 allows solution-focussed developers and experienced computer users to create comprehensive Web database applications without programming. (PRWEB Jul 17, 2006) Trackback URI: http://www.prweb.com/dingpr.php/Q291cC1TdW1tLVBpZ2ctU3F1YS1JbnNlLVplcm8= read more:
Lumtron Announces Release of New AccuraImage 2006? Document Management and Control Solution New document management and control solution features bulletproof security to comply with HIPAA, Sarbanes-Oxley and Gramm-Leach-Bliley legislation. All new .NET programming and customizable workflow process, document retention and OCR search modules make AccuraImage one of the most robust document management system available. [PRWEB Nov 10, 2005] read more:
Meck Technology, Inc. Announces New Customer Service Programs for Property Managers Meck Technology, Inc., the leader in Condo-Coop Property Management Systems, announced today that it has expanded its leading customer service programs to include custom programming services. [PRWEB Nov 10, 2005] read more:
SEO Chat Forums - Flash Elements on Index Page Date: July 17th, 2006 02:44 AM - Levi - UntitledPost: If I create 2 versions of my site, a static & flash version, can I possibly suffer from a duplicate content penalty since the content... read more:
Book: 'Things a Computer Scientist Rarely Talks About' It's said that you can't judge a book by its cover, but that's no excuse for buying Knuth's 'Things a Computer Scientist Rarely Talks About' without even looking inside, as I did. Based on that impulse-buying experience, I fear I may be the kind of fool the famous have to thank for the fact that they can pretty much just crap in a box and be guaranteed to sell it.
It's not often you buy a book from the CS shelves and end up wondering 'Am I any better than a teenage girl who buys Britney Spears perfume?'
I can't even claim I wasn't forewarned. Years ago I bought, read, and passed on to a friend a copy of Knuth's earlier '3:16'. So I was fully aware of the perp's prior. But hope triumphed over experience and I assumed that this time he'd be talking about esoteric CS or mathematical topics. Like 'Selected Papers', only less famous.
But mainly Knuth wanted to waste 200 pages of once-lovely trees, $20 of my money, and several hours of my precious reading time on, well, nothing really. Nothing stood out as I read it, and nothing much has stuck with me. I remember him describing the religious symbolism in some of the calligraphy in '3:16', which for me finally explained why there were so many weak works in that book: the effort of shoehorning in symbolism can compromise anyone's work. (Interestingly, Knuth describes how he made a 'correction' to one artist's work because he didn't get it; I remember that as one of the uglier examples, but uncorrected it actually works.) I also remember him commenting that the ratings for '3:16' on a certain well-known patent-abusing bookseller's web site were all either 1 (the lowest) or 5 (the highest).
The website ratings for '3:16' go to the heart of the matter. The problem with books like this, or, to be more accurate, the authors of books like this, is that they're only really good at preaching to the choir. You might expect that the rigorous Knuth of the 'Art of Computer Programming' complexity analyses might avoid this trap, but he doesn't. If you don't already find mysticism interesting, you won't after reading this book. Really, this book is interesting only in the same way that Buckminster Fuller's 'Critical Path' is interesting, only it's rather less funny because Knuth's crackpot side is so much more commonplace than Fuller's: the friend I gave my copy of '3:16' has (to an outsider) the same beliefs as Knuth, but I'm pretty sure I've never known anyone quite like Fuller.
If you're a stoner or a drunken student, you might like this book. Then again, if you are either of those things, you probably get enough of this kind of blather every time you sit down with your friends. Sound and fury, signifying nothing. It's not even as forehead-slappingly 'let them eat cake' wrong-headed as C.S. Lewis' 'Mere Christianity' (a book I usually think of as in many ways the opposite of Aldous Huxley's 'Brave New World') because, as far as I could make out, Knuth and his friends don't really say anything.
Funnily enough, I've read Star Wars fiction that gave me more to think about.
I promised myself a while back that I'd stop writing reviews of books and films that weren't directly related to computing, but since I've just saved you $20, I have a couple of suggestions of what you might spend it on. If you want (often religious) craziness tranformed into art, try 'A Scanner Darkly'. For once this adaptation really does Dick justice, even to the extent of poking gentle fun at him (or taking on his style so completely that the invented bits were totally convincing). If you're more of a book person, you could read the original book, or you might prefer T.E. Lawrence's 'Seven Pillars of Wisdom', about Lawrence's time fighting in the desert in WWI. It took me two months to read, but it was worth every page. And it coincidentally contains some of the most interesting writing on religion I've read in years.
Plus shit gets blown up every couple of chapters, and you can't buy quality like that. read more:
DirectX Programming in C# - Article by tomd123 Tom gives a step by step introduction of DirectX programming. read more:
Templates and Generic Programming for STL - Article by ub40 This is the introductory article on Template which will be followed by a series of articles on Standard Template Library. read more:
HOPL III and the History of Haskell
Interesting draft paper on the History of Haskell by Simon Peyton Jones, Phil Wadler, Paul Hudak, and John Hughes.
This paper describes the history of Haskell, including its genesis and principles, technical contributions, implementations and tools, and applications and impact.
In 1978, the first History of Programming Language Conference (HOPL) described the development of 13 computer programming languages, the people who participated in that work, and the context in which it was undertaken. In 1993, HOPL-II contained 14 papers on the genesis and evolution of programming languages. It is time for HOPL-III, to be held with FCRC 2007 in San Diego. Each HOPL-III paper should detail the early history or evolution of a specific programming language. Preliminary ideas about each language should have been documented by 1996 and each language should have been in use by 1998.
Which leaves the question of which PLs should take part in HOPL-III? (I guess I need to go back and remember which were documentend in I & II). read more:
Abstract. We present a minimal core calculus that captures interesting constructs of the Scala programming language: nested classes, abstract types, mixin composition, and path dependent types. We show that the problems of type assignment and subtyping in this calculus are decidable.
The paper revolves around the question of decidability of type checking in Scala. The following quote summarizes the background of this question.
Scala?s approach to component modeling is based on three programming language constructs: modular mixin composition, abstract type members, and explicit self-types. All three have been studied in the vObj calculus. A key concept of the vObj calculus, path-dependent types, is also present in Scala. However, some other constructions of vObj do not correspond to Scala language constructs. In particular, vObj has first-class classes which can be passed around as values, but Scala has not. First-class classes were essential in establishing an encoding of F<: in vObj, which led to a proof of undecidability of vObj by reduction to the same property in F<:. However, since Scala lacks first-class classes, the undecidability result for the calculus does not imply that type checking for the programming language is undecidable.
Ehud: Given current interest in Scala and its more or less unique (don't want to raise controversy here) position as being both a functional and an OO language, furthermore being much more than a toy language, would it be a good idea to give Scala a place in the Spotlight section?
The goal of this project is to locate source code, design documents, and other materials concerning the original LISP I/1.5 system, and as many of its follow-ons as possible. LISP was one of the earliest high-level programming languages and introduced many ideas such as garbage collection, recursive functions, symbolic expressions, and dynamic type-checking. This is a pilot project of the Computer History Museum's Software Collection Committee to develop expertise in the collection, preservation, and presentation of historic software. Comments, suggestions, and donations of additional materials are greatly appreciated.
I ran across this page by accident while googling for 'lisp assembler lap' because I'd recently learned LAP was the standard acronym for lisp assembly program (ie a lisp based assember), which also described what I was currently trying to do. It's funny how often a new idea is just the Nth repetition of many old ideas. :-)
Anyway, this page links a wealth of interesting material on early Lisp implementations. (Unfortunately a number of the PDF documents don't open on my current machine, so I can't read several of the items I find most interesting, including everything L. Peter Deutsch authored.)
Scala is different from other concurrent languages in that it contains no language support for concurrency beyond the standard thread model offered by the host environment. Instead of specialized language constructs we rely on Scala's general abstraction capabilities to define higher-level concurrency models. In such a way, we were able to define all essential operations of Erlang's actor-based process model in the Scala library.
However, since Scala is implemented on the Java VM, we inherited some of the deficiencies of the host environment when it comes to concurrency, namely low maximum number of threads and high context-switch overhead. In this paper we have shown how to turn this weakness into a strength. By defining a new event-based model for actors, we could increase dramatically their efficiency and scalability. At the same time, we kept to a large extent the programming model of thread-based actors, which would not have been possible if we had switched to a traditional event-based architecture, because the latter causes an inversion of control.
(There's not really a proper abstract. The above is from the conclusion.)
I enjoyed this paper. It's a quick read and a nice demonstration of some of Scala's cool features. It's also a good example of using exceptions as delimited control operators, and in fact the one substantial restriction is imposed by the lack of the more powerful operators. They use Scala's type system to reduce the burden of this restriction, however, since they're able to state that a particular statement never returns normally (and thus must not be followed by more statements).
Those interested in the language/library boundary will also find it interesting for this reason:
The techniques presented in this paper are a good showcase of the increased flexibility offered by library-based designs. It allowed us to quickly address problems with the previous thread-based actor model by developing a parallel class hierarchy for event-based actors. Today, the two approaches exist side by side. Thread-based actors are still useful since they allow returning from a receive operation. Event-based actors are more restrictive in the programming style they allow, but they are also more efficient.
They have some fairly impressive empirical scalability results as well.
We consider the following questions: What kind of logic has a natural semantics in multi-player (rather than 2-player) games? How can we express branching quantifiers, and other partial-information constructs, with a properly compositional syntax and semantics? We develop a logic in answer to these questions, with a formal semantics based on multiple concurrent strategies, formalized as closure operators on Kahn-Plotkin concrete domains. Partial information constraints are represented as co-closure operators. We address the syntactic issues by treating syntactic constituents, including quantifiers, as arrows in a category, with arities and co-arities. This enables a fully compositional account of a wide range of features in a multi-agent, concurrent setting, including IF-style quantifiers.
This paper seems to unify multiple interesting directions - logic, game semantics, concurrent constraint programming (and concurrent programming in general).
At the same time it remains very accessible, without overwhelming amount of math, so can be hopefully useful not only for academics. I, for one, was waiting for exactly this kind of paper for two years (and my interest is very practical).
Multiplayer Curry-Howard correspondence, anyone? Or Curry-Howard for web services?
Programming Languages and Lambda Calculi looks like a comprehensive treatement of the semantics of typed and untyped call-by-value programming languages. I imagine if one had a basic undergraduate education in programming language theory and wanted to get up to speeed in a hurry this would be a great resource.
Pluvo is a functional and imperative programming language intended to be highly practical for scripting and CGIs, interpreted using a just-in-time compiler. Its hybrid dynamic and strict typing is flexible enough to allow duck typing. Its functions are, more specifically, closures, and it allows object orientation using prototypes.
Knowing he's a big fan of Python I expected a fair bit of influence - and there is, in fact the implementation is written in Python. Flexibility over typing was to be expected too, Sean's done a lot of work around RDF. Slightly surprising was Pluvo's syntax, which owes more to Bash.
The first 10 Prolog Programming Contests took place in Ithaca (1994), Portland (1995), Bonn (1996), Leuven (1997), Manchester (1998), Las Cruces (1999), Paphos (2001), Copenhagen (2002), Mumbay (2003) and Saint-Malo (2004). The contest organisers have written this book, containing the (slightly reworked) questions and an answer (in Prolog of course) for each question... The book is now also freely downloadable on this page.
Last night was our fourth hockey game of the season. We lost the first two, both by a single goal; the first one we really should have won, the second was just a hard-fought game. We won the third game, 7-1. To be honest I felt kind of bad about that one. You’d think it would be fun to have a game like that, but I always remember the times I was on the losing end of those games and it’s hard to enjoy it.
Anyway, like I said, last night was the fourth game of the season. We ended up coming back from a 2-0 deficit to tie it, but it felt like a win, the way we played. Our opponents were the best team in the league (same team that won the championship last season), so a tie isn?t bad at all (we can do better, though. ;)) After the game, our goalie stood up in front of everyone and announced that I had had a ?monster? game, my ?best game of the season, by far?, and that I was ?absolutely everywhere on the ice?. I think I blushed. :) Anyway, it was a really good game; I had lots of great defensive plays, stopping breakaways, cutting off passes, etc.
I did have one big fall, though, which everyone teased me about mercilessly. The captain said he was taking up a collection to have my skates sharpened. :) We had the puck in their zone, 2nd period, we were getting lots of good pressure. Curry, one of the forwards, got the puck at the left wing and saw me completely open at the blue line. He passed it to me, perfect pass, and right as he did my legs just shot out from under me. Nobody within 20?, a perfect pass, and I just BAM! fell down. What?s worse is that, as I was laying on the ice, the puck was coming straight towards me. I mean, STRAIGHT towards me. If I hadn?t moved it would have hit me right in the middle of my stick. Of course, like a total idiot I tried to lift my stick (as I?m laying flat on the ice) to take the pass with the blade, and the puck goes under the stick, under me, and out of the zone. Brilliant!
Anyway, like I said, I had a good game—almost had a goal. I had the puck all alone against 3 defenders, I faked past one, ended up right in the center of the ice with the 2 defenders in front of me. I seem to find myself in that situation about once a game, so I’ve been trying to make it work for me. My current move is to cut right just a bit to get the defender between me and the goalie, and then shoot the puck through the defender’s legs, so the goalie has trouble seeing the shot at first. This time, I?m pretty sure the shot hit the post on the far side, it was a really nice shot and I don?t think the goalie really saw it. Eventually one of those shots is going to go in, it just didn?t happen that game.
I’ve also noticed a number of Spoonerisms coming out of my mouth lately. After the game I wanted to talk about the fact that especially in the second period, it’s important to keep our shifts short so we don’t get tired and caught out of position (which is why we were down 2-0), only I said it was important to keep our “shorts shifted”. You can guess what kind of jokes were made at my expense at that point. ;) I actually really like this team. Everyone on it is always in a good mode, there’s teasing and camaraderie in the locker room. Jen says she approves of their teasing me all the time, and frankly I agree; it’s a really great group of guys and I’m glad to be a part of it. What’s even better is that I know other guys on nearly every team in the league (last nights’ opponents are pretty much the exception), so there’s always someone to say hi to or trash talk before the game. It’s a lot of fun, and it makes me wish I could play hockey every night. :)
Playing games without Jen in the audience is kind of weird. She’d only missed a few games before this season, and I was pretty used to looking up and seeing her in the second or third row, reading her book at period intermissions or cheering during play. I keep looking for her, and of course she’s not there. She’ll get to see my game this Saturday, though, so hopefully I’ll have another good game. :)
As far as work goes, it’s pretty busy right now. We have our second-most-major deadline of this entire release coming up, and everyone’s scrambling to get ready. I’m in the middle of a really frustrating problem (been working on it about 14 hours thus far, with no resolution). It doesn’t help that making brand new code work exactly like the old code did six months ago—which is what we’re doing—is one of the more tedious, uncreative jobs in programming. It has to be done, and it will be worth the effort at the end, but any programmer will tell you that solving new problems and writing new code is much more fun.
Aside from work and hockey I haven’t done much; I have a million things to do to the house that I just haven’t had the time to do, and we’re supposed to hang out with some friends for July 4th, but other than that my social life is essentially nonexistant. :) Sorry. No new baby news, either; we won’t know the sex for another 5 weeks, and that’s really the next big milestone. I’ve actually only told 3 people at work, partially because everyone who knows Jenny is pregnant seems to only talk to her about that sometimes, and I don’t want that to happen. Of course I’m also a pretty private person in general.
Anyway. Last weekend Jen and I went with some friends to see Over The Hedge. Jen and I both had qualms about seeing it; from the trailers, we both expected it to be not-very-good. We were wrong. It was said afterwards that it’s the best animated movie Dreamworks has made; better than Shrek, and while I don’t know that I’d necessarily give either the nudge myself, OTH is definitely a worthwhile viewing experience. The Grand Theft Auto sequence in particular is awesome, as is the movie version of Ben Folds’ “Rockin’ the Suburbs”. And stay through the credits—it’s worth it (partially because the end credits themselves are well-done and interesting), unlike the ending of X-Men 3.
I also watched the first part of Robots this week. Despite the program guide’s generous four star rating, I found it completely uncompelling and deleted it after about twenty minutes. I, Robot, on the other hand, was entertaining if not particularly thought-provoking. It’s Will Smith, what do you want? ;) Constantine was not terrible, for a comic-book movie. If I see it in the $5 bargain bin at Wal-Mart, I might pick it up. I’m a sucker for storylines involving an eternal war between Heaven and Hell with humans as proxy combatants, though. Tomorrow should result in Resident Evil: Apocalypse (which I had watched approximately half an hour of, while programming on a laptop in a client’s home at my previous job) as well as The Maltese Falcon (which I’ve never seen, but I like noir and Bogart, so…) and even more excitingly, the first episode of the new season of Deadwood. I’ve missed Al Swearengen’s poetical utterances, truly I have. I find it interesting that Robots was something I deliberately Tivoed, while I, Robot was a Tivo Suggestion—I submit to you that perhaps the Tivo knows me better than I know myself. Of course, it also recorded Prince William and Hide and Seek—so perhaps not, after all.
This week we also moved Jenny to College Station for the next two months, more or less. Which isn’t much fun. I have plenty to keep me busy, including lots of work stuff (enough that I worked for a few hours today, which is not usual for me at all) and yet more home improvement Activities™, but I am accustomed to intense Jeopardy duels, and it takes all the fun out of an entire category devoted to the Oz books (not the movie!) if Jen’s not here. :-P
Our parents banded together and gave us an anniversary present of a digital camcorder (for obvious reasons), so if I can manage to lay hands on a DV cassette sometime soon perhaps I will encourage the pets to do goofy things I can put on the site. Or something. I dunno. It seems like a wonderful piece of equipment, though; I can understand why people do things like this or this, when digital film technology is so accessible. I even know a few people who I’m sure would be happy to be extras in a Firefly fanfic… ;)
The hockey draft was this last week as well. One of the players from my spring team is a captain in the summer league, and had intended to try to keep the team together as much as possible. This is complicated by the fact that aside from himself, he only gets to “protect” a single player, and further by the fact that three of our players got drafted into the next league up (including my defensive partner, all unwitting). Still and all, it looks like the core is there, and it should be fun regardless. I got a little bit of an ego boost when I found out that apparently I was selected in either the third or fourth round of the draft, which seems fairly early for someone in their second season. Not that any OHL or NHL scouts are likely to be darkening my door anytime soon. And it’s only a small ego boost, as I can depend on Jenny for a realistic (by which I mean occasionally depressing ;)) appraisal of my “mad hockey skillz”, as it were.
This weekend’s project, aside from “entertaining the dogs” (via early morning trip to the dog park) and “dealing with crunch time” (viz., working today) is “cleaning the garage”. Anyone who has lived in a house with a garage for more than ten minutes knows precisely what I mean by that. :)
Last night I had a bout of insomnia, and ended up out on the hammock in the back yard at about 2am. It’s worth noting that, by 2am, the mosquitos appear to have quit for the day and, in June in Austin, the temperature is literally perfect. I almost slept out there, but it on further reflection I supposed that to be a bad idea and merely enjoyed it until I felt sleepy. :)
A final thought: reading the Baroque Cycle sure does turn me into a wordy son of a gun, doesn’t it?
Simply put, flash memory will enable a revolution in improving computer performance in daily utilization scenarios. Your computer will boot up faster. It will launch applications significantly faster. (Hey, it will shutdown faster as well.)
To see why we will have this dramatic performance improvement, let's remember how harddisks work: whenever you have a mixture of random I/O requests, the actuator moves across different tracks to read/write the corresponding data. Switching tracks is a slow operation. For an average SATA drive, this is around 9 milliseconds. This might not seem much, but a few milliseconds per seek means that you can have at most a few hundred random I/Os per second. And this feels like light-years compared with the performance of other components in the system like RAM access speeds or even CPU frequency. So, just to give you an example, a random I/O with 4 KB requests and average of 4 ms seek time per request would mean around 1000/4 * 4 KB = 1 MB per second disk transfer rate. Pretty small, don't you think? Especially when you compare it with sequential I/O, where you can get a much faster transfer rate (say, 60-70 MB/s on a regular harddisk, depending the rotational speed, data density, etc).
One trick to alleviate this performance issue is to minimize seek time by reordering writes and/or serving reads from cached memory. Memory caches can greatly help in this regard, but here is a little problem: applications, the OS, and other components do not expect writes to be reordered. When you a write reordering is detected at the application level, then a data corruption can appear, especially when you reboot the machine in the middle of performingg a set of reordered writes.
For example the applicaiton is performing Write(block1) followed by Write(block2) in one thread, and Read(block1) followed by Read(block2) on a different thread. In the sequence above, the application expects block1 to be written always before writing block2. Having this guarantee simplifies for example applicaiton recovery semantics, assuming that the computer can crash between writing block1 and block2. But if we perform write reordering, and only write to the disk block2, then our application recovery logic cannot be done in any way. And so we get to corruption.
Still, storage controllers perform today all sorts of tricks like maintaining a write-through cache in volatile RAM, coupled with limited reordering. More advanced controllers, or SAN equipment use persistent caches (battery-backed volatile RAM) to perform write reordering, complementing advanced storage features like RAID configurations, etc.
The solution - why flash is good
By now it should be clear how flash can be used in this picture: you can use inexpensive flash as a persistent write-through cache for reads/writes. Also, the fact that this flash is persistent enables reordering I/O requests at an unprecedented level, therefore greatly reducing our nasty seek time bottleneck:
The new 2Gb OneNAND chip doubles the capacity of a OneNAND memory device (from 1Gb) and increases the chip's ?write' speed from 9.3MByte to 17MByte per second.
?We're seeing a rapidly widening market for our OneNAND memory because of its outstanding performance and capacity that has become even more noteworthy with the application of 60 nm technology,? said Don Barnetson, Director, Flash Marketing, Samsung Semiconductor. [...]
Because of its exceptionally high performance, OneNAND can serve as a catalyst in the development of new product markets. A much-discussed example of this application-creating role is in how OneNAND memory is now being specified as the buffer memory inside a hybrid hard disk.
Samsung successfully demonstrated a commercial Hybrid-HDD prototype for the first time at the MS Developer Conference (WinHEC: Windows Hardware Engineering conference) in Seattle last month.
Flash-based I/O optimizations - already present in Vista
One more thing worth mentioning: Vista already benefits from Flash-based optimization. The feature is called EMD (External Memory Device), and can boost the performance of your computer by simply adding a USB thumbdrive and designate it as an EMD device. Under the cover, it works in a similar way with the technique described above.
Enhanced DLinq Support: This CTP adds support for Inheritance, Stored Procedures, User-Defined Functions, and Optimistic Concurrency Conflict Resolution (OCCR). The new DLinq Designer provides a visual design surface for creating DLinq entity classes from database tables.
LINQ over DataSet: The full power of LINQ can now be applied to the DataSet, allowing you to use the Standard Query Operators and some DataSet-specific extensions to query against DataRows.
?Group By? Query Comprehensions: The compiler now supports ?Group By? as a valid clause in LINQ Queries.
Outlining support for XML Literals in the Editor: In this release, we added outlining support for XML literals. You can now expand or collapse any Xml element literal that spans across more than one line.
Value extension property for XML axis properties: We added a Value extension property to the collections that are returned from the XML axis properties (i.e. IEnumerable(Of XElement) and IEnumerable(Of XAttribute)). This extension property does two things, it first picks up the first object in that IEnumerable, and if this object exists, it calls the 'Value' property on this object (either XElement or XAttribute). The following code show the use of this Value extension property:
Dim contact = <Contact City='Seattle'>
contact.@City.Value = 'Portland'
contact.<Name>.Value = 'Sam'
Global Xml namespace support: XML namespaces that are declared using the Imports statement can now be used in the XML literals. The following is an example:
<ns:Title>Learning Programming Using VB</ns:Title>
Select/From syntax: The previous tech preview supported using Select before From. In an effort to provide better IntelliSense?, we?re switching to the From/Select format for this CTP.
Joins don?t require ?It?: You don?t need to use the iterator variable ?it? anymore when performing a join operation, though it?s still required for grouping operations.
Xml axis properties syntax: The late bound Xml feature has a new name and a new distinct syntax where we wrap the element name with angle brackets. This new syntax makes the Xml axis properties visually distinct and solves problems that the previous CTP syntax had. See more information in this blog
An embryonic profession: poor and misleading ways of formalisms
Design and programming activity as a profession is better performed with mathematics and applied logic concepts as first-class tools in the hands (heads) of practitioners.
There are a significant number of factors to take care of in order to improve design and programming skills that last. Two of those are: essential mathematics and, first-order logic (also known as first-order predicate calculus). If you are serious about a design and programming career, you know that already.
This is another trait of the current youthful state of mainstream software development industry where many, many people delude themselves into thinking that formalism means tons and tons of paperwork or (not kidding) a dress code wearing mandatory suit and tie. Then, some of them will say: 'we are formal here'.
Regardless of what people are wearing, good and needed formalism in our industry is the kind of formalism related to useful software specifications, that is to say, class interface design and programming by contract.
Bertrand Meyer in his book, Object-Oriented Software Construction-2nd Edition, page 400, in a section entitled 'The expressive power of assertions' said:
'Including a full specification language into the language of this book would have completely changed its nature. The language is meant to be simple, easy to learn, applicable to all areas of software construction, and implementable efficiently (with a final run-time performance similar to that of Fortran and C, and a fast compilation process).
Instead, the assertion mechanism is an engineering tradeoff: it includes enough formal elements to have a substantial effect on software quality; but stops at the point of diminishing return ? the threshold beyond which the benefits of more formality might start being offset by the decrease of learnability, simplicity and efficiency.
Determining that threshold is clearly a matter of personal judgment. I have been surprised that, for the software community at large, the threshold has not moved since the first edition of this book. Our field needs more formality, but the profession has not realized it yet.'
Assertion-first design, also known as test-driven development represents a powerful and reasonable tool at the hands of more and more designers and programmers, hoping the level of mathematic formalism in software development increase in a positive way.
Reflecting in action: programming simple algorithms
In preparation to write some papers about software design techniques, I am planning to illustrate those techniques with a variety of examples. As part of the effort I will document my thoughts while doing reflective practicum, identifying and documenting patterns of thought while programming solutions to several kinds of problems; including implementation of simple algorithms like insertion sort, selection sort, bubble sort and more complex ones. By now, let?s see the code so far.
If, and only if, MDA proponents articulate a new kind of general-purpose source code at a higher level of abstraction such as we never ever need to see again third generation programming languages source code.
If you need to see it again, then MDA is just CASE fallacy resurrected.
Very good article in IEEE Software January/Februry 2006 magazine:
Looking for Powerful Abstractions by Rebecca J. Wirfs-Brock
'Finding the right level of abstraction takes practice and experimentation. There are times when both concrete classes and their common abstraction add value to a design, and there are times when they don?t. To find good classes, experienced designers make distinctions based on significant behavior differences.'
There are words and phrases from experienced people in our industry of software design and programming that just feel right, it is like they are describing a higher level of truth I need to aspire.
Thanks again to Jason for his interest, feedback and support. I'm pretty excited to see what cool stuff he'll cook using this and the new web APIs from Yahoo.
As you can see in the demo/index.html file, after including dojo.js and FlashXMLHttpRequest.js, you'll need to initialize dojo and the flash object by calling InitFlash with the name of a function. That function will be invoked once the flash object is loaded and ready to make requests. From there on, you can create FlashXMLHttpRequest instances and use the 'open', 'onload' and 'send' methods almost as you would with a regular XMLHttpRequest object. You can also call 'setRequestHeader', but only to set the content type request header.
More generally, FlashXMLHttpRequest still has some limitations, due to the native Flash capabilities. First, access to other domains is restricted by use of a crossdomain.xml file. Second, you can only make GET and POST requests. It will become possible to support other verbs, such as PUT, DELETE or HEAD, with the new APIs provided by Flash 8.5.