24 years of Delphi and Delphi 10.3.1 is out Today - <AUTHOR> http://blog.marcocantu.com/blog/2019-february-24-years-delphi.html <comment><USER2> For almost 11 years now, I've been working professionally with Delphi. And it would be wrong to say it's been a smooth ride. There's nothing wrong - per say - with Object Pascal. Or rather, it's not worse than C++, but Delphi - i.e. the library and IDE - is what's lacking behind.

It was definitely cutting edge in the mid-90s, but it has not managed to keep with the times. Most Delphi developers rely on Indy, a third party library of various classes, that provide a lot of functionality the base library should have provided. And even Indy isn't that quick at picking up new features as the world moves on.

When Embarcadero took over from Borland around 2009, they clearly tried to move it on a direction that would encourage more developers. They created ways to build your Delphi application for iOS and Android, which was meant to get more people to write Delphi. It didn't, since the IDE still cost over $1,000 a year. I'd imagine the people who used that functionality were those who were already 'stuck' with Delphi.

Indeed, even as one who engages a lot in the Delphi community, mostly through necessity, notice that very few people join the community without having some legacy application to maintain. And the community as a whole is dwindling anyway.

Embarcadero should have focused on core aspects of the language, which they are finally getting around to. You can now declare variables in the middle of function? That's so 21st century! (Although the forward compiler can't figure it out, so you'll see a lot of red lines in your IDE if you do.)

I won't be writing Delphi professionally a lot longer, though. As I am taking a new job this March, where I am moving on to Go. So it's more a bittersweet good bye for me. Because Delphi is frustrating to work with on a daily basis, but there is a lot nice about it.

<comment><USER3> I think the $1000 price tag is totally wrong. I would never pay that kind of money for an IDE unless it was _really_ better than anything else. But this means:

      - the language has huge community (so I'm not stuck with a dying language)
      - it allows me to do anything (huge extensibility)

Unfortunately it is difficult to change the pricing model once you have existing clients. On one hand they are the only ones paying for your development, so you can't lower the price tag. On the other hand building a bigger community takes time, and it won't happen at this price. So unless they become really creative, Delphi won't survice. Pity, I have used it (yeeeears ago) and it was a brilliant product for building UIs, very easy to use and powerful. Haven't seen anything similar since.

<comment><USER2> The pricing model is the main reason newer people are not getting into Delphi. This is why they tried to lure people with iOS and Android capabilities. But when there are alternatives that are free, why bother?

Yes, Delphi has a Community Edition now (which is free), but the fact that are excluded from a large portion of the library, because you cannot afford it, is always going to alienate some people. And it is always going to feel frustrating, when other languages don't have those limitations.

My office only uses the Professional Edition, because we cannot really afford the Enterprise Edition, which means there were some problems we ended up 'inventing ourselves', because they were only available in the Enterprise Edition.

Delphi probably won't survive another decade (in my estimation), but Pascal will live on as FreePascal/Lazarus.

<comment><USER4> "Delphi has a Community Edition now (which is free), but the fact that are excluded from a large portion of the library"

That's not really the case. With Delphi Community edition you get support for 4 operating systems, VCL and FireMonkey, it only lacks access to Enterprise databases like Oracle and some of the multi-tier architectures. Community has a large percentage (80%+) of the features...

<comment><USER2> You are correct, saying 'large portion of the library' was a mistake. But as I remember, you don't have access to the VCL source code with the Community Edition. The feature matrix says that this is 'limited in Community', whatever that means.

We wanted to do MongoDB connections, which comes with FireDAC. But that's only available in the Enterprise Edition. So we ended up rewriting TMongoWire[0] to fit our needs.

I am sure you can do most things in Delphi in the Community edition, but it's a little too late, unfortunately.

[0] [https://github.com/stijnsanders/TMongoWire](https://github.com/stijnsanders/TMongoWire)

<comment><USER5> Oh FireDAC is no longer available for Professional version either? Geez.. really not going to lay down $3k for an EE.

How is that "professional" if you cannot even read/write to sqlite.

<comment><USER6> Both Professional and Community Edition include FireDAC.

[https://www.embarcadero.com/products/delphi/product- editions](https://www.embarcadero.com/products/delphi/product-editions)

"Build database apps with local/embedded connectivity" is in every edition.

The only difference is you need Enterprise or Architect to connect to "Enterprise class" databases like a remote Oracle server.

<comment><USER7> unfortunately "Enterprise DBs" means also Postgresql, Mysql, SQL Server etc. (anything Client/Server)

you can probably just use another Framework like (free) ZeosDB ([http://zeoslib.sourceforge.net/](http://zeoslib.sourceforge.net/))

or some paid ones e.g. from Devart ([https://www.devart.com/dac.html](https://www.devart.com/dac.html))

but still, its frustrating to have to use something else for such basic functionality ...

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> I'm amazed about once every three years when I hear or read something that reminds me delphi is still around. For nostalgia's sake, here's a link to the pre-release review of Delphi 95 that I wrote for Dr. Dobb's back in the day: [http://www.drdobbs.com/a-quick-look-at-borlands- delphi-95/18...](http://www.drdobbs.com/a-quick-look-at-borlands- delphi-95/184409747). Doesn't seem like such a quick look now, but articles were longer back then :).

<comment><USER4> Nice review ;-) I think I read it, back then

</comment></comment><comment><USER9> I started working professionally in Delphi around 1998, and then spent 13 years evolving and maintaining a sprawling 2+ mloc reservation system.

They had a great thing going around that time, but then the pivoting and squeezing started. Instead of evolution we got enterprices, buzzwords and bit rot. By Delphi7, I'd say it was already as good as dead.

All owners so far share an unfortunate tendency to oversell half-baked solutions with no future, all the way up until the point where they pivot and push a brand new successor with no future while deprecating the previous attempt asap.

Their database, Interbase; was open source for about a month. Until the suits realized that no one would buy their shiny enterprice crap if they could simply download it for free, and it was closed again asap. Only now all the people who knew anything had joined effort in a fork called FirebirdSQL.

It was even released for Linux under the name Kylix, free for non-commercial use if I remember correctly. Until Microsoft bullied them into dropping the cross-platform game right now in return for cozy time with the centerfold creep and his side kick sweaty monkey. I just threw up a little in my mouth writing that so I'll stop here.

<comment><USER10> This. I completely agree. Delphi was killed by the suits who suddenly jumped onto the Application Lifecycle management fad. Sad.

</comment></comment><comment><USER11> Back in the late 90's this was my favorite development environment. Still have fond memories of it. Back when "Rapid Application Development" was the buzzword of the day, it actually delivered.

<comment><USER12> I cut my teeth on Delphi 1.0. Got tons of mileage out of Delphi 2 & 3\. Delphi 5 Enterprise was the last IDE I paid for out of my own pocket ($2000!).

I missed it terribly when I moved on to Java (getters and setters?!? the horror!). I can't imagine going back now, though. Java is mostly a memory. Javascript, Clojure, and Rust in programmer's editors are enough.

</comment></comment><comment><USER13> Also related, lazarus 2.0 was recently announced. It even has an online package manager.

[http://forum.lazarus-ide.org/index.php?topic=44161.0](http://forum.lazarus- ide.org/index.php?topic=44161.0)

</comment><comment><USER14> Embarcadero tools and ides, are super expensive considering that most developer tools are either free (visual studio developer is free for individuals), or way cheaper (jetbrains)

I really dont know who their target customer is, but then again, when I look around, I find tools like windev (PC-Soft) and Clarion (softvelocity) have a loyal following

Except of course that embarcadero, is way more expensive

Free-pascal is cute and probably productive, but there are way more intellectually and technically interesting options, even tcl/tk in my opinion is better intellectual and technical investment of time compare to free-pascal

<comment><USER15> Looking at their price / feature matrix, they are running this platform like it's still 1999. The cheapest option is outrageous, and has no client/server DB support. So that means spending at least $3,600 (on sale!) for a usable development platform. Batshit crazy.

<comment><USER16> I suggest you to have a look visual studio pricing: [https://visualstudio.microsoft.com/vs/pricing/](https://visualstudio.microsoft.com/vs/pricing/)

$5999 first year, $2569/yr renewal

<comment><USER17> That's for the Enterprise edition, which is very rarely needed outside of very large projects that will normally have a budget for it.

Even with a Pro it's also not just VS itself, but a bunch of other MS products. The exact list depends on how you arrive at getting a subscription, but if you are to take the BizSpark (?) route, it will get you Windows, Windows Server, Office licenses and a handful of Azure credits.

</comment></comment></comment></comment><comment><USER18> The article mentions that the binary size of the listbox example is significantly different. Well, we used to say that Delphi 1 is totally wasteful as the default empty project compiled into 39kB .exe, obviously full of bloat ;)

Edit: 39kB was nothing even in the 1995. But there was other more significant issue: if you went for all the database and line of bussines suport libraries you ended up with application that used more 3.5" floppy disks than contemporary Windows 3.1, one for your application and 7 additional for the redistribuable frameworks ;)

<comment><USER19> 140KB+ for that simple app even in 1995 would've been an insane level of bloat, considering that the Windows 3.1 Program Manager (PROGMAN.EXE) also shown in the screenshots is only 112KB, and it certainly has much more functionality. The File Manager, WINFILE.EXE, is 167KB. As an experienced native Win32 programmer, the same thing in pure Win32 would be <2KB. (Edit: I mean the app with 3 controls on a dialog, not the File Manager...)

What's even more disturbing is the fact that an app which does the same thing in 2019, using a newer version of the programming environment, now takes nearly 6MB or 30MB, depending on which field of the newer versions' dialog you're looking at ("code size" or "file size").

My first experience with a Delphi application was similarly disappointing: I distinctly remember a 300KB binary whose only function was drawing a few lines on the screen (to act as a ruler), and disassembling it in an attempt to figure out why.

<comment><USER20> 300 Kb was basically the fixed-size overhead for any VCL app.

But by late 90s, it was "good enough", and that's when Delphi was at peak popularity.

<comment><USER21> I may be misremembering but the early visual basics exported even heavier results.

<comment><USER22> I think you were - I remember the .exes were much smaller, but they weren't self-contained/stand-alone, so you needed to make sure msvb*4.dll (can't remember what it was exactly) was on the system you wanted to run it on, and it was > 1.4 MB, so you couldn't fit both the small .exe and the runtime .dll on a floppy disk...

<comment><USER20> Yep, it was msvbvm??.dll. However, it just about fits on a floppy.

</comment></comment></comment></comment></comment></comment><comment><USER23> Got to say, other than the font being much nicer now, some of those old screens look a whole lot better and easier to navigate. I miss buttons that look like buttons.

<comment><USER24> I have a weird feeling these days, that improvements didn't happen at the right place and that old GUI paradigms were just right and that if you knew how to leverage what a computer can do (mind you you could do sml and prolog back in the days) you wouldn't much fancier presentation..

<comment><USER25> _> old GUI paradigms were just right_

It's a permutation of "worse is better". Skeuomorphism and hierarchical organization cargo-culted as evil, ignoring that our traditional built environments work using these paradigms.

User-hostile design. Let's replace all buttons and text labels with arbitrary flat abstract icons! See also: nosql and SPAs.

<comment><USER20> Extreme skeumorphism a la Mac sometime ago is also undesirable, though. You want them to look just close enough to trigger recognition, everything above that is cognitive overhead.

<comment><USER26> > _Extreme skeumorphism a la Mac sometime ago is also undesirable, though_

Mac never had extreme skeumorphism. Extreme skeumorphism would be like the common case of DVD player apps made to look real-life DVD players (with all the frustrating LCD-like text displays and tiny cryptic buttons).

It's not about having 3d looking buttons, or having faux-leather on your Notes app, which are the kinds of things Apple did.

<comment><USER20> I'm probably using the word wrong, then. But those 3D-looking buttons with glare, or faux leather, is exactly what I'm talking about - it _is_ unnecessary cognitive overhead.

<comment><USER25> A button that looks like a physical real world button that I'd push, with a clear text label beneath it, is less cognitive overhead for me than an abstract squiggly icon with no border or text that I have to interpret.

Bonus points if the icons are hidden inside various hamburger menus sprinkled across the interface - Atlassian I'm looking at you.

I shouldn't be forced to learn some designer's personal visual symbology to use an app. It's hieroglyphics.

<comment><USER20> I'm not advocating for either of those extremes. To remind, in this thread, we were talking about UI aesthetics of the times when Delphi was popular. That's Windows 9x and NT, classic MacOS 7.x to 9.x, BeOS; and on Unix: Motif, NeXTSTEP, Gtk 1.x, Qt 1.x to 2.x.

So, basically, buttons are chiseled gray (or other color of user's choice), with prominent 3D borders, but flat where the label is for maximum readability. Just enough to capture the _essence_ of a physical button, but without actually rendering one.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER27> I've been a Delphi developer off and on for 20+ years (since 2, though dabbled with 1). A lot of people focus on the object pascal and it is dated as a language, though the latest is catching up. The IDE has problems now and then with code completion - it pauses a lot and sometimes just stops working, if you come from Visual Studio or XCode this is incomprehensible and annoying.

Where Delphi shines is the VCL - the Visual Component Library and the third party component market. You can integrate components into the IDE by writing them in pascal. Even now there are still lots of components for pretty well anything - even web development.

It also has cross platform components that you can run on iOS/Android/Mac and Windows (edit: theres also a server side linux one) all with the same code, they are compiled to native and if you want you can write native components on all these platforms.

A lot of windows C# components available for sale are actually written in Delphi

You can connect to databases using components, I've written native socket servers by just dragging a couple of components on to a form. For writing business apps there is nothing superior imho

There are components for web development where you can write an SPA all in Pascal and use components

There's a free community edition available now [https://www.embarcadero.com/products/delphi/starter](https://www.embarcadero.com/products/delphi/starter) so if you've never looked at Delphi have a look.

<comment><USER28> Delphi shines in so many ways - I tried to develop something in Go but I hit a brick wall with a sub-par editor (Visual Studio Code), all kinds of restrictions, no way to make halfway acceptable GUI apps, a slow runtime, a slow compiler, unacceptable formatting rules, totally hopeless. Rust has even worse issues. I considered C, C++, Java and PHP 7.3 but I'm basically forced into using Delphi again for a new major project.

I'd rather not use Delphi, since it's hard to find developers for it and investors won't like it. But there just aren't better or even acceptable alternatives for the type of development I do (3rd wave AI, building a graph database from scratch, processing TB's of data, dynamic visualisations etc.)

So the plan is to build all this unique functionality with Delphi and then, when I have something sellable, perhaps get it rewritten in Rust or something, when those tools have become better.

Even though I'm an old fogie and highly experienced with Delphi, I also do embedded dev. in C and have done so for decades, plus I recently built an enterprise-level PHP online store from scratch. I've been a vocal critic of Delphi for decades as well (even banned on Embarcadero's forums) and in 2019, I do not know of anything that compares to Delphi...

<comment><USER29> > hard to find developers for it

Our last two hires were guys without any prior Delphi experience. They did have Java, C++, Python etc background, tho. We sent them off to a two day intro course and with some assistance they were doing useful work within a couple of weeks.

A small investment IMO if you plan on keeping your employees for a while...

<comment><USER28> Exactly... The only issue is that many developers will prefer to get experienced in other languages, go with the times so to speak.

</comment></comment></comment></comment><comment><USER30> I remember using Turbo Pascal, basically the predecessor of Delphi. I had tried Amiga Basic before, but this was the first time that I was being helped by a teacher and actually understanding what I was doing, rather than just copying scripts from Amiga Magazine line by line. I was in my first or second year of high school and, IIRC, we had PCs with 486 CPU (Pentium had already launched but it was very expensive). I remember one day a friend of mine came and told me that Intel was going to make a 1Ghz CPU, I didn't believe him. It would take a few more years before I tried the Internet for the first time.

</comment><comment><USER31> Delphi was a great way to get into programming as a kid. You could just drop an image and a timer onto a form, set it to 50ms, edit the onElapse event to move the image according to key-presses, and you've got the start of a simple game! All in a way that is visual and makes intuitive sense to any non- programmer.

And the beauty of the language/IDE was that you could develop serious, complex applications with it, too.

Is there anything similar on the market today? I had a ton of fun with Delphi as a teenager!

<comment><USER32> There are lots of drag and drop tools on the market. Why not just download the Delphi Community Edition for your hobby projects though? It's free.

</comment></comment><comment><USER33> Delphi (and Borland C++ Builder) was a lot of fun back in the day. Linux ecosystem wasn't as mature, and people who insisted on on using the Microsoft toolchain had to deal with some insane bullshit like MFC, ATL/WTL, or bare Win32 API. In the meanwhile, people using Borland stuff were cranking out superior (and faster) apps out of components downloaded online, and using drag&drop. What would take weeks and a lot of head scratching in MFC was like 10 minutes in Delphi, and you _knew_ you got it right. It was RAD if you pardon my pun.

<comment><USER34> And then Borland decided to change business forcing us to deal with MFC.

That whole Inprise adventure was pretty bad.

<comment><USER33> And then Hejlsberg left for MS and took his toys with him. WinForms bore more than a passing resemblance to VCL, and C# more than a passing resemblance to Delphi/C++ Builder. Good for MS to recognize true talent when they see it.

Though their current API situation is still a mess: they can't stop screwing with it. But their .NET situation is as good as it's ever been.

<comment><USER34> Actually the way he went took a bit of talking with former work colleges then working at Microsoft.

"Anders Hejlsberg: A craftsman of computer language" \- interview

[https://behindthetech.libsynpro.com/001-anders-hejlsberg- a-c...](https://behindthetech.libsynpro.com/001-anders-hejlsberg-a-craftsman- of-computer-language)

WinForms was based on J++'s Windows Foundation Classes (WFC), Hejlsberg's first project at Microsoft. Which of course, was based on VCL.

That mess is the usual DevDiv vs WinDev, for example I read somewhere that WinRT was pushed by WinDev, so naturally it is basically COM Runtime reborn.

My major complain was that we only got NGEN for AOT compilation and not something C++ Builder/Delphi like,

Now there are a few ways of doing AOT in .NET, but it is still not like Delphi.

<comment><USER33> I do miss near-instantaneous builds on late 90's hardware (!). Much of that was Pascal with its single pass compiler. Productivity-wise that was indispensable.

<comment><USER34> I have found home on .NET/Java as the best approximation of it, but do agree it could be better.

</comment></comment></comment></comment></comment></comment><comment><USER35> Delphi was my first exposure to a real programming language almost 20 years ago. I'm very glad that it was it as I look upon the landscape of software engineering nowadays and it's totally opaque to beginners.

Delphi has right abstractions in a right place - you designed the form in a easy GUI and filled in methods with your code [0].

Why it was that way? Because it was designed to be simple and it worked (no need for Bret Victor's magic). (There was a blog of former Delphi developer that explained their thought process)

For the record I worked professionally in JavaScript (TypeScript) (backend and frontend), Java (Kotlin), C# and Ruby. I also did small chunks of support code in C/C++, Rust, Red/Rebol, Python, PHP, Go, Prolog and Lua.

If I wanted to teach kids programming today, something easy to understand but at the same sufficiently complex I'd probably choose Delphi (Lazarus looks like Delphi 5/7 from screenshots).

[0]: manual memory management was harder than GC but on the other hand it thought a lesson...

</comment><comment><USER36> I, like many others, loved and used Delphi a lot in the 90s, but for one major client we identified a major risk was the declining availability of Delphi developers (in Australia, at least), and I did a rewrite of the entire app into C#, splitting off the calculation part (it being a financial application) into a separate 'core' which is now re-usable across Windows, MacOS and web. At the time we did this it wasn't even clear if Delphi the product was going to survive. I'm glad it has, but the rewrite was the correct decision (yes, as risky as rewrites can be).

</comment><comment><USER37> Nobody mentioned the form inheritance feature of the VCL, the consequent applying of OOP principles for UI. Because all interface elements are implemented as (object) components, in Delphi, you can easily group an arbitrary assembly of UI elements in a frame object and make it readily available as a new "component" for reuse; a great way to reuse standard design in big commercial applications. Another way of accelerating the production is to design similar screens as subclasses of a common screen. You can pack then all the common functionality in the ancestor screen and don't waste time to copy-paste or worrying about error propagation. Of course, one can group common functionality in classes or procedures but UI functionality is very often bound to a certain UI element and not generic. Thus form inheritance is much more efficient than the (otherwise) standard practice. I designed once an application for museum management with a lot of different working screens but they are similar in some functionality. Using form inheritance I could avoid designing big generic working screens, which could be very confusing and annoying for the users, but offer instead specific screens for specific tasks and still saving a lot of time (and debugging headache). I estimate using form inheritance in Delphi helped me at the time to increase the productivity of the UI implementation phase up to the factor of 5! I guess other systems could do similar things but not as elegant as Delphi though. In term of desktop applications, I believe none other can be as productive as Delphi.

<comment><USER34> Windows Forms inherited this concept given Anders. :)

</comment></comment><comment><USER38> Anyone remember Borland C++ Builder? I migrated away from Delphi to C++ Builder as soon as it came out. It still used DCUs tho from memory. Thems were the days

<comment><USER39> I remember the painfully long compile times. Delphi compiled in seconds where a medium sized C++ app we developed would take about 20 minutes for a build.

</comment></comment><comment><USER40> Wow. Delphi.

It was probably the first tool/language I got in contact with while in school. I didn't had any idea what I was doing, playing around with the parallel port trying to read sensor data for a school project.

I think I ended with Delphi 7, most probably some pirated copy of the Professional version, to have all those fancy libraries where I had no idea what to do with.

Wondering whether I should get into it for the sake of the old times. :-)

</comment><comment><USER41> What's today's equivalent? Something that can produce native binaries for at least windows, mac, linux? The one I see pushed a lot is electron, and there are some cool ideas, but nothing stable that I know of.

<comment><USER42> Qt and Lazarus are fairly equivalent to Delphi and can generate binaries for all of the platforms you mentioned.

<comment><USER43> Qt Creator is not on par with Delphi's IDE, although I would Qt on new projects.

</comment></comment></comment><comment><USER44> It's weird that the project options dialog still offers to work around the Pentium FDIV bug. Are any of the current compile targets still afflicted? Like, can 2019 Delphi still compile me a win95 pentium binary?

<comment><USER45> I found it quite amusing to see that still there too. Unless you have an affected Pentium 100 (or slower) you won't have an issue. A poster on StackOverflow (2014) [https://stackoverflow.com/questions/24101125/pentium- safe-fd...](https://stackoverflow.com/questions/24101125/pentium-safe-fdiv-in- year-2014) raises the issue too, arguing it is safer to leave the option in (which is by default off).

</comment></comment><comment><USER46> Marco Cantu's (the author of this blog) books on Delphi are/were a great resource for learning the language.

Btw, his website is under heavy load right now (probably the HN hug?), and this is the error I got:

Error in page: /blog/2019-february-24-years-delphi.html

Error Class: EListError

Error Message: List index out of bounds (-1)

Suggesting that the webserver is written in Delphi... that's dedication :)

<comment><USER4> Sorry, my blog has some issues keeping up with heavy load... I've restarted it and will be monitoring it. I should have imagined, my bad.

</comment></comment><comment><USER47> Niklaus Wirth turns 85 today (Feb 15th). Happy Birthday!

</comment><comment><USER48> Any mention of Delphi always brings back fond memories of my first job. We were doing amazing things with Clipper at the time, with a bit of Turbo Pascal on the side. Then windows took root and the world opened up with promises from Visual Objects and Dephi - but VB ended up the winner and that was the end of that.

We would play with Delphi and SmallTalk just for fun and there was always a Dephi fanboi around.

Despite these 'primitive' tools we were so much more productive back then - it's quite sad where we have ended up. We would pump out wonderful apps even in the days before we could get our hands on a relational database. dBase files, VSAM files and even trusty CODASYL did the job without any fuss.

</comment><comment><USER49> We use Delphi, because we are productive with it, but it is seriously sorry.

Yes, you can develop 64 bit apps with it, but the IDE is still a 32 bit app, which causes problems with large projects.

The Indy components (e.g. http) are unsafe and shitty.

Personally I don't think there is much to recommend.

<comment><USER50> You don't necessarily have to use Indy. There are several open source and commercial network stacks available for Delphi that works across supported platforms.

Also, since Delphi XE8, components for proper HTTP handling, that taps into the host platforms native implementation, has been available. They work really great.

</comment></comment><comment><USER51> I remember you could always tell apps that were written in Delphi by the non- standard Ok/Cancel buttons with the icons.

<comment><USER18> TBitBtn ;)

In fact in Windows 95 and everything after it simply looks totaly out of place and the Delphi documentation tried hard to dissuade people from using that and instead presented some idea of what MS's HIG say (notice that Delphi 2 does not use TBitBtn anywhere and tries to match W95 UI style very hard, even more than Office 95), obviously for a long time it didn't really work.

<comment><USER20> This even predated VCL and Delphi. Remember OWL in Borland Pascal?

[https://i.imgur.com/esNFWJB.png](https://i.imgur.com/esNFWJB.png)

<comment><USER52> I remember there being libraries and components for Delphi which allowed you to pull in BWCC.DLL to get that styling...!

I had to bring up a radio programming tool on a Win98 laptop not long ago ("because legacy kit that still works and is somehow still supported"). First thing I saw, a BWCC styled "Radio Controller Connected -- Please Log On" screen.

Once seen, never forgotten.

</comment></comment></comment></comment><comment><USER52> I have so many fond memories of putting together quick apps with Delphi "back in the day". Every now and again I'd buy a copy of PC Plus magazine just because they had Delphi 1, 2 or 3 on the cover CD.

I really miss the RAD concept, and I'd love to find a modern tool which had that aspect of Delphi, though perhaps with C++ or Python as a backing language.

I know there's Lazarus (opensource Delphi), but it's C++Builder I miss... wxWidgets is close, but not quite the nice quickly-have-something-presentable environment I remember.

Throwing the cat among the pigeons... does anyone remember Kylix?

<comment><USER53> Anvil ([http://anvil.works](http://anvil.works)) is the closest thing I've come across to Delphi in the modern age. It's python, and it's webapps, but it's stupidly quick and easy (and fun) to get something working.

<comment><USER52> I've actually found the combination of Python, Flask, SQLAlchemy and Bootstrap really good for throwing together quick web-apps.

I usually use wxWidgets (well, wxPython) for the desktop stuff, but I wondered if there was a better way. It just doesn't feel quite as smooth and polished as Delphi/C++Builder/Kylix were.

</comment></comment></comment><comment><USER54> I forgot that Delphi was sort of a mash-up of Visual Basic and Pascal. Two great tastes, I guess.

Are there contemporary products -- for building mobile and/or web apps -- that are similarly easy to use?

<comment><USER55> You should check out Lazarus. It's basically open source Delphi and cross platform, write once, compile anywhere.

[http://www.lazarus-ide.org](http://www.lazarus-ide.org)

<comment><USER45> And lazarus (ie. free Pascal) will compile Turbo Pascal code without a lot of effort. Was quite amazed to resurrect a discrete event simulation I first wrote on VAX Pascal, ported to Turbo Pascal (and wrote my own replacement to the FORTRAN SPURT libraries) and then used a fair bit till about 1990. Fired it up (from the 5 1/4 disks copied some years ago) and had it running in a few minutes, except that it had a range error that I oddly never spotted with Turbo Pascal that had to be fixed first. (And my link with Delphi, applied for a job, didn't get it but they saw Pascal on my resume and said, we'll we've got some Delphi code that needs extending...)

</comment></comment></comment><comment><USER56> In Australia we have the Australian Delphi Users Group. We are having a conference next month.

[https://www.adug.org.au/meetings/symposiums/2019-symposium/](https://www.adug.org.au/meetings/symposiums/2019-symposium/)

It will have a range of topics including showing how to borrow some techniques from other languages and showing how to use some of the new functionality in the latest releases.

</comment><comment><USER57> Reading through the comments and as a 20+ years developer, using mainly Delphi, and with past 10 years as freelancer exclusively using only Delphi I realize people here don't actually understand what this IDE is doing. So here are a few points:

a - About dying and used only for legacy projects. Well, when a company wants something fast to win their customers hearts and push through next phase of moneygrabbing, do you think they care about latest technologies? Dirty Delphi does the job in 5 hours, what in others takes days if not weeks.

b - price too high. Correct, it is. But when you fly your technicians across entire continental US to deal with a hardware problem at one of your venues do you think 5k USD/year is much? That's pocket change.

c - Younger developers do not learn it. Well, younger developers should not learn anything but only one language for at least 3 years, ideally while still in college, and absorb instead algorithms/paradigms/math - skills more valuable then a computer language syntax. Once you master those and a language, no matter what, the entirety of the rest of languages are nothing more then syntax equivalent. Hence grabbing Delphi should be a maximum 3 weeks venture, after that I'd expect that young developer to be able to solve problems. I did just that, with Pascal in my beginnings and over the years/companies I've worked for I learned Java/C/C++/PHP/ASM/VB/ASP/ etc etc. Knowing how to implement quicksort in Pascal is the same as in C++, it's a syntax equivalent, nothing more.

d - Many comments about native - this is a type of comment from proponents. Well, in my experience that nativity was such a hassle for me that I'd rather go away with it and used Dalvik/the new ART instead in case of Android, but it is what it is.

Feel free to AMA.

</comment><comment><USER58> I don't know if it's just me but what I noticed right away in those screenshots is that the older Windows 3.1 interface is much easier on the eye that the modern one. You can easily tell what's clickable and what's not, the contrast is good, the fonts and colors are consistent. All that while using a fraction of the resources.

<comment><USER59> Related: Does anyone else remember the "How to use a mouse" programs on early Macs?

[https://gizmodo.com/heres-how-a-macintosh-tutorial-taught- pe...](https://gizmodo.com/heres-how-a-macintosh-tutorial-taught-people-to- use-a-m-1583366354)

</comment></comment><comment><USER60> In 1997 I wrote an application for our state revenue office that helped their customers produce correct pay-roll annual adjustment forms. It was written in Delphi, had to run on Windows 3.1, 95 and NT, and distributed to around 19,000 customers and CPAs on 3.5" diskettes.

Delphi well fit the constraints of the time.

</comment><comment><USER61> Delphi made me lots of applications and money. It was a great tool when it first came out.

</comment><comment><USER62> What I remember most fondly about the Borland stack was how well it abstracted away all the messy Windows 3.x and 95 UI code and made working professionally as a Windows dev much less stressful.

Also, for a time, it totally blew away MS Visual C __, although the VCL was hella inconsistent, and that was rather maddening at times.

To be at max productivity you had to scour the web looking for snippets that showed you how to, say, add strings to this widget or draw on that canvas.

The RAD implementation was rather brilliant, and for several years at least blew its main competitor, Visual Basic (ugh) totally out of the water.

</comment><comment><USER63> Has the Delphi language evolved - i.e. does it use new ideas and has it dropped old ones? Or is that language substantially the same?

Also, why would anyone use Delphi today except for legacy maintenance?

<comment><USER64> There have been a few syntactic enhancements over the last 10 years or so. Generics for example. Recently they have also added inline variable declaration (you don't need to put all vars in a function at the top anymore). But these don't really matter to me so much. I think Emb did this as response to "Oh Delphi language is archaic - Java has this, C# has that ..."

I still use Delphi for new projects by default. Static linking of libraries into one distributable dll or exe makes it very appealing. If I wanted this in another IDE, I'd have to use VC++. Also, Delphi's VCL, a near comprehensive wrapper of Win32 (its true strength) and native support for IDLs like COM makes it easy to roll out working software sooner.

I'm currently writing a natively compiled Excel Addin with heavy use of TThread - a multithreading VCL class for the Windows platform. Lightning fast compile & build speeds will spoil you.

</comment></comment><comment><USER65> I'd pick Delphi over WPF/Winforms any day. Better cross-platform options, vector-based graphics via FMX, or traditional Windows graphics via the VCL. COM programming couldn't be easier. Performance is good, lots of components readily available, and finally Object Pascal is a joy to program in. Compilation speed comparable to a C# build.

</comment><comment><USER66> I get the feeling that, just like cockroaches, Delphi will survive a nuclear apocalpyse...

<comment><USER64> As long as Win32 exists as a supported api from Microsoft, Delphi will survive in that shade. For a long time Borland produced better tooling for dev on Windows than Microsoft did. Eventually Microsoft just poached the best from Borland including Delphi's inventor, Anders Heijlsberg. Anders eventually created Microsoft J++ rebranded to C#. Many don't know this, but a lot of the event, evensinks and visual design architectures found in Delphi are implemented in C# and the .NET apis.

</comment></comment><comment><USER67> Delphi was the Power Builder killer way back 20 years ago.

<comment><USER60> Bloody hell. I've developed with both of these. And Borland C++ Builder.

</comment></comment><comment><USER68> Delphi is still the best choice for SQL driven apps

</comment><comment><USER69> is there something Delphi (I mean RAD IDE) for React? Sorry for stupid question.

</comment><comment><USER70> There was this good thread about Delphi on HN some years ago:

Delphi – why won't it die? (2013) (stevepeacocke.blogspot.com)

[http://stevepeacocke.blogspot.com/2013/05/delphi-why-wont- it...](http://stevepeacocke.blogspot.com/2013/05/delphi-why-wont-it-just- die.html)

[https://news.ycombinator.com/item?id=7613543](https://news.ycombinator.com/item?id=7613543)</comment>


Who's Pirating Game of Thrones, And Why? - <AUTHOR> http://torrentfreak.com/whos-pirating-game-of-thrones-and-why-120520/

<comment><USER2> I guess producers are used to a world where it takes agreements with local outlets in many parts of the world to figure out how a show will be broadcast in each region.

When a pirated show is instantly available in a region that would otherwise wait a week, that shows an industry asleep at the wheel. Producers should ask themselves some hard questions if they're unable to deliver a _better_ format when they're the ones being paid for it.

As I see it the future looks something like this:

1\. ISPs and other infrastructure companies start charging much, much more for bandwidth but _in exchange_ they invest hugely in it. The default assumption would be that everyone and his grandmother needs obscene amounts of data because this is now how they're watching TV, etc. There would be exceptions for people who somehow use very little, just like now where some people don't own a TV and don't buy cable.

2\. Content companies make deals with these ISPs that basically say this: "hey, I'll produce lots of stuff people want, which will cause them to download obscene amounts of data; in exchange, give me a guaranteed cut of whatever you're charging them".

3\. There would be a way to buy temporary bandwidth, e.g. instead of a pay- per-view movie you rent an hour of "high bandwidth" and download whatever you feel like watching in that time.

In other words, companies have to stop pretending the Internet isn't the best way to distribute things, and customers have to stop pretending that things don't cost money.

<comment><USER3> step 2 sounds like the business model of a cable company (kind of).

</comment></comment><comment><USER4> I don't have a TV, and cannot stream it on whatever legit services because Virgin Media in our area is totally abysmal in evenings. Thus, if I have it grabbed overnight I can watch it the next day, and dodge spoilers on Monday.

It sucks, but TV is a fairly flawed model for content consumption.</comment>


Glass - A social network I made for me. - <AUTHOR> http://glass.netngn.com/

<comment><AUTHOR> First of all, It's my birthday today!!!! Yeah!! And as a present for myself i made a social network, that I am pretty sure no one will like. It's really difficult to signup and that's about it. :-)

</comment><comment><USER2> Tell me something is challenging and I'm likely to do it. It wasn't actually that bad. I think signing up for a new gmail account is much worse.</comment>


Native HTML quadplay fantasy console - <AUTHOR> https://github.com/morgan3d/quadplay <comment><AUTHOR> Here's an amazing 64x64 space dogfighting game for this fantasy console: [https://twitter.com/CasualEffects/status/1167565673435926529](https://twitter.com/CasualEffects/status/1167565673435926529)</comment>


Open-Plan Offices Are Making Us Less Social - <AUTHOR> https://www.bloomberg.com/view/articles/2018-07-04/open-plan-offices-are-making-us-less-social <comment><USER2> I'm not sure if it makes us less social but I noticed that open plan creates one of the two environments:

1) Super distracting. Everyone is talking the whole time and it's hard to focus. Your team member bugs you all the time and you realize that your team is part of the noise.

2) Slack driven communication. No one bothers anyone and all the conversation is done on Slack. You slack a person even if they are sitting next to you. Pretty awkward and can be time consuming.

</comment><comment><USER3> Can companies just come out and say it? They're all adopting open offices because they're cheaper and the cogs are easy to move around.

Though it baffles me why Facebook, Google, etc., companies that can afford it, don't switch to 2-4-6-8 person offices. Best option: not too isolated, not too bunched up together.

<comment><USER4> I feel like optimizing for manageability is a great way to run a tech company into the ground.

And I notice that Microsoft, which gives its programmers offices, seems like the only tech megacompany that can still produce software.

<comment><USER5> Microsoft Windows is probably the worst software product of all time. All Microsoft has is lawyers and a good marketing department

<comment><USER3> Many people have been using Windows successfully since at least 95.

There's definitely worse products out there.

</comment></comment></comment></comment><comment><USER6> This and preferring ads to subscriptions are the two topics I feel like I disagree with 99% of HN.

I much prefer open offices and I don't mind my neighbors having conversations. Sometimes it turns out to be pretty useful what you overhear by accident. Otherwise headphones work.

<comment><USER7> Same here -- it's not too noisy, and it is really useful to overhear someone having an issue and then jumping in to help. Only on relatively few occasions is it a problem, specifically when one of my team members who speaks English as a second language is having trouble with HP support, he tends to get a bit louder and more excited. At that point I just take a quick tea break.

</comment></comment><comment><USER8> Here's the academic paper on which this article is based: [http://rstb.royalsocietypublishing.org/content/373/1753/2017...](http://rstb.royalsocietypublishing.org/content/373/1753/20170239)

and here is the HN discussion of that paper from a couple days ago: [https://news.ycombinator.com/item?id=17448187](https://news.ycombinator.com/item?id=17448187)</comment>


About.Me Has 400,000 Beta Testers, Opens Doors To All - <AUTHOR> http://techcrunch.com/2010/12/16/about-me-has-400000-beta-testers-opens-doors-to-all/ <comment><USER2> They should offer a premium feature that enables you to map your own domain name. I would replace my homepage (<http://antoniocangiano.com>) with something like this if the feature was available. (Of course, I could iframe it, redirect, etc... but it's not the same.)

<comment><USER3> Why is a redirect not the same? Is it just the split second of time it takes? (I obviously don't know anything about this stuff.)

<comment><USER2> One reason is search engines. With a 301 redirect for example, you are telling them that your content has permanently moved from example.com to about.me/example. Your efforts to promote your page and acquire backlinks will only aid about.me not your own domain. If about.me were to shut down or you were to decide to build your own homepage, you'd be starting from zero SEO- wise. Furthermore, people may bookmark about.me/example (it's where they landed after all) or link directly to it bypassing your domain name.

There are also other considerations, mostly related to the user expectations and experience.

</comment></comment></comment><comment><USER4> About.me is one of those ideas that gave me the "Why didn't I think of that" moment. It lead me to finding and buying <http://ronnie.me> The .me TLD seems to be growing quickly, grab your name if it's available.

<comment><USER5> Is there any benefit to having multiple domain names pointing to the same site? For example, I already have myname.com, is there any advantage to also having myname.me?

<comment><USER4> Not really, other than preventing another "My Name" from ranking higher in search results for your name than you. It's a land grab.

In my case, I was able to get a shorter URL ronnieroller.com vs ronnie.me. Makes it easier to say over the phone, twitter, etc.

Make sure you set up the redirects properly. Having multiple URLs that point at the same content could penalize you on search engines for duplicate content (I believe).

<comment><AUTHOR> Not if you make it a 301 redirect.

</comment></comment></comment></comment><comment><USER3> So I guess the point of this is to reside somewhere between facebook (rigid page layout) and a personal home page (no restrictions)? The benefits over a personal page I can see are that most of the nitty gritty has been done: built-in analytics, drag-and-drop webpage design, no hosting. Anything else?

<comment><USER6> There may be some SEO benefit for people to have their name in the URL?

</comment></comment><comment><USER6> I noticed that they basically invited people who asked them publicly on twitter (at least that is how I did it).

I like my about.me. Just wish they offered a couple of more services (mostly tungle.me).

<http://about.me/jacksonmiller>

</comment><comment><USER7> This site is a poor copy of flavors.me. I once took the liberty of illustrating that idea: [http://grdn.cc/post/1171539069/flavors-me-vs-about- me-in-tod...](http://grdn.cc/post/1171539069/flavors-me-vs-about-me-in-todays- era-of-digital)

</comment><comment><USER8> First impressions on the overall speed of the site are not that great. It's running very slow, certain features aren't working, etc. For instance -> Uploading a background just isn't working for me.

</comment><comment><USER9> After searching for some of the folks they have spotlighted on Google and not seeing their page listed makes me wonder what is the point?

</comment><comment><USER10> Seems too overly simplistic. All the profiles also seem colorful but generic and it seems theres not alot you can do with them.

<comment><USER10> I also dont understand the point of the analytics since theres nothing really to see on your page. Maybe the service will improve overtime.

</comment></comment><comment><USER11> yeah, right. Google says about 14,000. [http://www.google.com/search?sourceid=chrome&ie=UTF-8...](http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=site:about.me)

</comment><comment><USER12> Looks like a cool site. Free link juice?</comment>


Microsoft sells feature phone business to Foxconn subsidiary for $390M - <AUTHOR> http://www.reuters.com/article/us-microsoft-fih-mobile-deals-idUSKCN0Y911N <comment><AUTHOR> Microsoft originally bought Nokia's phone business for $7.9 billion. The Foxconn subsidiary will move the business to Android and license the Nokia name. Microsoft refused to pay royalties for the name and never used it.</comment>


Security challenges for the Qubes build process - <AUTHOR> http://blog.invisiblethings.org/2016/05/30/build-security.html <comment><USER2> Their build process sounds similar to Bitcoin Core's release process.

Bitcoin downloads dependencies, checks them against their preconfigured hashes and then builds the different versions (Windows, Linux, Mac) in different VMs. The build is deterministic and thus produce the exact same files for everybody. Everyone signs the files they produced and uploads the signature. If all the signatures are valid for the same file you can be reasonably sure that the build process wasn't tampered with.

Getting deterministic builds even for a project like Bitcoin Core with few dependencies was hard. On the scale of Qubes this would be a monumental task. But maybe Debian's initative for reproducible builds makes this easier in the future.

<comment><USER3> To what degree are the Bitcoin build VMs reproducible vs. giant binary blobs?

<comment><USER2> The build VMs are predefined Ubuntu LTS releases. The build system that sets everything up is a bunch of barely documented scripts.

</comment></comment></comment><comment><USER4> Rutkowska is surely doing some of the most interesting research in this field.

<comment><USER5> Rutkowska is among the _crème de la crème_ of computer security researchers. That she's dedicating her time towards a project like Qubes is sorely under- appreciated by the public today, but is certainly something that inspires me to believe that, given enough time, _defenders can win_.

<comment><USER6> I'll give her credit for putting the time in more than most. Even I'm guilty on that one as my brain-damaged ass could be cloning UNIX apps in Rust or SPARK or something with MAC or Capsicum policies. My research is important but most of us doing such things don't do enough OSS coding.

</comment></comment></comment><comment><USER6> Anyone interesting in securing repo's or build systems should start with Wheeler's landmark collection on the topic:

[http://www.dwheeler.com/essays/scm- security.html](http://www.dwheeler.com/essays/scm-security.html)

Has basics in English, CompSci work, high-assurance considerations, and some example projects. A bright, security researcher that's very familiar with DVCS's should redo this in light of them with similar recommendations. More like a team of bright researchers but it needs to be done. I'm interested in any papers people already have on this that have similarly-thorough treatment of threat model and proposed mitigations.

Once you know builds, you might want to address subversion, design, implementations, covert channels, and other things if you're trying to stop Five Eyes, Russia, or China. That requires "high-assurance" security methods... when it's even possible... Got a small list here to get people started on how deep the issue goes just at high-level and subversion aspects:

[https://news.ycombinator.com/item?id=10478742](https://news.ycombinator.com/item?id=10478742)

</comment><comment><USER7> I heard that Qubes is riddled with undocumented scripts that have no automated tests for them. Does anybody know how true is that?

<comment><USER8> Just in case, I'm reposting my message from [https://news.ycombinator.com/item?id=11652940](https://news.ycombinator.com/item?id=11652940)

On the workstation part, it recommends QubesOS. Am I the only one who is skeptical about it?

From what I saw superficially reading their source code, there are some frightening stuff going on:

* tons of C code with nearly zero unit tests, same with the python code

* lots glue in form of bash or python scripts

* some not so beautiful stuff like:

\- [https://github.com/QubesOS/qubes-core-agent- linux/blob/maste...](https://github.com/QubesOS/qubes-core-agent- linux/blob/master/vm-init.d/qubes-firewall#L29) (kill -9 on a daemon...)

\- [https://github.com/QubesOS/qubes-core-agent- linux/blob/maste...](https://github.com/QubesOS/qubes-core-agent- linux/blob/master/vm-init.d/qubes-firewall#L18) (a daemon is a little bit more than an exe launched with '&'

\- [https://github.com/QubesOS/qubes-core-agent- linux/blob/maste...](https://github.com/QubesOS/qubes-core-agent- linux/blob/master/vm-init.d/qubes-core-appvm#L34) (changing a config file in an init script, humm, weird...)

\- [https://github.com/QubesOS/qubes-core-agent- linux/blob/maste...](https://github.com/QubesOS/qubes-core-agent- linux/blob/master/vm-init.d/qubes-core-appvm#L32) (starting a service inside the init of another service...)

\- [https://github.com/QubesOS/qubes-core-agent- linux/blob/maste...](https://github.com/QubesOS/qubes-core-agent- linux/blob/master/vm-init.d/qubes-qrexec-agent#L13) ("logging" with stderr redirection in a file)

And it's just the init scripts... I'm too lazy to take a look further inside the C or python stuff. IMHO, as a proof of concept, it's interesting, as a finished, reliable and secure OS, it's frightening...

<comment><USER6> It's hall-marks of a low-assurance, software project hacked together to get it working with OSS components. There could be strong review in scripts or C code as the team are talented coders and breakers from what I've read. The minimum in high-assurance security... even medium-assurance... was that every feature was tested for proper behavior during successful execution _and failures_. Plus, a description of why it's there that traces to a functional or security requirements. That's so evaluators can spot unnecessary code that might be a backdoor or just dead code.

Python for those scripts is questionable, too, as it's too complex to analyze with known principles of security engineering. It should be a 3GL that maps well to hardware with easy way to spot code-level flaws or automated them out (esp static analysis). You can abstract it, even macro it, so long as final code can be subjected to whatever eyeballs or tools are out there with ease. Non-security-critical stuff can be written in something like Python, though.</comment></comment></comment>


Ask HN: What is with websites using plus sign to close - <AUTHOR> <comment> noah-kun Your browser using rotating + to make an X is my guess.</comment>


Ultra Wideband precise distancing used for securely unlocking cars - <AUTHOR> https://medium.com/@mike_12533/ultra-wideband-at-vouch-io-2f662defb9a3 <comment><USER2> Product seems to require Apple products and services. Needs to be more brand- agnostic.

<comment><USER3> Vouch Key is not tied to Apple products. It works with Android, for example.</comment></comment>


Phusion Passenger Enterprise released - <AUTHOR> http://blog.phusion.nl/2012/08/01/phusion-passenger-enterprise-released/ Or go directly to https://www.phusionpassenger.com ! Excited to hear what you guys think about it. <comment><USER3> That deluxe version looks really out of place, almost as if it were thrown in there to make the pro version look good without thinking of the people that would be interested in something above pro.

When I put in my third server, do I have to buy the deluxe version (which takes my annual costs from $200 to $5000)? Or do I buy up to 25 of the pro licences to get up to 50 servers?

You may also want to consider making your commercial support offerings mesh with the enterprise licensing. As an example I seem to have to negotiate phone support and at best a 6 hour response time with the enterprise licencing or get an EUR 15K support contract to get 2 hours.

<comment><AUTHOR> _edit_ We've changed it to "custom" pricing for now, and will work on an updated pricing table to better reflect our intention of having an SLA included among other things. Thanks again! :)

Re: the deluxe version. Hmm, that wasn't our intention, we merely wanted to include a plan that had the entry level SLA pricing attached to it for support with guaranteed response-times. Apologies if it wasn't clear enough, but we'll be sure to fix this in a future site update.

Re: third server, if you're a startup, you'd end up buying 2 startup licenses. If you're not a startup, that'd be 2 pro licenses (or as you mentioned, buy 25 pro licenses to get up to 50 servers). Hope that clears things up a bit, it definitely is good to get constructive feedback like this so we can try and fix it. Much thanks! :)

</comment></comment><comment><USER4> As feedback I wish I could say to them this: "Everything looked great until I saw yourselves calling each other Ninjas. Chief Executive Ninja!? Bye."

At this point I might just be a bit jaded but the term ninja is about as flattering to me as peewee. It's not that I haven't worked with "ninjas" before and from that experience I've grown a very clear aversion to "ninja" anything. Add to that recruiters have picked up on the term and now everyone has to be a "ninja" to get the job. Really? Ugh.

Get rid of "ninja." Then I'll actually be able to point my boss to your website.

<comment><AUTHOR> Re: 'Get rid of "ninja"' Done. Please consider pointing your boss to our website ;-) Thanks for the feedback, phusion.nl definitely needs a facelift and we're working on that, too :)

<comment><USER5> In the "Nedap story": "With activities branching into healthcare as well, it is important for their systems to be available at all times."

I think you can afford to lose the "as well".

<comment><AUTHOR> Agreed, updated and should be visible in the next rolled restart ;-) Thanks!

</comment></comment></comment></comment><comment><USER6> The first line of this post mentions:

"Phusion Passenger is an Apache and Nginx module for deploying Ruby and Python web applications."

... yet I can't see any further mention of Python support in any of the linked roadmap posts, or on <https://www.phusionpassenger.com/enterprise> \- does anyone have any more information about Python support?

<comment><USER7> Python support is in beta. We've actually already supported Python since 1.0, and it pretty much worked, but it remained an experiment and felt a little unpolished. Today, we've officially elevated it to "beta" status, meaning that it isn't terribly well documented yet, and may not feel as polished as Ruby support, but generally works well. We will publish blog articles and documentation about Python support in the near future. If you would like to stay up to date, please subscribe to our newsletter at <http://eepurl.com/nXXrL>

In a nutshell, you put your WSGI application code in passenger_wsgi.py. Point the virtual host's document root to the 'public' directory, and it just works. Very similar to Rack/Rails support, with passenger_wsgi.py substituting config.ru. See this for an example of Django on Phusion Passenger: <https://github.com/kwe/passenger-django-wsgi-example/>

</comment></comment><comment><USER8> You might consider bundling the enterprise version with union station. A startup version with a 2 server license and union station monitoring for both would be nice. You could also offer access to the union station beta for anyone who buys enterprise now.

</comment><comment><USER9> Why doesn't my old license transfer? /sarcasm

<http://www.modrails.com/enterprise.html>

Should probably remove this page since they share the same name and all.

<comment><USER7> In the past we had a donation campaign where users can donate arbitrary amounts of money to us. We called it an "enterprise license" as a joke - <USER2> "enterprise license" just gave you a fancy logo with the word "enterprise" in it.

Phusion Passenger Enterprise is no longer a joke. It is now a real product with real features. A while ago we started "de-joking" the old donation page. As you can see at, the page now explicitly mentions that it's a donation. The 'enterprise.html' URL is kept to prevent links from breaking, but we may change that as well in the future to reduce confusion.

That said, we're grateful to all the people who have donated and supported us. Our Startup license type is our way to support other startups.

<comment><USER10> Unfortunately, I cannot even get to the page - after a long wait, I get nothing. :( Guess I'll check back later today.

<comment><USER7> Doh, looks we're getting much more traffic than we expected. Working on it.

EDIT: fixed now, server ran out of memory and swap.

</comment></comment></comment></comment><comment><USER11> If you think blog posts are boring you can skip to our awesome launch page here: <https://phusionpassenger.com>

We're excited to hear what you think about it.

<comment><USER12> In general very nicely done, but the $4999 option with every detail negotiable seems a bit amateurish. "Lets throw a number and see what sticks"

Having said that, the intention is, I imagine, noble. You want to be, and be seen, to be flexible and willing to work with your customer. But I think the way its presented will come across as wishy-washy.

I like the design, thought it may be a little busy at times. But certainly eye catching.

<comment><USER13> The Deluxe option is there to indicate that we have special offerings for large volume customers. If your yearly license fee would surpass the $4999 mark, feel free to contact us and negotiate a different set of license terms.

</comment></comment></comment><comment><USER14> How is this going to interact with the open source version, going forward?

<comment><USER7> We will continue to develop the open source version. All changes in the open source version will end up in Enterprise, but Enterprise will have more features. We intend on making a living out of this so by buying Enterprise you will directly sponsor development of the open source version.

<comment><USER15> Maybe you could create some kind of comparission table? Because it take some time now to understand what for I'm supposed to be paying for (and as long as passenger runs on few of my servers, it would be my pleasure to thank you for passenger by buying a license).

<comment><AUTHOR> Aaah, we initially considered stacking the open source version against the enterprise version in a comparison table, but due to some previously made design choices, were unable to fit the column properly in time! Instead, we opted to drop that column in favor of being able to launch today and potentially fix in a future update.

Considering the feedback from this thread, it definitely looks like something we need to fit back in and will be among the things we'll work on for the next iteration/deploy. Thanks for the feedback and kind words, it's much appreciated seeing as we've been working on this for a while now; it easily becomes hard to look at things with a fresh pair of eyes after a while, which is definitely needed for giving a good first impression imo.

<comment><USER16> Hongli, Ninh, I've always loved Passenger (it's running almost all of my Rails apps) and am happy to see you guys try to get paid directly for all the effort that went into Passenger.

I just wanted to add my voice that I think it'll be useful for developers to know what you guys intend to do with the open source version now that you've the Enterprise version. A comparison table like mlitwiniuk mentioned would be useful.

Would also like to know when the open source version of Passenger 4.0 will be available so I can decide whether to pay for a few Enterprise licenses now or hold on.

<comment><USER15> +1 for ETA. Also - there is one thing more, that is unclear - I know, that you will not limit functionality of OS Passenger and it's still fully legit to use current version, but it would be great, if you could exclusively mark it somewhere, that this wouldn't be unclear. Or just create some kind of FAQ. You know - after all MANY people are using your software and once you've decided to start offering paid version, there are doubts about future etc

<comment><USER13> Hey mlitwiniuk, those are some very good suggestions. For version 2 of the site, we will make sure to include a FAQ.

For now we just want to make clear that Passenger Open Source will remain a fully legit product, and it will never be limited in functionality to increase sales on our paid products.</comment></comment></comment></comment></comment></comment></comment>


Keybase is now writing to the Bitcoin blockchain - <AUTHOR> https://keybase.io/docs/server_security/merkle_root_in_bitcoin_blockchain <comment><USER2> A very nice feature, but the article says "Since 16 June 2014", so I don't think the implication that this is new is correct.</comment>


Linux ate my RAM  - <AUTHOR> http://www.linuxatemyram.com/ <comment><USER3> This is actually wrong. For some reason (probably because of the way it's implemented internally) Linux includes shared memory allocations in the "cached" figure. If you calculate the amount of free memory using "free -m" in the way this web page advises, you'll think that memory is free when it really isn't - unlike true cache, shared memory cannot be discarded when the space is needed for something else.

I've actually had buggy desktop applications use several gigabytes of RAM as shared memory, so this can make a big difference.

<comment><USER4> Linux also counts files on tmpfs as part of the cache number--it's _really_ annoying that no number in top can serve to show you a decent approximation of how many page-size malloc()s you can do before OOM (with overhead and fragmentation and so on, of course it's infeasible to get an exact number).

<comment><USER5> It's worse. No line of /proc/meminfo has that value, and since not all of the cache can be instantly discarded (I didn't know that), I don't see any combination of them that would help.

That sentence:

> There are no downsides, except for confusing newbies.

Just isn't true. There is the downside that we can't know how much memory is available.

<comment><USER3> Yeah, and obviously some (though not all) forms of shared memory are actually implemented using tmpfs behind the scenes which makes life even more interesting. I think the problem I encountered involved SysV shared memory which isn't backed by tmpfs and does show up in /proc/meminfo, whereas other types may not.

</comment></comment></comment></comment><comment><USER6> Previous Discussions:

[https://news.ycombinator.com/item?id=3698652](https://news.ycombinator.com/item?id=3698652) (1 year ago)

[https://news.ycombinator.com/item?id=6368562](https://news.ycombinator.com/item?id=6368562) (2 months ago)

[https://news.ycombinator.com/item?id=1831322](https://news.ycombinator.com/item?id=1831322) (3 years ago, no comments)

</comment><comment><USER7> How bizarre. In the 1993-94 time frame, one of the big talking points about Windows NT was that it was the only OS with an integrated file system cache. That wasn't true even at that time, as Solaris also had such a cache, but such is the nature of propaganda.

I'm tickled that what once was a big "technical" advantage becomes a major source of confusion. Presumably, OSes of Windows NT heritage have retained file system caching, which offers a huge performance benefit. Why don't Windows users have confusion over this issue? Doesn't Windows offer an easy way to check or is the whole thing presented clearly, or is Windows so complicated not many people get this far?

I'll also draw a parallel to DUI - without a breath-o-meter, DUI is a lot like driving while distracted. It's impossible to quantify, and therefore not that much of a crime. With a breath-o-meter, or with "top", it's possible to put a number on drunkeness or lack of free memory, and the whole thing becomes a problem.

<comment><USER8> Because there are a lot of things in linux/unix-land that is completely braindamaged. But they have been with us for so long that they become impossible to change. Like dotfiles, the ps command and Linux memory handling.

Windows 8 has a nice graph which shows memory usage over time in which the filesystem cache is not visible. If it was included, memory usage would constantly hover at about 90% which wouldn't be very useful and very confusing.

When Windows XP was introduced famous tech journalist John Dvorak complained that "System Idle Process" was using 99% of his cpu and slowing down his computer. In later Windowses, System Idle Process is no more.

Also even when you subtract the fs cache and get number of megabytes free memory you have available. That number has almost no bearing on how many number of megabytes an application of yours can allocate. Linux memory management is much more complicated than that.

<comment><USER9> > Linux memory management is much more complicated than that.

I don't know if I'm being trolled, but memory management in any modern OS that makes proper use of shared memory is fundamentally very complicated. I suspect what is happening is Windows is lying to you to give you a simple (though essentially wrong) answer.

<comment><USER10> NT was able to use a simpler (maybe not simple, but simpler) design because it was written from scratch once we knew that caches and buffers were desirable. So it's got a unification of swap and cache that would be difficult to retrofit onto *nix.

<comment><USER11> The Linux kernel and the NT kernel are approximately the same age.

</comment></comment></comment></comment></comment><comment><USER12> A quick practical answer is to use htop and look at the memory bar.

* Green = resident memory used (probably what you want most of the time)

* Blue = buffers

* Yellow = cache

<comment><USER13> htop author here. It was nice seeing the table in the article with the memory split in three colors and thinking "well, but that's how I already split it in htop, isn't it?".

The "Linux calls it" column should probably be called "top calls it"...

<comment><USER12> Thank you for writing htop, it is very useful tool.

I just about fell off my chair when I realized I could click with my mouse on the columns to sort them!

<comment><USER14> I always forget the key bindings for this, you just changed my life!

<comment><USER12> It was accidental too. I was just showing my coworker something and I have a bad habit of highlighting stuff I am reading and randomly clicking on text, and I noticed that column was selected to be sorted. It blew my mind, this was in an SSH session logged into a remote server.

</comment></comment></comment></comment></comment><comment><USER15> That's how I check true free memory available:

      root@joe-pc:~# free -m
                   total       used       free     shared      buffers     cached
      Mem:         32057      30347       1710          0         1312      21568
      -/+ buffers/cache:       7466      24591
      Swap:            0          0          0
      root@joe-pc:~# sync; echo 3 > /proc/sys/vm/drop_caches
      root@joe-pc:~# free -m
                   total       used       free     shared      buffers     cached
      Mem:         32057       5628      26429          0            4        891
      -/+ buffers/cache:       4732      27325
      Swap:            0          0          0
      root@joe-pc:~#

<comment><USER16> Yikes! Hopefully not on production systems. I've had fileservers which needed 60+GB of dentry cache to serve up files in a reasonable time, something like that could bring the site to a crawl for 10 minutes or more.

<comment><USER15> Good point. I am doing it on my laptop and server without load. So this is not a big problem in my cases.

</comment></comment></comment><comment><USER17> Then you should [http://downloadmoreram.com](http://downloadmoreram.com)

<comment><USER18> When my circle of friends found that site it became an in-joke. I'd never heard of it, and eventually they came up to me and asked "Can you download more RAM?".

I don't think they were expecting my answer:

"Sure you can, just use plan 9."

</comment></comment><comment><USER19> The page seems to be down.

Here's how it looked: [http://web.archive.org/web/20131011053519/http://www.linuxat...](http://web.archive.org/web/20131011053519/http://www.linuxatemyram.com/)

</comment><comment><USER20> Forget the kernel, someone really needs to do chromeatemyram.com

</comment><comment><USER21> This is the worst piece of Linux advice ever. I use Linux for many years and every time I had a memory leak or a process using too much memory, every google search about the problem would lead to some "guru" giving this advice.

This explanation which has been replicated thousands of times on every linux forum on the planet, prevents people from solving real problems. It started as a useful piece of information but nowadays it is spam.

<comment><USER22> How does this understanding prevent people from solving real problems, simply by virtue of it being commonly cited? I don't understand your complaint.

<comment><USER5> I understand this is a complaint about Google. It won't help you find pages that cite a problem when a diffrent, but similar problem is too popular.

I've seen that happening several times, but I'm not the GP, so I may still be missunderstanding him.

<comment><USER21> Yes, this is exactly what I mean. Maybe I should've describe it as noise rather than spam.

But it isn't only a Google search issue. Every time you will ask a question about a memory problem in Linux, everybody will give you this answer and classify you as newbie. When you explain them that this isn't the case, they will simply leave the thread/question and nobody would ever bother reading your problem again.

People just go in denial mode because of this common knowledge, as Linux can't have memory leaks or any memory related problem.

<comment><USER23> I think what you're running into is the shallow knowledge of people on forums/mailing lists. With a few exceptions, the people who actually know the most about the Linux kernel, glibc internals, etc. do not frequently post on StackOverflow. They're too busy, you know, working on the kernel and shit.

So you get Joe Chucklefuck, he installed Ubuntu three months ago and posted on the Ubuntu forums about how he has no free RAM and Linux sucks. Someone showed him this page, and now when he sees your question about why malloc isn't working right, he thinks, "Aha! A memory problem! I shall post that linux ate my ram site!" Meanwhile, Ulrich Drepper isn't reading the list, even though he could tell you that the version of glibc you're using has a known bug in malloc. (He'll also tell you that you're stupid, but that's just because he's an asshole)

<comment><USER21> Exactly. But I believe that developers have their hands full solving real problems, no need to ask them play level 1 support too.

So when I find an issue that I can't be sure if it isn't my own fault, or I don't know the root cause of it, I try to gather some information before heading to the bugzilla. Memory issues are the only thing it is absolutely impossible to gather any useful information. Your only option is to learn C and debugging tools.

<comment><USER22> A suspected memory-leak is definitely the sort of thing that you should report to the authors/maintainers. Even if you think it is triggered by something that you are doing wrong, their program should not respond to that incorrect input by leaking memory.

Places like stackoverflow and IRC support channels are really only useful if the answer you are looking for can probably be found in some form of documentation somewhere. For things like suspected bugs or issues with specific implementation, it is best to go to the source (either the actual source, or the responsible devs (which almost always means going to a mailing list).

Some particular projects are infamously dismissive specifically of memory leaks, really no matter how much detail you put into your report _(Mozilla, I am looking squarely at you)_ , but those should be the minority. Typically if you see run-away memory usage, and are able to provide enough details about what you are seeing, the developers should be receptive. That's been my experience anyway.

</comment></comment></comment></comment></comment></comment></comment><comment><USER24> Wow, I can't believe how many times I've had to explain this to people as they log on to shared VNC servers. "I thought this had 16G of RAM free, I asked for a 16G machine!". "It does, stop trying to read top!"

Now I'll just point them to this website.

</comment><comment><USER25> Also HN ate your server apparently.

</comment><comment><USER26> I hate the invention of "burstable" RAM on VPSes for this reason. Eventually your IO cache grows until it has most of your guaranteed RAM. Now every new process is playing a game of Russian roulette with your hypervisor to see if it can actually allocate into your "burstable" RAM what the kernel is reporting is freely available.

<comment><USER27> Actually this is a general issue when running multiple Linux VMs under a hypervisor. In that case you don't want them filling up RAM with prefetch data from disk because that's likely to cause contention and reduce page sharing between VMs.

</comment></comment><comment> v-yadli [https://www.kernel.org/doc/Documentation/sysctl/vm.txt](https://www.kernel.org/doc/Documentation/sysctl/vm.txt)

You can drop cache by sending a byte into drop_cache.

<comment><USER28> But why would you do that? (The only time I've ever used that is when benchmarking and you need a clean cache between runs). Otherwise the kernel will just empty it as needed when you run a program.

<comment><USER29> I can't answer for everyone, but I can tell you why I have a cron job dropping my cache every several minutes:

The application I develop consumes most of the ram on my machine when running, and takes several minutes to rebuild and start up to begin with. When most of my memory is being used for the cache, this process takes several minutes longer, because I'm making millions upon millions of calls for more memory -- and each one has to get some of that cached memory back for itself. If I simply drop the cache all at once, every minute, it takes a split second. If I shrink it over a million increments, it takes around a minute.

Even typing that I feel I must be doing something wrong; and yet, it worked.

<comment><USER30> Your app is making more calls to malloc when there is memory being used by disk cache, or you mean something else by "millions upon millions of calls for more memory"?

You control hope many times you call malloc. Just call it once with what you need.

</comment></comment></comment></comment><comment><USER31> that's funny, like avery complex or "smart" algorithm, if it works it's cool, but when something doesn't work, it makes it very hard to pinpoint a culprit.

I'm more and more inclined to either use stupider algorithm that at least I can explain to the user, incremental stuff where they can check intermediate results or taking into account the fact that this algorithm has to be conveyed to users in one way or another since inception.

I guess in this case a measure of the swap activity would be a good indicator that the current limiting factor is the RAM, but it also has to be credible. Somehow having 16G written on the box of the ram and 7G written in the "available ram" of a software makes everything more credible that saying "I have a pressure of 1.5madeupunit on the ram front". Human factors, again.

<comment><USER32> I've been doing performance analysis and debugging as part of being a unix/linux sysadmin now for something like 20 years. And even though I have many well-cherished anecdotes about explaining the VM free list to software architects who were the go-to guys for the vision of our entire global platform, complete with PhDs, I still don't want to go back to the bad old days without a shared buffer cache. There's a reason why that's there, and you don't want to go back to 1992-era memory management.

It also makes perfect sense from the perspective of writing the software. The free list really is the list of VM pages that have been free'd and that has a specific meaning, and changing that name internally would be terrible. You just need to understand how the machine actually works.

</comment></comment><comment><USER33> Another thing, you know how sometimes a USB stick needs some time to un-mount? This non-sync'ed data (say, a copy of a big file) eventually has to be written to the physical disk, and through the little pipe, takes time. Find out how much of this "dirty" buffer you have yet to physically write to the device, while giving the kernel 'hints' to sync the dirty blocks quickly, with:

        while true; do sync && grep Dirty /proc/meminfo; done

Lots of gold to be mined from /proc/meminfo .. bonus points for wiring it up to gnuplot so you can get a real picture of the dynamics of the Linux kernel .. ! :)

<comment><USER34> This seems a bit magic, what does it do? (stuck in Windows-land at the moment)

<comment><USER35> I do this a lot, on machines which are annoyingly vendor-tweaked to allow a lot of dirty pages. Copying files to USB sticks happens instantly, but the unmount then takes an age - like, 20 minutes. This is a way to get a measure of the progress of the unmount. I generally have a sleep in there as well though ;)

</comment></comment></comment><comment><USER36> Best way to check how much ram is actually free is to use a higher level tool like a task manager (from various DEs) or a command line tool like htop, they report the actual memory usage of processes

</comment><comment><USER37> Not strictly accurate, in the "Why would you want to do this" regard.

Ages ago I was hacking linux onto an ARM soc that claimed to have memory it didn't (it wasn't aware of the display's DMA segment). It was near the top of the address space, so generally speaking it didn't cause too many problems, but until I could debug it I needed to keep memory usage low, wchih meant disabling the disk cache. What a shitshow that was :/

</comment><comment><USER38> I always run Ganglia on my servers. You can see memory used, memory shared, memory cached, memory buffered, and memory swapped all over time as well as total in-core memory. This has saved me (and my team) from ever having to misinterpret command line output. Takeaway, Linux is smart about using memory, probably smarter than you. [http://ganglia.sourceforge.net/](http://ganglia.sourceforge.net/)

</comment><comment><USER39> I think it's still disinformative. Disk cache also uses RAM which is allocted and reserved by applications, of course data is swapped out in this situation. o you'll need more swap, but it isn't a bad thing at all. Even OS/2 did this a long time ago, nothing new at all.

</comment><comment><USER40> So basically this is the inverse of swap. Using memory to make disk reads/writes faster, instead of using disk to make more memory.

If Linux is consistently doing this, why would you still need a swap partition?

<comment><USER41> > why would you still need a swap partition?

You don't, but if something decides to grab memory, the OOM-killer will kill processes abruptly. Swap may allow the system to limp along until there's some solution.

It's not like 10 or 20GB HD these days matter much either.

<comment><USER42> Would you rather consume physical pages of RAM by storing less recently used programs and data, or by caching more recently used disk pages?

Myself, I'd generally prefer to evict the older stuff to swap in order to cache the newer stuff. But maybe that's just me.

<comment><USER41> Quite a while ago, HP-UX (v9, if memory serves) got this balance wrong - <USER2> system was keeping files in RAM, and kicking active processes to swap.

Much gnashing of teeth ensued until HP fixed that ...

</comment></comment></comment></comment><comment><USER43> FWIW, it's relevant to OS X too (even Mavericks)...'sudo purge' will reclaim some of the resources.

<comment><USER44> OS X does not behave _exactly_ in this manner, but is indeed confusing.

Linux never needs a 'purge' or equivalent. Doing a 'drop_cache' only slows the system slightly because nothing is cached. 'sudo purge' can prevent OS X from using swap – i.e. running out of RAM even though there is RAM it could reclaim. This behavior has been tweaked but not fixed in Mavericks.

<comment><USER45> Actually, purge is completely unrelated to swap. Purge forces disk cache to be flushed to disk, and can be used to approximate a cold disk buffer cache scenario for performance analysis.

Some small amount of swap usage (compared to total RAM) is perfectly normal, by the way. More cache, for instance, is a better use of RAM than avoiding swap usage by keeping never-accessed pages present.

</comment></comment></comment><comment><USER46> Or you can just [http://downloadmoreram.com/](http://downloadmoreram.com/)

(joke)

</comment><comment><USER47> Ehm. But sometimes stupid linux kernel prefers moving something usefull to swap and caching some shit instead of keeping stuff in ram and not doing caching.

So linux sometimes eats your RAM (but in different way).

<comment><USER48> For situations where you have a time-critical app, you can pin the app's memory into RAM with the mlock() family of functions.

There may be a command-line utility that lets you pin an arbitrary running a process too, I haven't looked for it on linux.

</comment></comment><comment><USER49> I just love the website design :-) It makes me happy.

</comment><comment><USER50> ITT tech startups learn about Lunix.

</comment><comment><USER51> right. so there is a bug in linux. gotcha.

<comment><USER52> No. Well, not technically... There is a UX bug in Linux. Not the only one at that, but they don't count much in Linux-land.

<comment><USER53> Just a difference in semantics -- I mean, c'mon UX in a utility like top? which is probably specified in some Unix convention anyway. Pure BSD Unix do this as well in their own way.

</comment></comment></comment><comment><USER54> Lovely! This domain could iframe that SO question :)

<comment><USER19> What question?

<comment><USER55> Why, _that_ one, of course.

<comment><USER56> I've thought the answer to that one was 42.

<comment><USER57> ITT: reddit-style comments that don't get downvoted. I'm all for it.

[http://i.imgur.com/lrlFq0y.jpg](http://i.imgur.com/lrlFq0y.jpg)

</comment></comment></comment></comment></comment><comment><USER58> Windows loves to cache and "prefetch" apps, I still need to figure out how to disable prefetching since I have a very fast SSD.

<comment><USER59> Memory is still an order of magnitude faster than your "very fast SSD".

<comment><USER60> And memory is still an order of magnitude more expensive than SSD, per GB.

I just bought 4 GB of PC-6400 for a laptop at £40. A fast 128GB SSD is £100.

Summary: use RAM judiciously

<comment><USER61> The prefetched data is managed by the OS. If a program needs the RAM, the prefetched data is immediately discarded. Prefetching never creates RAM pressure.

<comment><USER62> This. It blows my mind how many people who write software don't understand how OS caching and virtual memory work. They are great filter interview questions ;)</comment></comment></comment></comment></comment>