Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!



Was Turing Test Legitimately Beaten, Or Just Cleverly Tricked?

jkauzlar Re:Isn't that the only way to beat it? (309 comments)

This is a good point. I'm guessing every single one of the entries into these Turing test competitions since 'Eliza' has been an attempt by the programmer to trick the judges. Turing's goal, however, was that the AI itself would be doing the tricking. If the programmer is spending time thinking of how to manufacture bogus spelling errors so that they bot looks human, then I'm guessing Turing's response would be that this is missing the point.

about 3 months ago

In the year since Snowden's revelations ...

jkauzlar Re:secure by default (248 comments)

Just like we know OJ Simpson did it, but we don't have a written confession. Now we have a written confession from the NSA. Time to convict.

about 3 months ago

In the year since Snowden's revelations ...

jkauzlar Re:Does it really matter? (248 comments)

One thing you can do which they won't find out about in advance is invade Crimea.

about 3 months ago

In the year since Snowden's revelations ...

jkauzlar Re:No change, but not out of carelessness (248 comments)

Honestly, why do you think they would care about your data? Are you a journalist investigating the government or the banks? Are you running against Obama and want to make sure your campaign isn't spied on?

about 3 months ago

In the year since Snowden's revelations ...

jkauzlar Re:secure by default (248 comments)

We knew this stuff was going on in the mid-90's.

No. We knew it was a possibility, but we didn't know what was actually going on and so the gov't and press could dismiss techies as paranoid. More importantly, no one was talking about it, which is the really good thing to come out of all this.

about 3 months ago

Snowden Queries Putin On Live TV Regarding Russian Internet Surveillance

jkauzlar Re:Useful Idiot (396 comments)

Late, I know, but read up:

The unredacted wikileaks were a security breach.

People with a conscience (sadly, not everyone has one) consider Bradley Manning's treatment to be torture. According to the article, the harsh conditions of his imprisonment were meant to persuade him into making statements to implicate wikileaks in organizing the leaks. The suicide threat shit is a result of them making it hard for Manning to live inside his own mind.

about 5 months ago

Snowden Queries Putin On Live TV Regarding Russian Internet Surveillance

jkauzlar Re:Useful Idiot (396 comments)

Torture is torture. If they're stripped naked and put into stress positions for hours, left without human contact for days, etc, then what difference does it make if they're in a military or civilian prison? Oh and they could have pushed for the death penalty, so for anything less, Manning should have been thanking them. If someone walks up and punches you in the face, you should thank them for not stabbing you. Also, Manning didn't leak anything to the public. As everyone else knows he gave them to wikileaks to sort through. They did redact information that could be damaging to individuals and refrained from leaking most of what they received. It was one of the few acts of 'journalism' we've seen in the media for years.

about 5 months ago

Snowden Queries Putin On Live TV Regarding Russian Internet Surveillance

jkauzlar Re:Useful Idiot (396 comments)

Please don't compare Manning to Snowden.

There's little in common between the two. Manning's subsequent torture and isolation, however, did not have intended consequence of deterring whistleblowing. Snowden, knowing now that he had no guarantee of personal safety for alerting Americans to the actions of their gov't, was forced to run into the arms of our 'enemies.' If we'd acted righteously and humanely in Manning's case, the Snowden leaks may have been handled more effectively.

I dunno why you think he has to spy on Americans to be a hypocrite. By doing propaganda for the Russians, he is affirming that sometimes you have to compromise your lesser values in order to protect greater ones.

Exactly. There's nothing hypocritical about that. It's a decision we all have to make from time to time.

If they *could* only use this to protect Americans, that'd be great. Unfortunately, there's nothing stopping them from spying on and manipulating journalists, other politicians, spying on elections, providing information to big business campaign donors to the disadvantage of competition, etc. It's important that citizens know the capabilities of their gov't so the right checks can be put into place.

about 5 months ago

Snowden Queries Putin On Live TV Regarding Russian Internet Surveillance

jkauzlar Re:Useful Idiot (396 comments)

As I said elsewhere, this argument makes no sense. We've shown Americans how we deal with leakers by our handling of Bradley/Chelsea Manning. Snowden had no choice but to go to our enemies for asylum. He's an American. For him to be a hypocrite, he'd have to spy on americans. If he has to do propaganda for the Russians to survive, then who cares? It's the Russians' problem, not ours.

about 5 months ago

Snowden Queries Putin On Live TV Regarding Russian Internet Surveillance

jkauzlar Re:Useful Idiot (396 comments)

Our country's policy on whistleblowing has forced him to go to our enemies for asylum. Our allies would've sent him right back. The U.S.'s treatment of Bradley Manning has in that effect damaged our national security.

about 5 months ago

Snowden Queries Putin On Live TV Regarding Russian Internet Surveillance

jkauzlar Re:Useful Idiot (396 comments)

When considering public opinion on such matters, note that the majority of the country once believed Saddam Hussein caused 9/11, that the Vietnam War was legitimate, that slavery was okay, etc. Leaker of the pentagon papers Daniel Ellsburg was also considered a traitor in the 70's and underwent the same treatment as Snowden by the military/intelligence bureaus, but as time went on and the government propaganda machine moved on to other matters, he largely became regarded as a hero. That said, I'd be curious to hear his angle on your 'legitimate espionage' point.

about 5 months ago

Retired SCOTUS Justice Wants To 'Fix' the Second Amendment

jkauzlar Re:Militia, then vs now (1633 comments)

Funny people complain about too much regulatory powers when it comes to cows, but ignore the neglectful lact of regulation in banks, campaign finance, environmental pollution, even food and medicine, etc, when assessing the power of our beauracracy. If an oil company had asked for this land, they'd have gotten it in a heartbeat, but this guy wasn't donating to the right politicians. It has nothing to do with regulatory overreach.

Regulation aside, it gave the guy an unfair advantage over competitors, a concept that should strike dear to the hearts of libertarians. Not every rancher is positioned next to gov't land they can 'borrow.' Did he even offer to buy the land?

about 5 months ago

Seattle Bookstores Embrace

jkauzlar Re:they'll change their tune... (83 comments)

I doubt it. People who go to Elliot Bay probably aren't looking for the most popular books, as it's not the kind of place you'd find stacks of Twilight novels, and Amazon is not going to have a very large inventory in Seattle to acommodate every purchase. And we might be at the point now, where the people who go to bookstores are always going to go to bookstores, no matter how convenient online shopping gets.

about 5 months ago

Seattle Bookstores Embrace

jkauzlar Re:I prefer to browse real bookstores (83 comments)

I was recently at Powell's in Portland (which just had major renovations) and it was crowded on a weekday afternoon. In Seattle, Elliott Bay and the University Bookstore are often hard to browse due to all the people. It's not just Amazon employees, but a lot of people just enjoy browsing books. On the other hand, the cashier lines at any of these places are not as long as they'd been in days past.

about 5 months ago

44% of Twitter Users Have Never Tweeted

jkauzlar Re:Probably typical (121 comments)

I'm sort of in that category. I got my actual name, but my only tweets (~200 of them) are actually from a russian hacker/spammer that generously disappeared and left my account intact.

about 5 months ago

How much do you spend yearly on mobile apps?

jkauzlar Re:Does digital subscriptions count? (240 comments)

I wasn't necessarily talking about Candy Crush, but 350? 425? I had no idea it went up that far! And come to think of it, I do pay a dollar at a time to advance to the next set of levels, which I think is perfectly fair.

about 5 months ago

How much do you spend yearly on mobile apps?

jkauzlar Re:Does digital subscriptions count? (240 comments)

I agree. I've spent more time playing Kingdom Rush for like $3 than many playstation games which cost $60. I'd happily have paid a few bucks for Candy Crush, but it's free. My only complaint is when the game is impossible to defeat without micropayments. It's not even so much the money as the fact that I effectively have to cheat in order to win.

about 5 months ago

Why Standard Deviation Should Be Retired From Scientific Use

jkauzlar Re:Statistics add plausibility - maybe not meaning (312 comments)

I like that little poke at journalists:

t it is not just journalists who fall for the mistake: I recall seeing official documents from the department of commerce and the Federal Reserve partaking of the conflation, even regulators in statements on market volatility.

In other words, it's not just journalists who fall for the mistake, so do educated people.

about 8 months ago

Weapons Systems That Kill According To Algorithms Are Coming. What To Do?

jkauzlar Re:Source code: (514 comments)

while (humans.count() > 0) {


I have a feeling it'll be closer to

while(muslims.count() > 0) {...

about 8 months ago



Book Review: Elemental Design Patterns

jkauzlar jkauzlar writes  |  more than 2 years ago

jkauzlar writes "Believe it or not, it's been 18 years since Design Patterns by Gamma, et al, first began to hit the desks of programmers world-wide. This was a work of undeniable influence and usefulness, but there is criticism however that pattern-abuse has lead to over-architected software. This failure is perhaps due to wide-spread use of patterns as templates instead of understanding their underlying 'grammar' of this language such that it may be applied gracefully to the problem at hand. What's been missing until now is a sufficiently authoritative study of design patterns at this 'grammatical' level of abstraction. Jason McC. Smith, through a surprisingly captivating series of analytic twists and turns, has developed a theory of Elemental Design Patterns that may yet rejuvenate this aging topic.

Much as developing a large taxonomy of star-types in astronomy lead to and enabled theories of star formation, or a classification of organic life lead to studies of genetics, it makes sense that the large volumes of collected object-oriented design patterns should somehow lead to a generic understanding of them. Smith actually approached this in an attempt to solve a very practical problem: given the variety of ways a particular pattern can be implemented, how can one be recognized programmatically with a degree of certainty?

What's most fascinating about Elemental Design Patterns is the analysis performed in working out a solution to the question of how a pattern may be defined in a way that's language-agnostic and flexible to differing implementations. This was a success: his resulting pattern recognition tool even found unintentional usages of well-known design patterns in a large legacy code base, which could then be refactored from the ugly 'accidental usage' to transform apparent chaos into maintainable order.

The basic idea is that every pattern is composed of elemental patterns. For example, the 'Factory Method' pattern may be decomposed into four EDPs (elemental design patterns): 'Create Object', 'Fulfill Method', 'Conglomeration' and 'Retrieve'. The 'Pattern Instance Notation', introduced in this book, and which serves as an extension to UML, helps visualize the relationships between the four sub-patterns and the larger pattern. No doubt readers will find the notation useful in their own work.

This premise's success or failure hinges on two questions: are the set of patterns really elemental? and can the set of patterns be complete? Oddly, the patterns listed in the book are NOT complete: "this book touches on only one-quarter, at best, of the possible EDPs that exist" (p. 107). The fact that this book (which defines 16 patterns in depth) is only the beginning of a project is not well-communicated. Those who might benefit from a complete listing of EDPs (i.e. analysis tool makers) might be puzzled at how to immediately put this book to use if it's not complete. After all, Smith insists in the Preface that "this book is meant to be used." To me, this implies it should serve as more than a basis for research or design-skills edification.

As for them being elemental, in the sense that all possible 'macro-patterns' may be built from them, Smith backs up this claim with the help of a mathematical formal system called rho-calculus, which is introduced in some depth in the appendix, but avoided in the body of the text for readability's sake. Readers wanting a full mathematical treatment are referred to Smith's Ph.D thesis.

What makes the book worth reading and re-reading is in the methods employed to analytically derive EDPs. As dull as I probably make it sound, Smith gives the entertaining first half of the book an almost 'novelistic', first-person quality in which the reader is engaged to experience Smith's insights first-hand. In a sense, the EDPs are 'unfolded' from simple concepts like the degrees of method or object similarity in a method-call relationship.

Understanding this point is important to understanding EDPs: a method call is not just a method call from a 'micro-patterns' perspective. Calling a very different method on the same object is semantically distinct from calling a very similar method on a very different object. The first is described by the EDP 'Conglomeration' (breaking larger tasks into subtasks); the second, by the EDP 'Redirection' (redirecting a process to another object). Of course, the terms 'similar' and 'different' are fuzzy qualifiers to programmers and there's bound to be some debate on how these terms are applied. Smith, in order to make this distinction, puts faith in the developer's ability to name classes and methods. But anyway, such 'semantic' relationships are the real building-blocks of the higher-level patterns. Once other object-oriented principles are considered, like inheritence, the EDP list grows.

The importance of Elemental Design Patterns from a designer's perspective should now be more clear. I kept stressing the word 'semantic' in the last paragraph because what this book strives to do is provide a *language* for describing object-oriented structure that, first of all, doesn't rely on the OO language itself (C++, Smalltalk, Java, Javascript, etc), and more notably, which takes into account the designer's purpose for employing simple devices like method calls and class extension. As I said earlier, a method call is not just a method call. There may be a dozen or so 'structural' reasons to call a method, and each reason is given it's own 'word' (i.e. EDP) in Smith's language. It stands to reason that a designer with a firmer grasp on his own intentions is a more effective designer."

Link to Original Source

Book Review: Java Performance

jkauzlar jkauzlar writes  |  more than 2 years ago

jkauzlar writes "The standard Oracle JVM has about sixty 'developer' (-XX) options which are directly related to performance monitoring or tuning. With names such as 'UseMPSS' or 'AllocatePrefetchStyle', it's clear that Joe Schmo Code Monkey was not meant to be touching them, at least until he/she learned how the forbidding inner recesses of the JVM work, particularly the garbage collectors and 'just-in-time' compiler. This dense, 600-page book will not only explain these developer options and the underlying JVM technology, but discusses performance, profiling, benchmarking and related tools in surprising breadth and detail. Not all developers will gain from this knowledge and a few will surrender to the book's side-effect of being an insomnia treatment, but for those responsible for maintaining production software, this will be essential reading and a useful long-term reference.

In my experience, performance tuning is not something that is given much consideration until a production program blows up and everyone is running around in circles with sirens blaring and red lights flashing. You shouldn't need a crisis however before worrying about slow responsiveness or long pauses while the JVM collects garbage at inconvenient times. If there's an opportunity to make something better, if only by five percent, you should take it, and the first step is to be aware of what those opportunities might be.

First off, here's a summary of the different themes covered:

The JVM technology: Chapter 3 in particular is dedicated to explaining, in gory detail, the internal design of the JVM, including the Just-In-Time Compiler and garbage collectors. Being requisite knowledge for anyone hoping to make any use of the rest of the book, especially the JVM tuning options, a reader would hope for this to be explained well, and it is.

JVM Tuning: Now that you know something about compilation and garbage collection, it's time to learn what control you actually have over these internals. As mentioned earlier, there are sixty developer options, as well as several standard options, at your disposal. The authors describe these throughout sections of the book, but summarize each in the first appendix.

Tools: The authors discuss tools useful for monitoring the JVM process at the OS level, tools for monitoring the internals of the JVM, profiling, and heap-dump analysis. When discussing OS tools, they're good about being vendor-neutral and cover Linux as well as Solaris and Windows. When discussing Java-specific tools, they tend to have bias toward Oracle products, opting, for example, to describe NetBean's profiler without mentioning Eclipse's. This is a minor complaint.

Benchmarking: But what good would knowledge of tuning and tools be without being able to set appropriate performance expectations. A good chunk of the text is devoted to lessons on the art of writing benchmarks for the JVM and for an assortment of application types.

Written by two engineers for Oracle's Java performance team (one former and one current), this book is as close to being the de facto document on the topic as you can get and there's not likely to be any detail related to JVM performance that these two men don't already know about.

Unlike most computer books, there's a lot of actual discussion in Java Performance, as opposed to just documentation of features. In other words, there are pages upon pages of imposing text, indicating that you actually need to sit down and read it instead of casually flipping to the parts you need at the moment. The subject matter is dry, and the authors thankfully don't try to disguise this with bad humor or speak down to the reader. In fact, it can be a difficult read at times, but intermediate to advanced developers will pick up on it quickly.

What are the book's shortcomings?

Lack of real-world case studies: Contrived examples are provided here and there, but I'm really, seriously curious to know what the authors, with probably two decades between them consulting on Java performance issues, have accomplished with the outlined techniques. Benchmarking and performance testing can be expensive processes and the main question I'm left with is whether it's actually worth it. The alternatives to performance tuning, which I'm more comfortable with, are rewriting the code or making environmental changes (usually hardware).

3rd Party tool recommendations: The authors have evidently made the decision not to try to wade through the copious choices we have for performance monitoring, profiling, etc, with few exceptions. That's understandable, because 1) they need to keep the number of pages within reasonable limits, and 2) there's a good chance they'll leave out a worthwhile product and have to apologize, or that better products will come along. From my point of view, however, these are still choices I have to make as a developer and it'd be nice to have the information with the text as I'm reading.

As you can see, the problems I have with the book are what is missing from it and not with what's already in there. It's really a fantastic resource and I can't say much more than that the material is extremely important and that if you're looking to improve your understanding of the material, this is the book to get."

Link to Original Source

Scientists to Breed the Auroch from Extinction

jkauzlar jkauzlar writes  |  more than 4 years ago

ImNotARealPerson (596349) writes "Scientists in Italy are hoping to breed back from extinction the mighty auroch, a bovine species which has been extinct since 1627. The auroch weighed 2,200 pounds (1000kg) and its shoulders stood at 6'6". The beasts once roamed most of Asia and northern Africa. The animal was depicted in cave paintings and Julius Caesar described it as being a little less in size than an elephant. A member of the Consortium for Experimental Biotechnology suggests that 99% of the auroch's DNA can be recreated from genetic material found in surviving bone material. Wikipedia mentions that researchers in Poland are working on the same problem."
Link to Original Source

Effective Java, Second Edition

jkauzlar jkauzlar writes  |  more than 6 years ago

jkauzlar writes "Despite its having been released in 2001, I still see the first edition of Effective Java laying open on the desks of experienced colleagues. It is one of the few mainstays of the Java programmer's library and given all of the changes to the language and platform over its past couple of releases, the book is due for an update. Joshua Bloch, the Chief Java Architect at Google and former Sun engineer for the Java platform, offers his advice and commentary on seventy-eight topics that span the most common areas of Java development.

For those who missed the first edition, this is neither a 'cookbook,' a 'patterns' book, nor a 'styleguide.' It stands adjacent to those three areas, covering topics that are almost exclusively peculiar to the Java language — for example, topics like garbage collection (i.e. object finalization, etc), the old and often-avoided clone() method and the proper use of 'synchronize' — are covered in depth.

The new edition adds twenty-six 'items', removes five and adds about eighty pages to the first. The chapter on migrating data structures from C was removed, two chapters concerning new features from the J2SE 1.5 release were added, and the entire book was revised. The most welcome new chapter covers generics, one of the more esoteric, but also very useful, features of Java. The (necessarily) quirky implementation of generics, confused by type erasure (i.e. those measures taken for backwards-compatibility), is made clear to the reader.

Many of the 'classic' items address programmer's mistakes and misconceptions that all-too-often creep into production code and either cause bad performance or are difficult to maintain:
  • On Item 50: Strings are often used when other types are more appropriate. For example, a variable 'transactionType' may be declared to be of type String while an 'enum' construct may be desired.
  • On Item 57: A developer may write a void validate(MyObject obj) method that throws an exception for an invalid object rather than returning an error condition. In this example, exceptions are abused, because, as the method's primary purpose is to validate, an invalid parameter is not exceptional behavior.
  • On Item 51: String concatenation, e.g. "My" + " name " + " is " + " Bill." creates a new String object for each use of the '+' operator. A StringBuffer is more efficient when many concatenations are going to be made.

Other items fall under the banner of best practices:

  • Item 15, Minimize Mutability: an immutable object can only have a single state once it has been created, so you can wrecklessly pass it around without needing to worry whether its internal value has been changed. For example, strings are immutable, so the value of errorMessage in final String errorMessage = "Error!" can always be counted on to have the given value, whereas final Person jim = new Person("Jim") may not always be 'Jim' if Person is mutable and #setName() has been called with a value other than 'Jim'. Also, immutable objects are thread-safe: two threads can't modify the internals at the wrong time and create concurrency issues if the threads can't access the internals.
  • Item 10, Always Override toString: how many times have you tried to print out the results of another developer's method for testing purposes and gotten something like "User@38b32f2"? Enough said.

Like the latter example above, much of the advice seems obvious or simplistic to some developers, but I've seen APIs written by very good developers that ignore this advice. It's very easy to forget to implement #toString or to break immutability when you're under a deadline and have several thousand lines of code to think about, but the results of this oversight may mean an ugly NullPointerException, caused by concurrency problems, six months into production. For management, this means a lot of hours spent tracking down the source of the exception, fixing it and, depending on the seriousness of the bug, pushing a new version into production.

As another way to think about this book, consider all of your pet-peeves when reviewing and using the code of others. You may wish for an all-encompassing rule-book with items such as 'Always implement toString()!', 'Always document visible methods!' or 'Don't use reflection when an interface will work!' This book is about as all-encompassing as you'll find for this purpose. If managers told developers to read it and told them which items to pay most attention to, code would be far more consistent and bug-free across the enterprise. Unfortunately, there is SO MUCH a book such as this could have mentioned, but didn't, that it can't function for this purpose all by itself. For example, there is no mention of THEE thread-safe singleton pattern, whatever that might be deemed to be, nor is there any explicit mention of the misuse of a 'null' parameter which causes entirely different behavior than when a non-null object is passed (if it were up to me, a null value passed to a method would throw a compiler exception, but I digress).

The selection process Bloch uses to determine what does and does not belong in the book seems based on how peculiar the item is to the Java language as opposed to being just general programming practice. Additionally, use of the API's outside of java.lang is rarely touched upon. But even with all of its omissions, there still isn't a book that comes close to giving such a breadth of advice to Java developers. There are always a LOT of factors to keep in mind when developing enterprise applications and even experienced programmers tend to overlook the most basic ones. That said, everyone who programs in Java will benefit from the lessons taught in Effective Java, even on repeated readings. For that reason, I can't recommend the book highly enough."


The Definitive ANTLR Reference

jkauzlar jkauzlar writes  |  more than 6 years ago

Joe Kauzlarich writes "Finally, someone has done us all the great service of publishing a book about the second most well-known compiler compiler, Terence Parr's Antlr, and it was written, moreover, by Parr himself and published as part of the somewhat-usually-reliable Pragmatic Bookshelf series. Take note, while it requires a JVM to run, Antlr is not just for Java developers; it generates compilers in Python, Ruby, C, C++, C# and Objective-C. Also note that this book is more than just an elaborated man-page; it is also an excellent introduction to the concepts of compiler and parser design.

First off, I have no preference between Yacc-style parsers, JavaCC and Antlr; I've never used Yacc, have used JavaCC in college and have since played with Antlr and am just as ignorant in the use of them all. The fundamental difference is that Antlr is a top-down LL(*) (simply-put, variable-lookahead) parser generator while Yacc is a bottom-up LR parser generator. JavaCC is also top-down, but employs a different parsing strategy. The book describes the meanings of these terms in simple detail.

I happen to have learned in my experience that good documentation for any of these products is hard to come by and difficult to follow, simply because the subject matter is obtuse and few, until now, have ventured to write expository literature to explain the myriad concepts to the non-academician. Of the three mentioned above, Antlr appears to be the more 'modern' and can also generate lexers from within the same grammar definition file, so the notions are integrated. Antlr also has a useful IDE called AntlrWorks with visualization features, causing grammar construction to be far simpler for a beginner.

That said, I don't wish to use this review to push Antlr over its alternatives, but only to press the point that this book serves not only to introduce Antlr to the average programmer, but the concepts of parser design as well. The concepts become necessary to understand while writing and debugging grammars, as not everything written in Backus-Naur Form will produce a working parser, and this holds true for any parser generator. Learning what works and what doesn't, as well as what workarounds are available, is key to becoming proficient in Antlr, Yacc or JavaCC. Once proficiency is acheived, you'll have the valuable skill of producing domain-specific languages on demand.

Terence Parr, as mentioned before, is not only the author and maintainer of Antlr, but he wrote the book as well. Antlr is on its long-awaited third version and has been maintained by Parr throughout the project's lifetime. He is a university professor and himself developed the path-breaking LL(*) parsing strategy employed by Antlr.

Parr begins with a one chapter background in computer language design before diving into a simple example of a parser for basic integer expressions. Part II is the meat of the book, describing various aspects of writing grammars for Antlr. Generally speaking, he covers the basic semantics of grammar writing, the many optimization, supplementary and 'workaround' options provided by Antlr, grammar actions and attributes, syntax trees, error reporting and related practical topics.

The third part, Understanding Predicated LL(*) Grammars, is the valuable 'textbook' portion of the book. It gives readers a short and comprehensible introduction to exactly what predicated-LL(*) means as well as a look at how competing parser generators work in contrast.

Both of the second and third parts are scattered with theoretical tidbits to help language designers better understand why grammars must work as they do. Those who can't pick their nose without a rudimentary theoretical overview of the subject can enjoy a few casual browsings through the book before even sitting in front of a computer. It works *almost* that well as a textbook, though it still doesn't approach such classics as Aho, et al's, Compilers: Principles, Techniques, and Tools (if you want to get seriously involved in compiler design). Take it for what it is though, as a chance to learn a tool of possible value without having to dig through old mailing lists and last-minute README's on the one hand, as was much the case a year ago, and on the other hand, devoting pain-staking class and study time to a lot of theory you won't find of practical value.

So I'll recommend this book on the basis that there's nothing else like it available; and don't wait until a project comes along that requires knowledge of compiler design, because there's a heck of a learning curve (I'm still on the very low end and I wrote a compiler in college). If you think compiler or parser design is interesting or may conceivably write a domain-specific language for your workplace, the Definitive Antlr Reference is not only a good place to start, but one of the only places to start short of signing up for a university course."

Programming Collective Intelligence

jkauzlar jkauzlar writes  |  more than 6 years ago

Joe Kauzlarich writes "In 2006, the on-line movie rental store Netflix proposed a $1 million prize to whomever could write a movie recommendation algorithm that offered a ten percent improvement over their own. As of this writing, the intriguingly-named Gravity and Dinosaurs team holds first place by a slim margin of .07 percent over BellKor, their algorithm an 8.82 percent improvement on the Netflix benchmark. So, the question remains, how do they write these so-called recommendation algorithms? A new O'Reilly book gives us a thorough introduction to the basics of this and similar lucrative sciences.

Among the chief ideological mandates of the Church of Web 2.0 is that users need not click around to locate information when that information can be brought to the users. This is achieved by leveraging 'collective intelligence,' that is, in terms of recommendations systems, by computationally analyzing statistical patterns of past users to make as-accurate-as-possible guesses about the desires of present users. Amazon, Google and certianly many other organizations, in addition to Netflix, have successfully edged out more traditional competitors on this basis, the latter failing to pay attention to the shopping patterns of users and forcing customers to locate products in a trial and error manner as they would in, say, a Costco. As a further illustration, if I go to the movie shelf at Best Buy, and look under 'R' for Rambo, no one's going to come up to me and say that the Die Hard Trilogy now has a special-edition release on DVD and is on sale. I'd have to accidently pass the 'D' section and be looking in that direction in order to notice it. Amazon would immediately tell me, without bothering to mention that Gone With The Wind has a new special edition.

Programming Collective Intelligence is far more than a guide to building recommendation systems. Author Toby Segaran is not a commercial product vendor, but a director of software development for a computational biology firm, doing data-mining and algorithm design (so apparently there is more to these 'algorithms' than just their usefulness in recommending movies?). Segaran takes us on a friendly and detailed tour through the field's toolchest, covering the following topics in some depth:
  • Recommendation Systems
  • Discovering Groups
  • Searching and Ranking
  • Document Filtering
  • Decision Trees
  • Price Models
  • Genetic Programming
  • ... and a lot more

As you can see, the subject matter stretches into the higher levels of mathematics and academia, but Segaran successfully keeps the book intelligible to most software developers and examples are written in the easy-to-follow Python language. Further chapters cover more advanced topics, like optimization techniques and many of the more complex algorithms are deferred to the appendix.

The third chapter of the book, 'Discovering Groups,' deserves some explanation and may enlighten you as to how the book may be of some use in day-to-day software designs. Suppose you have a collection of data that is interrelated by a 'JOIN' in two sets of data. For example, certain customers may spend more time browsing certain subsets of movies. 'Discovering Groups' refers to the computational process of recognizing these patterns and sectioning data into groups. In terms of music or movies, these groups would represent genres. The marketing team may thus become aware that jazz enthusiasts buy more music at sale prices than do listeners of contemporary rock, or that listeners of late-60's jazz also listen to 70's prog, or similar such trends.

Certainly the applications of such tools as Programming Collective Intelligence provides us are broader than my imagination can handle. Insurance companies, airlines and banks are all part of massive industries that rely on precise knowledge of consumer trends and can certainly make use of the data-mining knowledge introduced in this book.

I have no major complaints about the book, particularly because it fills a gap in popular knowledge with no precursor of which I'm aware. Presentation-wise, even though Python is easy to read, pseudo-code is more timeless and even easier to read. You can't cut & paste from a paper book into a Python interpreter anyway. It may've been more appropriate to use pseudo-code in print and keep the example code on the website (I'm sure it's there anyway).

If you ever find yourself browsing or referencing your algorithms text from college or even seriously studying algorithms for fun or profit, then I would highly recommend this book depending on your background in mathematics and computer science. That is, if you have a strong background in the academic study of related research, then you might look elsewhere, but this book, certainly suitable as an undergraduate text, is probably the best one for relative beginners that is going to be available for a long time."

jkauzlar jkauzlar writes  |  more than 7 years ago

Joe Kauzlarich (596349) writes "The 'pattern' book has become a familiar genre for frequent readers of technical manuals. The idea is to sift through mountains of architectural or design schemes and then to categorize and catalogue the most frequent ideas and present their strengths and weaknesses. This type of book has been a success in software engineering, but can it translate to website design, where designers have everyday and frequent access to other designs? At worst, these books provide a common industry vocabulary (assuming it was read by everyone in the industry). How many people knew what a factory method referred to before Erich Gamma's Design Patterns was released? At best, as in the case of that 'original' software design patterns book, mountains of complex ideas are archived into a single reference and will sit within arm's reach for the rest of your life. So, is the web design discipline full of patterns that evade common sense?

Initially, I was amazed by the sheer scope and the amount of work that must've been put into this book. Almost 1000 pages — and not just a bunch of screenshots either. Most of the book is well-organized text. The screenshots are full-color, as is everything else in the book. Each section has a different-colored bleed, making it easy to locate the chapter you're looking for. Furthermore, the patterns are extensively cross-referenced throughout the book, and references appear in colored marginal bullets. Even the table of contents has descriptive section headings and a small summary of each section. The design of the book itself gets an eleven out of ten. The book itself is a living catalogue of technical reference design patterns. Kudos to the book's designer on this one.

As far as content, the book describes 117 distinct patterns in 13 categories. This includes patterns related to marginal topics such as mobile devices, accessibility and content creation (i.e. copywriting 101). Like most pattern books, it's a good idea to initially browse the book before using it as a reference so that you'll know what to look for when you need to pick it up again. On my initial browsing, it seemed to contain nothing particularly surprising — this has been the case with many great pattern books such as Martin Fowler's Refactoring or another of his books, Patterns of Enterprise Application Architecture, so I was not going to discredit it on this basis alone: a pattern book's true value shows itself when you're stuck on a problem and turn to it for a moment of shining clarity. Let's see if The Design of Sites lives up to this promise...

Is the book as invaluable as it aims to be?

Trial #1: a business website that is not e-commerce, but a 'glorified yellow pages' type of site. I have a lot of information that needs to be accessed not only in its heirarchical organization, which can go to three levels deep, but should also guide the reader on what should be read next: a separate 'linked-list' that 'jumps' branches in the original hierarchy.

Given this amount of content and this double-organization, we wanted each page to present access to the site's information without overwhelming the reader. I open up the book to Part A, 'Site Genres', to locate the particular genre of website I'm working on. I find it: 'Valuable Company Sites.' I read some good information on layout. I see a paragraph titled 'other patterns to consider,' which points me to pattern B1, 'Multiple Ways to Navigate.' A-ha! The book's exceptional design allows me to locate pattern B1 in 3 seconds flat. It is hear I realize the true value of the book: there are no 'right' answers in design, only guidelines:

...we have identified two things that drive customers to action: intention and impulse (these can be thought of as goal and trigger, or need and desire). Neither intentional nor impulsive behavior is inherently good or bad, but a site that omits intention-based navigation might feel shallow and quirky, and one that omits impulse-based navigation might seem boring.

Good advice. Though I already have a hierarchical organization (intentional browsing) and recommended organization (impulse browsing), which gives users options on what to read next, I now have an idea of what sort of balance I want in the areas of navigation.

This was not exactly a mind-blowing discovery, but it did give me some confidence in the choices I eventually made and, furthermore, gave me valid reasons for making those choices, in case the client or a team-member were to question those choices later on.

Trial #2: Working on a website for a freelance graphic designer, I encounter a problem whereby each image in the portfolio can be categorized either by project/campaign or by design-type. For example, a logo, a business card, poster and website are all part of a single campaign, but we also want the ability to list all logos from separate campaigns. Again we have an organizational dilemma, but this time for a different type of site and a fundamentally different type of dilemma.

Again, I turn to the first section 'Site Genres' to locate the type of site I'm working on. It's not exactly a business site, but more of an on-line portfolio. The closest seems to be pattern A9, 'Stimulating Arts and Entertainment.' When I turn to it, I discover I was correct: the authors discuss the 'art gallery' site, though it doesn't exactly cover the aspect that I'm looking for. So I've encountered the book's first notable omission: nothing along the lines of an 'online portfolio' or 'interactive resume' genre of site design, which would encompass all creative freelancer sites as well as the usual rock band websites, etc. They differ from the 'Valuable Company Website' in that personal expression and design creativity take center stage. These sites have a general similarity in aesthetic in that they purposely avoid the business-like design. You won't see many pull-down or left-side navigation menus on a standard band website. The menus are typically integrated into a central graphic of some sort and this puts heavy constraints on the web designer while trying to effectively organize information without sacrificing the expressive purposes of the site.

What this book lacks

The book offers no obvious guidelines for dealing with this sort of problem and here's why: it doesn't take into account the various constraints imposed by the client nor does it attempt to offer reconciliations between the design and the underlying organization of the data.

In my trial #2 we had the thumbnail images organized in two ways, either by design-type (poster, logo, business card) or by campaign ("Going Out of Business Sale", "Grand Opening", "Johnson's Automotive Website"), both organization-types having fairly equal weight. How do we allow the user to switch between organization types and keep the site consistent? The book doesn't touch these types of questions in a direct way.

What the book offers
  • A comprehensive aggregate of guidelines for user-interface patterns.
  • User-centered, 'psychological' perspectives.
  • Covers most of the bases: content creation, page layout, organization of component elements, web application design, hints of 'Web 2.0' patterns, and ideas for functional pages such as searching, content submission, and quite a bit more.
  • 'Marginal' topics like localization and accessibility that you may not want to buy a separate book for but, nonetheless, need to know about.
  • A great overall design, easy to use as a reference and easy on the eyes.
  • A long and detailed exposition on the utility of polling and seeking advice from your target audience, including sample forms to present them with.
  • Overall, very well-written and hardly a sentence wasted.

Should you purchase this book?

While 99% of the patterns themselves are common knowledge to most users of the internet and to most decent web designers, it is the expository text that forms the real meat of the book and contains the wealth of insight. This is by far the book's value. Posing as a patterns book is misleading; this book is really just a very good general guide to web design. As a pattern book, it's flawed, because almost every 'pattern' is just a guideline for effectively presenting information, not an elusive insight or 'trick of the trade' in itself, such what as Erich Gamma's (et al) original 'Design Patterns' brought us. There are mountains of outstanding tips and bits of advice throughout the book, but if you've already achieved a decent level of competency in design, then you're not going to be using the book very often and when you do, you might not get the depth of advice you're seeking.

On the other hand, the book gives beginner-to-intermediate-level designers everything they need to get started or fill in the gaps. The Design of Sites would also make an outstanding text book and is likely to be one of the best general guides to web design on the market.

I'll give it a 6 out of 10, judging a book on its utility as a design patterns books (just as you would give The Illiad a possible 2 out of 10 if Homer presented it to me as a historical text and I expected as much). As an introduction to web design, it easily deserves at least 9 points out of 10."

jkauzlar jkauzlar writes  |  more than 7 years ago

Joe Kauzlarich writes "As good of a place to start as any, for an introduction to general critical cybercultural theory is the film The Matrix, where Neo is seen carrying a copy of the great theorist Jean Baudrillard's text 'Simulacra and Simulation' (1981). Baudrillard's thesis, as popularly known, is that our age acts by simulating a simulation, a more dystopian outlook than many of us internet-philes might care to consider. However, Baudrillard's book does foreshadow cyberculture as we know it today, bringing with it a rich linguistic (semiotic) theory that could be used in an analysis of the modern online culture. David Silver and Adrienne Massanari, the editors of this essay collection, chose not to dive head first into a 'total' theory of cyberculture, but to poke around at aspects ranging from internet adoption to MMORPGS to the Dot-com boom.

Critical Studies, rooted in the culturally revolutionary period of the 1960's, has a strong humanist, liberationist undercurrent. It is Liberal in the sense that the theory mandates change, as I'll explain below. Critical Theory came a century and a half earlier, with Hegel, Marx, and Nietzsche, responding to the modernist era of great cultural upheavals. If not mixed into the philosophy section of your local bookstore, you'll find them all very nearby.

In the case of the internet and cyberculture, there are such upheavals that we must entrust theory to encounter — corporate and government control of the web, privacy, copyright issues and an emerging class distinction, the internet have's & have-nots. There are a lot of problems for critical theorists in analyzing such changes. These can be loosely divided into the practical and the intellectual.

One practical, and very urgent, dilemma is the availability of the internet in lower economic classes and third-world countries. In many ways, access to the internet is crucial to class mobility, an essential prerequisite to fair capitalism. Studies on the adoption of internet technologies therefore become relevant. This is an element of cyberculture because it affects the very accessibility to and constituency of 'cyberspace.' In her essay "Overcoming Institutional Marginalization," Blanca Gordo discusses Plugged In, an institution in Palo Alto, CA that offers a community technology development program with several goals, including free and simple connectivity to areas high in poverty. The essay discusses the culture of innovation in Palo Alto which enables important endeavors like Plugged In.

This was one of the very 'practical' studies the book provides. Many of the book's essays, however, theorize about the nature of culture as it applies to the internet in an inquisitive or intellectual way. Many of the books' authors find in MMOGs and MMORPGs a suitably useful microcosmic internet culture for studying relationships between players on-line and how these relationships are carried to or from the world off-line. Similarly, a highly theoretical study discusses the nature of identity and identity formation on MMORPGS, or on the internet in general. How do individuals manage the information that they disclose about their 'real' lives? How do individuals manage multiple online identities?

The analysis of identity is an important fundamental concept of internet culture. Identity formation in online games has been a particularly interesting field of study because they 'enclose' the identity in a complete, controlled environment, but games themselves have become more academically-engaging once they began coinciding with reality in unpredictable ways: there's been recent talk of imposing actual taxes on online acquisitions due to their interchangibility with real money, including the coveted +5 charisma swords and level 35 Elven mages we find or create in virtual worlds. To put it another way, game-capital may be considered in real economic indicators; they are considered as production in a very real sense, alongside automobiles and barrels of oil.

Lessig was mentioned only a couple of times in Critical Cybercultural Studies, but his work wasn't discussed in depth. It was not just Lessig who was ignored, but virtually all the important minds of the technological world. This points us to one of the crucial shortcomings of the book in which the authors carry (if from any tradition at all) from earlier non-cyberculture-related studies such as post-colonialism, gender studies, et al, onto internet technology without consulting to any large degree the major theoreticians of the internet in general. These theoreticians would include, in my opinion, Lessig, who has established an extensive theory of the internet ( Code V2 is a worthwhile read) in order to address his legal concerns; and Eric Raymond's The Cathedral and the Bazaar, (anyone have glamour-shot coupons for Ray?) which lays out the fundamental ethos of both software production in the internet age and of projects like Wikipedia. There are also numerous examples in Richard Stallman's writings, in Tim Berners-Lee's work (he was, again, mentioned in brief, but his technical emphases and projects toward greater interactivity, such as the semantic web, were not touched), and in the writings of modern science-fiction authors (e.g. In the Beginning was the Command-Line).

Critical Studies, having taken so much from the exceedingly down-to-earth (or just 'out there') writers of postmodernism theory, is not above looking to software programmers for source material. The Code, as Lessig's thinking goes, mediates all individual behavior in cyberspace as well as the relationships between individuals. One approach to studying cyberspace might be from the perspective of 'Orthodox Marxism,' as defined by Georges Lukacz. By Marxism, I do not mean communism or anything similar. Marxist theorists utilize Marx's methods, not necessarily his results, and the application of dialectical logic was the most famous of these methods. Interestingly, by way of a definition, 'ordinary' logic's relation to dialectical logic is surprisingly analagous to the relationship between mathematics and computer algorithms: Mathematics describes relationships between entities; algorithms describe what is to be done with entities (a 'historical' logic). It's still 'logic', as every computer programmer knows; it just doesn't translate well into plain mathematics. Critical theory has been built on this idea: that the theory mandates what is to be done.

Software developers, like the critical theorists of yesterday, have an agenda and an ethic, that has, and will, utilize this sort of logic (dialectical, not just algorithmic) to create internet culture. Programs like CVS have enabled geographically dispersed populations to build software, undermining a lot of pre-established business models. P2P software, Wikipedia, and social networking sites have all produced dramatic changes on 'real' culture. All of these examples come, in a sense, through the dialectical logic of change, to provide internet-related services that upset tradition and also point out the differences between internet and non-internet cultures.

Aside from these few major complaints, I found the book very thought-provoking in its individual assessments — I speak not only as somone looking for an introduction to a field which I knew little about, but as a member of internet culture and an entrepreneurial-minded developer who seeks to understand the culture. I am not an expert in cultural studies nor have I contributed in the past, but I consider myself to be entrenched in internet culture, particularly on the side of production.

One essay in particular appeals to the open-source community, Fred Turner's "How Digital Technology Found Utopian Ideology." The subtitle says it all: "Lessons from the First Hacker's Conference." Turner describes the libertarian ethos pervading the 1984 Hacker's Conference, attended by Richard Stallman, Steve Wozniak, Ted Nelson, and Theodore Draper (a.k.a Captian Crunch). The essay was no doubt the most essential in the volume for giving background to the current legal situations involving YouTube, P2P technologies, and other internet technologies associated with intellectual property infringement. Though Turner is correct in *associating* the 1984 Hacker's Conference with the libertarian ethos rampant on the internet today, he does not acknowledge that both are probable symptoms of an underlying order. That is, those who expect to catch the Daily Show on YouTube were probably not influenced in any way whatsoever by those early hackers. Again, the trail leads to the internet's structure, to the TCP/IP and HTTP protocols and the next level of software — the websites — that take advantage of the egalitarian and anonymizing nature of these protocols. The early hackers created the software, but human nature chose, by their own will, to adopt it.

Greg Elmer's essay, "The Vertical (Layered) Net," continues the discourse at this point: Elmer argues from a historical point of view, beginning with internet pioneer Ted Nelson's early Xanadu project and the ARPANET, that this egalitarian notion of the web is slowly being etched away as the web matures. His thesis, as Lessig would argue, is that Cybercultural Studies ought to approach and unify its studies through the 'moment of connectivity.' That is, a thorough analysis of internet accessibility, content publication, technical protocols, etc, ought to be performed before sociological analyses should be attempted. Christian Sandvig does, in fact, do just this, the Slashdot Effect being one of his examples, in which the internet's structure has created an inequality between the bandwidth haves and have-nots.

A large portion of the book is devoted to the cyber-sociological analyses, from diaspora (divergent cultures, usually referring to the world's Jewish population, according to the dictionary); sexuality and gender on the internet (one puzzling question being why game — or comic book, I might add — heros and heroines are so commonly presented in revealing, skin-tight, clothing, i.e. 'hypersexualized'; and young girls as heroines — are designers appealing to a Freudian father-complex in gamers?); "Internet Studies in Times Of Terror," which discusses ',' the military internet; chat-rooms; games, and more.

Authors of the book include professors and graduate students from around the United States specializing in everything from media studies to psychology. One of the attractive aspects of critical studies is that it's tradition is very interdisciplinary, often leaning towards social sciences. Alan Sokal parodied what can happen when a social scientist gets too full of himself and starts veering into physical sciences. Unfortunately, some refuse to heed this message and embarass the entire field in the process. This book, thankfully, contains no such gibberish, and most of the authors seem to emphasize their studies over their selves. One of the most intriguing writers in the collection, Heidi J. Figueroa Sarriera, is a psychologist and contributor to The Cyborg Handbook. Another contributor, McKenzie Wark, is the author of A Hacker Manifesto. Most, if not all, of the contributors have earned their place in this collection.

The collection's strength is in its diversity of topic matter, leading readers into subjects they wouldn't normally engage in, and in which readers may discover a new interest. Critical Cybercultural Studies (CCS), a field of which I can only assume this book is meant to be wholly representative, needs to dig into the technological aspects of cyberspace if it ever hopes to understand or produce a useful critique of its culture. For example, simple 'Web 2.0' elements like 'tags' have altered the culture of Slashdot to some degree: people use them to complain about dupes and spelling errors, making complaints all the more redundant in discussions, which then become more on-topic and valuable. This is an example of a a relatively small amount of code having a broad, though maybe subtle, effect on a culture. On the other hand, CCS does focus on the differences between 'real' culture and cyberculture. What's missing is a technological explanation for these differences — a 'theory of cyberspace.'

Many of CCS's contributors come from a background in media studies and not necessarily 'Critical Studies,' as the title implies, in which case many of my complaints are moot. It may be that there is no critical theory of cyberspace; that there isn't much to think about that doesn't fall beneath the banner of media studies. But, as Lessig says of cyberspace, "We are at a stage in our history when we urgently need to make fundamental choices about values, but we should trust no institution of government to make such choices." If CCS wants to become relevant, their thinkers need to move into the center of the real debates."


jkauzlar has no journal entries.

Slashdot Login

Need an Account?

Forgot your password?

Submission Text Formatting Tips

We support a small subset of HTML, namely these tags:

  • b
  • i
  • p
  • br
  • a
  • ol
  • ul
  • li
  • dl
  • dt
  • dd
  • em
  • strong
  • tt
  • blockquote
  • div
  • quote
  • ecode

"ecode" can be used for code snippets, for example:

<ecode>    while(1) { do_something(); } </ecode>