Ask HN: Do you need to know Algorithms and Data Structures in your daily job? - <AUTHOR> <comment><USER2> For the special algorithms and data structures in the college texts, do I need to know that material in my "daily job" writing software? A little!

So far mostly the material from those books has been available to me in the code written by others, some of the famous open source code and in Microsoft's .NET.

There is a case where I exploited the heap data structure (that is, as in heap sort) to create an efficient _priority queue_ , and I didn't find code for that ready to use by others.

There is a case where I might take k-D trees (finite dimensional trees for essentially a multi-dimensional version of binary search) and modify it to get an algorithm I might need, but so far I haven't.

Generally we have to expect that what was in D. Knuth's TACP in the 1960s and commonly useful now has been put into libraries for use by others.

This is a common situation: For the simplex algorithm for optimization, rarely would it be advisable to try to code up a version yourself. Instead get a copy of C-PLEX, the IBM OSL (Optimization Subroutine Library) or some other respected code. Then knowing how simplex works would be helpful, but not because want to code the algorithm from scratch yourself.

The core of my work is some new work in algorithms, but those algorithms would not be good candidates for a library for general use. So, yes, I work with _algorithms_ occasionally but mostly don't code the ones in the college texts.

</comment><comment><USER3> It really depends on what you mean by algorithms/data structures. If you mean knowing how to implement "these specific algorithms" in "this much time", probably not. Will you need to know the exact time complexity of methods for every data structure? I would hope not.

However, is it useful to know that such and such data structure is more efficient than that other structure over there for what I want to do with it? Yes. Is it important to be able to think in terms of other algorithms you've learned that might make what you're working on easier and more efficient? Absolutely.

I have never once implemented any of the algorithms or data structures that we learned about in my intro to algorithms/data structures class, other than for the class itself. But learning how those algorithms and data structures work, even if I can't remember the specifics of all of them at the top of my head, has has helped me to be a much more efficient programmer because they gave me the tools to think as such.

So, do you need to know specifics about exactly how every algorithm or data structure works, probably not unless that specifically is your job. But is it useful to have a basic understanding? Absolutely.

</comment><comment><USER4> Years ago I was doing summer temp work at an office. Myself and a small group of other temps/interns were given several tall stacks of records to alphabetize by title. I shudder to think how long that would have taken if I hadn't convinced everyone to do a meat-space parallel merge sort.

</comment><comment><USER5> If you daily job involves programming or writing code, then yes. Absolutely. What really is a data structure ? Wikipedia [1] defines it as "a data structure is a particular way of storing and organizing data in a computer so that it can be used efficiently".

Storing and organizing data. There you go. If you write code, you are _always_ storing/organizing/manipulating data aren't you. whether it is front end, back end whatever. Everything is data end of the day.

Now I am of course not saying that you must know linked list or stacks or queques etc. But you must know data structures in general because that is a core foundation. [1] [http://en.wikipedia.org/wiki/Data_structure](http://en.wikipedia.org/wiki/Data_structure)

</comment><comment><USER6> Do like strings, lists, dictionaries, stacks, trees, and priority queues count as data structures? In that case, all the time.

</comment><comment><USER7> I think they're more the type of thing people seek when naive, very readable solutions don't work, so maybe weekly. But when you find the right algorithm for what was previously a tough challenge, it's fun!

</comment><comment><USER8> I'm not even working full time as a programmer, and I find them somewhat useful in thinking about other kinds of problems.

</comment><comment><USER9> Absolutely.</comment>


Ask HN: What's so bad about 3D graphs? - <AUTHOR> With the availability of different 3D technologies like OpenGL, WebGL, CSS-3D etc., one would think that 3-dimensional graphs would be more popular visualisation technique today. But it is extremely rare to come across any, except for certain special visualisations.
I would like to know why you think that is:
1. Is it due to the unavailability of popular 3D-graphing libraries/products?
2. Is it due to the inconvenience of interacting with 3D-graphs, like awkward to read the labels or zooming in etc.?
3. Is there something inherently better in 2D graphs?
4. Any other reason?
Would love to get an opinion on this (or any pointers to relevant resources). <comment><USER2> There are some good resources for designing two dimensional presentation of data, e.g. Tufte. That quality of resource is rare when it comes to designing 3d presentations, in part because the field is new and perhaps because presenting 3d data on a screen or print collapses into a series of 2d presentations plus designing a UX for an interface.

Presenting in two dimensions draws on centuries of knowledge and practice. That's probably where to start.

Good luck.

</comment><comment><USER3> If the data is 3d, no objection. If the data is 2d then a 3d plot is redundant, usually ugly and prone to mislead (see "How to lie with statistics" and anything by Tufte).

<comment><AUTHOR> Could you explain "if the data is 3D"? Isn't it about how a presenter carves out the data for the presentation?

To explain my pov, I see that even if a multi-dimensional dataset is available, people still prefer to present a 2-Dimensional analysis of it.

And this is what I don't get. Is it due to the the lack of tooling or is it the fact that 2D graphs are just easier to grasp?

<comment><USER3> I mean: the independent variable is 2d and the dependent is 1d, like f(x, y), that's 3d data. By 2d I mean a pie-chart, which you _can_ display in 3d (by making a "thick pie"), but it is superfluous and detracts from the data.

I think 2d graphs are easier to graphs _are_ easier to grasp, and easier to make. Not sure tooling is the main issue, there's plenty of tools around to make 3d plots.

</comment></comment></comment><comment><USER4> Perspective issues: pie charts are a problem. 3D elements are more of a problem.

I guess.

<comment><AUTHOR> Could you elaborate on "3D elements are more of a problem". Do you have an example in mind, where you see a problem?

For example: The NYTimes ran this article (linked below) with a 3D chart, built using WebGL. I wonder why such visualisations are not more common?

Article: [http://www.nytimes.com/interactive/2015/03/19/upshot/3d-yiel...](http://www.nytimes.com/interactive/2015/03/19/upshot/3d-yield- curve-economic-growth.html)</comment></comment>


Little Big Planet for the PS3 will be delayed after Qu'ran verses found in music - <AUTHOR> http://www.thestandard.com/news/2008/10/17/briefly-scee-confirms-little-big-planet-delayed

<comment><USER2> Watch for levels full of Qu'ranic verses and a Prophet Muhammad Sackboy put out by angry fanboys.

Seriously though, do musical renditions of Qu'ranic verses go against Islam in the same way as images of Muhammad?

<comment><USER3> Like the 'no images of Mo' rule it's all cultural bull. Go into the vaults of Egypt's museums and you will see Arab paintings of Mohammed from the 12th century that were cherished like the Mona Lisa is now.

I think you'll find many many Muslims will be shaking their heads thinking when are these idiot's just going to shut up AND when are the non Muslims just going to start ignoring them.

We offer these cultural extremists the oxygen of publicity and starve the normals Muslims.

<comment><USER4> True.

There's an old newspaper rule: if it bleeds, it leads.

A small number of people willing to do violence can get and hold much greater press and political power than a large number of people simply trying to get along. Sucks, huh.

</comment></comment></comment><comment><USER5> The first time South Park aired an animated image of the prophet Muhammad no one seemed to notice.

And if I recall correctly the Danish cartoons had been printed quite a while before someone took notice there.

Would anyone have noticed lyrics in the background music of a PS3 game?

How do you even effectively protest that?</comment>


Rack 1.0 released - <AUTHOR> http://groups.google.com/group/rack-devel/browse_thread/thread/a934eba995f3d23

<comment><USER2> Rack is probably the most important project for the Ruby world since Rails. Allowing any ruby web framework to work seamlessly with each other should help propel the newly competing web framework as first class citizens, to be used easily alongside Rails .

Soon we'll see Routing, Authentication, and Debugging all using Rack middleware instead of framework specific plugins.

<comment><USER3> Why were you downmodded? This is exactly what's going to happen, and it's going to be awesome. For details, check out Jon Crosby's talk on rack middleware: [http://mwrc2009.confreaks.com/13-mar-2009-11-05-in-a- world-o...](http://mwrc2009.confreaks.com/13-mar-2009-11-05-in-a-world-of- middleware-who-needs-monolithic-applications-jon-crosby.html)

</comment></comment><comment><USER4> Congrats to the core team and all of the contributors!

For those who haven't checked it out, the spec is surprisingly short (<http://rack.rubyforge.org/doc/files/SPEC.html>).

<comment><USER5> <http://rack.rubyforge.org/doc/SPEC.html> is the current specification. The new documentation interface (the Darkfish template) uses different paths.</comment></comment>


Hopper's Roppers: The Slowest Way to Learn Cyber Security - <AUTHOR> https://hoppersroppers.github.io/course.html <comment><USER2> Hey creator here, this didn't get any traction so it's pretty buried right now, but for anyone who finds this in the future, our course is a free, self- paced curriculum that focuses on foundational knowledge and preparing learners to teach themselves anything that comes after. It has about 400+ hours of work in it and while designed for beginners with no assumed knowledge, has a lot to offer anybody no matter how long they've been around computers.</comment>


Epic Games unveils $1.78B funding round at $17.3B valuation - <AUTHOR> https://venturebeat.com/2020/08/06/epic-games-unveils-1-78-billion-funding-round-at-17-3-billion-valuation/ <comment><USER2> How is Epic able to attract great talent when they're headquartered in a small town in the middle of North Carolina? It's a beautiful area with plenty of activities to enjoy outside of work but it seems pretty isolated from the rest of the tech world even for the East Coast.</comment>


Venezuela's Supreme Court Consolidates President Nicolás Maduro's Power - <AUTHOR> http://www.nytimes.com/2016/10/13/world/americas/venezuela-nicolas-maduro.html <comment><USER2> With the Supreme Court in the pocket of the dictatorship, there's very little hope for Venezuela.

The totalitarian ascent to power was applauded by the armchair revolutionaries of the left wing intelligentsia in South America and elsewhere.

There is a time when you have to stop being naive and believing this is "good intentions gone bad". What's happening in Venezuela and almost happened in Argentina and Brazil is exactly what the totalitarians want: to seize power and sustain the political elite.

All, of course, in the name of the masses.

<comment><USER3> > _The totalitarian ascent to power was applauded by the armchair > revolutionaries of the left wing intelligentsia in South America and > elsewhere._

Don't forget former US President Jimmy Carter, who rubber stamped Chavez's rigged[1] elections and even wrote an obituary gushing with praise and admiration for the evil tyrant.

[1] There's better ways to rig an election than stuffing ballot boxes. That's so primitive and risky. The modern way to rig an election is to control the media, force or entice them to say nothing but positive things about you, while burying your opponents with false or misleading claims.

</comment></comment><comment><USER4> The problem here is that the opposition is still trying to go through the proper channels specified by the constitution.

They don't realize that the incumbent party already controls all the rules and the processes. It's like when Lucy holds the football for Charlie Brown. The opposition still doesn't realize that when the time comes, Maduro and his cronies will simply yank the ball away again.

There is very little chance for a constitutional, non-violent change in power.

<comment><USER5> I agree. I have family still living there so watching out for when it is going to start. When people start dying because of lack of food and medication, I can't imagine a transition happening without spilled blood.

Also, the army and supreme court are still supporting him so what "democratic" means can you really resort to?

<comment><USER6> Would you happen to know if the tribes in southern Venezuela are pretty much unaffected? Some of them seem to be living as people have been living for thousands of years, rather disconnected from the modern world.

<comment><USER4> I've read this book : [https://www.amazon.com/Noble-Savages-Dangerous- Yanomamo-Anth...](https://www.amazon.com/Noble-Savages-Dangerous-Yanomamo- Anthropologists-ebook/dp/B006VJN2FE/ref=sr_1_4?s=digital- text&ie=UTF8&qid=1477016082&sr=1-4&keywords=Yanomamo)

It seems as though even those tribes have been prizing western technology, like fishhooks, shotguns, and machetes. Those are valuable trade goods.

Maybe they've sort of forgotten in the past few generations how to get by without those tools? Living in a jungle is hard as hell, and a machete and a shotgun sure do make a big difference.</comment></comment></comment></comment>


Ask HN: Why don't we introduce static types in EcmaScript? - <AUTHOR> It'll make very little sense to use TypeScript / other projects like Flow if this was the case and this would make JavaScript a LOT faster. <comment><USER2> An alternate way of asking the same question- why don't we have typescript runtime in browser.

The answer is political. Microsoft can't create it in edge because they would be blamed for trying to fragment the web. Everybody else has no reason to.

<comment><USER3> Why would Microsoft have more reason than Google, Mozilla, or Apple?</comment></comment>


C++ is maybe low level but not over complicated - <AUTHOR> http://cppdepend.com/blog/?p=766 <comment><USER2> Isn't it though? From an outsider's perspective, it looks like a mess.</comment>


Zucc-slider: Interactive Z U C C at your service - <AUTHOR> https://kiding.net/zucc-slider <comment><USER2> Slider doesn't work in Chrome for Android (version 65)

<comment><AUTHOR> Sorry, I've got no Android device to debug on... Feel free to make a pull request at [https://github.com/kiding/zucc- slider](https://github.com/kiding/zucc-slider)</comment></comment>


New, Higher-Resolution Image of Boston Marathon Suspect - <AUTHOR> http://thelede.blogs.nytimes.com/2013/04/18/new-higher-resolution-image-of-boston-marathon-suspect-emerges/?hp <comment><USER2> Saw this on reddit ([http://www.reddit.com/r/findbostonbombers/comments/1cn4wh/ne...](http://www.reddit.com/r/findbostonbombers/comments/1cn4wh/new_picture_of_suspect_2_white_hat/)) and posted a cropped/comparison version of it to my twitter...and immediately was told by people that it must be a fake. I guess people today are overly skeptical, but photoshop fakery of this quality is not trivial, especially just a couple hours after the official photos were released. The JPEG artifacting on the suspect is perfectly consistent with every other object on the same plane. More importantly, this is a new angle of the suspect's face not yet published, which means the faker would've had to find someone who looked like the suspect with the same clothes, or created a convincing composite even before placing it in the scene.

And perhaps most importantly...why? If it was a hoax it is surely one of the most boring hoaxes of all time, showing the suspect vaguely with no new interesting details except that he has no bag in the photo.

Edit: I just saw this Tweet from a digital manager at the New York Times. He's since admitted his mistake but this should be preserved for posterity as an example of how NOT to do digital forensics...it's as if he's never zoomed into a JPG before in his entire life [https://mobile.twitter.com/jeremyzilar/status/32504129646716...](https://mobile.twitter.com/jeremyzilar/status/325041296467169282)

<comment><USER3> He also posted the photo to his Facebook ([https://www.facebook.com/photo.php?fbid=10200411483522036...](https://www.facebook.com/photo.php?fbid=10200411483522036&set=pb.1604384014.-2207520000.1366347205.&type=3&theater)) the day of the bombing, before the image of this suspect was released. It's definitely not a fake.

</comment></comment><comment><USER4> I've interpolated the image linked in the article (suspect-number-2.JPG) to twice its size, if that helps at all (only in grayscale for now):

[http://www.eliteraspberries.com/images/suspect- number-2-749....](http://www.eliteraspberries.com/images/suspect- number-2-749.png) (17MB)

<comment> iso8859-1 Why not just do the interpolation client-side?

<comment><USER5> What would be the reason? To hog our browser?

Besides, server side he has access to powerful smart resizing programs and algorithms. Client size, not so much.

<comment> iso8859-1 I wasn't considering "smart" interpolation methods, I was assuming the best available interpolation was already implemented in Chrome. I think it would load faster with client-side interpolation actually, 17 MB takes a long time on most connections.

But I don't see why client-side can't do "powerful resizing". Not since <canvas> appeared, anyway.

<comment><USER5> > _I think it would load faster with client-side interpolation actually, 17 MB > takes a long time on most connections._

You'd still have to move the 5-6 MB original, and then it would hog a lot of people's browsers to work on the image in the canvas (depending on client CPU/memory).

> _But I don't see why client-side can't do "powerful resizing". Not since > <canvas> appeared, anyway._

Who said it cannot do? I said the options aren't available. The guy did a simple resize. Should he also spend hours coding smart interpolation on javascript instead of just putting the image up?

For most connections, a 17MB download is eaten for breakfast, anyway.

</comment></comment></comment></comment></comment><comment><USER6> It's looking highly likely this guy in the white hat could be the culprit. He was seen with a backpack earlier and in the newer high resolution image he does not appear to have his backpack any more. There could be a perfectly legitimate explanation for this: in the heat of the moment, his instinct was to run and leave his bag behind. Much like your instinct in a bad building or house fire is to run and save yourself. But then that would mean his bag would have been left behind and someone would have found it or reported it as being lost/authorities discovered it.

It's not looking good for whoever this guy is and if he's innocent, it would be in his best interests now we have a high resolution photo to turn himself in before a member of the public or worse members of the public find this guy and potentially harm an innocent person out of irrational anger. Another incriminating fact is Jeff Bauman the guy who lost both legs in the blast woke up heavily drugged in the hospital and said he had looked into the eyes of a bomber (which is no doubt what helped the feds narrow down the search). Lets keep level-headed about this and assist the authorities the best we can and let them do the investigating. If we all start jumping to conclusions and taking the law into our own hands we could do more harm than good. They'll find the culprit, it's only a matter of time.

<comment><USER7> ... Well that and after thousands of hours of study by highly skilled experts combing thousands of sources he was one of two people deemed suspects. For all we know they have video of him dropping the bag, they only released a small portion of what they had to help gather tips from the public.

<comment><USER8> In the press conference earlier today, the chief investigator said they have footage of this suspect (suspect #2) dropping a bag near the bomb site and leaving it.

</comment></comment></comment><comment> w-ll Actual High Res: [http://graphics8.nytimes.com/images/blogs/thelede/posts/susp...](http://graphics8.nytimes.com/images/blogs/thelede/posts/suspect- number-2.JPG)

Bottom left corner.

Edit: Higher Res

<comment><USER9> The image linked at the bottom of the article has a higher resolution version of the photo that what you linked.

<comment><USER7> Along with full EXIF information (such as taken at Apr 15, 2013 2:50:15 PM).

</comment></comment></comment><comment><USER10> That's good enough for someone who knows him.

<comment><USER11> Someone on Reddit has already recognized the two men, they stayed at a motel where the Redditor works

</comment></comment><comment><USER12> Would this enhancement technique work since there is movement in the photograph and metadata may be available?:

[http://robertgawron.blogspot.com/2011/01/super-resolution- al...](http://robertgawron.blogspot.com/2011/01/super-resolution-algorithm- implemented.html) More details on it here: <https://github.com/RobertGawron/supper-resolution/wiki>

<comment><USER13> This technique needs several input images with either the camera or the subject having moved in a known way.

</comment></comment><comment><USER12> The photo puts the suspect running down Fairfield street from Boylston Street running away from the second explosion scene: [http://www.nytimes.com/interactive/2013/04/15/us/site-of- the...](http://www.nytimes.com/interactive/2013/04/15/us/site-of-the-boston- marathon-explosion.html)

</comment><comment><USER14> Why did this guy wear a distinct-looking hat backwards? It's really easy to pick him out of a crowd. Any witness will say, "Guy with backward white hat". Seems obviously stupid. Either they're innocent or they had a foolproof escape plan.

<comment><USER2> Why do you think criminals are masterminds? The perpetrator of the truck bombing of the World Trade Center -- a plot far more complicated and would have been more destructive than 9/11 had they parked the truck differently -- was captured when he attempted to get the deposit back for the truck used in the bombing: [http://gothamist.com/2013/02/26/today_is_the_20th_anniversar...](http://gothamist.com/2013/02/26/today_is_the_20th_anniversary_of_19.php#photo-1)

Just because someone's willing to be a indiscrimate murderer doesn't mean that they're geniuses or well put-together

</comment></comment><comment><USER15> Tech-related question:

How far are we from having sufficient facial recognition technology that we could clip a photo like this, drop it into Facebook image search (or whatever), and the person would come up? Is that feasible with today's technology?

<comment><USER16> This is possible now. You need a database of faces. You could store and search them without compression in like clouds. Or you can compress them. 7 billion isn't that many pictures.

One problem is the databases of tagged faces typically have passport style photos and not sides. It would be easier with 3d type data of faces, like when we start using depth cameras at the DMV too. Or, we will develop sufficient methodology to figure it out well enough from the existing photos... depth from a single image.

It sounds sort of disturbing to me. Google reverse image search for faces... that team has done it or could do it easily. But privacy.

<comment><USER17> What makes you think we need to check 7 billion pictures?

You have lots of other information, so you don't need to check every human on the planet.

<comment><USER18> Post facto for a specific incident, you are right, but you still need to assemble that database from somewhere. I got the impression he is talking about the general case, though.

<comment><USER17> OK. I'd go with more than one picture per user then, though.

</comment></comment></comment></comment></comment><comment><USER19> [http://news.yahoo.com/teen-am-not-boston-marathon- bomber-175...](http://news.yahoo.com/teen-am-not-boston-marathon- bomber-175755674--abc-news-topstories.html)

<comment><USER19> P.S. It's not him.

</comment></comment><comment><USER20> I find it very disturbing that pictures of suspects are being spread around. What if he turns out to be innocent?

</comment><comment><USER21> White hat on the left.

<comment><USER22> Like the where's waldo of "high res suspect photos"...

</comment></comment><comment><USER23> isn't it covered enough by mainstream news?

<comment><USER15> Not nearly enough! By reposting, we increase the chance of the case being solved using our expert skills.

HN needn't fear, though. Reddit's on it.

</comment></comment><comment><USER24> Can anybody determine if he is still wearing his backpack?

<comment><USER25> I don't think he is.

Ref: [http://graphics8.nytimes.com/images/blogs/thelede/posts/susp...](http://graphics8.nytimes.com/images/blogs/thelede/posts/suspect- number-2.JPG)</comment></comment>


Ask HN: How would you reform online education? - <AUTHOR> <comment><AUTHOR> My thoughts are to reform online education by teaching subject matter that is more relative to life, business and self. Such as Emotional behaviour, Financial management, Relationship building, etc.</comment>


Ask HN: A Rust Book - <AUTHOR> It's that time of year where I do something to stretch myself. It's been long enough since I've written a book that I've almost forgotten how much I hated it.
I'm thinking of a writing a Rust book in 3-ish sections:
  - Get Started + a few tutorials
  - A light-weight referenc-ey take on the language, much like the old K&R C book (which I thought was truly excellent) with maybe a few more definitional or explanatory asides like one would see in the Qt documentation.
  - A large project
Here's where the question part comes in. The project I do for myself usually have to do with physical simulations, rendering, agent-based simulations (economics, oil market supply-and-demand lumpiness, markets) or something like a small-worlds analysis of metabolic pathways in a liver cell. Or something.
I'm not really a web-/mobile- CRUD app guy, and something with numerics like a singular value decomposition (SVD) calculation is more my speed.
And Rust is pretty cool for this stuff because it's pretty speedy, typed and safe.
But as I'm a weird guy, coming up with something that might be of general interest "to the people" is stumping me a bit.
Which is where y'all come in.
Q1: What kind of (maybe computationally intensive) type of project would a larger population of people than me find of general interest?
Q2: Most of my prior efforts would be published by Springer Verlag or Morgan Kauffman and the like. Should this be an O'Reilly type thing? A gitbook type thing? Both? Neither? Something else?
Thanks! <comment><USER2> I would say building a simple HTTPd server would be something a lot of people could get behind.

Naturally it wouldn't follow the entire reference and specification but just getting it off the ground handling gets/posts in a psuedo standard conforming way would be a lot.

Also this would cover a lot of the basics of OS interaction, multi-threading, etc.

That's my 2cents. I would love to see more rust books come out. I'll happily buy them. I use the language on and off (primarily jumping between C, Java and Rust (former 2 for work)). Rust's high level programming is very nice and while Java does support _some_ of the things rust does, its not as clean as Rust's syntax.

<comment><AUTHOR> Really? Even if you go back to the old NCSA httpd, your looking at at something less than 200 lines.

Do you think it should be an entire Apache-type get-up, or just briefly as one of the examples in Section #1?

I _was_ thinking of going Qt binding in Rust, and a book about that, but ... it doesn't really do anything other than say "Here's how you do C++ interfaces in Rust".

I'll think about the broader issue which you point to -- a good-ish service on a good-ish service bus. Maybe like you would see with Scala on a ZeroQ thing, do you think?

</comment></comment><comment><USER3> Make it funny:

[http://learnyouahaskell.com/](http://learnyouahaskell.com/)

[http://learnyousomeerlang.com/](http://learnyousomeerlang.com/)

[http://learnyouanagda.liamoc.net/](http://learnyouanagda.liamoc.net/)

[http://landoflisp.com/](http://landoflisp.com/)

[http://realmofracket.com/about.html](http://realmofracket.com/about.html)

don't skimp on the cool simulation stuff!

<comment><AUTHOR> Hmmm. I do like the "Learn X the Hard Way" by Zed stuff. And I do like the in- page edit-compile-respond of the Rust-by-example book.

That said: I'm not really a funny guy like the Perl people or Randall Munroe. Do you think a co-author would help with a more general audience?

<comment><USER3> funny is what you make it. absurd, depressing, uplifting, idiotic.

I consider this the best comedy on the planet: [http://www.imdb.com/title/tt2396224/](http://www.imdb.com/title/tt2396224/)

I also like the stuff by this guy brad neely: [https://www.youtube.com/watch?v=_WCiBPjckTg](https://www.youtube.com/watch?v=_WCiBPjckTg)

don't let other people tell you what's funny or you'll be watching carlos mencia and everybody loves raymond.</comment></comment></comment>


Online Education: Supplementing Java School - <AUTHOR> http://blog.joshuacol.es/java-school-try-mit

<comment><USER2> it should read javaSchool.

<comment><AUTHOR> At first I thought you were criticizing the syntax of Java, but I just realized you were talking about how it is written in Joel's post. Your right that I didn't copy his spelling. He went with JavaSchool, not Java School. I'll edit that when I get some free time.

<comment><USER2> I was actually just making fun of camel case convention in Java. Your title was fine.

I should have wrapped it all in <snark> tags. :)</comment></comment></comment>


NOAA View Data Exploration Tool - <AUTHOR> http://www.nnvl.noaa.gov/view/#TRUE

<comment><USER2> Wow! That's an amazing set of data! But as I watched the introductory video, a phrase caught my ear: "you can display this on NOAA Science on a Sphere or other spherical displays". Whaaaa? Spherical displays? And that was a throwaway phrase, like everyone has them. Here's what she was talking about, probably worthy of its own HN post: [http://sos.noaa.gov/What_is_SOS/index.html](http://sos.noaa.gov/What_is_SOS/index.html)

<comment><USER3> I'd love to make a DIY spherical globe display, even if it were quite limited compared to the official SOS model. I imagine setting up the projection is the most difficult aspect... anyone have resources on the matter?

<comment><USER4> Setting up the projection is the most difficult part. Also one a lot of people have worked on, PROJ4 [[http://trac.osgeo.org/proj/](http://trac.osgeo.org/proj/)]

Were I to grab a projector and a hemisphere screen, I'd probably just reproject to azimuthal (or maybe even conformal), point the projector at the screen, and hope people don't pay too much attention to the very edge.

</comment></comment></comment><comment><USER5> I am guessing they are under a load or something currently?

I can't get this to work (Chrome and Firefox)... I get a lot of 404s, 'Image corrupt or truncated', and TypeError: document.GetElementById(...) is null errors in console in both browsers (wording differs, of course)...

I will check back later on as I LOVE the NOAA and use them as my goto for most things weather and environmentally related! I'd really love to play with this going forward!

</comment><comment><USER6> The datasets are interesting, but the UI is somewhat lacking IMHO especially compared to Google Earth Engine. In fact would this project be better off collaborating with the Google Earth Engine team and supplying the data to Google and let them deal with the UI and rendering of the data?

<comment><USER4> It's Mapserver [[http://mapserver.org/](http://mapserver.org/)]. At NOAA, if the license cost is $0, its good.

</comment></comment><comment><USER7> If you guys like this NOAA app, you'll probably like NASA Worldview too: [https://earthdata.nasa.gov/labs/worldview/](https://earthdata.nasa.gov/labs/worldview/)

It's more focused on Earth sensing data products, but it has great satellite imagery and overlays.

<comment><USER8> ...and don't forget Nasa's Java SDK, World Wind, which is specifically designed for this type of data. One of the first projecs I worked on, in order to learn Java, was a simple project using world wind. It's a really fun tool.

[http://worldwind.arc.nasa.gov/java/](http://worldwind.arc.nasa.gov/java/)

<comment><USER7> Hey very cool! I work as a contractor within the NASA Earthdata team and I'm always finding interesting things like this as I learn more about the program. NASA is a great steward of what I think is some of the most important data we have about our planet. Much of it is publicly available, but not many people know about it.</comment></comment></comment>


It's Harder to Get an Uber or Lyft If You're Black, Study Says - <AUTHOR> http://time.com/4551521/uber-lyft-black-discrimination/ <comment><USER2> No real surprise there. Most things are harder when you're black. Getting a job, getting an airbnb, getting a fair trial, getting an education, getting a lease on a house, getting a homeloan etc etc.

The only thing thats really easier is going to jail.

</comment><comment><USER3> I'd like to see that study data as I'm skeptical that a person's name is the only factor. I can see them going the same route as Airbnb, forcing drivers and passengers to not discriminate. Unfortunately, the freedom to use your property how you want is why people are drawn to driving for Uber. Take that away, and less drivers means higher prices, and longer wait times... but at least we'll all be waiting longer together.</comment>


Palantir Raises $90 Million - <AUTHOR> http://techcrunch.com/2010/06/25/palantir-the-next-billion-dollar-company-raises-90-million/ <comment><USER2> Jesus Christ. Their product is straight out of every CIA/NSA/SecretGovernmentAgency movie of the last 20 years. All that 'magical' integration of news reports, signal and visual intelligence, financial records, military incidents, relationships and alliances, all kinds of intelligence, and making connections and performing analysis using a wide variety of really cool tools (that, judging by the videos, have incredible performance).

One can't help but think that the company started by some guy who was watching a bunch of spy movies and said "why don't we build that product and sell it to the government?"

<comment><USER3> Well, they actually sell two products simultaneously. They have a flashy, pretty good, front end tool. But what they really pitch is their very large and super scalable integrated ontologically driven back end.

<comment><USER4> When you say "ontologically driven", what do you mean?

<comment><USER3> I don't know all the details, perhaps one of their employees on here can provide a better, non-marketing-spin (please no "we're building an intelligence operating system" nonsense again).

My understanding is, that when they deploy they build a pretty sophisticated ontology for the customer. It's not a comprehensive ontology, but one that's domain specific to that customer -- which actually has the potential to work really well. So for example, the FBI would get one that targets law enforcement (people, places, addresses, license plates, violations, prior convictions, gangs, etc.), while the Army might get one that's focused around military operations (people, places, rank, equipment, unit, etc.).

They then custom write Java software that connects one of the customer databases to theirs, and probably either mirrors it and links it all to some metadata, or if it's federated, generates a pile of metadata with pointers/links back to the original data. The meta-data itself can actually be very very comprehensive. For example, assume the original data is a news report, that report might have everything from tagged people and their attributes to photos of some of the people, videos, maps, whatever (actually I think they just store a list of entity IDs and then store the rest of the junk oriented around the entities, but it's not that important). But basically it's a custom ETL tool for each data source.

I believe it's in that code that they also tell the Palantir enterprise backend how to map individual fields from the incoming data to entity types in the ontology. Assume instead of news articles, you are connecting to a phone book. You have to map names to people, numbers to phone numbers and addresses to locations (or whatever they have it called in that particular instance of the ontology at that site), etc. If it's a yellow pages, you can map names to businesses instead of people, etc. The ontology itself is mutable, so they can decide post-facto that they would like to add a new attribute to a person "place of birth". So if their knowledge base has phonebooks AND birth certificates, when you go to inspect an entity, like a person, it'll retrieve the place of birth and build you a nice dossier of that person.

In cases where they're consuming unstructured data (the lions share of government reports), there's no fields to map to the ontology. So analysts have to sift through each report and do the mapping with the front-end tool while they are conducting analysis. I know of at least one site that's in the process of hiring out a bunch of low-paid data entry people simply to go through and do this tag-map operation on their reports.

 _If_ ahead of time, the reports have been run through an enterprise named entity extractor, they _can_ leverage those to populate the knowledge base. But in practice, quality is low, and the named entity extractors tend not to do a good job of determining different subclasses of entities. For example, you'll get a giant list of people from a document, but no indication if a particular person is a scientist, a politician or a terrorist (and all three of those categories might be entity types in the ontology for that site). In addition, the key factor here is the relationships between entities and between entities and their attributes. And most named entity extractors do an even poorer job determining that than just finding the entities. So the default at most sites is to have shifts of analysts manually tagging and mapping documents.

On the front-end, when you search for a person in the little search box, you can not only get documents that name might appear in, but you can call up a dossier on them with all the little various attributes and other bits and pieces filled in for you. Imagine a police record like you see on TV, with the person's photos and other facts and figures and such -- except that it's generated dynamically based on all the tagged and mapped meta-data, and come be composed of data from several different sources at once, like a phone book, a DMB database and a million news reports.

</comment></comment></comment></comment><comment><USER5> I saw a demo of their stuff at Joel's stackoverflow.com tour in sf last year. They were a sponsor and were recruiting. I got a save the shire t-shirt, anyway, It's a really cool product. At least then they were going after defense and government markets primarily. It sounded like they had oracle prices since every installation is basically a custom setup and their system is infinitely customizable. I don't doubt the valuation if they get traction. I know the big financial guys are also a prime market for this kind of product.

</comment><comment><USER6> Palantir is hiring: <https://www.palantir.com/careers/positions>

I'll be the first to vouch for the fact that this is the most amazing place to work. Interesting technical work, huge impact on real problems in the world, great culture, talented coworkers, and stock options that mean something.

</comment><comment><USER7> Palantir is known around the valley - at least, I've heard of it from other Googlers (some of which have spouses/friends that work there). It's mostly known for treating their employees very, very well. Like, Google-level well. They also happen to be working on really cool technical problems, which makes them a big draw for talented engineers in the valley.

<comment><USER8> Does Google pay well? I'm under the impression that they are more about perks and cool projects than salary and benefits.

<comment><USER9> you are correct

<comment><USER10> Earle, You posted the fermilabs mystery letter: full cryptanalysis, you last comment is drink you ovaltine. I am incredibly interested in where this fits into the code...f0be58f2fd63 6c79d2e493e6..I am trying to break a code that is very similar to this but have no experience breaking codes so I have been researching codes and how to break them, this is the closest I have come, but still would love to ask you some questions, if you have time. I dont want you to break it for me, I just need a little guidance, when thinking this thru.

</comment></comment></comment></comment><comment><USER3> I'm concerned, they've pretty much started to saturate their target vertical in the government (military/intel). I've also noticed that new installs are starting to go in at pretty large discounts over a year ago. The government, while large, _is_ finite in size. It doesn't take too many enterprise deals to max it out.

If they aren't making money yet, and at their tremendous burn rate, is another $90million really going to bring them to self-sustainment? I'd bet that the curve on their growth rate is starting to drop off now, the next logical place for them to push into is local law enforcement. But at their prices, compared to the de facto competitor (i2) I can't see them getting much traction except for maybe the very largest municipalities (I know they have one in the DHS funded NYC Fusion Center for example).

Their going to have to put more resources behind their non gov/intel verticals I think for this to make sense.

<comment><USER11> Well, I'd guess it depends on what their support/upgrade revenues are like.

<comment><USER3> Their initial installs are quite expensive. Small orgs <50 have been getting prices from $250k-$750k depending. I've seen larger organizations with $5-6million per install prices, but there are fewer of those. I've heard that their quoted maintenance fees are a bit higher than that.

I think at their last conference they said they had ~200 staff and still growing. So their burn rate is ~$30-$40 million a year.

This latest round will keep them alive for another year or two.

</comment></comment></comment><comment><USER12> This is astonishing:

 _There is no publicist, no sales or marketing team and Karp adamantly believes that there will never be one. He says he is perfectly content to let word of mouth drive his business, in press and in sales._

It means they are completely rewriting the rules for selling enterprise software.

<comment><USER13> >There is no publicist, no sales or marketing team and Karp adamantly believes that there will never be one.

When the press call to ask for an interview, or just for info about the product, who do they speak to? That person/those people are your publicist(s).

Who writes copy for the website? That's your marketing team.

Who do I speak to when I want to buy? That's your sales team.

Not labelling some thing doesn't stop it from being that thing.

<comment><USER14> Folks, their customers are intelligence agencies and the government. They spread through referrals from the CIA to NSA to State to DOD to NIH to whatever the hell. Then they get referrals to their counterparts at friendly governments. The hard part was getting their first sale. Hell, I bet they're still not on the GSA schedule, even with tens of millions in government revenue.

Palantir Finance sells to hedge funds and financial institutions, but the whisper referrals work in that insular industry just the same.

These guys need salespeople and marketing folks like I need a hole in the head.

EDIT: turns out I was wrong about the GSA schedule: [http://docs.google.com/viewer?a=v&q=cache:ffLq8fxcGdAJ:h...](http://docs.google.com/viewer?a=v&q=cache:ffLq8fxcGdAJ:https://www.gsaadvantage.gov/ref_text/GS35F0086U/0HVEE7.25KU1G_GS-35F-0086U_PALANTIRGS35F0086U05262010.PDF+palantir+GSA&hl=en&gl=us&pid=bl&srcid=ADGEESjxti9x2gZKk_OXsAIzdnayt- fwXkGo2-3xgCf68IFXVxltcKfZo5z2Bi9dnTvORo0AHAQkJ8wnZ- Kr5TcZUWx8_2tdE4U6ALjdzuA8ut88cpEUZ13j9VJnssnmNfo_zww3O9H2&sig=AHIEtbSHH_LfTQ9_BvxYBNE7QXcrTjE3Aw)

EDIT 2: Ha! The last page has their pricing. And it comes with a 90 day warranty!

EDIT 3: Double ha! "Implementation Ninja Services" is the official name for their lowest-level customer support.

<comment><USER15> I used to work at a company that had basically one client, the US Navy, and it would still go to expos to show of its products to different parts of the Navy.

The government is not a monolith, where everyone shares the same hallway (although the Pentagon might come close...).

</comment></comment></comment></comment><comment><USER16> Gandalf: _A Palantir is a dangerous tool!_

Saruman: _Why should we fear to use it?_

Gandalf: _They are NOT all accounted for. We don't know who may be watching-_

</comment><comment><USER17> Does anyone else get the feeling this sort of software is probably sold for tons of money but rarely useful? I could be way off here but just from glancing at it, it looks like one of those things that is probably too complicated for the average government employee to use. So they end up having to hire outside consultants or something. It looks like a research tool that is one step removed from the lab.

<comment><USER3> Most of the people that will be using this tool are intel analysts. Most intel analysts used to be in the military at some point. To be an intel analyst in the military you have to score relatively high on a test called the ASVAB (basically an aptitude test). There's still lots of old guard in the field who can't work a mouse, but the recent crop of analysts were all trained and worked on systems of similar complexity and size (ASAS, JIOC, DCGS, etc.).

In other words, we're not talking about the typical government paper pusher.

That being said, it's still a complicated tool requiring the training and understanding of some pretty complicated concepts that most analysts don't know about or understand (like ontologies).

</comment></comment><comment><USER18> Given the sensitive nature of some of the data they work with and the fact that 70% of their business comes through the [US] government, I wonder if their engineers all have at least some level of security clearance. Or would palantir just as easily sell the same product to the US government as it would to another government?

<comment><USER3> Their "forward deployed engineers" need clearances to work on site. Palantir installations are an extremely lengthy process required a couple full-time people on-site. The places I've seen it, it's typically taken 6-12 months to get it "turned on".

</comment></comment><comment><USER19> I smell gov't opportunity for SAS to acquire Palantir, as they kinda-sorta are in the same industry (data mining and analytics). And, the way they treat their employees is very similar (i.e., good work-life balance, in-house healthcare and childcare, killer culture that is the envy of even Google):

[http://money.cnn.com/2010/01/21/technology/sas_best_companie...](http://money.cnn.com/2010/01/21/technology/sas_best_companies.fortune/)

<comment><USER3> Word on the street is that they are trying to position themselves as an Oracle acquisition. Their valuation seems a bit inflated, but I could see them selling for $300-500million.

</comment></comment><comment><USER20> Awesome! I know Palantir from when I was learning Groovy. Their dev blog was extremely helpful. Good to know that they're doing well.

<comment><USER5> Yeah, that reminds me. It's one of the best looking Java apps I've seen. Tech Crunch screenshots not withstanding.

<comment><USER21> Thanks! I completely forgot and was driving myself slightly annoyed trying to remember where I'd heard of this company before.

[http://blog.palantirtech.com/2007/09/11/palantir- screenshots...](http://blog.palantirtech.com/2007/09/11/palantir-screenshots/)

</comment></comment></comment><comment><USER22> Are relationships discovered automatically across DBs?

Does anyone have any insight as to how this might work technically?

<comment><USER23> Depends on the kind of relationship you're talking about, but generally speaking, someone has to map the data from the original databases into Palantir entities/properties/links. But—and this is kind of a big deal—the Palantir product does not have a fixed set of entities/properties/links/etc. So if you're more interested in tracking, say, computer systems, networks, and packet traffic than terrorists and bank transactions, it's fairly straightforward to define a new ontology that only contains the things you care about.

[https://devzone.palantirtech.com/display/pgdz/Integrating+St...](https://devzone.palantirtech.com/display/pgdz/Integrating+Structured+Data+Into+Palantir+With+Groovy) has a pretty useful overview of how you can take raw data from an existing source (granted, this source is XML data, but it could just as easily come directly from a regular database) and map it into a Palantir stack.

<comment><USER22> Thanks for the links and info. Great stuff.

So basically, the heavy lifting palantir does is in the presentation and data abstraction. With a person still needed to define mappings across data sources. Is this a correct statement?

With (seemingly) limited off the shelf mapping abilities I'm surprised that they are looking to sell more as an appliance, and less as a turn key service with consulting engagements etc... Neat product.

<comment><USER23> I should probably mention that I work at Palantir, but [insert boilerplate disclaimer here].

Yes, you definitely need a person to define the mappings across data sources. However, this is basically a one-time setup task; once the mappings have been established, new data from the existing databases can be continuously imported. I don't have any stats on how long this initial setup phase takes at real customer sites, and if I did I'm sure I couldn't share them publicly, but the goal is definitely for it to be something that doesn't require an entire team of consultants to deploy and babysit.

If you want to see the actual government product, and how it works, you can sign up at <https://analyzethe.us/> for an account. This is a real live Palantir instance with real data from data.gov and it's open to the public.

<comment><USER3> At the dozen or sites I'm aware of, only a couple are where I'd say are in "full operational mode" after 7-9 months. I've known a couple that have been in a protracted (even by that standard) deployment stage for >12 months. Every place I've seen has a 2-4 Palantir engineers working F/T there during the deployment phase and at least 1 or 2 FTEs to maintain the ontology as mission requirements change ("oh, now we need VIN numbers associated with vehicles!").

I'd imagine it's getting faster as staff gets trained and various little ETL tools are built to funnel data into the backend. But it's been a very frustrating process for most of the customers to drop the money on the deployment and not have an operational tool for the better part of their first year, and the maintenance tail has been reported to be some percentage higher than the original purchase (that may have changed, I've noticed the pricing structure has been changing quite a bit over the last year).

Of course, I also understand that when the customer says "pump data source X into Palantir" and data source X requires a 6 month approval process to hook up to, it can just take a while.

</comment></comment></comment></comment></comment><comment><USER24> I wonder what exactly a "human-based" algorithm is? How do you not use stats, NLP, ML and/or network based approaches at that scale?

<comment><USER3> A very large part of their strategy is crowdsourcing named entity extraction. Basically, as you read a report, you hilight and tag all the entities of interest. It provides incredibly high quality entities and relationships on an enterprise ontology.

The problem is that it scales incredibly poorly. Imagine hilighting every person, phone number, location, etc. in a document. Then linking them all together manually. Then imagine having a few million documents you have to do that on. It's been an enormous problem at all the sites I've seen it deployed at.

</comment></comment><comment><USER25> wow, not bad. interesting product, smart engineers. bombed an interview with them some time ago :P

</comment><comment><USER26> As long as congress does not allow the nsa/dod/cia/fbi to do this themselves, Palantir will have more than enough money getting thrown at them.

Hmm... better that a private corporation has this power or the government? Jump ball.</comment>


Can you use PHP without frameworks nowadays? - <AUTHOR> http://css.dzone.com/articles/can-you-use-php-without <comment><USER2> I had to do some PHP 2-3 years ago. I had always had a negative view of PHP prior to that despite knowing almost nothing about it, which I think is a not uncommon experience.

Anyway, there are lots of things that offend people about PHP that are basically inexcusable: like the inconsistency in parameter order (needle, haystack or the other way around?) and the inconsistent use of underscores in API method calls.

But all of that is just noise. Use something like PHPStorm, Netbeans, Komodo or whatever and it'll tell you the right order or if the function doesn't exist (I know some people are still in love with their raw text editors; I'm not one of them). And you learn quickly enough the right names and orders.

One thing I love about PHP is the simplicity of it. Edit the file, save, refresh in the browser. I love this short feedback loop. It was a refreshing change from doing Web apps in Java (for example), which added a compile/build/package step in between.

After doing this I investigated the common frameworks (CodeIgniter, Kohana, Zend, etc) and frankly I was horrified.

These things are so hideously overcomplicated. It's like a zealous Java programmer tried to recreate "Super-Struts" in PHP in a devilish plan to destroy all of the advantages of PHP while leaving a lot of the negatives.

The number of times I got bitten in the ass or just wasted time trying to figure out how the "magic" in Zend worked was infuriating.

Take something as simple as a controller. This is stupidly easy to implement yourself that any sort of generic framework is just going to bring you pointless crap you don't care about to the stuff you do by a factor of probably 10:1.

The ORM side was even worse. Java is kinda built for ORMs. It has stateful Web containers. PHP isn't (and doesn't).

The one bright spot I found was templating. It is common to say "why use a templating language with PHP when PHP is a templating language?" and you have an entire valid position. I too have said this.

That being said, I found Smarty to be incredibly useful just from the point of view of caching parts of the page and creating my own plugins/extensions for tasks that were common to me. Smarty had other issues like I wasn't completley fond of it's caching model and the speed, prior to Smarty 3 at least (which I've never used), was also questionable.

But despite all that I liked it a lot.

So can you use PHP without a framework? Sure you can. Not only that, I'd highly suggest it _if you know what you're doing_.

<comment><USER3> One of php's main advantages is the availability of many options. You have the option to do web apps in plain php. You have the option to do web apps in many mature frameworks.

Languages like ruby and python lack this. Can you do a website in plain ruby as easily? How many mature ruby web frameworks are there in ruby? There are many in php. Zend Framework, Agavi, Kohana, CodeIgniter, Prado, Yii, Symfony and many others.

Of course some stuff in php suck hard. I would personally love an string- object to replace all the stupid str_*() functions, but php is in the right direction of adding features. (My last issues are fixed by 5.3's late static bindings)

And im surprised how php community quickly adopts changes. PHP 5.3 breaks compatibility but i see more people using it everyday.

I think despite all the negativity, PHP is going to stay for long-term.

<comment><USER4> > Can you do a website in plain ruby as easily?

Don't know about Ruby, but as for Python - yes, you can. There is Python Server Pages in mod_python, which are similiar to mod_php.

However, mod_python is ugly (in a same way mod_php is), so it's generally frowned upon and considered to be Bad Thing.

<comment><USER5> It's not just ugly, it's unmaintained.

<comment><USER6> There's always mod_wsgi and writing a raw wsgi app- which honestly, isn't particularly hard or bad.

</comment></comment></comment></comment></comment><comment><USER7> > Summing it up, a framework tries to save you work by make you define an > overly complex configuration, that has to accomodate every possible use > case.

I was disappointed that the author constructs his arguments against frameworks by using Zend, and Zend alone... when there are things like Symfony, Cakephp (which I'm a fan of) and Code Igniter. It is what allows him make a generalization like the one above that is flat out wrong for frameworks like codeigniter and Cake.

I've been a PHP guy for many years (still am) and I know that as you program more and more in PHP, you come up with a way of doing things that eventually become your own sort of framework ... so the people that really appreciate frameworks are more experienced developers (no insult to newbs) because they can more easily recognize all the problems that these frameworks solve for them ... to newer programmers it looks like bureaucracy, magic and stuff that gets in the way of them actually expressing their ideas in code.

I know. I was one of those guys.

So yeah ... You can use PHP without frameworks and if you like doing that, then keep doing it ... however, I would advise any PHP developer to keep an eye on the major frameworks and keep evaluating ways that they can save you time and effort as you take on more complex applications with bigger and better teams (yes ... you actually get to develop code with other people as you take on bigger projects).

PS: My only complaint with the PHP framework I like ... CakePHP, is that it can be a bit slow and the documentation can be truly horrendous ... to where you have to go digging around in the source code to figure out the things you can put in the $options array in a call like this ...

        checkbox(string $fieldName, array $options)

Things like that, I bet, slow its adoption.

<comment><USER8> Your post ? Genius. That's exactly what I think. Most of the people who hate frameworks are those who don't appreciate or just love to reinvent the wheel everyday.

<comment><USER9> Or they built their own framework over the years and either refuse to accept it or refuse to part with it (so they tell you frameworks suck and they only use their own code).

<comment><USER7> And you know what? ... thats okay. I think a lot of people just turned off by the whole "Frameworks are the right way to program, and if you aren't doing frameworks then you're doing it wrong!" attitude of some in the community.

I think if you let people be, they'll eventually find their way to these frameworks because the amount of time and effort they save you is just too hard to ignore, once you get to a certain point.

<comment><USER9> > And you know what? ... thats okay.

I fail to see how being a hypocrite is OK.

</comment></comment></comment></comment></comment><comment><USER10> I really liked this article. It generalizes very well, and dovetails neatly with Aaron Griffin's excellent rant:

<https://bbs.archlinux.org/viewtopic.php?pid=147321#p147321>

As he says so well: _Rails/Django/Turbogears/etc etc - Frameworks overly designed to "make it easy" while "hiding details" and "providing event based functionality". I got news for you.... these "details" that are hidden, they're less complicated than these frameworks._

<comment><USER11> i disagree with that type of rant. using a framework isn't about "making it easy" and "hiding the details". or at least, not to me. its about not having to mess with the details. repetitious, abstractable details waste time and energy.

its why we don't typically code in assembly. its a waste of time, and you generally have faith that whatever statement you write in, say, C gets translated correctly and efficiently down in to assembly.

<comment><USER10> I think it very much depends on what gets "abstracted away." If a library provides sensible defaults, or does some convention over configuration, it helps me ignore the inessential. And my knowledge is portable to other frameworks, I still understand the underlying model, I just don't have to mess with the details.

In this we agree.

But if a frameworks provides an abstraction that isn't isomorphic to the underlying model, I end up learning a non-portable technology that is useless when I step outside its cozy implementation.

For example, ORMs that hide SQL from me. Messing with SQL syntax may be inessential, but working with actual relations is my job, and not knowing how to use a database is counter-productive.

JM2C, YMMV, &c.

 _p.s. I forgot to confess my own sins:_

<https://github.com/unspace/faux>

</comment></comment></comment><comment><USER12> One of the attractions of PHP is that you can use it as much or as little as you need.

Have a static site that needs one page with dynamic content? Just make that one page PHP, and do whatever you need.

Need a basic caching/templating engine? Smarty.

Need a basic linear blog? Hack something with Wordpress.

Need a more complex site with categories and plugins, that fits into a wide community? Drupal.

Need to have full control over how the thing works? Use something like CodeIgniter or Cake.

Lots of options out there, and PHP is stupidly simple to deploy compared to most other technologies.

<comment><USER13> "PHP is stupidly simple to deploy compared to most other technologies" That's true, but it stops mattering for more complex sites where you want easy rollbacks to previous versions if a deploy went awry, separate static media serving (because it's faster), load balancing and the like.

Nobody will dispute that PHP has by far the best deployment story if you need to quickstart something (see [http://blog.ianbicking.org/2008/01/12/what-php- deployment-ge...](http://blog.ianbicking.org/2008/01/12/what-php-deployment- gets-right/)). But for an application of any complexity, really, you'll have more important stuff to worry about.

<comment><USER14> For the noobs, can you add the word "like" and some descriptive stuff to that last sentence?

<comment><USER15> He already did:

 _easy rollbacks to previous versions if a deploy went awry, separate static media serving (because it's faster), load balancing and the like_

Other things that come to mind are database migrations, running tests before deployment, pushing code to multiple servers etc.

It is probably a good idea to automate all these tasks.

Yes, with an application server you might have to reload the code, but it doesn't really matter, because thats just one step of your automated deployment.

And if you use an opcode cache you probably have to restart the server with PHP anyway.

</comment></comment></comment></comment><comment><USER16> I think there's a few huge positives about using a framework that outweight the cons. He's right about singletons and other anti-pattern oversights and he's right about bloat and performance hits over inline mysql_query(), but here are the reasons I won't be going back to php direct for any project I expect to scale.

* My home rolled framework has no docs. I will have no idea what my mindset was 3 years from now and I'll have nothing to look up but a few one liner method descriptions. No thanks.

* As Cal Henderson said in his I hate Django talk, 90% of the framework is right and speedy to develop on - hacking around the stuff that's wrong takes time, but few people even get there in their projects.

* PHP sucks (You're still okay, php). PHP's docs suck. Save yourself the time and pain of learning poor functional design tips on php.net, almost any framework now will help you to separate concerns of your project. Best practices are not PHP's strong point - Have a look at almost any web designer's "well made" code and you'll see that PHP simply doesn't teach SoC.

* You usually get XSS, SQL injection and CSRF protection in a framework. nuff said.

* Unless database mapping is what you know and do for a living, the database abstraction layer that you build will not be as good as the ones that already exist. It's a rule.

I used to be a stubborn framework hater, but after using a framework for a few projects, I'll never be back unless there's some impossible performance or disk space consideration. Pick one and learn to love it.

<comment><USER17> PHP's docs suck? Seriously?

I think the php.net docs outshines the available official documentation for all other languages I've worked with, especially because of the user comments on all the functions. Sure, some of them are outdated but they've saved me from not-so-obvious pitfalls or provided a nice starting point for helper functions more than a few times.

Don't want to front or anything, just wondering why you don't like the docs. I agree there could be better documentation for the _classes_ that PHP and the SPL provides though.

</comment></comment><comment><USER18> What's the difference between getting locked into a framework someone else developed, and getting locked into your own framework that you end up having to develop?

At least with something like CodeIgniter, you can go elsewhere for help.

<comment><USER19> but if you have written the framework, you don't need to go anywhere for help.

You just fix the problem because now that you have written it and it's tailored to your application, you have a pretty good idea of the problem and how to fix it.

This means that you can progress more quickly and that your project doesn't get littered with "workarounds" for "bugs" in the framework (i.e. hacks around stuff the framework hides for you or you don't know how to access)

<comment><USER20> Until you do something else for a few months and come back to realize that instead of there being only a single person in the world who understands your homebaked framework, now there are none at all.

I speak from experience.

<comment><USER18> I'm literally living the experience right now.

</comment></comment></comment></comment><comment><USER21> Sure you can, but why would you want to? Reinventing the wheel is not fun.

A colleague pointed me to Yii Framework [1] a couple years ago, and I stopped looking for alternatives. Don't see any reason to invent my own frameworks, since Yii has practically every feature I could want already implemented and, more importantly, well tested. In those rare cases when I need to customize or extend something, it's fairly simple to do so, since the code is well documented and organized (though the authors seem to be suffering from a severe allergy to whitespace...).

Controllers with access control rules and filters? Check.

Autoloading? Check.

Caching with support for multiple mechanisms (file cache, db cache, eAccelerator, MemCache, XCache, Zend Data Cache)? Check.

DB layer based on PDO? Check.

ActiveRecord? Check.

Mass attribute assignment to Active Record, complete with validation and allowed/forbidden attribute configuration)? Check.

Named scopes? Check.

Multiple database engine support (MySQL, MSSQL, Oracle, SQLite, PostgreSQL)? Check.

Testing environment? Check.

CLI mode? Check.

I18N support? Check.

Plain PHP views with simple HTML escaping and HTML construction? Check.

Event raising and handling? Check.

[1] <http://www.yiiframework.com/>

Edit: However, no framework can take away the programmer's stupidity. My former colleague used another framework that has decent support for parametrized queries and still concatenated his SQL from raw user input and printed data into javascript variables by simply wrapping it in '' with no escaping... So glad all of his code has been retired.

<comment><USER17> Yii is indeed very powerful, especially if you take advantage of the 'magic' and generators for form output and handling. I've only spent a few days with it though as that particular project fell through.

Not sure if I'll ever go back to it as I am not really a fan of the syntax and it took me quite long to find out how to do certain things in the given online docs. Might be just me though and really, the first thing I'd say about Yii is that it has got a lot of 'power' under the hood, more than any other available stable PHP frameworks I have seen. Symfony is probably the only other one in that league.

</comment></comment><comment><USER22> I don't know, seems like every site that doesn't use a framework is fantastically vulnerable to various hacks.

Let's face it, it is hard, really hard, to lock down every last vector of attack in anything but the most trivial web app. SQL injections are old hat, but even the big dogs get XSS vulnerabilities wrong. Using an established framework helps in making sure you don't make idiotic mistakes.

The article also goes on about 'lock in' here and there. What you call 'lock in', I call a shared understanding on how to do things, letting me understand other's code and collaborate more easily. I can look at any Django project and understand what's going on in a minute or two, because it is a standard. I doubt I can say the same for your custom PHP site, even if it makes perfect sense to you.

<comment><USER23> Can you explain how using Zend Framework automatically helps you with XSS? I do not believe Zend Controllers or Views automatically escape input or output.

</comment></comment><comment><USER24> I've been working with php for about 10 years now. I have to say that I really enjoy frameworks. They make my job a lot easier. Before I started using frameworks I already built one of my own without realizing it.

To start off with I had my own classes to make tasks a little easier. Most php applications deal with a database of some sort, because of that I created a database class that helped me connect to a database and get the information I need. Same with templates. I used smarty since I didn't see a need in making my own. I had my own directory structure and config files for everything. When I was working on a site that needed something was usually when my 'framework' got updated.

Then I started reading about frameworks. I have used most frameworks in one way or another. The one that I prefer over other php frameworks is symfony (symfony-project.com). Why? They use doctrine as an ORM. They already have best practices built in. It's not as 'bloated' as other frameworks. Take CodeIgniter for example. Then go take a look at Kohana (which is a stripped down version of it). Once version 2 comes out they will have PHPUnit bundled with it. They use existing open source software instead of reinventing the wheel and making one for that framework only.

What is the benefit to you as a php programmer to use a php framework? There are a lot of things to take into consideration when creating a web application such as security. Are you escaping user input before you use that input in a MySQL query? What about user session management? There is more to consider, but hopefully you should get the idea. You start to see yourself repeating the same code after awhile so you start making classes or functions that make your job easier.

Should you use php without a framework? You can, but you will essential be creating your own after awhile. IMO it's best just to research a few different ones and find the one that best suits your needs since you can leave the framework development to other guys while you focus on creating a site. For me, symfony best fits my needs. Others may want to check out CakePHP or other frameworks. I never cared for Zend Framework, but use the zend library.

</comment><comment><USER25> Whatever your taste in ORM mappers, templating, localization and other "magic", you _can_ get away without a framework, _but_ you will (in one way or the other) need to do all of the following:

\- Define/create some controller or structure in how URLs map to different scripts/functions etc. That includes some "system" that you use (even just remembering) for where each app executes.

\- Handle output and page parsing. If you want errors and other messages to always appear within your template and not before even the starting <html> tag or if you need to be able to set cookies or send other headers() before the output you will need to control output buffering (using ob_XX() functions)

\- Authentication. Most (99%?) web apps need a user to be able to login. You can roll your own in this regard, but that will take skill and careful planning. You need to be able to specify which parts of your controller are available to which users, etc.. this can start getting complicated real soon.

You can roll your own, but you will actually be rolling out a framework.

So just realize you're not choosing between using a framework or not using a framework - you're choosing between using your framework or somebody else's.

</comment><comment><USER26> I find that the most useful frameworks provide conventions for structure and code organization along with pre-built libraries for most common functions (DRY). I avoid frameworks that make it overly difficult to deviate from these conventions when needed and those that make it difficult to override built-in functionality. The best frameworks are the one's that realize early on that they cannot solve every every problem and edge case.

For PHP, I prefer to use Kohana. It has a nice structure and does just enough, while maintaining flexibility.

</comment><comment><USER11> i disagree with this part of the conclusion:

> _Summing it up, a framework tries to save you work by make you define an > overly complex configuration, that has to accomodate every possible use > case._

i use codeigniter specifically because it relatively simple to use, lightweight, and easily configurable.

can you use php without frameworks? sure. but in the end, it saves you development time. its not like the code you cut to replace the framework is going to be that much less buggy

</comment><comment><USER27> Yes you can... Sort of.

I use php-form-builder-class (<http://code.google.com/p/php-form-builder- class/>) which is a beautiful library to build and validate web forms; and a port of the Perl module SQL::Abstract (<http://search.cpan.org/perldoc?SQL::Abstract> \- roughly the most used library to build SQL from data structures in the Perl world) to PHP ([http://coderepos.org/share/browser/lang/php/SQL_Abstract/tru...](http://coderepos.org/share/browser/lang/php/SQL_Abstract/trunk/lib/SQL/Abstract.class.php) \- docs in Japanese, but if you know the Perl version it's pretty straightforward), and that, when complemented with some glue code in a small library of my own, is about all I need to build a CRUD in webforms, in no more than a few dozen lines.

Is this a framework? It does what a framework does, but it's a set of libraries, not a framework. You still lay out the basic program structure.

Is this all you need to build a web app? Well for most applications, in my experience, it sure goes a long way. The rest that you have to do is pretty straightforward.

</comment><comment><USER17> You can definitely use PHP without frameworks.

What really sucks about PHP though is that most of the quality code lives inside frameworks. While it's rather easy to include parts of Zend Framework in your own code/other frameworks (it almost always comes with some bloat due to dependencies though), nearly all other frameworks' parts are impossible to 'extract' and re-use them elsewhere.

Every time I read about a new useful and slick Ruby gem that's properly tested and can be used with or without every available Ruby framework, it's making me sigh.

I wish the PHP world was like that as well and people would just build more 'libs'. If you're stuck on a PHP version below 5.3, you won't even find a powerful implementation of ActiveRecord. And no way I am going to include a bloated powerhouse like Doctrine in a project that basically only consists of five to ten files when I am only looking for a convenient way to do some basic CRUD stuff.

Don't get me wrong though, PHP has been my primary programming language for the past years but the lack of good libraries that you can just use and drop in is really a problem. And the ones that are available are hard to find, hidden away in random blog posts and github repos.

<comment><USER28> You hit the nail on the head.

When I'm coding and hit some need like CSRF protection, I think, "I need a library to do CSRF protection," not, "I need to switch to a framework that includes CSRF protection."

Unfortunately, there's not a good mechanism like RubyGems for distributing/discovering PHP libraries. PEAR isn't it. It has too much stuff that's either unmaintained or dangerously unstable. I don't know what happened there. Maybe the coding standards and general bureaucracy involved in creating PEAR packages drove out innovation.

<comment><USER17> I haven't had a serious look around the PEAR libraries in ages, mainly because I don't want to have classes like their own 'Error' class around in my code at all.

Regarding distribution I was hoping that .phar files would become the new standard but I haven't seen a single .phar file around. Definitely agree that a central place to _discover_ libraries is really needed as well.

</comment></comment></comment><comment><USER29> Of course you _can_.

But in my experience, frameworks are a natural progression of _good_ coding.

My first several dozen websites were "from scratch" without any boiler plate code. Every page was it's own PHP file, every page had its own HTML hard coded inside of it--the layout of the site repeated dozens of times. Then I said, this is really dumb! If I want to change an element of the layout I have to edit all these pages every single time. I wish I just had a single file to edit... So my next revisions where every page again it's own PHP file, but this time the HTML layout was split into header / footer HTML and I used handy require methods. Ahah! So much time an effort saved in upkeep--yay. Then I was like, "Wow, theres a lot of similar code needed at the top of every file-- stuff to get all my classes included, stuff to setup my database properties, etc. Man I wish I could do all that in one file and just maintain that.." So I did just that, from then on I started coding my sites with a bootstrap PHP file, a single include at the top of every page to set everything up, and the rest of the page handled area specific code.

Thats how my own personal experience with PHP kept evolving, I kept realizing inefficiencies and coming up with patterns to alleviate those lacking areas. I ended up coding simple switch case index pages that would call defined functions that represented web pages. I even created my own template classes that would load a file and replace keywords in it with parameter values. I had naturally tended towards controller driven websites, using the MVC pattern on my own without ever having actually known that it was the Model View Controller pattern. To me, it had become just the obvious way to do things. Of course my own implementations where rough, and not reusable, they were flawed with limitations.

Eventually, I decided to look into frameworks--luckily it was at that time that Zend framework was coming into it's own. It was at version 0.7. I started reading the documentation and I was blown away because I kept seeing all these features that it provided and they were features that ran parallel with my own development designs. The framework had been what I was looking for, a polished implementation of a development paradigm that I had intuitively developed on my own. The thing about the framework code base is that it is designed with a text book like knowledge of solidly defined patterns. That's what freed it from all the flaws and limitations of my own implementations. Instead the framework solutions were abstracted, and brimmed with potential of being augmented and extended--allowing them to be robust enough to fulfill typical use cases and yet capable of being molded to fit special needs and requirements.

To me, it seems like when ever there is a framework article with a mostly con attitude, I can't help but think the article is being written from the perspective of someone who has not fully been through the "from scratch" phase. More likely, they started with frameworks. It's easy to understand why there would be such a jerk neck reaction when abruptly approaching a framework without a from scratch background. Without the background, all the robustness, all the complexity, there is no frame of reference for it. Such people don't comprehend the need or usefulness of those solutions. Instead, they have this preconception that frameworks "claim to do everything" and yet for some reason you have to actually code and implement special cases so why bother with the learning curve in the first place if you were going to have to come up with your own solutions. So often I have to reiterate that frameworks don't do everything--they aren't suppose to, they cant! They are the boiler plate, they are the starting point. They take care of the simple basic things that way you can devote your time to addressing the interesting, hard stuff. It may feel like it wastes more time than it saves--but thats just because you have to learn it first. Obviously theres a learning curve, obviously theres an initial time investment. The point is, after that initial investment there is so much payoff. Of course your first site, and your first framework are going to be hellish on effort. But your 3rd, or your 4th you'll have a basic site up and running in 2 minutes and be free to spend the rest of your time working on the unique core features that will make your site glorious and awesome.

The god awful truth of it all, is that web development really isn't _easy_. There is no magic wand to wave that will grant you the perfect site from a wish. There is no ultimate does everything tool that requires no skill to use. There is, and always will be a time investment required. Smart, successful developers will invest that time requirement into understanding and utilizing frameworks--that investment will be fruitful and multiply.

<comment><USER30> Question - should I shoot straight for a framework, or develop some small sites "from scratch" first to get a feel for php before diving into a framework?

<comment><USER31> You know, I was nodding my head as I read the OPs progression. The first programming I ever tried was Rails (it's the hotness, why not dive in!). My problem was that it was magically solving problems I didn't know I had.

I would strongly argue for (if you have time) experiencing the progression of web dev to its current state from the ground up. Understand WHY templating is useful. Understand that most basic CRUD controllers have the same methods, and the schema underneath is setup the same way. Doing some things the 'hard' way I found made it much easier to understand the reasoning behind today's most modern frameworks. I understood their benefits.

<comment><USER29> The truth is, despite my reply suggesting going straight to framework, going the from scratch is good if you're able and are willing to invest the time. But if you've got work to do, some times you need to learn as you work rather than learning first. Its in those cases that I recommend the framework route-- with the caveat that you _accept_ that theres a reason for the framework's complexity. Don't bulk at it, realize that its there for reasons you may not understand.

Luckily you'll gain "from scratch" experience even through the framework route anyways, since it naturally comes when you have create things that expand the scope of capability of your framework. Even when you are simply extending base classes of the framework, your addressing and solving problems that the base framework doesn't answer.

</comment></comment></comment></comment><comment><USER32> This discussion reminds me of an article Derek Sivers wrote about switching back to PHP from Rails. [http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_swit...](http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html) Basically he states that programming in PHP using the rails mindset (but no framework) saved him mountains of time. I think the MVC idea is great but I also agree that frameworks are over encompassing beasts that can add more functionality than you need to a project.

I keep being attracted by the thought of using a framework but they always seem to over complicate things. I like using SQL and I feel hand tied when frameworks hide that functionality away.

</comment><comment><USER33> I think a better question might be "Can you program in ANY language without a framework nowadays?". The web is SO much more complicated than it was even 5 years ago.

Now web developers have to worry about mobile resolutions and layouts, APIs and access keys, whether or not they're implementing REST correctly, allowing users to sign-in with 3rd party services and oAuth, whether or not to go HTTPS only, etc. The list just goes on and on, and will continue to grow even larger as more technologies and ways of consuming information emerge.

I have been starting all new projects (PHP, Ruby, and even Javascript) with some sort of framework for more than 5 years now. It's the only chance I have at keeping up with user demands.

</comment><comment><USER34> Old but still true (by the the creator of PHP): [http://toys.lerdorf.com/archives/38-The-no-framework-PHP- MVC...](http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC- framework.html)

</comment><comment><USER35> After working with several PHP frameworks i now work with one that I rolled that doesn't include a lot of the automagic functionality that I find so frustrating in the major frameworks.

I have a simple MVC setup (simple is the key word, the router function is less than 80 lines) a DB abstraction class and a default class that models extend.

Regarding being able to bring people in, it's only helpful to use a framework if the person you're bringing in is already familiar with that framework, otherwise it's a detriment in most cases.

</comment><comment><USER36> I have my own micro-framework I made for bigger projects since I can't stand any of the main ones (though I've heard good things about Yii, that's probably where I'd go if I felt mine was inadequate). As with most things, the context of what you're doing matters. I'd guess most websites don't really need a framework, though once you start doing REST-y stuff that's when you should probably look into it. (Plus you get nice looking URLs for free when you go down the any-size-framework path.)

</comment><comment><USER37> I don't like larger frameworks because they force you to code in a particular manner which almost always deviates from the rest of the code I write.

Personally I prefer to use very small libraries that solve a specific need. TWIG for templates, for instance (used to roll my own). Limonade for a route controller etc... Then all I have to do is "glue" them together with minimal effort. Simple, effective and a low learning curve - can't really get much better than that.

</comment><comment><USER38> You can, but you wouldn't probably, like you wouldn't use Python / Ruby without frameworks. You can 'easily' code things from scratch, but you'll forget a lot of (trivial) features or have tons of bugs in things which are supposed to work. It'll take most people longer (while delivering worse quality) to get it done without a proper framework than with, even though a lot of programmers think they can do better on their own.

</comment><comment><USER39> I never use frameworks... I don't really see the point. Most of the time it's just a few SQL queries and a few if statements.

<comment><USER40> I have to agree with you. I'm using PHP for over 10 years now and I never needed a framework. Sometimes a little class or function is convenient but that's about it. Even for very big projects. Just use Apache/IIS/other as controller.

<comment><USER41>
      > Just use Apache/IIS/other as controller.

You must have some really interesting understanding what controller is…

<comment><USER42> He didn't elaborate but it's a valid point in the PHP world. Most of the PHP frameworks implement a front controller that all application requests are sent through, but for a lot of applications this isn't necessary in the PHP world. There's no reason not to simply divide your application into separate files and let your webserver call the right file. Particularly interesting is how similar mod_rewrite is to many framework's routes type implementation. You can practically stick the same config in .htaccess and just let Apache handle it.

For a lot of simple applications my "controller" consists of:

if($_SERVER['REQUEST_METHOD'] == 'POST') { // do my validation and any work needed then the redirect } else { // display the resource }

You might still call that a "controller" but it's pretty different than what most of the frameworks call a controller, and we've pushed the task of routing the request to the right piece of code off to Apache.

</comment></comment></comment></comment><comment><USER43> A couple years ago I wrote <http://fuelog.com> from scratch in PHP. It wasn't a terrible experience, but now I'm not even interested in maintaining or updating it.

I think it's a perfect candidate for a Google App Engine project and might migrate it (when I get some free time).

</comment><comment><USER44> > Summing it up, a framework tries to save you work by make you define an > overly complex configuration, that has to accomodate every possible use > case.

I guess if all you looked at was the Zend framework you would have this opinion. It's incredible inaccurate to say this about all frameworks in general though.

</comment><comment><USER45> I really only use templating and a DB class. Seems like one doesn't need much more.

</comment><comment><USER46> Many of my affiliate based site don't use any frameworks. Just a couple of php lines to get the data and voila. It really depends of your needs. In this case, there is not even security needs...! Why bother?

<comment><USER47> So if I request '/../../../etc/passwd' on one of your sites, it won't work? (Just curious. I've found it _really_ hard to get chroot'd php/apache working in all but the simplest of use cases.)

<comment><USER48> You shouldn't need to chroot apache to avoid serving /etc/passwd. I have never worked on a site with chroot'd Apache, and have never run into these kind of issues.

Are you setting your Apache configuration to only allow reading certain directories?

<comment><USER21> It's not just Apache you need to configure - PHP ignores Apache's directory access configurations entirely, you need open_basedir and preferably something like suPHP.

Disabling shell functions (system, exec, etc.) is also a good idea, unless the application itself requires them (e.g. if the host is too stupid/lazy to have the imagick extension installed and tells you to call /usr/bin/imagick instead...).

</comment></comment></comment></comment><comment><USER49> You don't have to use something as heavy as the Zend Framework. There are light frameworks like Code Igniter. I usually just code up my own simple MVC with a custom DB class that I re-use.

</comment><comment><USER50> lithium for php and connect for node are great examples of frameworks that only get in your way when and how you ask them to. yes, i realize these two are very different frameworks, but the point remains.

the benefit is that these frameworks provide you the tools to build what you want and how- rather than trying to create a one size fits all framework. even though lithium is mvc for instance, it can be componentized for your needs.

the consequence is somewhat less learning curve, and more importantly significantly less bloat.

</comment><comment><USER8> I don't know if it's just me, but every time a new framework hype arrives you get all this discussions between people who say wonderful things about it, and people who just hate them, or simply don't care.

As a professional web developer for almost 9 years and a web/internet enthusiast for, well…almost my entire life, I've came across with a lot of different ways of doing things. I remember when some people said "man, you gotta learn Flash/JAVA, it will be the end of HTML for good", I think Apple is laughing at them right now. Oh, and I never really learned flash, except for some little AS script skills. Point being is, technologies come and go and you either learn them or reject them. At the end of the day it's really up to you. Do you really want to kill a bird with a bazooka , or an elephant with a mouse trap ?

Today however, language frameworks are the ones in the spot light, you have, Ruby on Rails; Django; Kohana, etc.. and some people just simply refuse to use it. Why ? Well, some of them argue that in order to become a really programmer you need to know how to create a framework, you have to know how things are done. You can agree with them, in fact, if you are learning a new language, doing things from scratch can really help you. Or can't ?

It depends, are you a very good programmer ? Or a lousy one ? If you are a lousy one, chances are you will not learn anything by creating a framework, in fact it will even make you a worse one. Why ?

Well, a framework is a very overwhelming piece of software, it's like building a factory for creating not just one type of product but a lot of different ones. And if the factory is not correctly build, your products will not be good, or worst case scenario, your factory won't fit your needs in a long run. Besides, most of this custom frameworks are created by one person, which leaves them with a lot of stuff to think of, while open source can be contributed by many, and so it can get more stable much faster. And don't get me started on bugs and security. Also, the fact is, if you don't comment or document your code in a year or two you will not know what your code is actually doing, and then you start to think of creating a new one from scratch.

I'm against creating a custom framework without being Open Sourced. Nothing against custom code of course. But call it whatever you want, but building custom code should meet a very specific purpose. Look at Facebook for instance, they've created their own app, hell, they even created their own PHP compiler, but because they really need it. On the other hand you have Twitter with almost 7TB of tweets per day, and they are running RoR (Or were at least). So what's your purpose for creating your framework ?

In fact, I believe most of people who create custom frameworks for their own are unexperienced programmers. Why ? Most of the professionals programmers I know use or learn a framework, not because they don't know how to code, but because they've all done what the framework does, and we are sick reinventing the wheel every time. Been there, done that, got the t-shirt. So why waste more time creating it ? Why not just use that time to create something meaningful, instead of worrying about ORM, Cache, template, form validations, etc. It's old and it's boring. I could that if I wanted, but I don't have to, it won't add any more value to me as a programmer.

If you need something more specific that a framework can't do, do it yourself, nothing wrong about that, this is where you will learn something, because you never done it.

At the end, I believe that the good programmers who create their own framework are afraid of just letting go. Are afraid of stopping to worry about specific issues that their users won't even know it's there, like core code. It's like they need to do that from bottom up, in order to believe that they are the hardcore-kick-ass-coders.

So, do you still need to create your own framework ?</comment>


Using Heapshot (OS X/iOS) to Find Undesirable Memory Growth - <AUTHOR> http://www.friday.com/bbum/2010/10/17/when-is-a-leak-not-a-leak-using-heapshot-analysis-to-find-undesirable-memory-growth/ <comment><USER2> Instruments is capable of so many amazing things and yet it seems like practically nobody knows about it.</comment>


The Dying Web - <AUTHOR> http://allenc.com/2015/04/the-dying-web/ <comment><USER2> Mobile apps have the same chance of replacing websites as eBooks have of replacing printed books. At least in the near future. The reports of their demise are greatly exaggerated. In truth, eBooks and mobile apps are still a tiny fraction of the total markets, respectively. It is a lot easier for a new technology to exhibit rapid growth than it is to sustain it as it gains market share.</comment>