Why must you laugh at my back end?
blog.pud.com
blog.pud.com
I'm working on such an app now, and right now the fastest way I can get anything done is writing similar code to what I wrote in 2003. It's not quite as bad, but I continually succumb to doubt. Shouldn't I be using a framework? Wouldn't Python or Ruby be a better language to use now? Is it 'cheating' if I just throw these form elements in an HTML table? Shouldn't I be using something more scalable for the backend than a default installation of MySQL 5.1?
And yet, every time I try and address any of the above, it just gets frustrating to me. I have a limited of free time to work on this web application each week. So I want to spend that time actually DOING things with my web application, not just ramping up on learning some stuff so that I can maybe do some things a few weeks from now. This web application is getting a bit of traction with users. I always figured that I would eventually "code myself into a corner," and that making these suboptimal technology stack choices would result in me hitting some local maxima that would bite me in the ass and I'd have to basically rewrite everything.
But after reading this blog post, I feel a lot better about my choices. If this guy can make his web application work with the technology stack he prefers, then so can I.
I cannot see what is wrong with your using plain PHP if you can get the job done faster (as long as you avoid things that make exploits easy, such as raw mysql db functions). When the time for a framework comes, you'll know.
Stop worrying about what others think and good luck!
(I had a background in PHP, JS, C++) 1. Off hours on 2-3 days with dive into python 3. 2. A month later - 'oh let's do this in python!' on google code jam 3. 'python challenge? that's cool' - one night hackathon a month later 4. 'I hate php, I'll do this new web app in django' 5. Two days messing with django 6. Five days and the app was done.
I don't know if I write 'best practice' python or django but it's about x6 less code than in PHP. I can rewrite my app completely in 2 days.
For me, the biggest problem in learning a new technology is finding the balance between cowboy hacking & analysis paralysis.
Just curious... Surely you mean django vs php (not zend or some other framework - which _would_ have been the fair comparison.
- Kohana: ~200 lines of code. - Django: 15. Seriously.
That's one, and it's a big one.
The other, even bigger benefit is that other people will do things for you. They'll write plugins for you. They'll develop new versions of the framework for you. They'll do crazy experiments in corners of the framework design space ("Hey, can we make Drupal work with a CouchDB back end through a series of proxies?") and report the results in obscure Stack Overflow posts that will get indexed by Google. They'll find and fix bugs and security holes for you. When you ask one of them about some problem in your system, they'll have a fighting chance to give you useful advice -- even if they've never actually seen your system -- because, hey, all Rails apps are kind of alike, and all Drupal sites are kind of alike, and all node.js installations are kind of alike.
The fact that this is the major benefit of using a common framework is also the reason why the poor OP feels so lonely. The whole point of a common framework is to have lots of meetings and rallies and beer bashes and hackathons and IRC channels so that everyone can swap ideas and recruit each other and basically work in a big team. They generate their own buzz, because the buzz is part of the value. But hand-rolled personal systems don't get that kind of buzz, because -- to paraphrase the ever-paraphrasable Tolstoy -- all standard web frameworks are alike, but all nonstandard web frameworks are nonstandard in their own way.
look at wordpress, joomla, drupal
You have to stick the layers together at some point, but you'll still probably be better off keeping the glue out of your "business logic".
The biggest objective problem this style has is that it affords everything-injection; cross-site scripting attacks, SQL injection, command injection if you're using shell commands, etc. Every time you bash one string together with another one, you run the serious risk of introducing a security attack, and with this style of programming, you basically have to be thinking about every single string concatenation.
Using a framework that will take some of the cognitive load off can be a net gain. It need not be a Glorious Framework, it just needs to be something that makes doing the right thing easier than doing the wrong thing.
Otherwise, most of the rest of the pain will be felt by you, not your customers, so hey, whatever, go nuts. But this is a legitimate objection to this approach. (And a legitimate objection to every framework that fails to make the right thing easier than the wrong thing, which is still a great deal of them.)
I agree with the sentiments around here, though. If the goal is to write software that works and hopefully makes money, do what you know and ignore this year's hot new framework/language. Write readable code in case you need to refactor it later.
As a note, I would recommend Kohana (http://kohanaframework.org/) over CodeIgniter, but if you're pushed for time, you don't want to deal with a sparsely-documented framework ;)
I'd consider Symfony2 for most applications, or Silex (which is the Symfony2 app kernel, stripped of the majority of the Symfony2 framework) if you like writing the plumbing yourself. Yii is pretty nice, too.
Kohana also has the worst documentation in the world. Seriously. It has very clear comments in its source code, though.
(I still wouldn't use it because frankly, I don't think the Kohana developers take security seriously enough, but it'd be a start.)
If you're only worrying about injection attacks "...after you gain some traction" or "...when it becomes an issue" you're already too late, and I don't ever want to trust any of my private data with you, ever. This is the 21st century. Scrubbing and validating user input is _trivial_ now, framework or no.
Please, please, please, everyone who reads this, spend a day reading the OWASP guidelines, and _use_ their sample code. This isn't difficult, and it makes your applications a million times more secure _on_ _day_ _one_.
This sort of behavior is why the rest of us get a bad rap.
http://blog.moertel.com/articles/2006/12/15/never-store-pass...
Needless to say, almost 5 years have passed and they're still around :) their traffic probably a couple of orders of magnitude higher. I was there when it happened, and yes, probably some Russian hacker or whatnot has my password from there, but that's not such a big deal because reddit doesn't know my name, doesn't have my CC number or any details related to my life.
Now, were this to happen to a company that has a lot more information available about each and every one of us stored in one central place (think Google or FB), then things could get really nasty. And I'm not talking about stupid mistakes like the one from above, I'm talking about MITM attacks orchestrated by (vicious) Governments, or cyber-warfare, or just plain old NSA not having to bother to collect information from a myriad of places anymore, when they can just go directly to the source.
I did not say you couldn't build web applications if you were a jerkass who was cavalier with the security of his users' data. I said you shouldn't.
That would have left us without reddit, I don't know about you, but without it the Internet would have been a lot less interesting.
First -- "the chances of that happening is very low." Let this be an education; there are automated toolsets that seek out and exploit known vulnerabilities in software across the entire Internet. If you have a public-facing website, you will get attacked. Period. The chances aren't "very low", they are a certainty. There are also toolsets that are used to do much more low-level scans for things like XSS, SQL injection, etc. These are commonly used by security auditors, but are also used by 13 year old kids who want to compromise your site. Again-- the chances aren't "very low", they are a certainty.
Next -- "...but the priority in any business to make profit first." State attorneys general are very quickly drafting personal privacy laws. I believe Massachusetts and Nevada are leading the way here, whereby any personally-identifiable information is _required_ _by_ _law_ to be held to the same rigorous data protection standards as PCI. If your site is breached, you will get sued, and you will lose.
Following OWASP takes maybe an extra day's worth of time out of a developer-- saying that you're just going to ignore it because hey, what's the worst that could happen -- again, I would ask you to list what you're building, so I can avoid it forever.
That said, one of the things that (hopefully) comes with experience is knowing when and where to cut corners. Basic security practices are one place where you need to bake your understanding into everything you do from a low level, because security is one of the hardest "features" to retrofit. Also because basic security does not have to be hard. Hell, you can make an informed decision not to use SSL on your login page, but it must be just that, informed.
Unlike the language du jour, security principles are something that will apply to all programming you do for the rest of your life. So, though you may decide not to use trendy framework x, y or z today, failing to learn basic security and apply it consistently will slowly turn you from a young developer with bright ideas and a lot of potential, to a middle-aged hack developer with a defensive chip on his shoulder.
1) upload scripts to send unsolicited email, getting your IP address banned.
2) upload scripts to scan the internet for other targets (most common---an SSH scanner)
3) modify the HTML output to leak Google Page Rank to questionable sites, which risks your Google Page Rank.
4) passwords of users, who typically use the same password on other sites.
5) setup an illegal file trading section, hidden from most users (anything from music and films to kiddie porn (saw this first hand, and what once was seen can never be unseen---shudder))
6) IRC clients to control botnets.
I've seen all of these first hand working at several web hosting companies. It's more than just "credit cards."
Stop doing it right now.
There are automated tools that detect injection vulnerabilities and people who will hack you for a dozen e-mail addresses and passwords (and, possibly, control of your server). Sanitizing user input is easy.
While I agree the odds of gaining lots of traction are small, when you do, it hits you very fast. You should at least know the hot spots of your application so you can optimize them easily when possible. I am not telling you to save user registration data on a Cassandra cluster just in case, but employing good algorithms when possible. My apps usually are able to generate JMeter config files that make load testing with real data very painless.
So many times in startups and new endeavors, getting things out is far more important than doing it "right". It's stinky, but it's a reality. If your checkbook, bills and time say one thing but your code says another, your checkbook/bills/time win - always. And the person who can pump out more working (working, not necessarily pretty/proper code-wise or stack-wise) apps wins (even if they lose, they win, based on odds - more attempts means more possible chances at winning).
It's worth noting that it's not limited to computing either. Countless amateur photographers spend their time discussing hardware, rather than techniques and other aspects that would benefit their craft to a much greater extent.
Personally, as much as I'm fascinated by the tools, I'm much more curious about what you do with them. So I'm always glad when I see someone succeed and create something useful with an odd stack of technologies. It reminds me to focus less on the tools and more on the creation process.
You see the same thing among firearms enthusiasts. It's fairly common to find people that spend (tens of) thousands of dollars chasing the best gear, but won't spend $2-400 on training from a reputable instructor.
And kayakers. I've lost count of the number of times I've had someone's shiny new boat (closely followed by an expanding slick of random gear) float past me on class III+ runs.
And hikers. Ever see a day hiker doing a mile and a half loop trail wearing a $350 hydration pack, $150 trail shoes clad head to toe in North Face gear?
And blacksmiths. Endless are the rants on why a $800 Beverly throatless shear is infinitely superior to an identical model from Harbor Freight that costs a mere $90.
And car enthusiasts. Ever see a $90,000 sportscar dinking around in traffic on a Saturday afternoon?
See a pattern forming? People (mistakenly or otherwise) attach prestige to the latest expensive gear, regardless of the activity in question.
Which reminds me, I should stop reading HN and get back to work.
(2) This technology stack sucks.
(3) That your technology stack sucks does not mean you suck.
(4) Maslow's Four Stages of Competence starts with Unconscious Incompetence. You don't even know you are unskilled. (http://en.wikipedia.org/wiki/Four_stages_of_competence)
(5) This isn't a popularity contest. (http://www.ribbonfarm.com/2009/10/07/the-gervais-principle-o...) Being cool and being in the in-crowd has nothing to do with your technology stack. That goes for nerds too (http://www.paulgraham.com/nerds.html)
(6) The tone of this article is defensive. The issues relates to identity, not technology.
(7) Relax, people.
Unlike chess, stones don't move once played. They can only be captured. On a 19x19 board, you have to balance short-term gains with long-term gains. Since there are no left-right or top-bottom orientations, you often have to reimagine where you draw the lines of territory as you play. Sometimes, you can kill your shapes by playing too many stones. Better players can see where things will go, identify "dead shapes," and stop wasting time trying to rescue them. Sometimes you trade off bad moves for bigger gains. Sometimes you simply have to work with mistakes you made in the early game.
This is very much like writing code and getting it to market. You're trying to build something despite disruptive opposition even as the clock winds down.
Therefore the analogy of Go justifies spending time making good shape with your code as you go along.
I'm glad you said something about shape. It's something I'm stumbling through right now.
http://www.gobooks.info/k73.html
The problems are very challenging, but that shouldn't stop you from thinking about them and then enjoying the enlightenment of the answers after a minute. Very helpful material! Best of luck in your pursuit of a better game
That said, I'm very confused. The post says these sites are running off of your "awesome" backend:
* http://www.pud.com
* http://adhdinc.com
But those are just pages with links to other services? Furthermore, while some of those services (TinyLetter, FaqMe) do seem to be produced by ADHD, others (Blippy, AdBrite) do not seem to be, though it seems you claim to have participated in them in some way, shape or form.I don't really care one way or the other, but my real question here is: Which websites in your list are actually running off of the backend described here?
I co-founded both Blippy and AdBrite but did not have technical roles there, so they have nothing to do with this stack.
Using IE, it's black text on a very dark gray background. I can read it, but just barely.
[2] http://blog.mailchimp.com/mailchimp-acquires-tinyletter/
Or what your backend is like as long as it works.
They just want their lives to be easier.
Use what you know, use it well, and make a difference.
---
Most techies who have a negative opinion about any technology do it with hearsay and not first hand experience.
For examples, all web languages pretty much do the same stuff, and you'll rarely come across a web app that uses a language in a novel way that actually makes a difference which language you use. They all have their pros and cons, it just depends on what you want to coo / boo over.
To be fair many haven't accessed the tools that may require money to use. Alternatively others might not have had the luxury of free time to learn something on their own. It's not better, or worse, just different. Sadly a lot of devs build wizardry to make their own lives easier and avoid tackling making their users lives easier, and that shouldn't happen in any language.
All that matters is can you deliver a result that works well. If techies spent as much time obsessing over improving their skills and finding way to build valuable solutions than which tools to use, they'd know this.
For those who hold a holier than thou attitude in believing the only way one can correctly create and innovate with a computer (software included) need to be from narrow list of tools/education fields, they forget that smart people can often learn to be great at more than one thing:
"I was lucky to get into computers when it was a very young and idealistic industry. There weren't many degrees offered in computer science, so people in computers were brilliant people from mathematics, physics, music, zoology, whatever. They loved it, and no one was really in it for the money." (Fortune) Steve Jobs
Get building.
You'll find that even when you have first hand experience, you'll often be met with "well, you didn't do it right". Or "you need to do XYZ first - no one ever does foobar with XYZ first - are you stupid?". And so on. Even first hand experience isn't enough for some fanboys when you choose to reject their tools/languages.
Love and power to anyone doing anything good out there with the tools that enable to do them.
As for the fanatics who can't change the topic (to keep bashing) or change their mind.. I hope you can see the forest for the trees one day.
Imagine what it would feel to be supported by a developer of any language and doing the same for others. We should cheer accomplishments, not berate, belittle and attack others without a track record of our own.
When it comes to getting opinions, I learn a little more every day to ignore anyone who is a perfectionist and hasn't accomplished/launched/profited. It's the enemy.
Scaling/rebuilding/whatever you're afraid of is okay when you're growing and profitable. No business built itself in one version.
Remember, In 10 years you might have forgotten about the tools you're so passionate about today.
More human nature than irony, I'd say.
This is more a result of our tribal tendencies which manifest themselves in a number of ways: including xenophobia, racism, nationalism, religious discrimination etc...
edit: Tarsems
No talking until the food is walking!
I've used PHP. Trust me, it sucks. It's not worthless, you can certainly build successful whatevers with it. But, it will suck. Perhaps in ways you can't even imagine cause you've never learnt a non-sucky language/system.
So big ups to pud for his post and his peculiar stack. In its own way, it's a very cool and imaginative stack. And it works, which I think is the only thing that matters in the end.
Also, in your view, how is talking about data structures any better than talking about languages? Wouldn't that just be "indoctrinating me on the benefits" of your chosen data structure? If the only thing that matters is that the program works, then why does it matter what kind of balanced binary tree is in use behind the scenes, any more than the language matters?
Tools do matter. Maybe you're not interested in incremental improvements in your productivity as a programmer, but those who are will probably spend time talking about their tools (hopefully balanced by spending even more time actually using them).
Obviously not every software tool discussion is as exaggerated as that, but even if you're arguing Django vs Rails, there really are significant differences that could affect your work in dramatic ways (e.g. one framework has a plugin that would take you a week to write, while the other doesn't).
What you actually wrote (and what this article partially argues) is that the only thing that mattered was that it worked, which is a statement people can disagree over. Working isn't a binary switch that flips when you launch, any discussion of the value of something as complex as a piece of software has a lot of different dimensions. After all, bubble sort "works" too, but you'd be a pretty terrible computer scientist if that was as far as you investigated the issue.
I have a theory that people act this way because of evolution.
--------------------
Imagine you live in a tribe of 10 people, and there are 5 different ways the entire tribe can use to hunt animals for food. All 10 people must hunt together, and each of the 5 ways are equally successful.
After an animal is killed, the tribe determines who was most responsible for the kill, and he/she gets to pick and eat the tastiest meat before anyone else. Others' still get to eat, but it doesn't taste as good.
If all 10 hunters are equally skilled, each will get tasty meat 10% of the time regardless of the hunting method. But humans are not all equally skilled. Some can throw spears better than others. Some can run fast. Some can sneak up quietly. Some can climb trees. Some can wrestle a wild bore.
So what happens? Before a hunt, if you're a fast runner, you say "Let's chase after an animal!" If you can climb trees, you say "No, let's drive an animal up a tree, and climb up to kill it!" You push for the option which gives you the best chance eating tasty meat, and do everything you can to stop any other hunting methods.
Things get political. Someone says; "Running after animals is too much work! Lets climb trees instead!" You say; "Bullshit! Climbing up trees is for pussies. Real hunters run after their food! Plus, we have to see your nasty balls every time you climb up!" You support your cause, and do everything you can to demonize and discredit other options.
Through politics, arguments and fights, you might be able to sway the majority opinion of your tribe in your favor. "Yeah, I guess I don't really like climbing trees either; I'm sick of seeing that guys balls too. Let's run instead!" Now, your entire tribe runs for food, and being the fastest runner, you get tasty meat more than 10% of the time.
--------------------
So my theory goes, when you see someone arguing about something pointless like Windows is better than Linux, even though both are pretty good, what they're really trying to do is sway the opinion of the entire world in their direction. If every company dropped Linux in support of Windows, there would be a lot of Linux sys-admins and programmers out of work. Sure, they could learn Windows, just like a slow runner could learn how to run fast, but they would be at a disadvantage compared to seasoned Windows admins.
The same thing happens with programming languages and APIs. These can be very volatile, going from extremely popular and hot, to nobody wants to touch them in a few years.
When you see someone arguing about what color is better, they're using the same algorithm, only it's firing on something seemingly trivial. But is is? Perhaps if you convince enough people that red is better than blue, the next Macbook Pro you want to buy will end up red instead of blue. Unlikely, but possible...
Furthermore I doubt that the motivation behind arguing about 'pointless' topics is to sway the population to your side so that you can benefit.
Unfortunately, however, I do not have an explanation as to why people may argue over such topics though I suspect that it may be related/due to cognitive dissonance. There is a conflict between what they have concluded and what someone else has concluded. This could be for many different reasons such as different needs, different preferences, or different skills, but on the surface someone else has made a different choice for what seems like a similar task.
Actually, what this means is that you shouldn't hang out with douchbags, programmers or not. As I can guarantee you, there are just many non-techie douchbags as there are techie ones.
Never heard of that database/company before so I clicked on the link out of curiosity and guess what, their server is down. Not very reassuring for an "infinitely scalable solution".
1. Better tools make you more productive and make larger problems tractable. Using outdated or subpar tools seriously limits your options, especially if you need to compete with professionals. The simpler your problems, the less this matters.
2. It's easy to get sucked in to constantly learning the new language/framework/toolset when you enjoy learning these things, finding the balance between the diminishing returns of trying out new tech and being highly productive is difficult. Welcome to life.
3. Some people on the internet loudly engage in ignorant fanboyism, especially if they see smart people using their new piece of tech and figure they got onto a good idea early.
4. That same fanboyism defends crappy tools because it's human nature to feel that kind of tribal defensiveness when you've invested a lot of time learning and using something, this is especially strong when someone has all or most of their experience with a single tool or set of tools.
Here's an idea: in the real world tools and productivity are tied in a complicated way.
The comments "it doesn't matter what you use, just keep getting things done!" is just as stupid as "stop working on things and upgrade your skillset immediately!".
Since this is aimed more at the commenters than at pud's submission I will say to him: You are impressively productive with that tech stack, it really doesn't look like it would be difficult for you to move to something more powerful than cold fusion at least. You seem like a pragmatic guy who can see the future payoff from that investment. You also look like a young guy who should not be ignoring the kind of commitment to life long learning necessary to compete in this industry.
And Windows is only a penny more per hour on micro instances (although that is 50% more than Linux) -- but quite a bit more on larger instances should you ever have to scale up: http://aws.amazon.com/ec2/pric...
Re database choice -- http://xeround.com is totally down right now... Thoughts?
I dunno, just seems like a world of hurt should you actually have to scale up -- but presuming you do, perhaps you'd have the funds and/or resources to cover it anyway.
Additionally, How on earth do you hire people to work in this stack?!?
If you're not on 'CFML entrepreneurs' on Facebook you should be.
good times... good times..
We've all worked with technologies that cause us pain in our development process. Sometimes, the pain becomes so great that we look for, and find, something that we like better. Changing to this new techonology eases said pain, and allows us to be (or at least feel) more productive.
I believe it's possible that some people laugh because they remember when they used one or more of those technologies, and the pain they felt while using it. They laugh and suggest other technologies because they assume you have the same pains they've had, and they'd like to offer you what they consider a better alternative that might ease some of the pains. After all, it worked for them!
It appears that you've had some pains with this stack, but that you've found ways to deal with those pains that don't involve leaving your current technologies. Good for you. You've built successful applications on them. Also good for you. These are, of course, the things that really matter.
> CFML. I really like programming in CFML (a programming language, “ColdFusion Markup Language,” as opposed to ColdFusion, a commercial CFML interpreter made by Adobe). I know it’s not "cool" like Node.js or Clojure or even RoR.
Doctors used to bleed people with leeches to get out the "bad humors". They stopped using that "tool" for a reason. It was a bad tool, and better "tools" came along.
Not only is CFML not cool, it is hard for most people not familiar with CFML to understand [1]. The syntax mixes in with HTML markup in such a way as to make it very difficult to distinguish the two apart. With a syntax highlighter your mind still has a hard time as there isn't enough of a difference to make a subconscious context switch easy. Also, the need to cram logic constructs into HTML/XML-like syntax makes for some screwed up code. My understanding is that you can put the attributes for the tags in any order, and that means that things you'd always expect (in other languages) to appear in a certain order, like conditions for statements, are instead a matter of style [2].
> It’s got an old vibe. Not just because it was the first made-for-web programming language (tho it’s modern & updated frequently), but because whenever I meet other CFML coders, they’re always old dudes.
My experience with CF developers is similar. This is not a good thing. This is nothing like the C and C++ graybeards you occasionally meet and develop immense respect for. These old CF developers are, in my anecdotal experience, the kind people that learned one type of development and stuck with it for a long, long time. They've not really improved their skill sets beyond what was popular practice when they first learned Cold Fusion. These are the kind of people (I kid you not) that think HTML tables are a great way to get your page layout just right.
Why did the OP take an entire blog post to say what could have been posted to Twitter ("you darn kids and your twittin'!")? The whole post boils down to what appears to be proud, willful ignorance.
A lot of "you're a developer, but you really should learn about business" stuff gets posted to HN. This case looks to be turned around and we have a business person doing double-duty as a developer. My advice is to learn something more current, and not because it's cool. More current technology has business value in that it's easier to find people who can work with/on it, and you will be able to find more of those kind of people for longer. The underlying tech will also (usually) be supported for longer, and by a wider range of companies. The reasons are too many to comprehensively list here.
I wasn't laughing at your back-end, by the way. It made me a little sad.
[1] http://www.quackit.com/coldfusion/coldfusion_tutorial.cfm
[2] http://www.quackit.com/coldfusion/tutorial/coldfusion_loops....
> Some people write crappy code in CFML.
Yes. But people write crappy code in [your preferred language] too. There's nothing inherent in CFML that forces people to write bad or hard-to-understand code.
> OMG can you believe some people still use TABLES???
view source
> Some people write crappy code in CFML.
Yes. But people write crappy code in [your preferred language] too.
No, I said CFML code is universally hard to understand. Even more so for people already familiar with more popular languages. > OMG can you believe some people still use TABLES???
view source.
That example was given to make a point about dated skill sets. I didn't imply that your Tumblr blog was table based.Edit:
To InnocentB's point about HN's HTML. Does anyone here think HN's markup is meant at all to be inspirational? My take has always been that pg has priorities, and a layout for HN firmly based on cleaner HTML & CSS isn't high on that list.
However. A lot of the leeway in technology choice you might have as a lone-wolf entrepreneur fly out the window once you grow beyond that. If you have no intention of growing beyond, go nuts. Use whatever makes you happy. If you do want to grow more, then be prepared for a rewrite.
Yes, it's one of the most usable and beautiful sites on Internet.
If you don't like tag based language, you can use pure scripting in CFML pages. Also, nothing in CFML requires or even leads ANYONE to use table based layout. I don't know where you got that idea from.
When i first looked at CFML I had distaste for what i saw. The problem is, what i saw was other peoples bad code. Once i really dove in and started writing CFML myself, i found it is like any other language in that, you can write beautiful, clean, easy to understand and modify code.
CFML has a LOT of things built into it that make db backed web development VERY nice, including:
Db queries and transactions as a first class language member. Pdf generation, ftp access, email sending, graphing, ALL are first class language features, not to mention native use of java libraries.
Don't get me wrong, i see the value in frameworks like ROR. I just think CFML gets a bad rep when it does not deserve it.
And for a second I was excited by first class transactions.
Thanks for the correction!
I like modern markup and layout better than the way things used to be just like almost everyone else, but It's hard to come up with an argument for switching HN to more modern markup. It wouldn't make the site easier for PG to maintain, and it probably wouldn't result in a change to the visual design unless a designer was brought in.
<cfscript> if(noob) { greetings = "Hello Coldfusion N00b"; } </cfscript>
<cfoutput>#greetings#</cfoutput>
Are you trying to tell me that PG is not a web designer?!
That's basically the majority of developers, in any language.
I'm not going to bother defending the mindset of the author, though I suggest that if you examine concepts like toolset familiarity, code craftsmanship, and zen, you may see that his way is a path to happiness. (and honestly, from what I recall of CF in my college days, I liked it no less than PHP)
You have a point there, but I'd argue that on a platform like the web the impact of skill stagnation is much bigger.
People writing CFML today use MVC frameworks, use ORM and the cloud. Yes it is still easy for beginners to write bad code, I think that may be more true in ColdFusion than in other languages. But getting started easily can also be a virtue.
You might be surprised but a lot of the ColdFusion community don't have tunnel vision and are familiar with a lot of other languages.
http://www.bennadel.com/blog/2061-Seven-Languages-In-Seven-W...
http://corfield.org/blog/post.cfm/learning-clojure
Sometimes another language is a better choice for a given task. We write CFML because we like it and are more productive in it, even if it isn't cool.
But why? If they had to energy to create those frameworks, why didn't they invest it into moving on to a better technology?
Is there are good replacement for HTML tables yet that works well in all browsers?
I'm talking about for things that actually need to be laid out in a grid, which, in my experience, is many things. Grids are fairly fundamental to layout and design.
Besides, these companies have absolutely zero valid reasons to keep using this crutch - it's severely outdated, a giant gaping security hole and a hindrance to the entire world wide web.
And no, legacy applications built upon IE6 on which some corporations have based their entire internal communication (or other things) are not an argument for supporting IE6, but instead gives us all the more reason to force them to get rid of it.
CSS support is a lot better and more consistent across browsers now than it was even just a year ago, and there are CSS 'frameworks' that make grid based design a trivial task without cluttering your page with table markup where it's not required.
There are even plenty HTML5 'frameworks' (or templates if you prefer) that take backwards compatibility and such like into account so you don't have to faff about with all that yourself.
http://www.blueprintcss.org/ http://960.gs/ http://html5boilerplate.com/ http://www.initializr.com/ http://codekickoff.com/
I'm going to rant now.
It think it is ridiculous that people get away with stating that one shouldn't use tables for layout because "Tables are for tabular data".
What is a table? It's a grid! And grid-based CSS layout frameworks are the new hotness; eg:
http://developer.yahoo.com/yui/grids/
http://www.w3.org/TR/css3-grid-layout/
(And look! Many of these are exactly what you listed!)
CSS has many wonderful features. However, I think the "tables are for tabular data" is an intellectually lazy argument that needs to die.
CSS should be used because of what it can do for you - not because of some theoretical argument about the purity of tags.
I got out of ColdFusion 8 months ago into PHP, which isn't exactly known as being a hotbed of good code. I feel like just a mediocre programmer at the currently company I'm at would be a way-beyond-stellar ColdFusion developer. Of course this is all anecdotal and hearsay, but my experience is in line with yours.
[1] http://www.advantexllc.com/blog/post.cfm/how-oo-almost-destr...
[2] http://www.remotesynthesis.com/post.cfm/Objects-and-Framewor...
Perhaps, but I kinda liked the contrast to the constant stream of proud, wilful "Clojure/CoffeeScript/CaramelMacciatoScript is the new black" hipster-sounding posts on HN.
How many blog posts couldn't be boiled down into a twitter post? The fact that something can be transformed into a 140-character blurb for teenagers with short attention spans does not mean that it should be.
> The whole post boils down to what appears to be proud, willful ignorance.
You whole comment really comes off as a bit short-sighted at best. The whole point was to share the way he gets stuff done. The fact that you do things a different way does not make his way wrong. Automatically assuming that your way is best is a sign of professional immaturity.
C is a lot more archaic than CF, but sometimes it's the right tool for the job. Archaic doesn't mean wrong. I certainly don't want to program in CF, but if someone else does and it works for them, then more power to them. As others mentioned, this is at least a nice counterpoint to the Latest-AwesomeYetUnproven-NoSQL-SemiFunctional-Framework/Language stuff that flies about so much.
Oh, and they still do leech therapy. The humor theory was bunk, but leech therapy can indeed have benefits.
While I agree that it's a good general rule to use CSS/divs, if something is taking too long, my philosophy is that you should just make it easy on yourself and break out a table, especially if the layout is something obviously tabular visually.
Another advantage is that, it has a very short learning curve. But like with any tool, it can be used by amateurs to produce amateur looking code. Using a framework (eg. FW/1) encourages better structured code and OOP approaches.
You can meet most of your web needs with ColdFusion and some highly specialized items may be more complicated. But that is the case with just about any language. The only part where I havent found sufficient documentation or user experiences related to scaling applications. That is not to say, it hasn't been done.
Given the relatively high price of Adobe CF (compared to Ruby/PHP etc), it is not really an option that startups (in the Bay area) will consider. There are open-source CFML engines like Railo as the author notes, but unfortunately, it lacks publicity.
CFML verbosity and the entangled html is a downer though.
It's wonderful to have access to those in a matter of minutes if you are starting with a new machine...
Personally I don't use Dropbox for anything minimally sensitive (basically, anything that I haven't downloaded from the web) without putting it on a Truecrypt container. Maybe I'm just paranoid, though.
* rapid development tools (at least for him) * scalable, low-maintenance backend * affordable infrastructure * automated deployment * automated backups
This is almost a Joel Test for web startups.
I am also surprised someone claims it's faster to work on Windows than it is on a Unix-like OS. Most of the things I do on servers are moving files around, installing/updating packages and occasionally restarting a daemon. For that, clicking and dragging on a remote GUI is much less efficient than issuing equivalent commands in a shell.
I also read IIS progressed a lot since I last had to automate virtual server creation. Again, Apache runs on Windows and spitting (usually rendering from a template and adding custom values) a new config-file and doing a graceful restart appears simpler than right-clicking, form-filling and manually copying settings from one place to another. Windows doesn't even offer the courtesy of select/middle-button operation (unless you are operating IIS from the console).
Like someone else said, unless your infrastructure fails miserably (and CF/Windows failed me long ago) your app won't suck because of the technologies it stands upon. A good idea implemented in CF, PHP or ASP is just as good as a good idea implemented in Django or Rails or Node or Lisp. It's just that it may be harder to evolve it over time, or make it scale, or deploy it in the first place.
I know the problem to laugh about code, backend or infrastructure. I know a lot of people are opinionated and if they don't like something you can't stop them firing on you. I'm very happy for you that you found a stack which works for you HOWEVER this doesn't mean that it works for others. A lot of programming languages, paradigms, frameworks and infrastructures just work for one guy on his greenfield project but while getting bigger things get lot harder and crappy cause it isn't modular enough or no-one understands "the legacy code" ect.
At beginning it seems like you can't run into such problems but after a couple months of development this happens nearly in every project. You learning from these mistakes and get better with every project. There are a lot of things in software development people are talking about but you can only truly understand it when you came to the point where you have this problem people are describing to fix.
For example a lot of my old colleagues are in love with PHP. They get stuff done with it and somehow they get code shipped but they don't go for elegance and having less code smells. They just go for "it works what you want more?". Software development is not only "it works" it is far more than that! Maintainable code, readable code, performance, architecture, elegance (for example: less readable code which covers the same as before) you name it.
I found my self learning a lot from different languages, paradigms, people and different systems. For example what I love about linux is: I could write a automatic shell script to do anything. With Windows you can't! You just can't write for every step a shell script a lot of things are only available through the GUI. This bad. I don't like that. And I also don't like to run the GUI on a server. You are wasting a lot of resources here.
How do you edit the Cold Fusion?
It's a cool domain though, how many three letter .com domains out there?
P.S. That's a nice looking backend
As for your situation, my cable company's upstream is so slow that I wouldn't host anything on it. But if yours is fast and you like dealing with your own hardware, go for it. Maybe you'll be the next Rackspace :)
HTTP Error 503 (Service Unavailable): The server is currently unable to handle the request. This code indicates that this is a temporary condition and that the server will be up again after a delay.
I work in 7-8 languages, was just wondering referring to my post: - What was your experience with CFML that made you cringe - Is it possible the same can happen in any language - What is better, in what way?
Always looking to use better tools if they really get more done with less effort :)
My primary complaints were (as everyone) the verbosity - I've never seen a more verbose templating system, which led people to copy and paste all around. While there were some CFCs, those were mostly for tying to java backend. All this could happen in ASP, for example, but CF seemed to make it painful to do the right thing.
Of course it could happen in other languages, but my experience let me to cringe whenever CF was mentioned.
The OP used Microsoft already, so I'd look along those lines for him, even though my professional life is in java (95% javascript/HTML application with minimal templating from JSP)and my current weekend project is in rails. Razor looks like a nifty templating engine in ASP.NET MVC, for example.
Interestingly, I didn't know ECMAscript (aka Javascript) is too verbose for folks out there.
It turns out that CFML has two syntaxes, script and tag.
The tag based html-type that's being discussed here, and and cfscript.
Cfscript is is nearly identical to javascript and based on ECMAscript. Several languages follow ECMAscript.
In a way, if you know HTML and Javascript, any language should be easier to pick up than a language that looks completely different from HTML and Javascript, no?
Googled and found: http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0...
ECMAscript: http://en.wikipedia.org/wiki/ECMAScript
http://www.clearcrystalmedia.com/pm/full-cfscript-cfcs-not-w...
http://www.forta.com/blog/index.cfm/2011/2/4/I-Am-Not-A-Fan-...
I can speak to a similar adobe product, Flex (and MXML/ActionScript) and at least there, Adobe tried to figure out what would make most sense in MXML, and then the ActionScript interface fell out of that, rather than what made sense for an ActionScript interface. Then, Adobe pointed everyone to the MXML as documentation, rather than having a separate documentation for ActionScript. However, things didn't work exactly the same.
Perhaps life is better in CFland, but Adobe has seemed to have "good enough? Then ship! Our devs will figure out workarounds." in their DNA. Looking at this thread -- http://forums.adobe.com/thread/507720 -- it seems ColdFusion is no exception.
(Just a joke, nothing more.)
it's true that the laughter is unnecessary, and the trends and hype can be obnoxious, but it is somewhat about the excitement of always learning new things and new ways to think.