kyleburton
Wrt the typing of Maps and Arrays, what Clojure supports goes way beyond what Java's type system supports: you can specify that the first element of an array has to be of type X, the second is of type Y, the third can be either NULL or Z. For maps, you can specify that a key must have a particular type and must be in the map, with a specific value while other keys may be present (required or not) and you can compose any of the constraints mentioned on the values the keys may take.
This is different from Generics in that Generics constrain to homogeneity for an entire collection.
You could create formal objects in your Java code to express similar constraints, but you're not achieving the same result: a Java object actually has the property (even if it's null) while a map (or an array) with an optional member will only have it if it's present. With Java you'd need many classes to model all the specific combinations. Java's current type system is significantly less expressive and doesn't have the same power. I realize those are subjective. By expressive and power I am referring to whether you can declare an idea in your code or whether you have to write the imperative logic to implement an idea (the former meeting my definition of expression or power).
Thanks for the question.
https://github.com/Prismatic/schema
https://github.com/clojure/core.typed
These are both libraries that you can choose to use. Both Typed Clojure and Schema are more powerful than Java's type system. By powerful I mean you can declare types and constraints that aren't expressible in most type systems (eg: an object can not be NULL, or a Map or Array must have specific keys or type'd values). Schema is run-time (we only leverage it in development and testing), while Typed Clojure is more akin to compile time.
I'd pay $ (5ish) for a couple of other ways to use this:
* a bookmarklet that allowed me to select text on my blog or on one of my github pages and analyze it * emacs integration * a command line tool that worked like ispell/aspell to help analyze things I've already written
Relay Network - http://www.relaynetwork.com/
-------------------------------------------------------
Relay is a simple and secure way for businesses and customers to instantly connect and share private communications.
We are looking for (multiple) full-stack engineers to join our team. We use Clojure (no previous FP experience required, learn it working with the team), Devops (Chef) and practice Agile (weekly sprints and pair-programming).
-------------------------------------------------------
* Full Stack Engineers - http://www.relaynetwork.com/files/Relay_Software_Engineer.pd... * Front-End Developer - http://www.relaynetwork.com/files/Relay_Front_End_Developer....
For More Info, email me at [email protected]
Python, Ruby and Perl all have the same cultural tolerance for blocking code. The Node.js community has a complete lack of tolerance for blocking code.
I work with the JVM every day (Clojure) and wish it was different wrt the common use of non-blocking code, but it's going to be a long road to get there on the JVM.
Kyle
If I have a function that takes a java collection and returns the count, it has no referential transparency because the collection is mutable, not necessarily b/c of how it's operating on its arguments.
Of course this is one of the things I love about Clojure and Rich Hickey's use of immutability as the default behavior (as often as possible) - much [more] of the Clojure I write has referential transparency, hardly any of the Java I wrote did.
Thanks!
Kyle
For the 2nd I was actively recruited to the team. I personally believe that this was because I made a conscious effort in the fall of 2008 to start being much more active in the community at large. I started doing more visibile things on the internet: a blog, putting up a sandbox on github. I also started speaking at local user groups (god bless them for listening to my first talks and my horrible, horrendous presentation skills).
The 3rd (current) is a startup, where I was also actively recruited into, to join at the time the first technologist at the company. They subsequently left about 7wks later for another startup. Taking on the role as head of technology I became responsible. I mean that in all the gravity of what it implies: I chose Clojure and I am responsible for that - as part of such I must ensure that the organization can keep moving forward and has a plan if I am no longer part of it. To do that I've started a local Clojure group, we have meetings at our office and I ensure that the developers working on my team get every single ounce of technical experience I can transfer to them.
By 'recruited into' I mean that not in the sense that either side used a recruiter. I mean I was approached through my network because of the effort I put into building the netowrk and the effort I put into building a personal brand (as slimy as that sounds, it is working).
Actively working at networking has been wonderful. I can't recommend it enough. I was involved in starting a "tech breakfast" meeting that takes place 1x a month. The local groups (esp volunteering to speak), the breakfast sessions, and buying people lunch (an hour of interesting conversation is totally worth the $10, and every time it has come back to me) has gone a long way to building a local network.
Networking will help - you'll have access to more of the places that might be willing to use Clojure, and more places that would be willing to let you choose the stack.
Be happy to share more if you have more questions.
Regards,
Kyle
The second company was with a team that I joined who was specifically looking for Clojure developers. It ended up being 4 developers, only 2 of which really knew any Clojure previously. The other 2 were Ruby devs. We paired over the entire life of the project and it was a very effective way of transferring skill sets - for all involved. We all learned more and more quickly than I've experienced during any other equivalent time on a project.
At my current engagement, I'm the head of tech and was able to choose the technology. I have the permission of the rest of the executive team and given my activity with the local technology community I've had no difficulty finding good developers who are enthusiastic about using Clojure. This may change as we grow, but I know I've still got a pool to pull from.
Choosing a non-mainstream technology is often additional work for whomever is leading the decision in any organization. For me it's been worth it: we've gotten passionate people who are more engaged because we're using something they care about. The fallback is to just go with a more mainstream JVM language (Java) - hasn't been and doesn't seem like it'll be ann issue.
Metrics: From Code to Business Value at Yammer (from CodeConf)
Pulse: Visualize your TDD flow right from Eclipse
A virtual pet that helps you raise your TDD practice.
You're correct, you can set it up for free but you can't maintain it indefinitely for free. I think you only need the $1/mo if you reserve an actual phone number, if you stick w/the sandbox I think it stays as $0.01/min until you deploy for real - Heroku is kinda the same, it's only free if you use minimal resources. That's what I was shooting for: a prototype for effectively free.
Regards,
Kyle