Delphi's 25th Birthday - <AUTHOR> https://community.idera.com/developer-tools/b/blog/posts/25-years-of-excellence <comment><USER4> I loved Delphi. It was amazing. But then they ate their own future by going to the stratosphere with enterprisey tool acquisitions nobody remembers the names of any more; then they fell back down to earth, and flirted with Kylix -- Delphi for linux -- but at a time of great upheaval in the linux desktop world, and it never really took off either.

Meanwhile, the former creator of Delphi had left for MS and created C# that at the time was already beating Delphi at its own game.

By the mid 2000s Delphi was already dead in the water: poor unicode support, no 64-bit compiler, and a language that hadn't innovated much since the 90s.

It's a shame, really. Delphi in the 90s was on its way to rule the world. Only then suddenly it wasn't.

<comment><USER5> I still remember interbase, now called firebird. Of course, sqlite is much more prominent today for an embeded database, but for the times without sqlite...

<comment><USER6> Interbase was a proper client server db. If you wanted embedded you needed Paradox. Ah, I have many happy memories of pulling all nighters repairing corrupted Paradox files...

<comment><USER7> No, you can (dynamically) link Interbase into your app, so the server runs in- process. You can also do it with Firebird: [https://www.firebirdsql.org/pdfmanual/html/ufb-cs- embedded.h...](https://www.firebirdsql.org/pdfmanual/html/ufb-cs- embedded.html)

<comment><USER6> Was it always that way? My memory is failing me.. I'd hate to think those nights in the 90's were completely wasted!

<comment><USER8> I vaguely remember that Interbase was a proper client/server thing at first. I'm pretty sure we were using Paradox databases with all their quirks in 1998-2000, including support people fixing broken db files for customers.

</comment></comment></comment></comment></comment></comment><comment><USER9> I used to love Delphi in the late 90s, and if someone could do a late-90s-Delphi-like experience for programming UI-heavy software today, and do it right, and in a way that properly integrates with the anno 2020 tech landscape, then I would love to use such a thing.

In a bout of late 90s nostalgia, I convinced my then-employer in 2011 to buy a license for the professional version of Delphi for a software project I was doing, and I was just absolutely shocked about how far it had fallen behind the curve. It seemed that attempting to support a modern tech ecosystem while maintaining some semblance of backwards-compatibility was giving it the worst of both worlds. Add to that enterprise bloat.

I don't know what it's like today, but I sincerely hope that someone will get it back on the right track (or has already done so, as I haven't retried since my experience in 2011).

<comment><USER10> > I sincerely hope that someone will get it back on the right track (or has > already done so ...

2020 Delphi supports five platforms, has 64-bit compilers everywhere, has modern language features, interoperates with C++ through C++Builder, and more. In the past few years especially, we've* seen both a lot of work on it, and increasing interest in using it.

It's modern, and used more widely than one might realise.

* "We've": This is a personal HN account but I work on Delphi and C++Builder.

<comment><USER9> Thanks for chiming in! I'll give it another spin, if I get some time.

<comment><USER9> ...although language features, 64bit, and integration with C++ were never really where my quarrels were.

If we take "rapid application development" out of its trademarked context, applying just its common-sense meaning, and applying it to the year 2020, then the modern tech ecosystem that one would want to integrate with is clearly not C++, but rather maybe JavaScript & the browser ecosystem, Python, and low- overhead JVM langauges like Scala or Groovy.

The next thing that immediately jumps out at me is that the form designer is still using pixel-based positioning, instead of layout managers and units of length that we know from html, like em (fontsize-based), or vh/vw (percent of view-height/view-width), etc.

I was trying to research these things more extensively just now, but giving you my name, street address, company, phone number, and then "Error: Field required: Yes, I would like to receive marketing communications" for downloading the COMMUNITY edition? Come on! Enterprise bloat: Check.

<comment><USER9> Haha. 10 minutes further into my Delphi-in-2020-exploration (60% of which was the time that the installer actually took), this was the sequence of events:

* Hit the installer and switched windows, to let the installer work in the background.

* Installer mysteriously gone.

* Tried to run the programme, and it took some digging to understand that the product seems to be in a half-installed state.

* Re-run the installer. This time, keeping the installer in the foreground. Now it works.

* Started Delphi.

* Dropped a button in the form designer to start playing around.

* Oh gosh. Form designer still using pixel-based layouts.

* Deleted the button.

* Doing some Googling to figure out how to do layout managers, and found an interesting youtube tutorial on something called TGridLayout.

* Dropped a TGridLayout on my form.

* Form Designer now caught in an infinite loop bringing up an Error modal that says "Control TButton($17EE2200) has no parent window. Path: ~TButton($17EE2200)".

Thanks Delphi! See you again, another 10 years from now.

<comment><USER9> ...feels like a relationship with an old friend who you've lost touch with when he became an alcoholic, but every now and again you feel bad for him and think you owe him a meeting.

</comment></comment></comment></comment></comment></comment><comment><USER11> For those interested, Free Pascal and Lazarus, the free open source implementation of Delphi, is amazing. It has an active development community and works on most all platforms.

[https://www.getlazarus.org/learn/tutorials/introduction/](https://www.getlazarus.org/learn/tutorials/introduction/)

<comment><USER12> > Free Pascal and Lazarus […] is amazing.

No, it is less than mediocre. It has not kept up at any sufficient pace to other languages and environments. Just a small excerpt because I don't have the nerve to write an exhaustive critique: bignum, first-class functions, generators, lazy lists, lexical scope, macros, namespaces. Single window in Lazarus requires recompilation that errors out in CheckLst.pas instead of being a preference somewhere in a menu.

<comment><USER13> What are your issues with scope in FPC? Namespaces have been supported since 3.0.

The other things I understand though. I much prefer Pascal syntax and compilation time, but I have started reaching for c++ these days

<comment><USER12> > What are your issues with scope in FPC?

Simple begin/end should create a scope, cf. { … } in ES6 or Perl. Instead, to make it work, the programmer has to nest named procedures.

> Namespaces have been supported since 3.0.

Sorry, I did not notice. Apparently it's been available for 5 years, but the standard library or other popular libraries did not adopt the feature.

</comment></comment></comment></comment><comment><USER14> I find it ironic they describe it as "25 Years of Excellence" because, as much as people go on about the competition, what really broke Delphi was its poor quality control

I bloody loved that language, but all of the components had serious errors that resulted in crashes. To make it worse, they are their own dog food, meaning the IDE itself crashed all the time.

This wouldn't have been so bad, but then VB5 happened, which was much, much worse semantically but absolutely rock solid.

Of course, then C# happened, but devs like me had already left the ecosystem. (And the less said about all that bundled cruft the better.)

<comment><USER15> Never had the problems you mention till Delphi 7.

<comment><USER16> Delphi was pretty notorious for having some sort of tick/tock quality problem, for unclear reasons. Presumably some kind of botched project management inside Borland.

Delphi 1 was a mess. Delphi 2 was rock solid. Delphi 3 was a buggy mess. Delphi 4 kind of recovered things but was never as good as Delphi 2. By this point we'd figured out the pattern and skipped Delphi 5, if I recall correctly.

<comment><USER17> 5 and 7 was solid...

1 was 16 bits only. 2 turn to 32 bits AFAIK.

</comment></comment></comment></comment><comment><USER18> What killed Delphi is $3000 per seat cost. Single starting developer or students cannot afford that. So there is no community and it's impossible to find Delphi programmers.

<comment><USER19> They used to give it away. I learnt to program from a free magazine cover-disk Delphi, and its excellent help system.

<comment><USER10> We give it away now too :) There is a Community edition, where the license terms are basically that you should buy it only if you make significant revenue. Students, hobbyists, early stage startups etc - free.

[https://www.embarcadero.com/products/delphi/starter](https://www.embarcadero.com/products/delphi/starter)

<comment><USER20> Too bad you don't actually let us reinstall the software we already paid for.

<comment><USER10> Not sure what you mean there, sorry.

<comment><USER20> It is quite simple. I mean that if you install the software N times; perhaps because you often switch and rebuild machines; and you do not have a current subscription; Dennis in tech support will not reset your license registration limit; and you will never be able to install the software again.

<comment><USER10> If that happened, it is an error. I believe the flow these days is to go through Sales, but you do _not_ have to buy or have a current subscription to install.

I'll repeat that: You can install a hundred times if you need. You do _not_ have to buy or have a current subscription to install.

The license server counts installations and flags for verification after a certain number because it's quite common for people to install far more times (ie, for more people) than they actually bought. All that is required after you install a one-person license enough times to trigger the server asking questions is to contact us and let us know you really are using it legally. Then you're good to go.

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> A while ago I got to do some consulting/auditing for a couple of companies in the medical field, and looking under the hood of their infrastructure, I was surprised to see that two of their most important apps for daily use (one a scheduling/filing/CRM behemoth, one a 3D analysis program) are developed in Delphi. You couldn't tell it from the GUI but in one program directory I saw a VERY familiar ico on an exe and my interest was piqued). I went so far as to put one through a decompiler (IDR) to find out which version of Delphi had been used.

So, it seems that Delphi is alive, kicking serious butt and making some companies loads of money, developing beautiful modern enterprise apps.

I, like many others, got my start in programming with early Delphi versions in school - Delphi 3 truly was my first love and I recognize the splash screens that are currently on display at [https://delphi.embarcadero.com](https://delphi.embarcadero.com) up until Delphi 2007, but 6 and 7 give me a warm, fuzzy feeling. We parted ways in the mid-2000s but I can honestly say, I never got back that feeling of joy and love for a language and a programming environment that I had for Pascal and Delphi (then again, I never had to deal with any messy legacy projects and component issues back then which surely drove some developers nuts).

Anyway... seeing that Delphi is still alive and watching a few YouTube videos about the new features it got over the last 10 years, including the stunning cross-platform development options for Android, iOS, web and PC (and apparently you can integrate with Sencha ExtJS, although I'm still unclear on how), I downloaded the free Delphi Community Edition - which is GREAT - <USER3> knocked out a beautiful little client-server app for a PoC over a weekend. Could hardly fathom the adrenaline rush I got from that...

I'm seriously considering putting in a purchase request for the Architect edition now... buying that at full price used to be a dream of teenage me and I think it's not even as expensive as I remember :-) Can't really justify it but then again, it's a chicken-egg problem and you've got to start somewhere.

You probably can't say that out loud, it being heresy and whatnot, but I could imagine that even now, schools could get more students to develop a love for programming on a wider and more versatile scale with Delphi Community Edition rather than Java or Python... There I said it, pls don't kill.

<comment><USER10> > I downloaded the free Delphi Community Edition - which is GREAT - <USER3> > knocked out a beautiful little client-server app for a PoC over a weekend. > Could hardly fathom the adrenaline rush I got from that...

I'm one of the product managers who works on Delphi today (together with Marco Cantù. I actually work on C++Builder, Delphi's sister product.) I am _really happy_ to hear that.

Your question about Sencha: we recommend using Sencha for web front-ends, and we have a server product written with Delphi for creating REST services or converting your desktop apps to REST-based backends, called RAD Server.

> I could imagine that even now, schools could get more students to develop a > love for programming on a wider and more versatile scale with Delphi > Community Edition rather than Java or Python... There I said it, pls don't > kill.

It's widely used in non-English-speaking countries for education today. I too expect it would be much better than Java for learning.

<comment><USER22> Ah, C++ Builder... Borland wasn't afraid to patch the language (hello closures!) to get the features they needed. I loved that IDE, it made me a decent amount of money back in the day and it was ridiculously easy to get a full featured desktop application up and running, sprinkled with some Paradox on top it could do a lot! I will have to give it another look today, if nothing else then just to check who's aged better - the tool or the programmer

</comment></comment></comment><comment><USER23> Delphi was great for developing custom solutions for middle class companies. Not end-user stuff, but no enterprise either. That kind of software vanishing coincides with that whole business sector getting smaller.

From a technical perspective, it was my favorite attempt to tame a often horrible mess of half-baked database design and ad-hoc solutions -- you can do spaghetti code in every language, but the Delphi apps I saw were usually a bit better than their FoxPro/Access/FileMaker/VB equivalents.

<comment><USER15> I don't see your point. Skype was done in Delphi, and it was pretty much end- user and very successful. There are many other apps: Skype, Nero Burning Rom, WinRAR, Partition Magic, Panda Titanium Antivirus, TuneUp Utilities, Aida64, BeyondCompare, Total Commander, CloneDVD, Ultra ISO, KMplayer, Gold Wave, Sound editor. And I am sure there are many others.

<comment><USER11> Here are a few more: fl studio, convert x to dvd, homesite, spybot search and destroy, resource hacker, innosetup, and originally mysql workbench

<comment><USER23> Siege of Avalon was a pretty great RPG written in Delphi, now open-sourced[1] (no work done on it since ages). I remember liking that it was somewhat "mundane", i.e. upgrading your armor didn't mean that you start out with knightly full plate and it goes all out fantastic after that.

[1]: [http://soaos.sourceforge.net/](http://soaos.sourceforge.net/)

</comment></comment></comment></comment><comment><USER24> Congratulations!

We love making our software with Delphi since 2002 and it always provided us with a rock solid foundation until today.

In those 18 years (>2.000.000 downloads) we never had a single critical failure. Ever.

The rapid prototyping capabilities help us to design and _experience_ user interface in no time.

Firemonkey allows us to create Mac & Windows multi-plaform software from a single code base.

As a commercial software company that needs the job done reliable and efficient, Delphi just never disappointed us.

Yes, we know there is #C, .NET, Java but we see no need to change something that just works so well.

Cheers, Bartels Media from Germany

</comment><comment><USER25> Still, to this day, I know of no other solution that beats Lazarus+Free Pascal in easiness of stitching together a cross-platform GUI program and just works out of the box.

</comment><comment><USER26> Do you guys think that closed source general-purpose programming languages have any future? In the late 90s and early 2000s both Java and C# were closed source. Still, they became highly successful. Today many people wouldn't even touch a language or a framework to build a business on unless it's Open Source. It's surprising how the programming landscape has changed in the past 20 years.

<comment><USER16> .NET only became open very recently, it's been quite successful. The entire iOS/Apple developer ecosystem is closed source of course. Maybe Swift isn't but nobody uses it outside the Apple platform.

You could argue Microsoft is an exception and them opening .NET shows the end of that era though.

The "open source or nothing" mentality might change in future. It means there's not much market for developer tools, so everything gets hacked together out of random "frameworks" found on GitHub that are here today, gone tomorrow when the bored developer at Netflix or Google gets their desired promo and moves on. There's no real planning or design, just whatever random stuff tech firms throw in the mix as a side effect of other projects, which is why HTML has virtual reality support but no table or spreadsheet view worth a damn.

<comment><USER27> Hmmm. Agreeing with the sentiment of your argument while looking at the flip side of the coin, the fruit borne of the ad-hoc lack of coordination you describe is sadly easily overwhelmed by domain domination exerted from committees and bureaucracies with vested interests in specific fields.

Which kind of information-leaks that either VR is hype noone really cares about, or that none of said committees (with attendant lumbering bureaucracy) have really noticed it yet. Wait, I just described the same thing two different ways.

But yeah, no, it would not do to have The Web℠ Platformᴳ, errrrr, " _excel_ ". :P

<comment><USER16> Yes, there's a certain robustness that comes from an evolutionary approach. And some of the web's competitors died because they couldn't (in my view) correctly analyse and match the web's strengths, because those strengths were never planned or written down anywhere. Figuring out why the web is strong is sort of like trying to figure out how our own bodies work. Sure, we can see the component parts. How they come together to make the whole a success is often less clear.

On the other hand, let's not kid ourselves. The web wasn't actually built by making a melting pot of diverse ideas with an evolutionary process to select between them. The web has always been controlled by one dominant company, and the stuff that gets added (or not) reflects the agenda of their internal committees. The web went from being controlled very, very briefly by Tim BL to being controlled by Netscape who added forms, cookies, JavaScript, CSS etc. Then to Microsoft, who added a pile of other stuff and then _froze development for years_ whilst Mozilla tried to get off the ground.

Mozilla added relatively little to the web given the resources invested into Firefox; virtually all their energy went into trying to fix their own architectural mis-fires. Then WebKit came along and very briefly Apple was in charge. That era didn't last long until Google came along and took the crown, which they've had ever since. Unlike Apple and Mozilla, Google actually have added a lot of stuff to the web platform but it reflects a consumer driven agenda. Hence WebVR, WebRTC etc.

To the extent the other players exerted any influence on the Chrome team during this time it's - in my view - been mostly negative. Mozilla lost to Chrome because their technical choices just weren't that good, but they've continued to exercise outsized influence on decision making despite dwindling market share.

Additionally the lack of any real support for libraries or dependencies in the web platform means many of the new APIs added to HTML can't be challenged by competitors. WebAudio sucks but nobody can make a better one because of the sandbox.

In the end the web isn't really the result of ad-hoc coordination so much as a dysfunctional lurching tug-of-war between different groups of engineers who all work down the road from each other at different firms in California (with a detour through Seattle).

</comment></comment></comment></comment><comment><USER28> Wow, 25 years. Wasn't onboard right from the start but something like Delphi 4 or 5 when I was in school. Ended that "career" with some cracked version of Delphi 7 Enterprise (obviously one needed the biggest version as a 16 year old!). I have good memories of Delphi, was my start into programming. Nice to see it's still around.

<comment><USER29> I've basically learned programming and database design in Delphi 7, using a couple of thick textbooks + Win32 API reference (.chm; no internet back then for us). The smoothest developer experience (build, GUI design, debug) I've ever had. Despite I had a rather mediocre PC at that time, it was snappier than anything modern, save for not-quite-IDEs like VS Code.

<comment><USER28> The experience was awesome! Just hit F9, if I remember correctly, and everything worked (sometimes). Export as a .exe and you were good to go.

Maybe I should get into it again, not sure. :-D

</comment></comment></comment><comment><USER30> In case you still want to work with it : [https://www.lazarus- ide.org/](https://www.lazarus-ide.org/)

<comment><USER31> Actually, if one wants to try out Delphi,

[https://www.embarcadero.com/products/delphi/starter](https://www.embarcadero.com/products/delphi/starter)

Lazarus and FreePascal are great, but they aren't 100% Delphi.

<comment><USER32> They also have a significantly lower barrier to entry. Just by scanning the Delphi page, I'm guessing the free one doesn't include the Linux version as advertised for the big for-pay editions. And the download is hidden behind a registration form. blah.

<comment><USER33> Professional doesn't even include the Linux version. You need to buy enterprise for that...

</comment></comment></comment></comment><comment><USER34> I made my first substantial, steady paycheck with Delphi. It was pretty great for its time, and it really lowered the barrier for entry into programming, and especially GUI-based programming. I wasn't a huge fan of Pascal, so I ended up continuing to work in C++ Builder, but this stuff was _such_ a breath of fresh air back when Microsoft tooling sucked real bad, and Visual Studio was not "visual" at all. There were entire sites chock full of reusable Delphi/C++ Builder components that you could just download and easily integrate into your code. Then Borland lost Anders Hejlsberg, and Microsoft gained Anders Hejlsberg, and within a few years we saw C# (clearly inspired by Object Pascal) and Windows Forms (clearly inspired by VCL).

<comment><USER35> MS Visual Basic had windows forms as long as Delphi if not longer and long long before .net came along.

<comment><USER36> I think that was referring to "Windows Forms" the .NET library, not Windows forms in general.

<comment><USER35> OK but I've used vb6, vb.net, Delphi (and Lazarus) and they are all pretty much identical in terms of dropping in controls onto a form, writing event handler code and setting properties. So to claim that delphi's vcl is clearly the inspiration for this in .net is a bit of a stretch.

<comment><USER34> They are very similar architecturally and in terms of language features, to the point where someone with Object Pascal background would feel right at home. Also it was the first Microsoft visual UI design framework backed by a _real_ programming language.

</comment></comment></comment></comment></comment><comment><USER37> At work our main product is all Delphi, some 300kLOC not counting the components and libraries (DevExpress, SecureBlackBox etc).

There's been more and more talk about moving to something else, but a complete rewrite would likely be a death sentence so...

Still, for whipping up some quick GUI that does file IO and/or DB stuff there's not much that beats it. Though having to consume REST APIs or similar newfangled things is not such a pleasurable experience.

<comment><USER38> Whats the problem with the REST Api's, I haven't tried it but thought it would just be a matter of dropping some TDataSources and so on?

<comment><USER37> The built-in REST library is verbose and tedious, and it doesn't do HTTP pipelining which means any non-trival API over HTTPS will be slow as a dodo (though maybe they fixed this recently, haven't checked latest version).

In addition, the built-in JSON stuff is also tedious to use, I found SecureBlackBox's variant with some class helper to provide basic XPath-like access to be quite a lot more ergonomic to use. But JSON still feels like an impedance mismatch.

<comment><USER38> Thanks for the info

</comment></comment></comment></comment><comment><USER39> I started my lifelong love of coding with Turbo Pascal.

At the time we coded on a Sperry Univac 1100 system at varsity and it took bloody ages to compile/debug/run programs.

When I got a loaner PC and a copy of Turbo Pascal it was so amazing and fast.

<comment><USER40> When I started in college in 1989 our school had an IBM mainframe with terminals where you would type in your Pascal code and submit a compile job and if there were bugs you would get a green bar paper printout that you had to go across campus to get. Through a friend I was able to get a official IBM file upload utility (he was in IBM's summer sales rep program) and figured out that Turbo Pascal also compiles the (UCSD?) flavor of Pascal that the mainframe ran. While everyone else was doing the compile-print-walk loop (there were no terminals in the building with the big mainframe chain printer) I was interactively debugging my code in Turbo Pascal on my Tandy 1000 in my dorm room and then uploading it over dialup. It was awesome.

<comment><USER41> What kind of insane university has the terminals in a different building from the printers?

I'm going to guess that the staff didn't have to use those terminals, only the students did.

</comment></comment></comment><comment><USER42> From a developer viewpoint i can name three things that have stopped Delphi from competing with languages such as C# and JAVA.

1\. No Garbage Collector. While some understanding of object lifetime is required, the constant need to manage allocation and de-allocation of objects takes a lot of energy away from the writing code.

2\. Naming variables in a separate Var block. This is really cumbersome and detracts from the development experience. This was somewhat fixed in Delphi 10.3 which was released in 2018 or rather 23 years after the first Delphi version.

3\. The unrealistic pricing of Delphi. The high cost of licensing has throughout the times meant that other programming languages have been chosen on this fact alone.

If (1) and (3) could be fixed then Delphi might stand a chance to gain significant market share.

<comment><USER8> Agree with 3.

1 sounds like you need to get experience on more platforms though. Maybe try to work on a memory restricted platform using a GC language and see how it fucks you over. Anyway, look beyond the javascript "ecosystem".

And while 2 can be mildly annoying, there's a reason Borland compilers are so fast, and that's the somewhat restricted syntax of the language.

<comment><USER42> Don't know what relevance the JavaScript ecosystem has. I would pick a language with a GC any day and then deal with issues later on, than to struggle every bit of the way without a GC IMO.

</comment></comment></comment><comment><USER31> Happy Birthday Delphi!

If Borland's management hadn't messed up, .NET and Java probably would never had taken off on PC world.

<comment><USER43> I'm sure there was management issues in the 90's. But I'm of the opinion Borland's fate had a lot to do with Microsoft's embrace, extend, and extinguish strategies of the era.

<comment><USER31> If you ever listed or read Anders interviews, those management issues are also one of the reasons he ended up leaving Borland.

Most university students in Portugal during the 90's would also gladly accept Microsoft job offers.

I always find ironic that the companies that sold out to Microsoft are always the victims, the poor souls never did anything wrong.

<comment><USER8> I think there was a news/gossip item back in the day that MS offered him 1M/year and Borland/Inprise refused to even come close to matching that. Their loss.

</comment></comment></comment></comment><comment><USER44> Someone wrote a full audio tracker with ASIO, VST etc. in delphi in the 90s; a pretty impressive feat.

Its still avaliable: [http://www.madtracker.org/main.php](http://www.madtracker.org/main.php)

Thread talking about it: [https://www.madtracker.org/forum/viewtopic.php?t=180&sid=7df...](https://www.madtracker.org/forum/viewtopic.php?t=180&sid=7dff0c87463a4114348aeb21d869201c)

<comment><USER8> Well, as opposed to your average RAD medium, in Delphi you could even sprinkle pieces of assembly in the middle of your Pascal code.

So you could basically do anything with it, all the time not worrying about aligning buttons on a form because it was piss easy.

<comment><USER44> Yeah, i spoke to the guy who wrote it and he used a lot of assembly optimization.

</comment></comment></comment><comment><USER45> Delphi, great tool, to write apps in. I can still remember the anticipation/excitement of my dad when he discovered Sibyl was being build. Delphi for OS/2! I found an interesting article about it: [http://www.edm2.com/index.php/Sibyl,_a_Visual_Development_En...](http://www.edm2.com/index.php/Sibyl,_a_Visual_Development_Environment_for_OS/2)

My dad used OS/2 for a long time :)

</comment><comment><USER46> Ah, sweet Delphi ... To this day, it remains the best visual development environment that I have experienced over 25+ years. Powerful - yet intuitive and simple - UI, blazingly fast compilation speed, rich sets of built-in and third-party visual component libraries. I have started with Turbo Pascal, which was certainly the breakthrough at the time, and have also worked with C++ Builder and a bit with Interbase & Firebird, but spent most of my Borland ecosystem time with Delphi. Recently, looking for potential better (Delphi- like) alternatives to modern convoluted world of Web development, I have explored Lazarus and several related projects, but none of them seems to provide the same comprehensive-yet-intuitive solution (backed by a solid company) that Delphi has done in the desktop development world. Perhaps, some good relevant projects will emerge in the future, but, until then, I will focus on mastering one of the "standard" modern Web development stacks (e.g., TypeScript + Vue) as well as exploring quite promising Blazor and, generally, WebAssembly technologies.

</comment><comment><USER47> I basically learned how to program using Delphi 2, as a 16 year old who somehow ended up writing the LOB software for a small business owned by a family friend. Lots of good memories of that. My career would probably be farther behind if Delphi didn't provide all the pieces to write a reasonable client-server application out of the box.

</comment><comment><USER48> annual birthday party didn't happen though - one developer couldn't make it due to sickness and the second one decided not to go not wanting to feel alone ;-)

<comment><USER31> At least in what concerns German community, there would be a couple more showing up.

Delphi is alive over here, even if only on corporations with big pockets.

<comment><USER49> It was (is?) also popular in eastern Europe, especially considering a relaxed attitude towards copyright laws - even gov and public schools used to run (still run?) illegal copies :)

</comment></comment></comment><comment><USER50> I learnt Pascal at Uni in the late 1970s and programmed in Turbo Pascal from 1986 on and then Delphi D2 since 1997. Slightly off-topic but two of my applications written in Turbo Pascal:Warlord and Quest, in the period 1988-1990 are still in use today. Both are postal games now run on the internet by kjcgames.com.

I'm currently maintaining and extending a major proptech application with 1.3 million loc of Delphi (XE7). Not so long ago the firm bought another firm with its own a 1.3 million loc of D7 code! There's still a lot of Delphi code about.

</comment><comment><USER51> I programmed a lot 20 years ago as a hobby. I started at 13 with TP7 and some pascal books borrowed from my older brother. Later I "got" Delphi 1 and 3. Crated some smallish programs for myself, like a magic card db program when I started to play mtg. Fun times.

<comment><USER17> I start with TP 5.0 or 5.5.

<comment><USER31> Same here, my introduction to OOP was preparing an high school class presentation about Turbo Pascal 5.5 new OOP features.

I ought to Pascal being introduced to systems programming and OOP in a much saner way than other alternatives.

</comment></comment></comment><comment><USER52> Delphi 1 on Win 3.11 and 4MB RAM. Long long time ago.

<comment><USER53> Customer VCL development too, how cool was that.

</comment></comment><comment><USER54> I learned object pascal (Delphi) in school in high school (now 18 years ago) and it was love at first sight. Coming from ansi c and ansi c ++, the lack of the garbage collector has never been a problem. But then the license costs stopped me as well as the fact that I am a supporter of the open source world. A few years later I discovered lazarus and the free pascal and I must say that since then I have never abandoned them (now 12 years in which I program for linux / windows and for a few years also for mac os and raspberry all for free). If the delphi had lowered the licensing costs and made the product open source in its time it would have killed the market, but it was not so.

</comment><comment><USER55> One small language feature I liked about Delphi was class properties.

I used Delphi at my first job, while studying in the university, where we were taught Java (and C and other languages), what I really disliked were Java's getters and setters, which seemed like a clunky and pointless verbosity, compared to the properties in Delphi.

Python has the @property decorator, I wish other languages had something like that. Qt also has foo() and setFoo(), instead of getFoo(), which makes sense, and reduces verbosity and visual clutter.

<comment><USER56> This is exactly what I like too about Delpi (and Pascal if I remember correctly) compared to C++ and Java. Julia, which I use now, has a similar feature but properties are less extensively used there (except for interoperability with Python). But it is a great feature to reduce the clutter in your code.

</comment></comment><comment><USER57> On my current work the main enterprise system client is written with Delphi and still in active use. I worked for years to gradually replace it with web system with Java, but there's still a lot to do. While I hate it with passion, because it was written by a few generations of developers with very poor practices, the mere fact that it exists and works is a testament to Delphi former glory.

Another component is Oracle 9i running on Itanium HPUX. At least it works fine.

</comment><comment><USER58> Borland's Turbo products were my entre into PC programming in the last 80s. It's amazing, but not unusual, how quickly they descended into utter irrelevance.

</comment><comment><USER59> Borland made a lot of mistakes with Delphi, but the best part of delphi was VCL was shipped with the source, it was a great introduction for the Win32 API world.

</comment><comment><USER60> The language that everyone knows and now no one uses.

<comment><USER61> quite a few people use it [https://jonlennartaasenden.wordpress.com/2020/01/20/turkey-s...](https://jonlennartaasenden.wordpress.com/2020/01/20/turkey- secures-delphi-access/)

<comment><USER60> Compared to the hundreds of millions using languages like python, C#, Javascript etc.?

It's mostly a dead language. Didn't even hit the 2019 developer survey on stack overflow. My university never used it and no company I've ever been in has used it and I've been with 4 already.

</comment></comment></comment><comment><USER62> Here are a couple of links with some awesome Delphi applications [https://beyondvelocity.blog/2019/05/19/awesome- applications-...](https://beyondvelocity.blog/2019/05/19/awesome-applications- built-in-delphi/)

There many lists like these with many new apps popping up.

<comment><USER62> I find the fact that there r quite a few games very interesting. I guess, there maybe a decent set of libraries for 2D and 3D graphics.

</comment></comment><comment><USER20> Delphi is great; just ensure you always stay subscribed. Their tech support team regard properly managing their own strict license system as 'a courtesy' and will prevent you from installing the licensed software that you purchased. For that reason alone; I am out.

<comment><USER21> > will prevent you from installing the licensed software that you purchased

Could you elaborate on that? I'm actually interested in procuring Delphi commercially after getting to know the free Community edition recently and I'd like to avoid any licensing pitfalls if possible. I can't really imagine how they would stop you from installing a properly licensed and purchased software but if they do, I'd be curious to know how to avoid running into that situation. Thanks.

<comment><USER33> You have a max. number of times you can install and after that you can only get it re-activated by buying a new version..

This was a hot topic at their forums. Sorry, can't locate that now, but here is a post of somebody who bumped into this:

[https://community.idera.com/developer-tools/general- developm...](https://community.idera.com/developer-tools/general- development/f/installation-issues-23/70832/have-some-of-you-ever-experienced- a-refusal-from-embarcadero-support-to-allow-you-to-register-for-the-1st-time- a-legit-licence-of-c-builder-xe4)

It's pretty customer hostile if you ask me.

<comment><USER8> The fuck ?!?

</comment></comment></comment></comment><comment><USER63> The GUI builder was great, the build times were great, the debugger was great.

What was not great was Pascal, especially their version of it. It didn't even have a published formal grammar (as of Delphi 5), as I found out when trying to write some simple tooling for our codebase.

</comment><comment><USER64> Interesting fact about the name: if you wanted to talk to Oracle, you needed to go to Delphi.

</comment><comment><USER65> Excerpt:

"I started my coding career using a Turbo Pascal clone for the Commodore Amiga, something called High-Speed Pascal, published by UK based company Hi- Soft."

 _It would be interesting if an open-source version of this Amiga Turbo Pascal clone - was available somewhere..._

<comment><USER66> Here's an overview of Pascal implementations for Amiga: [http://fpcamigawiki.alb42.de/index.php?title=Workshop:Amiga,...](http://fpcamigawiki.alb42.de/index.php?title=Workshop:Amiga,_Pascal,_graphics.library_and_timer.device#HighSpeed_Pascal) (however I think when they wrote "development seized", they actually meant "ceased" ;) )

<comment><USER65> Interesting link, much obliged!

</comment></comment></comment><comment><USER67> Congrats! My new software ([https://DocxManager.com](https://DocxManager.com) \- site builder and document manager) is built with Delphi :)

</comment><comment><USER5> For those missing Delphi, have you considered VS/C#/Winforms? I gonna tell you than its binaries as portable as Delphi/Kylix(e.g. major platforms covered).

The language is much less annoying (oh how i hated Type and Var sections in the times). The gui programming style can be similar or can be modernized. The designer and component library is vastly improved. Third party components are cheap compared to today's "cloud" prices. There are libs for everything. Its free. Can be compiled to native binaries(not sure this will leave 'experimental'). Feels like a direct replacement to me.

<comment><USER31> Yes, that is my daily driver nowadays, however .NET AOT experience still misses a bit compared with Delphi.

And Delphi is still around, no need to talk as if it was dead.

In Germany, it has a regular section on the .NET developers magazine and an yearly conference.

<comment><USER8> Does anyone do something non legacy in it?

Their pricing is a bit of a barrier to entry for new apps now.

<comment><USER31> Their pricing is quite competitive for companies that buy Oracle, SAP, DB2, Qt, SQL Server, MSDN Enterprise.... kind of licenses.

That was Borland's mistake with their Inprise change, to abandon grassroots developers and focus on this kind of companies.

This was last year's conference, [https://entwickler-konferenz.de/program- en/](https://entwickler-konferenz.de/program-en/)

Anyone using this hardware, is running Delphi on their network.

[https://www.lab-services.nl/en/home](https://www.lab-services.nl/en/home)

<comment><USER8> Yes, that's my point. They don't have anything for the small guy any more.

Basically losing the entire market where devs are allowed to choose their platform, because they won't be aware of it.

I suppose wining and dining the executives puts food on the table too.

</comment></comment></comment></comment></comment><comment><USER49> Lets also don't forget C++Builder :)

<comment><USER68> That was my tool of choice for _years_ and I still think that if someone manages to duplicate that experience for the web that they'll make bank.

<comment><USER69> Borland once did a version of Delphi for the web, it compiled to PHP and was a bit of a turd.

</comment></comment></comment><comment><USER70> wow Delphi still around ^_^ Congrats!

</comment><comment><USER71> OK,

At the time of the Delphi 8 release I went to a Delphi conference to get to know the community better. This was 2003 or so? I was evaluating whether or not to get more licenses for our company so we could put extra effort into developing Delphi for .NET.

Let's just say that I found the people there to be rude and insulting. Not just the people at the conference there but also by some of Borland staff there as well. A joke was played on me which I won't get into here but I didn't - and don't - appreciate being bullied.

Let's just say that the next day I abandoned Delphi and moved our entire company to Visual Studio and never looked back.

<comment><USER21> No offense, but that'd be like if you stopped eating your favourite vegetables because you once met an offensive vegan :-)

Why would you move your ENTIRE company to a different language/development system because someone was rude at a conference?

FWIW I felt out of place at conferences before, many are just an exercise in peacocking and showing off (and still, I have learnt some interesting things from some incredibly irritating people in my time). But I would never change something that I like and that works for me because other people that just so happen to use it too, are rude.

I've met arrogant and frankly insulting people at both Linux and Microsoft events, for example (Linux famously has people who can be wonderfully insulting on mailing lists and dare I say often deservedly so) but it would never occur to me to switch my entire company to, say, Windows Server, because Linus (heaven forbid) said something rude to me :-)

I can't even actually rule out that I might have behaved in a way that might have been interpreted as rude at conferences myself, especially after several days of travel, talks and general exhaustion. So I'd actually be curious to hear how you felt you were insulted or bullied or made a joke of so that I might keep an eye out for such behaviour myself.

FWIW, you may find that Borland is no longer around or involved with Delphi (and hasn't been for a decade now, I think), so the people might be different, too. I've certainly found Delphi worth a second look recently and hope the forums and communities of old have been or will be revived in some way.

<comment><USER72> > so the [company] might be different, too

I had an acquaintance who bought the most recent Delphi release (he's a long term customer), but had some troubles so he installed the free community edition as a stop gap solution. They phoned him and bolloxed him and _demanded_ he buy another copy, extremely rudely and extremely forcefully (almost as if the person calling had KPI's for upsells).

Unless I had a burning reason to use Delphi, I would avoid it, since I don't like dealing with stupid businesses if I can avoid it... Don't burn your loyal customers...

<comment><USER73> In my experience the company treat individual customers with something akin to contempt.</comment></comment></comment></comment>


Ask HN: Software to download email from Outlook Web Access? - <AUTHOR>

Hi, first of excuse me if this type of question is not suitable for HN.
My question is, I have a Microsoft Exchange account and I want to export all my emails and folder from it to save as a back up.
Now I usually would connect to Outlook on my Mac/PC and export from there, but on this account I can't connect to pop3, IMAP, etc.. Basically can't connect it to the desktop client.
So is there any software which can save all my emails?
Thanks <comment><USER2> Are you sure you're not able to connect using Outlook Anywhere? It's a feature that would have to be set up by the Administrator, but that would definitely be the easiest way. The settings can be tricky depending on the server configuration so if it doesn't work at first then you might try different settings.

[http://office.microsoft.com/en-us/outlook-help/use- outlook-a...](http://office.microsoft.com/en-us/outlook-help/use-outlook- anywhere-to-connect-to-your-exchange-server-without-vpn-HP010102444.aspx)</comment>


Get Portal for free - <AUTHOR> http://store.steampowered.com/freeportal/

<comment><USER2> Didn't we have some fun, though? Remember when the platform was sliding into the fire pit and I said 'Goodbye' and you were like 'NO WAY', and then I was all 'We pretended we were going to murder you'; that was great.

<comment><USER3> Is this a metaphorical commentary on the PC gaming industry?

<comment><USER4> Nope. That's what GLaDOS, the AI you beat in Portal, says in one part of the game. GLaDOS is a psychotic AI who says hilarious things like that. It's only funny if you know what happens in the game though.

<comment><USER5> ehsanul is lying. The computer is your friend.

And there will be cake.

<comment><USER6> I laughed so hard when it was revealed that there was actually cake.

<comment><USER7> You may not want to eat the cake when you find out what's in it. <http://www.planetfortress.com/dfa/portal-recipe.html>

<comment><USER8> I don't know what a "trans-borehole magnetic imaging rhubarb" is, but I want one. It's in the recipe, too, but for some reason the rhubarbs were not transcribed on that page.

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> Easily one of the best games ever made. It takes a mere four hours to play through, but I call that a feature, not a bug. Most games keep going long after they've became repetitive and dull. Portal is a pure pleasure from start to finish.

</comment><comment><USER10> Tip for OSX: If steam complains that it needs to be on a case insensitive file system, you can go to the disk utility and select 'New Image' from the toolbar and create a files system, make sure it's case insensitive, and mount it in /Volumes/SteamDisk.

Then you have to make some symbolic links to this file system, like:

~/Documents/Steam Content -> /Volumes/SteamDisk/Steam Content

~/Library/Application Support/Steam -> /Volumes/SteamDisk/Steam

Once you've got that set up, you should be able to drag the steam icon over to the /Volumes/SteamDisk and then run it.

</comment><comment><USER11> This is a triumph.

I'm being so sincere right now.

<comment><USER12> Nice try, GLaDOS. I'm not touching that 1500 megawatt Aperture Science Heavy Duty Super-colliding Super-button.

</comment></comment><comment><USER13> To any hackers who haven't played this game, I highly recommend it. Even if you aren't the gaming type, it's a short and highly enjoyable experience. The writing is great, the gameplay is fun, and the puzzles will get you to use your brain (if not in the main game, then in the challenges). It's only a few hours long, and you could potentially beat it in a few hours. Above all, it's free. Try it out; there's no reason not to.

</comment><comment><USER14> I'm officially disappointed in Portal, and glad I got it for free. Everybody in the trade press said it was this extraordinary thing: a short but sweet puzzler. Sadly, the game/dev's roots as a FPS house really shows here. Not all of us (especially us older people) have the reflexes anymore to do some of the real time tricks required to solve the last couple of stages. _sigh_

<comment><USER15> Funnily enough, the game developers are not from Valve if that is what you are implying by "FPS house" since they are team that attended Digipen and made a similar game called Narbacular Drop (also a fps). You should check it out.

<comment><USER14> It know this is late, but...

I really wanted to try Drop first, but that's probably never going to be ported to the Mac. (I have Parallels, but no Windows license to install it with.) I want to play "Devil's Tuning Fork" for a similar reason.

I now better understand the love Portal got. The final level (including the boss sequence) made up for most of the frustrations of the last couple of test chambers. According to Portal's commentary track, the developers realized that real time and complicated puzzles needs separation, and this game design made the last level much more enjoyable.

</comment></comment></comment><comment><USER16> "The Steam servers are currently too busy to handle your request. Please try again in a few minutes"

<comment><USER17> I don't even get that, just a blank screen :(

edit: It seems to be working now. I think I needed to go verify my email first. If you are also a new Steam user trying to download portal, go check your inbox first.

<comment><USER17> Steam is being a huge pain so far. I was downloading portal and it crashed. I relaunched it but it didn't resume downloading, yet I couldn't play the game, and didn't find a way to restart the download. Ended up deleting the whole thing and I'm now trying again from the start... _sigh_

edit: Great, I re-installed but it still lists Portal in my "library", and I don't see any way to re-download it or delete it or anything. This sucks.

<comment><USER18> Did you try cleaning out the local game cache files in ~/Documents/Steam Content/?

Also, if you right-click on the game in your Library, and then select "Properties," there's a "Local Files" tab which lets you delete the local cache, and verify that everything's there. Hopefully one of those will make it realize the download didn't finish.

<comment><USER17> I'm on a Mac, so this doesn't quite applies. But thanks anyway. If someone else on a Mac had the same problem, I'd love some help. Thanks.

Update: Okay, somehow my download resumed from where it crashed last time. Not sure what I did; i think their servers are just really slow, and if you keep trying, at some point it will work. I think that what I did is go to "library", then went to Portal (my only game), and the "downloading" thing on the left ended up connecting after a long time. Then I could click on the downloading progress bar on the bottom and I can see the download speed. HOpefully it'll work this time.

<comment><USER18> I'm on a Mac, too. ~/Documents/Steam Content/ is where Steam dumps all its content on a Mac. The "Properties" option is in the context menu when you right-click on Portal in your games list in the Steam client, and that brings up another Steam box that lets you verify the local game cache. I wasn't referring to the Windows Explorer "Properties" option (which I think you thought I was referring to).

<comment><USER17> I'm sorry, I think I read what you wrote too fast because I thought I recognized a windows path at a glance. Thanks for the tip!

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> It's apt. APT!

<http://xkcd.com/606/>

<comment><USER17> That's totally me. I never played portal, got very late into COD4. The only game that I'm likely to get when it's released is Starcraft 2.

<comment><USER5> You should be able to get a beta key if you preorder it, and you could start right now...

<comment><USER17> Oh, I didn't know that's how the beta worked. Thanks!

</comment></comment></comment></comment><comment><USER19> Well, this is a great way to get the Steam store on to my computer.

</comment><comment><USER20> "Now these points of data make a beautiful line and we're out of beta we're releasing on time" ... my favorite video game song ever. Full lyrics here: [http://www.lyricsera.com/513316-lyric-Valve- Still+Alive+port...](http://www.lyricsera.com/513316-lyric-Valve- Still+Alive+portal.html)

<comment><USER21> Put a spoiler alert on that link. The lyrics refer to events late in the game.

</comment></comment><comment><USER22> I installed Steam on my Mac, started download of Portal, then Steam crashed to desktop. Upon restarting it prompted me for my root password so that it could update itself. The combination of crashiness and needing my root password earned it an immediate delete. I'll try again in a year or two.

<comment><USER23> I installed Steam on my Mac, started download of Portal. It saturated my 15 megabit internet connection for nearly the entire download. Portal launched just fine and ran very smoothly at 1920x1200. I already beat portal on Xbox 360. Mac version is easily as good if not better.

</comment></comment><comment><USER24> So, this is because it's an older game? Or are the going to be getting into the virtual goods business?

<comment><USER25> I would say it's a move to get new Steam users, particularly users with Macs.

<comment><USER26> The "Free" part will work for me. Although I dual boot my Mac with Windows 7, and I've always wanted to try Portal, I never really got into it. That will change when I get home.

</comment></comment></comment><comment><USER27> Note that the ending changed since we all first played it!

<comment><USER28> how?

<comment><USER29> <http://www.youtube.com/watch?v=g7lgqS-yq88>

</comment></comment></comment><comment><USER30> So it's free for Mac and Windows... what about Linux?

<comment><USER31> You can get the game without steam installed (though you do need to sign up for an account on-line and you may need to give your CC info), so you may as well "purchase" it now. Worst case you never get to play it and are out 5 minutes of your time.

<comment><USER32> > You can get the game without steam installed (though you do need to sign up > for an account on-line and you may need to give your CC info), so you may as > well "purchase" it now.

How does this work? I don't see anything but a big red button that downloads Steam.

<comment><USER31> At what point in the process does this happen to you? You should be able to add Portal to your cart, at which point it'll ask you to create an account. After you've registered you can then checkout. It shouldn't ever force you download steam.

And just so there's no misunderstanding, I didn't mean you can play the game without the steam, I meant you can purchase games without steam.

<comment><USER32> Originally, I got the Big Red Button upon clicking on the provided link; but, right now, the linked page is blank for me.

Anyway, I went ahead and downloaded the Steam client, so it's not a big deal. I remember the original web-based preview (or rip-off?) of Portal quite fondly; Lore Sjöberg linked to it somewhere from his vast empire.

</comment></comment></comment></comment></comment><comment><USER33> This looks like a ploy to reward people for the mac beta.

<comment><USER34> I'm guessing more like getting people to install Steam on their Macs. Worked on me! _installing_

</comment></comment><comment><USER35> I had some worries that it wouldn't work so hot, but it was decent playing on my MBP.

<comment><USER36> Do I need steam, or can I just download the game?

Do I need to have internet access when I run the game?

I really don't like the new model of needing to know all this, a good reason I gave up on games along time ago.

<comment><USER37> You need steam. You don't need internet access to run the game.

</comment></comment></comment><comment><USER38> Link is getting Error 324 (empty response) for me, using Chrome on Linux.

<comment><USER39> same here. just hit reload a few times, it'll work.

</comment></comment><comment><USER22> I'm making a note here, "Huge success."

EDIT: corrected the quote

<comment><USER40> (ahem) the correct quote is "huge success"

</comment></comment><comment><USER41> Free Mac play testing before releasing the entire platform?

</comment><comment><USER42> good find. you need a steam account and steam installed though.</comment>


Rust: Error Handling – Learning Rust V - <AUTHOR> https://medium.com/learning-rust/rust-error-handling-72a8e036dd3 <comment><AUTHOR> Hi Guys,

This is the fifth post I wrote about Learning Rust on Medium, [https://medium.com/learning-rust](https://medium.com/learning-rust). Now you can read the same content via [https://learning- rust.github.io](https://learning-rust.github.io) as well. In this post, I tried to summarize about,

      - Smart Compiler
        - Why Compiler?
        - Explain Error Codes

      - <USER2>
        - panic!()
        - unimplemented!()
        - unreachable!()
        - assert!(), assert_eq!(), assert_ne!()
        - debug_assert!(), debug_assert_eq!(), debug_assert_ne!()

      - Option and Result
        - Why Option and Result?
        - Basic usages of Option
        - Basic usages of Result
        - is_some(), is_none(), is_ok(), is_err()
        - ok(), err() for Result types

      - Unwrap and Expect
        - unwrap()
        - expect()
        - unwrap_err() and expect_err() for Result types
        - unwrap_or(), unwrap_or_default() and unwrap_or_else()

      - Error and None Propagation
        - ? Operator
        - try!()
        - Error propagation from main()

      - <USER3>
        - What is a combinator?
        - or() and and()
        - or_else()
        - and_then()
        - filter()
        - map() and map_err()
        - map_or() and map_or_else()
        - ok_or() and ok_or_else()
        - as_ref() and as_mut()

      - Custom Error Types
        - Error trait
        - From trait

> I am a Sri Lankan🇱🇰 Web Developer who works in Vietnam🇻🇳. I am not a native > English speaker and I am just practicing Rust in my very little leisure > time, while learning more about Golang, Devops and so much in the workplace. > So, if you found any mistake or something I need to be changed, even a > spelling or a grammar mistake, please let me know.

⭐ Hire me! - [https://github.com/dumindu/hire- me/blob/master/resume_dumind...](https://github.com/dumindu/hire- me/blob/master/resume_dumindu_madunuwan.pdf)

⭐ Buy me a coffee! - [https://www.buymeacoffee.com/dumindu](https://www.buymeacoffee.com/dumindu)

⭐ Contribute! - [http://learning-rust.github.io](http://learning- rust.github.io)

Thanks</comment>


My startup failed, and I don't know why - <AUTHOR> http://shitfuckpissstore.com/ <comment><USER2> I imagine the reason your business failed is due to ignoring the lefthand side gutter on your website. A simple group focus test would have found this. The text is hard up against the edge of the screen, causing users to feel trapped and confined. With a 15px margin users would feel free and excited by your offering, leading to an improved conversion ratio and additional social back links from sharing on Bebo and MySpace.

UX Consultancy: $3200, payable in Dogecoin.

</comment><comment><USER3> Never forget the classic sales aphorism to "sell the sizzle, not the steak". Applied to pencils, that would be "sell the sharpening, not the pencil", and can be seen in practice here: [http://www.artisanalpencilsharpening.com](http://www.artisanalpencilsharpening.com)

</comment><comment><USER4> I actually enjoyed reading the description for pricing plans.

</comment><comment><USER5> How much time did you invest in this?

</comment><comment><USER6> Damn you! A loud fart sound in the middle of 10s of people in a conference room. :@ NSFW :D

</comment><comment><USER7> all you need is one customer....

</comment><comment><USER8> you should have pivoted to dog underwear... !

</comment><comment><USER9> color. you forgot about the colored pencils.

</comment><comment><USER10> Do you know how to make potato salad?</comment>


GFWaaS – Make Your Website Work in China - <AUTHOR> https://gfwaas.github.io/ <comment><AUTHOR> Author here.

Surprised to see this would be in the frontpage of HN. Happy to answer any questions you may have :-)

<comment><USER2> How does this work? You don't need to disclose secret sauce per se, just enough to understand the legality and robustness of using it.

<comment><AUTHOR> Not sure I have understood your question. But I'll try to explain.

In terms of tech stack, GFWaaS is a mix of Rails, Apache Guacamole, and headless browser. If you just want to solve your own problem, you could simply setup Guacamole on a server in China, and use VNC in your browser.

The real challenge is dealing with the Chinese Internet. For example, to get reasonable connection speed for VNC, choosing the right cloud service provider is really the key. You have to figure out a way to get an account from the major providers in China (many of them, if not all, require you either live in China or have a local entity), and test the speed and stability of the connections. And, in some cases, because of the bad traffic peering across Chinese ISPs, you website may work relatively well with one ISP but not others, so you have to test with different ISPs.

GFWaaS streamlines the whole process so you can focus on testing your website, instead of finding the right cloud service provider and setting up software etc by your own.

Hope I have explained what you asked, and sorry for my English.

<comment><USER2> Yes that's helpful. Great explanation!

</comment></comment></comment></comment><comment><USER3> My suggestion is that you can build a proxy server in China, and you can test your website bypass the proxy server to see if your website is work. Chinese cloud host like Aliyun or QCloud may monitor if you have a proxy server like shadowsocks server in their default template os, so you must reinstall it or provide your own template os.

</comment><comment><USER4> Well, actually it's a Remote Desktop as Service.

The real "GFWaaS" is when you intentionally put blocked keywords on a HTTP page, triggering GFW to reset user connection. That way you can block Chinese users from accessing your website. And it's free.

My suggestion is, may be add more web browsers to your service, make it a browser compatibility test platform, and (innocently) put few servers in China. People will figure out what's going on themselves :P

<comment><USER5> Is there a list of such keywords maintained anywhere?

<comment><USER6> "Taiwan is a sovereign nation"

"Tiananmen square massacre"

"Free Tibet"

"Falun gong organ harvesting"

"Winnie the Pooh"

<comment><USER7> Winnie the Pooh !?

<comment><USER8> Google it. It's a meme about Xi Jinping, who, if you squint your eyes a little, looks like Winnie the Pooh.

<comment><USER6> Xi jinping is angry enough about this that Winnie the Pooh is a banned concept in a nation of over a billion people.

That's China /shrug

</comment></comment></comment></comment></comment></comment><comment><USER9> I suggest remove "GFW" from the name. It's not funny if your site was blocked for the name when you promise to make clients' websites work in China.

I also wonder if there's really a market for such a tool? Who needs to optimize for China EVERY MONTH? Besides Cloudflare (which sucks)?

I had a similar idea of offering a service to make websites fast in China. Seems more viable.

</comment><comment><USER10> I find the idea of "Well I'm stuck behind the firewall...how can I sell that as a thing?" amusing, and kinda interesting.

<comment><USER11> It is also very interesting to have such a service provided by a Chinese developer (the author)

</comment></comment><comment><USER12> Can't you also just rent a Alibaba cloud instance which is in mainland China and fire up a browser?

<comment><USER13> Launching servers in China still require ICP to be lawful.

[https://www.alibabacloud.com/icp](https://www.alibabacloud.com/icp)

<comment><USER14> if you just rent a windows server used as remote desktop PC, there is no need ICP. In another words, if there is no ICP bind on the server you have, port 80 will be blocked, 3389 ( windows remote desktop ) is still open, and you could login in the windows server by windows remote desktop, and open any browser to browse website like a PC locating in China.

</comment></comment></comment><comment><USER15> I don't have experience launching websites in China yet, what's the benefit or risk of this versus using a AWS partner like this[1] ?

[1] [https://www.amazonaws.cn/en/new/2017/whats-new-announcing- pa...](https://www.amazonaws.cn/en/new/2017/whats-new-announcing-partnership- between-aws-and-nwcd-availability-of-ningxia-region/)

<comment><USER16> The benefit of this is that it lets you simulate the experience of a Chinese user to debug issues caused by the Great Firewall.

One way to solve those issues could be hosting your website on a Chinese server. Note that you'll need to register with the government before you'll be allowed to do that. [https://www.amazonaws.cn/en/about- aws/china/faqs/#new%20step](https://www.amazonaws.cn/en/about- aws/china/faqs/#new%20step)

</comment></comment><comment><USER17> Another way to earn money by looking helpful

</comment><comment><USER18> Test my website

[https://gfw.netlify.com/](https://gfw.netlify.com/)</comment>


Show HN: PDF Converter API - <AUTHOR> https://pdf.to/api <comment><USER2> This might be useful for a project I'm working on, what does secs mean in the pricing?</comment>


Phil Schiller confirms white iPhone this Spring, calls it a "beauty" - <AUTHOR> http://www.edibleapple.com/phil-schiller-confirms-white-iphone-this-spring-calls-it-a-beauty/

<comment><USER2> Is Apple trying to do something where they alternate white/black and one of them is new and in fashion and the other is now old?

2011 - if you own a new Apple product, it's white. 2012 - if you own a new Apple product, it's black. White is old now. 2013 - White is new again. Don't go outside with a black product. and so on</comment>


C++ Error Handling: Why Use Eithers in Favor of Exceptions and Error-Codes - <AUTHOR> https://hackernoon.com/error-handling-in-c-or-why-you-should-use-eithers-in-favor-of-exceptions-and-error-codes-f0640912eb45 <comment><USER2> And of course his "simple" example of an `Either` class leaks and doesn't call destructors, because C++ unions do not cleanly support types with nontrivial destructors.

Meanwhile the open source project he links to has an implementation that is hundreds of lines of template magic that I gave up on interpreting.

I've dealt with codebases like this and I strongly recommend against using this kind of arcane template incantations in production. It becomes an impenetrable fog for newbies, and a morass for veterans with something to prove.

<comment><USER3> Can you please point out what about Buckaroo's (i.e., the author's) solution is wrong? I take it, his version of Either is copied from the neither project [1], so the destructor of the union is:

       ~Either() {
         if(isLeft) {
           leftValue.~L();
         } else {
           rightValue.~R();
         }
       }

Which does explicitly call the destructors. (Obviously, if you only were referring to his eight-line toy version of Either for the blog, please forget my comment.)

[EDIT: re-reading your comment once more, I see you did indeed mean the blog implementation; please ignore this comment.]

[EDIT2: BTW, it seems the author is "affiliated" with that LoopPerfect/neither implementation.]

[1] [https://github.com/LoopPerfect/neither/blob/master/neither/i...](https://github.com/LoopPerfect/neither/blob/master/neither/include/either.hpp)

</comment></comment><comment><USER4> The whole point of C++ exceptions is that they decouple the code that might raise exceptions from the code that handles them.

If you know how to handle an error when it arises, then you shouldn't be using exceptions. If you're wrapping a try block around every piece of code that might throw an exception, then you're doing it wrong.

The technique described in this article is not an alternative to exceptions... unless you were using exceptions wrong in the first place.

EDIT: Replaced "any code" with "every piece of code."

<comment><USER5> > If you're wrapping a try block around every piece of code that might throw > an exception, then you're doing it wrong.

Well then the C++ standard people are doing it wrong, because something as expected-to-fail as converting a string to a number throws an exception.

What am I supposed to do if I want to load a text file containing numbers and print out where it failed? Yep, I have to wrap every string-to-number conversion in a try-catch block.

Or in reality I make a wrapper function that does it. This is why exceptions are stupid - 80% of the time you _want_ the context provided by the program counter in order to handle the error.

int string_to_int(const std::string& s, int def) { try { size_t pos = 0; int v = std::stoi(s, &pos); // Check that the number was parsed from the entire string (stoi ignores trailing garbage). if (pos == s.size()) return v; } catch (std::logic_error&) { // This occurs if there is no conversion (e.g. no digits) or the number doesn't fit in an int. } return def; }

<comment><USER6> > _Yep, I have to wrap every string-to-number conversion in a try-catch > block._

Ah, that's simply because C++ exceptions are unwind-only, non-restartable.

"Blub" exceptions.

> _This is why exceptions are stupid - 80% of the time you want the context > provided by the program counter._

Exactly.

Imagine if a CPU exception threw away that context. We couldn't implement virtual memory, which requires faulting instructions to be precisely restarted.

<comment><USER7> Generally the context is held by most implementations (And accessible by implementation specific tricks), but that is not required by the standard as some platforms have highly limited stack Or other storage for such data.

Why would you want to restart same code after an exception anyway? Conditions have changed...

</comment></comment></comment></comment><comment><USER8> Once upon a time I hated exceptions, but today I like them more and more for each day. The hate was something I inherited from the early languages I worked with where exceptions where uncommon and was considered de facto wrong, it was the C approach of error handling.

What I learned working on a medium-sized web project is that you have too _few_ exception types. Yes, create more unique exceptions for each situation and avoid reusing them across the project.

Too general exceptions make your code base suck hard. Complexity of exceptions with small benefit because you can't discriminate between them. _ObjectNotFoundException_ is pretty useless but _AccountNotFoundException_ is much better. Don't be afraid of types, use it to your advantage.

Optimize the happy path and fail fast on the sad path.

Note, have not tried this approach on a C++ project yet, maybe it will not work as well there.

<comment><USER7> Works just as well until one of the types leaks accidentally by confusion. This is why you should have your exception types derive from common ones so that they can be reasonably caught by general handlers.

</comment></comment><comment><USER9> I am quite used to C++ exceptions and strongly favor them against error codes mainly because of error handling decoupling and the fact that exception (unlike return code) cannot be passively ignored - if you want to swallow it you need to do it rather explicitly. If you forget to handle exception it crashes loud and that I prefer.

If anything I would be very please if we got advanced exception catchers in C++. Recently I drooled over Ada exception handling capabilities: [https://en.wikibooks.org/wiki/Ada_Programming/Exceptions#Exc...](https://en.wikibooks.org/wiki/Ada_Programming/Exceptions#Exception_handlers)

</comment><comment><USER10> Also worth mentioning: LLVM's ErrorOr [1] which is like Either but with the right always an std::error_code. Rather convenient for APIs.

Also a remark: the author uses left()/right() calls excplicitly to construct Either instances. This should not be needed (given Either has the proper constructors). One could argue it is clearer, on the other hand one could say it adds unnecessary visual noise. I'm obviously in the latter camp else I wouldn't make this remark :]

[1] [http://www.llvm.org/docs/doxygen/html/classllvm_1_1ErrorOr.h...](http://www.llvm.org/docs/doxygen/html/classllvm_1_1ErrorOr.html)

</comment><comment><USER11> I'm not sure I follow. Assuming that lambdas can indeed be optimized/inlined, shouldn't the same performance gain exist with a single error-handling std::function (lambda) parameter in an otherwise-normal function? In other words, avoid wrapping the entire return value in a special type, avoid weird calling conventions, and simply supply a block to invoke if/when there is an error (and if there is no error, do nothing different).

<comment><USER12> No, performance would probably be worse. For one, std::function is not just for lambdas. It uses type-erasure and dynamic allocation to hold any sort of callable object/function. It's a generic type with a complex implementation and I wouldn't assume it would be optimized away.

Additionally, when using Either the lambdas are in the caller and are invoked almost immediately by map. The scope is small and they do not enter into any other compilation unit. If you pass them into the called function, the compiler is only going to be able to optimize them if the called function can be inlined. Even then, the optimizer will have to be smarter, because the error handler will travel through a much larger scope and a type conversion.

<comment><USER7> Either inserts a conditional and union dereference. Unions are pretty terrible on their own to optimize, even with strict aliasing.

The pointer dereference and call overhead is not big and error handling code is supposed to be cold anyway.

</comment></comment></comment><comment><USER13> I feel that the "error" handling is one of those "core things" that people have rarely fully understood. Especially newbies starting are often confused and things get muddled. In all honesty it took me +10 years myself to reach some kind of clarity on this. Anyway I find it that when you lack that clarity your code will be quite messy (isn't this always the case?) and things will get muddled. And since error handling is so precarious your implementation quality will suffer considerably.

So below is my take on this with 3 clear labels and guidelines on how to apply. Hope this helps.

There are 3 kinds of "errors".

1\. Bugs.

\- created by programmer.

\- invalid state of the application - >it has transcended it's own logical realm and you can't reason about its behaviour anymore.

\- null pointers, OOB, etc.

2\. Errors that are "expected" part of the program execution.

\- you need to write logic flow to deal with this

\- it's expected and quite normal that this might happen

\- incorrect (user) input, file not found, socket timed out etc.

\- this is really just an error from the end user's perspective.

3\. Errors that are "unexpected".

\- some very unexpected error

\- system resource allocation failed, out of memory, out of file handles etc.

\- critical resource was not accessible (for example a "must have" config file was not found)

How to deal with these?

1\. Abort and dump core. Yep seriously, just do it. Blow up with a bang and leave a stack trace that you can analyze in the post-mortem debugger and see what went wrong. As a result your application will be simpler and more straightforward. Simply, don't try to write logic to deal with programmer failures. It will just clutter your program, mask the problem and make fixing it harder.

      int divide(int x, int y) {
        if (y == 0) {
          throw std::string("Divide by zero");
        }
        return x / y;
      }

passing y=0 the function is clearly a bug. It'd be much better to core dump here. Unless the function was designed with double purpose of validating the input and performing the actual function. I'd much rather split these into two different functions, since the core function may be called from different contexts, some of which might not require any input validation at all even. And the validation function clearly should not be using exceptions either since it's quite normal and expected that input from external sources (such as the user) can be malformed and you probably want to write logic that then bashes (sorry.. informs) the user about their wrong input.

2\. Use error codes.

3\. Use exceptions.

<comment><USER10> Hear, hear. I won't say this is _the_ best advice in _all_ circumstances but we settled for roughly the same principles and in the end it just works out.

In case 1 we usually use asserts though (which are always on), but that's more of a preference because it states intent (asserts are just used to guard against insane programmer behaviour, and they are used judiciously, to the point we will refuse large patches which do not introduce any asserts) and makes debugging easy (since they have the debugger break). As a result, code became less buggy. Programmers don't want to trigger asserts because they are 'crashes' and being the cause of one is usually the thing you don't want to be. As such, people become more aware of every single line of code written, every input provided, ... . Yeah there might be other ways to reach that effect, but using assert all over the place did the job just fine.

<comment><USER13> Yep, I also have my own assert macro that when violated terminates the process with a core dump unless running in a debugger when it triggers a break point.

Works out fantastic.

</comment></comment></comment><comment><USER14> With exceptions, I can trivially pass error information through my whole call stack without any manual work and boilerplate. The whole syntax clutter / OMG- but-try-catch-is-so-ugly is a very stupid argument: with exceptions, you can opt out of local error handling and opt-in at a higher level in the call stack without losing any information. With return code / error codes, this is just not possible. So exceptions declutter application code to a high degree.

Exceptions are to error codes as functions are to goto: there are valid cases where you want to prefer the latter, but they are few and far between.

<comment><USER7> It is possible with global or contextual error state.

This approach is used in iostream for example, and in a broken way in C library via errno. (Which does not work unless you check it very near.)

Similar approach is often used in databases and file systems, marking an object as dirty or broken.

Like the above, it is prone to ignoring errors and attempting to manipulate such object.

</comment></comment><comment><USER15> I have seen that using error singletones together with logging at the point of error worked rather nicely. Surely as a global state it is not thread safe, but when the state belongs to a component with well defined API and uses once an error, always an error strategy so error recovery requires constructing a new component, then thread-safety is trivial to address.

A bonus of this approach is that error path through code is the same as for the non-error case. Thus getting good coverage for error cases in unit and integration tests is easier.

</comment><comment><USER16> After a few years of using newLisp, I started using Eithers in my C and LISP code. Didn't know you called them that. I guess the idea has been "in the air" for a couple years now. Possibly people are being inspired by the multiple return values offered by Go.

What surprised me about this link is that the author was writing C++, but using very Haskellish language and terminology. He even made the C++ code look somewhat like Haskell code. Wow.

</comment><comment><USER17> I used to do a little c++ as a student and never found a way to correctly handle error using exceptions. I am now a scala user, and in scala Either is the canonical way to handle errors. I understood the Either construct quickly and after a year using it, I wouldn't come back to the c++ exception.

Note that in c++, the absence of algebraic data type made it a little bit hard to understand how Either is coded.

</comment><comment><USER18> Monadic error handling is quite nice for domain specific errors, but for exceptional situations which are not supposed to happen, you still need some sort of an exception system. And even with domain error conditions, exceptions has a nice property of saving a stack trace, which can make error hunting a bit simpler.

<comment><USER19> Exceptional situations as in crashes, like writing to 0x0 address?

Otherwise no, there is really no good reason for having some orthogonal value returning system that can jump up the stack until it's caught (if ever.)

Many situations that are often considered exceptional are really not: cannot connect to server, no such file or directory, cannot bind to port...

<comment><USER7> Any situation that prevents functionality from working and should not happen in normal flow is exceptional.

Including such connection failures or file open failures. They may have to be handled, but not at cost to the hot path.

You cannot typically just "eat" such an error with default behaviour and expect whatever relied on it to work properly.

</comment></comment></comment><comment><USER20> So it's monadic error handling in C++? Looks quite Rust like as well.

</comment><comment><USER21> Check out std::optional from C++17 (aka C++1z)</comment>


Why Isn't India a Superpower? - <AUTHOR> https://outsideplatoscave.substack.com/p/outside-platos-cave-5?r=5xuid&utm_campaign=post&utm_medium=web&utm_source=hackernews <comment><USER2> This article is rather pointless

India has been independent for only 73 years

For Context: US has been independent for 244 years

It's the 2nd inning and people keep writing articles assuming we're in the 7th inning stretch

Give it another 100 to 200 years and then we can write articles about 'Why India became a superpower' or 'Why India did not become a Superpower'

 __ __ __ __ __ __ __ __ _

</comment><comment><USER3> Due to bigotry since 700 BC as per [https://en.wikipedia.org/wiki/Rigveda](https://en.wikipedia.org/wiki/Rigveda) resulting in [https://archive.vn/mPsqz](https://archive.vn/mPsqz)</comment>


Swift Monthly – Newsletter for Swift Devs - <AUTHOR> http://swiftmonthly.com/issues/latest/?feb2016 <comment><USER2> I subscribed to this and was kind of amazed at the content they showed. Under "githubs" they put AlamoFire. Really? Who hasn't heard of AlamoFire that is subscribed to a newsletter? Furthermore, they haven't linked to any blog posts from the past month, which are generally the best places to learn new things for iOS.

<comment><AUTHOR> Does not say they show the latest, it's not just another trash rss reader like others. its a hand picked selection voted for by the community and readers. If you want the latest - use Google and the Time search feature.

<comment><USER2> Oh, I didn't see they used Reddit to vote on submissions - that's pretty nice. I guess the community is to blame then, though you can't really blame the community.

</comment></comment></comment><comment><USER3> Subbed- I think more programming newsletters would be better on a monthly release schedule. I unsubbed from Swift Weekly for this one. I also sub to Elixir Radar and PyCoders Weekly but would be nice if they'd move to monthly.

<comment><AUTHOR> Exactly why I like it. I'm fed up of constant emails, I went a way traveling for 3 months. Had 12 newsletter emails and a few News or Updates (From the same service) - Times that by the num of other newsletters I sign up to meant a lot.

<comment><USER3> and once you consider how much is technical churn vs true technical innovation- it's almost all noise anyway.

I'd be surprised if a monthly update netted me any less critical info for any PL, they're mostly relying on scraped reddit posts.

</comment></comment></comment><comment><USER4> How does this differ from This Week In Swift? ([https://swiftnews.curated.co/](https://swiftnews.curated.co/)) And also how is this news worthy?

<comment><USER5> Seems like an unnecessarily combative comment. There are plenty of different newsletters focused on the same topic(s), and "newsworthy" is not the focus of Hacker News.

<comment><AUTHOR> Well Said. I wish I could give you a gazillion points...</comment></comment></comment>


Guide to Alerts in Google Analytics and real-time alerts - <AUTHOR> http://yetpulse.com/guide-to-alerts-google-analytics/ <comment><AUTHOR> In this guide you will learn:

How to set alerts in Google Analytics, Set strong boundaries for your alerts, How to set hourly alerts, Alerts: ideas and use cases, Easily manage your numerous alerts.</comment>


Is There Any Doubt That Gov Chooses the Winners? - <AUTHOR> http://www.globalresearch.ca/index.php?context=va&aid=16748

<comment><USER2> This headline is poor. Here's my attempt at better: "Is the Fed artificially propping up demand and prices for equities?"

<comment><USER3> Alternatively, [http://en.wikipedia.org/wiki/Working_Group_on_Financial_Mark...](http://en.wikipedia.org/wiki/Working_Group_on_Financial_Markets)

I've never been very convinced on the alleged pervasiveness of the PPT. It seems like a convenient catch-all in most cases (i.e. misattribution of an error term.) That being said, the after-hours returns are a bit unnerving.

</comment></comment><comment><USER4> Correlation between US Dollar (UUP), gold (GLD), the s&p 500 (SPY), and the Canadian dollar (FXC).

[http://www.google.com/finance?chdnp=1&chdd=1&chds=1&...](http://www.google.com/finance?chdnp=1&chdd=1&chds=1&chdv=1&chvs=maximized&chdeh=0&chdet=1262097000000&chddm=88511&chls=IntervalBasedLine&cmpto=NYSE:SPY;NYSE:GLD;NYSE:FXC&cmptdms=0;0;0&q=NYSE:UUP&ntsp=0)

The intraday correlation is beginning to break down, especially for gold (this chart may be obsolete when you click it, so click 1d)

[http://www.google.com/finance?chdnp=1&chdd=1&chds=1&...](http://www.google.com/finance?chdnp=1&chdd=1&chds=1&chdv=1&chvs=maximized&chdeh=0&chdet=1262120400000&chddm=391&chls=IntervalBasedLine&cmpto=NYSE:SPY;NYSE:GLD;NYSE:FXC&cmptdms=0;0;0&q=NYSE:UUP&ntsp=0)

...but for a while, you could see a minute-by-minute inverse correlation between the dollar and everything else.

<comment><USER5> There's an inverse correlation between the gold/dollar exchange rate and the dollar/everything exchange rate?

</comment></comment><comment><USER6> There has been a lot of chatter about this in various quarters. One notable factor is quick, massive trades coming right before closing.

It's worth noting that the Plunge Protection Team was quite open at some points at least. It was called "The Committee to Save The World" by Time magazine in a cover story.

Global Research itself is a conspiracy site - perhaps the most sane conspiracy site but still a conspiracy site.

</comment><comment><USER7> Interesting article, although the submission title is awful.

The level of USG intervention in finance, industry, and possibly now the stock market is beginning to remind me of Japan Inc of the '80s. America Inc anyone?</comment>


Trinity: Microsoft Research's Hypergraph Database - <AUTHOR> http://www.infoq.com/news/2011/04/Trinity <comment><USER2> You can make a nice, simple (and surprisingly fast) graph database from the file system.

I had to do this back in 2003 to create dynamic sites for users of a build- your-own-website app (who needed to have their data stored in their local filesystem - and they wouldn't let me use sqlite).

It turns out to be really good for expressing websites structures. The downside is that, as you can't create on-the-fly relationships, you need to either store your data in a tree that describes its use, e.g.:

      blogs/2009/03/05

or you need to add links that point to the same data to create the relationships, e.g.:

      blogs/2009/03/05 -> stories/a_blog_post

Obviously you can add these relationships later in much the same way as you might add indexes to a traditional database.

My system also had a notion of arrays. An index to the next auto_increment was held in a file named '.#'.

I also has a file called '.class' which would tell my object system how to process a node like this as if it was an object (each class had a a set of scripts that acted as methods).

It all worked amazingly well.

There were a couple of issues: old Solaris, I recall, used a linear search of directories so the system would crawl if a node got too big (I overcame that first with some simple a/b/c style hashing and second by upgrading Solaris) and directories were 4k each so users (who had file-usage limits) might have had grounds for complaint.

</comment><comment><USER3> MS focusing on a GraphDB makes a lot of sense to me. Unlike document database or key=>value stores, GraphDBs aren't as mainstream yet (amongst the early adopters). Also, the typical GraphDB use case wouldn't compete with SQL Server.

I think it's a problem space that we've only see the tip of the iceberg and Microsoft recognizes this. I also think this is one area where the MS stack doesn't scale well, hence why they'll address it. Sadly, I wouldn't be surprised to see this research get packaged into SQL Server (or worse, Azure).

<comment><USER4> > Sadly, I wouldn't be surprised to see this research get packaged into SQL > Server (or worse, Azure).

Is there a reason for this? I would have thought that finding a practical application for research is actually a good thing?

<comment><USER3> The last time Microsoft did work in the NoSQL space was with Velocity - something akin to memcached. There was a lot of talk, a lot of hype, some CTPs..and then it got bundled into Azure where its potential became a shadow of what it seemed like it could be.

<comment><USER5> Are you sure about this? Velocity got rolled into "AppFabric" and then Azure did something with the same name. But it's totally different. What you want is Windows Server AppFabric:

<http://msdn.microsoft.com/en-us/windowsserver/ee695849>

Not to be confused with Windows Azure AppFabric.

I'm not sure Velocity really included any interesting research or novel ideas, though.

</comment></comment></comment></comment><comment><USER6> I was thinking... Will every datastructure eventually gets it's own database to facilitate distributed persistence of mass collections?

Why, or why not?

<comment><USER7> Seems inevitable.

</comment></comment><comment><USER7> I find companies talking about their internal products with no release pretty much the antithesis of hackeryness.

<comment><USER8> I completely disagree. They are showing us what is coming and getting our minds going re: what possibilities this opens up for us.

Now, I admit, Microsoft is not the first company to create a graph centric db, but them weighing into this market gives the market further credibility. At the moment, I think graph is seen as an edge case. Maybe people will take another look now and start getting more serious about it.

Is it sad that it takes a big company jumping on the bandwagon to give it credibility?? Sure, a bit, but that is how the adoption curve goes.

<comment><USER7> They are talking about stuff they don't plan to allow other people to use. Why is this even interesting?

We also had this argument last time this was posted, albeit not surrounded by infoq blogspam.

</comment></comment></comment><comment><USER9> AIUI, graph databases have much less impedance mismatch to objects than SQL databases do. So why are most people still using SQL? Tradition, or efficiency?

</comment><comment><USER10> Seems to me that if a node can have multiple edges pointing to it, and an edge can point to multiple nodes, nodes and edges are effectively the same thing, or at the very least have identical properties. Am I missing something? I suppose it's a useful convention to still partition a hypergraph into nodes and edges.

</comment><comment><USER11> See also [http://www.semantic- web.at/index.php?id=1&subid=57&a...](http://www.semantic- web.at/index.php?id=1&subid=57&action=resource&item=3290) which is not reference and seems to predate other efforts noted herein.

</comment><comment><USER12> Microsoft is making Trinity after Neo database (<http://neo4j.org>) was made.

they even have the name derived!</comment>


Show HN: 10HN – Top articles from HN served every morning and every evening - <AUTHOR> http://top10.pancik.com/

<comment><USER2> I like the simple format of the articles...and without ads. Not sure how long that will last ;)

One piece of feedback. When I'm halfway down an article and swipe left it puts me halfway down the next article. It would be better if I was back at the top of the next article.

</comment><comment><USER3> Am I the only one who thinks this will be taken down super fast?...

Displaying the content of other websites, even when it has a link to the original post is asking for a lawsuit.

Also, now that I checked again the server seems to be down.

<comment><AUTHOR> That is actually very interesting. I was wondering how Pocket (or any readitlater service) could operate if that was the case. I did this mostly for myself so didn't think about it much

<comment><USER4> Well, in case of Pocket, I am _personally hiring an agent_ to meddle with the frontend for me. It's like hiring a guy to read newspaper articles for me.

This, on the other hand, is a public facing open website. This is like reciting newspaper article over the radio so nobody has to buy the newspaper.

Pocket adds to my readers numbers, and locks them in. This service does the opposite for me. So it would be harder to tolerate the missing ad views.

</comment></comment></comment><comment><USER5> "Swipe Left" is a bit unusual instruction when you are on a laptop.

</comment><comment><USER6> I've been subscribed to this for about a year:

[http://www.hndigest.com/](http://www.hndigest.com/)

It's a great way to keep up on HN.

<comment><USER7> also

[https://alpha.app.net/hackernews/](https://alpha.app.net/hackernews/)

[https://www.reddit.com/r/hackernews](https://www.reddit.com/r/hackernews)

[http://hackernews.demos.monkeylearn.com/](http://hackernews.demos.monkeylearn.com/)

[http://www.daemonology.net/hn-daily/](http://www.daemonology.net/hn-daily/)

<comment><USER8> Are there any that will automatically push top article AND comments into Pocket or any other offline reader. So, it could be loaded in the morning for the discussion last night.

(I am mostly consumer, so this would help to read most popular articles with discussions already in place. And help me not miss best discussion after the fact).

</comment></comment></comment><comment><USER9> Wall of text crits for over 9000.

Was there no way preserve paragraph breaks?

EDIT: Seems like they were lost for only a Bloomberg article and are present in other articles.

</comment><comment><AUTHOR> Btw if you own an Apple device you can bookmark this to your homescreen for app-like behaviour (i.e. no URL bar)

</comment><comment><USER10> Once the GA script fails from ublock all the content disappears and I'm left with just the site title.

<comment><AUTHOR> Click and drag left on the "swipe left" label. Does that work? It's too mobile optimized :)

<comment><USER11> I'm fingering my monitor but nothing happens.

</comment></comment></comment><comment><USER12> Seems to have gotten HN'd; it's forever waiting for me.

<comment><USER3> Yeap. I wonder how it got so fast to the first page, it only had 5 points and no comments when I checked... How is that possible?.</comment></comment>