...or why types and the lack of anonymous functions combine to make a language painful, ugly, and annoying.
HN user
rosejn
Apple Corp. sucks as a member of society. As one of the wealthiest and most successful companies on earth they continue to play dirty by abusing the patent system for their advantage. Most of the patents they are "protecting" are describing pretty obvious ideas that any group of good engineers working on this class of devices would bump into, and this behavior does not benefit society in any way. They are clearly protecting a virtual monopoly on tablets by fighting with patents rather than focusing on out innovating the competition. I hope their will one day be real competition in this space.
Great concept. This is kind of similar to an editor we've been talking about for Overtone. How about,
* allow for render plugin functions so values can be rendered with images, rendered canvases, control elements, etc.
* treat the AST as the primary data for each function or form, and then make the source code one of multiple renderings of the data.
- makes paredit type manipulations just operations on the ast
- allow for decorating the ast with additional data, which can be rendered with plugins (for example, heat-up regions of code as a profiler runs)
You're right, and in Overtone we haven't really tried to mirror SCLang at all. The DSP core of scsynth is a great piece of software with many years of testing, debugging, and extension, so it's wonderful that we can leverage this externally by just sending OSC. Of course we want to pull in any good ideas we find from the sc class library or any other music system, but generally we have been working on creating an expressive synthesis language that clearly communicates what is being produced. In SCLang there are many syntactic tricks and shortcuts which allow you to create very terse definitions, but they are often to the detriment of readability. With Clojure's lazy sequences we can easily model many interesting types of generative musical structures, and with easy access to the JVM ecosystem of libraries we can now control our musical processes with external tools or devices, visualize them with nice graphics, auralize external phenomena (e.g. people have hooked into automated build/test systems), etc., far easier than in SClang.
Actually, one of the initial motivations for creating Overtone was to experiment with automating "feel". I was getting into electronic music, and it seemed to me that many of the painful aspects of EQing and adjusting instruments and timing so they don't interfere with each other could be automated. We haven't really gotten to this point yet, but I tend to believe that this is yet another area in life where people will argue forever that software will never compete with humans, up until the point where many of the top tracks are being generated by software. It also opens the door to all kinds of interesting things, like live composition of multiple instruments, or meta-composing, where you modify parameters along axis like tension, emotion, drive, and vibe, rather than figuring out how to modulate to the next key. For now I agree with you though, most of what I create in Overtone still has a robotic feel. Hopefully that won't be the case for long. We'd love to have more musicians joining the discussion though, so if you have ideas join the mailing list.
It's not necessarily that SC is complicated, but it is a custom language that has to be learned to use a single application. Also, many musical ideas and projects extend beyond what sclang can do, or you want to use external libs, etc. By using Clojure you get all of the power of sclang and more, because you also get lisp macros, while also getting access to the whole java ecosystem of libs. We've got a gui library for Overtone in the works, and it will be a good example of this in action.
He has to turn comments off on Daring Fireball or else he would be called out as an Apple fanboy/lobbyist after posts like this. Plenty of companies are willing to compete by creating better products rather than taking their competition to court. The iPhone is getting pushed aside by Android and they are playing dirty to stop it. Unless you can point to some novel technology that Apple should control because it was truly new and different, then Android should be able to compete. Just calling it "competitive" rather than offense and defense is a political tactic that tries to make Google look just as bad as the other guys, or conversely make Apple look just as good as the others. This is not a valid comparison. Combative patent lawsuits are not a requirement for successful businesses. There is a major difference between companies that choose to be litigious to stifle competition rather than focus on creating better products at a cheaper price. Buying a patent portfolio in order to stifle innovation rather than to enable you to create new or better products goes against the purpose of the patent system as it is described in the constitution:
"To promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries."
They should have pooled these billions to create a massive patent reform campaign. It probably would have been cheaper and more effective in the long run.
They did, and using the manual improved performance considerably.
You make good points, but there are a few factors you have to think about. First, the built-in AI has been designed by people with great knowledge of the game and its strategy. The fact that a totally generic AI system with zero knowledge of the game can learn on the fly and beat the hand-tuned AI is pretty impressive.
They were training online during gameplay, so each round started fresh with an untrained system.
I was about to fix it, but using jekyll that breaks the link...
yeah, I screwed up on the date...
I very much agree with the sentiment. LaTeX works well and it produces the best technical documents of anything I've seen, but the world could really use a modernized replacement. The syntax is a pain in the ass, the error messages are horrible, and it takes documentation to figure out how to do anything new. If it could be made more user friendly I think something like Tex would be used much more widely as well. (It works with version control, unlike word docs which are hell to manage in group collaboration.)
Seriously, why does anyone care what this Apple fanboy thinks?
Microcosm: E. coli and the New Science of Life - Carl Zimmer
* This was one of the best science books I've ever read. Zimmer uses e-coli as the primary actor a tour of genomics and history of the big breakthroughs in micro-biology. I'm a developer, but this book was a page turner that really opened my eyes to to how cells operate, perform logic-like functions, and communicate.
The Rational Optimist: How Prosperity Evolves - Matt Ridley
* Ridley's basic thesis is that specialization and trade are the primary means of the betterment of the human condition, and he has a lot of thought provoking ways of looking at the world that will forever change the way I think about technology and business. A wide ranging and enjoyable read
Routing traffic to wikileaks would have been a perfect demonstration of this new system. Instead they decided to show how much they respect freedom of speech.
And tptacek, yes we should speak about wikileaks when discussing Amazon, from now on. This isn't a fanboy site, this is a place to discuss the real ramifications of a company's actions.
I was pretty happy with my cybook before leaving it on an airplane. Don't go Kindle, unless you want to support them after dropping WikiLeaks, thus taking the freedom of the press and flushing it down the toilet.
Go for Clojure. It's a modernized common-lisp with access to the wealth of Java libraries. There are resources online, and you should be able to get up and running in a matter of minutes.
We had a blind classmate all through my undergraduate program in CS, and he was a very capable hacker. He lived inside emacs using emacspeak with a high speed synthesized reader voice, and you could often hear his terminal talking to him in the front row if you listened carefully during class.
Blind people develop good memories because they are constantly building detailed mental models of spaces they need to navigate, and I think this might give them a leg up programming because they are used to working with mental models rather than referring to maps, diagrams and documentation. Their are obvious drawbacks, but I think programming is probably a pretty good choice of profession for blind people.
I found it interesting that in the post he criticizes previous discussion of lock based concurrency, while not providing anything close to the level of analysis that he apparently requires of his fellow disputant.
'“Locks are not modular and do not compose, and the association between locks and data is established mostly by convention.” Again, no data, no qualifiers, no study, no rationale, no evidence of experience trying to develop such systems...'
It is well known that lock based concurrent libraries do not compose, and anyone writing articles about concurrency should not require an explanation of this central issue in the discussion[1]. Of course with millions of hours of developer investment in a centrally managed codebase like Solaris it is possible to achieve incredible parallelism with locks, but that isn't practical for the vast majority of modern software, which continues to use ever more external libraries.
Clojure's STM paired with immutable data structures are an especially well suited combination that are unlike most of the research systems presented in this area. Of course there are additional resources that will have to be managed, such as access to I/O, but I would argue that access to I/O is by far the easier problem to deal with in comparison to concurrent access to memory - primarily because I/O devices are typically accessed serially so you can just queue up requests.
[1]: Here's one explanation with a code example of why locks don't compose: http://www.drdobbs.com/article/printableArticle.jhtml;jsessi...
I've had more eye opening experiences programming in Clojure than in any language I learned before it. (C, C++, Java, Python, Ruby, common lisp) It provides a fairly unique set of tools that really let you boil programs down to their essence: persistent data structures, software transactional memory, and an amazing standard library for operating on maps, sets, and sequences. Instant access to Java libraries means it isn't just about academic beauty.
To each their own, but I highly suggest you take a weekend and experiment. You won't regret it.
I am incredibly happy that this will never happen in software development. Elitist, protectionist mechanisms like this would dramatically limit the talent pool, slow down innovation, and restrict thinking to a set of norms agreed upon by a conservative organization intending to maintain the status quo. Programming is more of a meritocracy than in many other fields, and I think we should be proud of this. If people want to earn more then they should practice and learn more. Certifications are codifying yesterdays knowledge. How valuable do you think that is to most organizations, as opposed to keeping up with the latest research or the latest developments in open source? And I don't mean reading the headlines, I mean understanding data structures, algorithms, and architectures. Certificates do things like quiz people on how well they know an API. This is absurd, wasteful, and degrading. These training programs attempt to generate assembly line programmers, but it's like trying to learn history by memorizing dates of past events.
I'm interested in learning more about bio-tech research, genetics and synthetic biology. I hope to finish my doctorate in CS soon, and after that I'm going to take some time off to travel and read. Any advice for a computer geek who wants to learn how to program biology for the good of mankind? What do you, or others who work in the industry, think would be the best way for me to bootstrap myself in the area?
I'm using Clojure for my PhD thesis project, implementing a distributed computing framework for building P2P applications. I've also been creating an audio synthesis and musical live-coding system, available here:
Clojure has without a doubt been the most eye opening language I've learned in the last 10 years. I highly recommend giving it a try. It has powerful yet incredibly simple to use constructs for dealing with state in a multi-core world, and I think it far surpasses everything else out there today for parallel programming. The centerpiece being a built-in software transactional memory system that enables composable, deadlock free, multi-threaded coordination.
Beyond solid support for concurrency, the standard library provides an elegant set of programming tools that will make you realize how even expressive languages like python and ruby make you jump through lots of unnecessary hoops. In Clojure you represent everything with basic maps, sets and sequences, and the standard library has extensive tools for manipulating these things. (By the way, your code is also available for manipulation with these same tools.)
Macros let you peel away every last bit of boiler plate, and what you realize is that in the end all of programming is just arithmetic, iteration, branching, and assignment. Everything else is just getting in the way of your core logic. I think Clojure lets you get to the center of your problem with the least overhead possible.
If you don't know what's fun about coding, then you should just find something else to do that you do enjoy. Everyone I know who really enjoys hacking has been into it since day one, including myself. It's the general joy of wrapping your head around a problem, breaking it into bite size pieces, and then tackling them and getting psyched as you knock out working code. Initially basic logic constructs, iteration and recursion were enough to get psyched about, but later it is more about about the problems you are solving then the programming.
If you are younger than 40 and in good health you should focus on a varied diet full of fresh fruits and vegetables rather than supplements. They will provide the vitamins and minerals you need while also providing lots of anti-oxidants and micro-nutrients which help fight cancer, and help to make better use of the standard vitamins. If you search around you will find numerous reports of daily use of supplements causing higher instances of cancer. It probably couldn't hurt to take a multi-vitamin sporadically just to make sure you get everything, but the focus should be on your diet and exercise. In terms of omegas, start throwing flax-see oil or ground seeds on your cereal in the morning. It's the best (and possibly only) non-animal source for the stuff, and it also provides you with a lot of fiber.
I don't think people actually looked at this before voting it up. Vimclojure and swank-clojure and probably every other Clojure IDE plugin has a syntax highlighted REPL. It would have been cool if this was for the terminal though...
This sounds like a humanist reaction to the increasing amounts of research and evidence that intelligence does in fact have a large genetic component. Nobody says environment and hard work aren't vital factors for success, but it's already understood that intelligence doesn't equal success anyways. Still, that doesn't mean intelligence isn't by and large an innate quality. Stephen Pinker's The Blank Slate goes into this in detail, but his point was virtually the opposite of this author. He was instead making the case that much more about a person than most people expect is a direct result of their genotype, and that it's best if we face up to reality and talk about these things in the open rather than pretending that everyone is equal. As for success, it seems there is wide agreement that insane amounts of practice and perseverance are are sure fire recipe. I wonder how much the ability to persevere in the face of difficulty is affected by a persons genes?
Tryout http://kgnu.org if you want to expand your horizons. They have a live stream and a back catalog from the last two weeks of shows. It's a non-profit station in Boulder, Co, and they get hundreds of new CDs a month representing every kind of international music and out-there genre you could imagine. Jazz and beyond, musica mundi, jam sandwich, reggae blood-lines, old-grass/new-grass, and african roots are some of my favorites. The morning and afternoon sound alternatives vary a lot, but once you find DJs you like you can track them. You won't find any top 40 or pop, but you wouldn't have asked this question if that's what you wanted.
Practical Common Lisp, or even better, Programming Clojure.
If an intro to Clojure and/or musical programming (live-coding) sounds interesting to people I'd be happy to present and demo an audio synthesis system I've been working on. (http://github.com/rosejn/overtone) It uses an interesting DSL for reading and writing binary files, does some networking, and lets you define DSP graphs for synthesizing audio.