Show HN: I made a Hearthstone site for finding synergies and 'hate' cards - <AUTHOR> https://tunnelweasel.com/ <comment><AUTHOR> This project was inspired by the days when I used to stay up all night researching Magic the Gathering decks I wanted to build on Gatherer. I'd always wanted additional ways to discover cards there though. So tunnelweasel.com allows you to rate synergies between cards, their capacity to 'hate' other cards. You can also comment on a card if you've got something more nuanced to add.</comment>


How Civilization V was built for multi-core processors [pdf]  - <AUTHOR> http://a676.g.akamaitech.net/f/676/773/1d/images.delivery.net/cm50content/intel/software/e-alert2/Siggraph2010Civ5GPATalkfinal.pdf

<comment><USER2> I've seen Civ V at a friend, he had a pretty recent PC, and it didn't exactly fly. Didn't look any faster than previous versions, maybe even a bit slower. So they probably barely managed to keep a constant speed in light of new features. Apart from water (which is soo useful in a sim game), what other features did they add that ate up that much CPU? Opponent AI?

<comment><USER3> While it's not crazy fast, it's perfectly playable on my Thinkpad (Core2 Duo 2.4Ghz, 4GB RAM, Radeon 3650, 256 MB, DX11). I even put up almost all graphics settings to max.

About the only time when rendering is really slow is in diplomacy view with dude that has fires in the background and air shimmering full-screen pixel shader (Aztecs?).

Where it _is_ noticeably slow is AI computing when finishing your turns (mostly towards the end of the game, when there are many units). But hey, it's turn based game, so it's not that bad :).

<comment><USER4> Try playing on a Huge map :)

End-game means 20-30 seconds wait for turns to complete, even on a Core i7.

</comment></comment></comment><comment><USER5> Non-PDF link: [http://docs.google.com/viewer?url=http://a676.g.akamaitech.n...](http://docs.google.com/viewer?url=http://a676.g.akamaitech.net/f/676/773/1d/images.delivery.net/cm50content/intel/software/e-alert2/Siggraph2010Civ5GPATalkfinal.pdf)

</comment><comment><USER6> Has anyone used both Intel's Thread Building Blocks and Apple's Grand Central Dispatch? GCD is focused around adding blocks to C and managing dispatch queues.

Anyone have pros and cons of both frameworks?

<comment><USER7> GCD is separate from blocks; you can use one without the other. GCD/libdispatch is a library written for concurrent execution and to make it easier to manage. Blocks are closures added to C, Objective-C and C++. Lambda's have also been (or rather, will be) added to C++, in C++0x.

I've never used Intel's TBB, but it looks like it is similar to what libdispatch's purpose is. Of course, I could be way off base. But, I don't think I am.

</comment></comment><comment><USER8> I recently purchased C-IV. I prefer not to have other players; People who play much better than I tend to take over my game. I kind of struggling through. In a way I'm glad that it rolls a little slow. I'll have to agree it is a little slower than the previous versions. It will be a while before I will even touch C-5. But that's okay because I only have a few hours to play the game during the night anyway.

</comment><comment><USER9> What I would love to see is a comparison of CivV and the modern design with the design decisions made by Stardock on Galactic Civilizations which game out for OS/2 in the mid 90s. At the time, it was pushing the barrier for turn based game AI.

I do miss that game...unfortunately even their remake in 2003 only targeted Windows rather than Mac/Linux.

</comment><comment><USER10> I've myself been doing an awful lot of multi-core programming recently so I can appreciate the effort that goes into building these kinds of systems/applications/games. One things for sure, asynchronous and multicore programming is the biggest new challenge facing us as programmers and the programming tools are just starting to realize it.

</comment><comment><USER11> All that work just for the water! Impressive. That's also helpful for when it comes out on Mac: I'll know what to disable first to cut down on power usage when mobile.

</comment><comment><USER12> So next time - please design it for single-core.

On a 3GHz core2quad it fails to work smoothly in the endgame. The graphics are nice, but how can 640MB video memory be not enough to hold tiles at medium quality?

Physics? Particles? On a separate CPU core? It's Civilization, those things should only appear as researchable-items in the game. It seems that while pursuing parallelization someone forgot to check how it works alltogether.

</comment><comment><AUTHOR> Last slide summary:

\- Can't just thread systems, have to design them well first

\- Don't stick serial points just to make old serial code safe, write new code!

– Any serial point is bad (mutexes, critsections, spin locks)

– Decoupled systems easier to maintain</comment>


WhatsApp puts new limits on the forwarding of viral messages - <AUTHOR> https://www.theverge.com/2020/4/7/21211371/whatsapp-message-forwarding-limits-misinformation-coronavirus-india <comment><USER2> I wonder whether WhatsApp has mulled over restrictions on user behaviour rather than on number of recipients/forwarded content. So, a user might be limited to forwarding only a dozen or so messages a week.

I have no idea what effect it might have, but I'd like to see such an experiment.</comment>


Go-codec: go: code generation to encode/decode json msgpack cbor; 2X-20X perf - <AUTHOR> http://ugorji.net/blog/go-codecgen

<comment><AUTHOR> Summary:

go-codec supports compile-time generation of encoders and decoders for named types, which does not incur the overhead of reflection in the typical case, giving 2X-20X performance improvement over the idiomatic runtime introspection mode.

Idiomatic encoding and decoding types within go typically relies on the reflection capabilities of the go runtime. This affords flexible performance without the need for a pre-compilation step; the go types contain all the information needed and the runtime exposes the full types via reflection. However, introspecting the runtime to get this information has a noticeable overhead, which can be eliminated by a pre-compilation/code-generation step.

To eliminate that overhead, a pre-compilation step must be done to create the code which would have been inferred at runtime. This is why Protocol Buffers, Avro, etc have better performance than runtime-based systems. go-codec now provides the same capabilities, with the accompanying 2X-20X performance improvement depending on the size and structure of the named type.

See primer: [http://ugorji.net/blog/go-codec- primer](http://ugorji.net/blog/go-codec-primer)</comment>


Ask HN: Where have you registered your domains and why? - <AUTHOR> From business perspective, I am simply tired of $5.99 domain register fee that turns $59.99 a year later.
Then comes the security aspects, after all, the NS records are to be managed by the registrar.
So, kindly share where have you chosen to run your domains, and I am sure the community will benefit of hearing about a decent domain name service. <comment><USER2> I've used a few registrars over the years in different ways.

About 10 years ago I used pair.com because they also had PHP hosting and that's all I knew at the time. I did little with them.

I think for a very brief period I actually used godaddy for one or two domains.

A few years later I used gandi.net because they were "no BS" domain name registration, which I think was a direct reaction to having a hard time using godaddy. I mostly used it to point to custom slicehost servers. Later I also configured the DNS to point to github pages. Since they're in France, there's an extra step and extra few minutes before you get your domain names approved.

A few years after that I started using namecheap instead, and still use them. They give me the same amount of control as gandi.net but with a simpler (less confusing) interface, and they're in USA so they don't have the same delay that gandi.net has. I've pointed them to EC2 instances but mostly to github pages.

Recently I experimented with buying a few from Route 53 on AWS, mainly so I could see if it was all that big of an improvement to have everything on AWS. For some reason I'm getting charged like $2 every month for some (or all?) of these domain names, and it's a charge that's slightly annoying to me, mostly because I don't really understand what the charge is for (I think they said some sort of DNS routing fee or something?). I did like the integration with other services that Route 53 gave, but the flexibility and customization needed to get that integration working seemed like overkill and was definitely harder to figure out than the other services. Again I've used them successfully with both github pages and EC2.

Personally I would go with namecheap if I had to buy another domain name.

<comment><USER3> Ha! I too am being charged for Route 53 for what, I have no idea. Very confusing service.

<comment><USER4> There's a fee of $0.50 per hosted zone and month for Route 53, in addition to the $0.40 per million queries. This is optional if you don't want to use Route 53 for DNS, so you can still use a free option like Cloudflare instead.

<comment><USER5> Most registrars would reach out & ask you to pay for premium DNS after some sort of soft limit anyways. Companies like Google pay thousands for their DNS. Free DNS is a form of over-selling. Cloudflare also has a history of shutting of people's service after they hit some soft limit, and asking you to upgrade to paid.

<comment><USER6> I've had that talk with cloud flare. They didn't come over very aggressive and confirmed that I wouldnt have a issue when I stay on free.

</comment></comment></comment></comment></comment><comment><USER7> Currently I use namecheap for their simplicity and speed yet they have all the options if you need them. Tried GoDaddy and went away screaming since they have some super shady practices. Willing to try Google Domains since I use GCP a lot but its not available to me as of now.

</comment><comment><USER8> Gandi.net for the last 14 years. Not the cheapest but good service and no upsell.

<comment><USER9> I concur. Gandi.net has excellent support, predictable pricing, and a reasonably good admin interface. Also, their email reminders (e.g. to renew a domain or verify information) are pretty much plain text and straight to the point, which is all I want.

<comment><USER10> I'm a Gandi user and but I hate that they insist on leaving my email address in the WHOIS data.

<comment><USER11> I think that's only certain domain suffixes?

.com domains seem to be obfuscated okay these days...

e.g. [https://v4.gandi.net/whois/details?search=davewasthere.com&s...](https://v4.gandi.net/whois/details?search=davewasthere.com&sourceid=Mozilla- search)

<comment><USER10> Hmmm, was the service updated?

I couldn't get my emails obfuscated on .com and .io addresses about 2~3 years ago. Just managed to get it done.

<comment><USER12> It's probably due to the GDPR. My understanding is that a lot of registrars are removing all personal information from WHOIS due to GDPR concerns.

<comment><USER13> What's GDPR?

<comment><USER14> The General Data Protection Regulation, coming into force on May 25th in the EU.

[https://www.eugdpr.org](https://www.eugdpr.org) for more information.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> I use Dreamhost for almost all of my domains. I have been hosting with them since 2003 and for simple hosting needs they have been just what I need, no hassle, no attempts to sell me other products I don't need, and reasonably responsive tech support in the (pretty rare) cases when I've needed it. Based on that hosting experience I started moving my registrations to them as well (mainly from GoDaddy but a few from Network Solutions), and by now almost all of them are with Dreamhost.

I have a few domains that are with GoDaddy simply because I paid for ten year registration years ago when they had special deals for that, and the ten years haven't expired yet. When they do I expect to move those remaining domains to Dreamhost as well.

<comment><USER16> I have also been with Dreamhost for years and register domains and use shared hosting with them for a few websites. I have nothing but good things to say and I think it's really cool that they are Employee Owned.

Ten or so years ago when I was in high school and I put up a PHP web proxy at Dreamhost so that I could browse blocked sites on the school desktops. It ended up on some web proxy list and got flooded with traffic. I got the most kind email for such a blatant ToS violation:

> I've had to disable your domain due to it almost crashing the server because > someone was hammering the proxy you put up there. We do not permit public > proxy scripts on shared webservers; please remove the software. You may > reenable the domain with non-proxy content if you wish.

</comment></comment><comment><USER17> Hover.com, great user interface with no bloated advertisements. Moved there from GoDaddy years ago.

<comment><USER18> And their support is always phone call away too.

</comment></comment><comment><USER19> Regardless of with whom, I recommend not using the same service you host with or use for development. Don't place yourself in the position to be held hostage -- whether deliberately or through neglect.

Some services allow you to designate another account as an "administrator" without giving up your control over the domain's ownership.

That said, don't forget to renew your registration! You are going to want to whitelist messages from whomever you register with.

This may vary with a more substantial presence and formalized agreements beyond random user account boilerplate.

</comment><comment><USER20> IWantMyName.com for reg (cheap, reliable, "do one thing well", nice UX).

DNSMadeEasy for DNS, same reasons.

<comment><USER21> IWantMyName for the same reasons, and good customer support from the dev team.

</comment></comment><comment><USER22> Gandi.net for years now. They've made recent changes that fixed my biggest gripes, and have pretty good docs for getting everything set up. I especially appreciate their private domain registration, meaning that my address isn't associated with my domain.

</comment><comment><USER23> I recently transferred my domains to Google Domains. I tried serveral registrars over the years (Namecheap, GoDaddy, etc), but was tired of them trying to upsell me on a bunch of stuff I didn't want, plus their cluttered UI. So far working great; straightforward interface, fair pricing.

I still use Cloudflare as my DNS provider, mostly for its additional features.

ps: disclaimer: I work at Google, but not on the Domains team, and no relationship other than as a personal customer.

<comment><USER24> I don't work at Google and I use Google Domains, so there's that. $12.00 a year, no nagging, and I can do some nice things like email forwarding for a hundred email address from the domain and the ability to share administration with other people à la Google Docs. Just point a A record at GitHub and you get Pages to host there too.

<comment><USER25> I use Google Domains for work and personal stuff. It works, rates are reasonable, GSuite integration is nice, and I can administer DNS easily until I need to scale to a better DNS provider.

</comment></comment></comment><comment><USER26> Namecheap. Me domain discounts for students.

</comment><comment><USER27> [https://www.inwx.com](https://www.inwx.com). I am using them for about 5-10 years now (had ~30 different domains over time) and I was never disappointed.

\- Pricing is fair and uncomplicated. [https://www.inwx.com/en/domain/pricelist](https://www.inwx.com/en/domain/pricelist)

\- Lots of extra features, e.g. whois privacy, glue records.

\- DNS hosting (in case you need it) is included, DNS servers are located in 5 different datacenters. (Although I prefer Cloudflare because they are the fastest according to [https://www.dnsperf.com](https://www.dnsperf.com) .)

\- You have full control over your domain. It's even possible to update tech-c and zone-c (many domain providers do not allow this).

\- You can manage everything through their web interface and an API. (Many domain providers I've had to use require you to contact support for things like custom name servers, domain transfer, change of domain contacts, and so on, which is completely insane.)

The only exception I've found is DNSSEC, if you want to use it you need to contact support and send them your values.

</comment><comment><USER28> Namesilo for the following reasons: (1) pricing does not change (goes lower once you hit 50+); (2) free privacy and (3) free 100 email forwarding per domain. Have not tested their DNS yet.

For hosting, you guys really need to get on DigitalOcean instead of doing the shared hosting. For $5/mo, you can put 10,000 domains/websites there with Letsencrypt (free SSL) instead of paying $5/mo/domain

<comment><USER29> with hosting I agree, but I'd recommend vultr, so you can run openBSD :)

</comment></comment><comment><USER30> Currently use Namesilo.com for free Whois privacy.

I used to use Namecheap but they charged extra for Whoisguard, and I wasn't happy that they pulled the Daily Stormer (yes I hate Nazis, but IMO censorship should be handled by court orders not CEO's opinions.)

Used Gandi.net back in the day, had no complaints other than the price.

<comment><USER31> I switched from Namecheap to Namesilo and been very happy - same solid price all the time, plus included free guard.

If a disgruntled employee knows your domain name, they can call Namecheap and claim its theirs. I had such trouble at one of my companies - while they didn't get a hold of the domain, upon validating company name, address and domain name, Namecheap opened the ticket for them and kept our domain on hold for 30 days before the situation got resolved. They did not shut it down, but we were unable to access it or change any DNS records. From my understanding, anyone upset at you enough can contact them and claim the domain is theirs and you stole it from them. That experience made me move out to Namesilo for USA domains, and Marcaria for international.

Source: I'm holding about 50 domains in general since circa 1999.

</comment></comment><comment><USER32> Porkbun - cheap, fast and support is quick to reply. AFAIK their policy is to charge $1 above the cost price for the domain. Free whois protection as well. Interface is fairly intuitive and as a beginner at the time, they answered all of my questions to the degree of detail I needed.

</comment><comment><USER33> I found Hetzner's domain robot to be easy to use and cheap: [https://www.hetzner.com/registrationrobot](https://www.hetzner.com/registrationrobot)

The major downside is the limited range of TLD's it allows you to register: .de, .com, .net, .org, .info, .biz, .eu and .at (other domains are available through Hetzner's normal webshop)

With domain robot have full control over handles, name server entries, auth codes, etc. Annual fees are low (from EUR 3.28 to EUR 12.90) and don't increase year over year. The only additional cost are if you use their name servers (0.50 Euro/year).

Automation is only available through email interface.

</comment><comment><USER34> iwantmyname.com, I think originally because I wanted to register my name, and they got me with their domain name. It's been straightforward enough with good service and no upsells that I've since registered other domains with them. I think they're based on Germany, which may be a positive for some folks here.

</comment><comment><USER35> I don't know why so many people love namecheap... Name silo is 8.90/year and it comes with free privacy.

Any domain provider who doesn't have free privacy, or a bundle for < $9.00 isn't worth it. I've been w/ namesilo for a few years and they're top-notch, and have a good api as well.

<comment><USER6> Namecheap does provide free privacy and (i assume you talk. Com) is usually around $9.66 or so.

I agree that their API is horrible tho.

</comment></comment><comment><USER36> I took Paul Graham's advice a number of years ago and went with EasyDNS:

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

And I think it's also a good idea to use separate hosting companies and registrars.

</comment><comment><USER37> PairDomains.com – boring UI, strong passwords allowed, two factor authentication via TOTP or SMS. Cover most of the popular TLDs but not many of the crazy new ones nor country based TLDs. Zero upsell, zero scammy lockins so far.

<comment><USER35> Namesilo is like $5/cheaper for .coms, and has free privacy, it also has 2-factor auth. I highly recommend them.

</comment></comment><comment><USER38> I live and work in China, so I use Aliyun, which is Alibaba's cloud arm, similar to what AWS is for Amazon. Aliyun itself bought 万网 (Net.cn aka HiChina) in 2013, and it's still a bit fractured, but works well enough.

For .com domains, it's ¥55 (~$8.8) per year with ¥20 discount for the first year (surprisingly transparent). One of the great things is the ability to pay ¥676 (~$107) for 10 years and forget about it.

For .cn domains, it's just ¥29 per year (also -¥20 first year), but you need to through the verification procedure to be able to use it, which requires a Chinese citizen or Chinese company credentials.

</comment><comment><USER39> Google domains. Very simple to use and good integration with blogger.

</comment><comment><USER40> GoDaddy, 1&1, or porkbun.com - cheapest choice

I have so many side projects that only last a year, so I typically just choose the cheapest option (which is often $1.14 )

</comment><comment><USER41> I've used Dynadot for many years -- no BS, no upsell, reliable, easy to use. Also gandi.net for certain TLDs that Dynadot doesn't cover.

<comment><USER42> Dynadot is awesome, they also have free WHOIS privacy nowadays.

</comment></comment><comment><USER43> Well, I'll admit I didn't do a ton of research on it, but I moved all my domain names to "NameCheap.com" a few years ago and I've been happy with their services. They had a pretty sweet deal to move them over too.

I'd been using "Verio" for probably 15 years before and the last 5 of them were just awful. I should've never waited as long as I did to ditch them.

<comment><USER44> Take a look at NameSilo.com

</comment></comment><comment><USER45> I registered it here and there over the years. My first registrar was a local german firm, they were a bit on the cheaper side in both features and price. Atm I'm moving to OVH domains, which are sometimes a tad more expensive but I want everything under one roof and OVH is european + offers an API that is somewhat widely supported.

</comment><comment><USER46> eNom (although prices have been slowly climbing over the years but I don't think that's unique to them specifically)

<comment><USER44> NameSilo.com is quite a bit less expensive.

</comment></comment><comment><USER47> Gandi.net for 16 years. Not sure why I chose them but stayed with and bought more domains because of role separation between owner and technical contact. Also the free email hosting, web redirection and email redirection are useful and it is annoying how much some registrars charge for these (Gandi doesn't do .au domains)

</comment><comment><USER48> I use iwantmyname for the reasons mentioned by the others. I originally met a bunch of the team at a hackathon in Wellington, New Zealand which is where they're based. They're a nice lot with no upsell and reliable service. As mentioned in another comment, they focus on doing on thing well which is nice.

</comment><comment><USER49> joker.com - it is a Swiss company, and presumably would be harder to have my domains taken away than if it were a US company (not that I am expecting any such thing! but...). No tricks on pricing, the UI is decent but could be better organized, offer easy registration of just about any TLD, and they offer 2FA.

</comment><comment><USER50> Surprised no mention of [http://www.freenom.com/](http://www.freenom.com/) yet. Granted, I'd doubt anyone would want to run a business domain off this, but it's great for little projects and personal sites/experiments.

</comment><comment><USER51> I use OVH for all of my domains because you can register probably any TLD on the planet with them. It is quite cheap as well - and they offer free (minimal) hosting and email forwarders as well. DNSSec and full control of everything.

</comment><comment><USER52> AWS. I like the integration with Route53. Don't care much about the price differences.

</comment><comment><USER53> I've been using [https://www.nearlyfreespeech.net](https://www.nearlyfreespeech.net) since 2007 and haven't had any complaints thus far. No-frills but cheap & reliable.

</comment><comment><USER54> I used to use name.com and iwantmyname.com.

Now I use domains.google because it's simple to manage DNS records, the user interface is very clear and straightforward, and it's automatically integrated with my existing GSuite account.

</comment><comment><USER55> Surprised that there has only been a couple of mentions of Namesilo. Cheap, straightforward/easy interface, but still plenty of options. Don't think there is any cheaper reputable registrar is there?

<comment><USER44> Agreed. None that I've found and I've been looking.

</comment></comment><comment><USER13> What's the cheapest domains to buy and hold? I'm not into investing just building crazy stuff and putting it out there for giggles. So I'm open to any domain that's wins out as the cheapest.

</comment><comment><USER56> I like google domains. I think that I get the fastest DNS service through them. The administration interface also feels very fast. They cost a little bit more than most, but the faster DNS is very nice.

</comment><comment><USER57> hover.com, super simple and easy to use.

<comment><USER58> Hover (owned by Tucows) lost me as a customer when they refused to support DNSEC (Registrars are _required_ to support it), using "But Hover just resells Tucows, we aren't a registrar" line, and then when pushed, offered it as a $500-per-change option.

</comment></comment><comment><USER58> I'm pretty happy with NameSilo.

My only "gripe" is they have a smaller range of ccTLD's, and they don't (currently) offer .au domains, which is likely what I'll need next.

</comment><comment><USER59> Route 53, Amazon. I like the UI, fully featured, better than godaddy, I trust it's transferrable if clients part ways from my services.

</comment><comment><USER60> > _I am simply tired of $5.99 domain register fee that turns $59.99 a year > later_

Unfortunately this seems pretty common with a lot of new gTLDs.

<comment><USER44> At NameSilo.com, registrations, renewals, and transfers are all the same low price.

</comment></comment><comment><USER61> I'm surprised no one has mentioned uniregistry. Their interface is great and they offer both DNS and private registration for free.

</comment><comment><USER62> NameSilo

They've got competitive pricing, free privacy (WHOIS guard), a straight forward interface, and an API for those who need it.

</comment><comment><USER63> namecheap. switched during last the major godaddy fiasco. cheap enough, easy enough.

<comment><USER31> [http://www.whtop.com/review/namecheap.com](http://www.whtop.com/review/namecheap.com)

[https://medium.com/@alexandernst/from-successful-to-zero- tha...](https://medium.com/@alexandernst/from-successful-to-zero-thanks-to- namecheap-d392c76b2ffd)

[http://www.webhostingtalk.com/showthread.php?t=1678818](http://www.webhostingtalk.com/showthread.php?t=1678818)

</comment></comment><comment><USER64> Internet.bs for their low prices and simple email notifications of expiry dates.

</comment><comment><USER65> I use Namecheap to register my domains and Google Cloud Platform to host my DNS.

</comment><comment><USER66> pair Domains. They're independently owned, price competitive, and don't upsell.

</comment><comment><USER67> aws - first class aws integration (obviously) and transparent price

</comment><comment><USER68> name.com - they offer consistent discounts for those of us with numerous domains and their control interface isn't as frustrating as the one at namecheap.

</comment><comment><USER69> Namecheap. A friend told me that there is really cheap. :P

</comment><comment><USER70> Gandi & DNSimple.

</comment><comment><USER71> Namecheap now, used to be GoDaddy but they were trash.

<comment><USER72> Consider switching to anything else: [https://medium.com/@alexandernst/from- successful-to-zero-tha...](https://medium.com/@alexandernst/from-successful- to-zero-thanks-to-namecheap-d392c76b2ffd)

</comment></comment><comment><USER73> Uniregistry.

</comment><comment><USER6> Namecheap

</comment><comment><USER74> Canspace

</comment><comment><USER57> hover.com, super simple

<comment><USER44> But quite a bit more expensive than NameSilo.com which is also simple to use.

</comment></comment><comment><USER75> transip.eu

</comment><comment><USER46> eNom

</comment><comment><USER76> GoDaddy has improved significantly over the last few years. It's nice to have everything in one place.

<comment><USER44> Having everything in one place isn't a good thing. If you have a problem with GoDaddy, your domain is there too and you can't just up and leave. With your domain elsewhere, and a backup of your site, you can leave at any time.</comment></comment>


Reddit is whitelisted by Adblock Plus for only using 'acceptable ads' - <AUTHOR> http://thenextweb.com/insider/2013/02/05/reddit-whitelisted-by-adblock-plus-for-using-acceptable-online-advertisements/

<comment> LeonimuZ</comment>


Check Your Google Real Time Analytics: International Space Station gag - <AUTHOR>

An hour ago I submitted a Show HN and since then I've been watching Google Analytics in real-time.  Looks like most of my visitors are coming from the International Space Station :) <comment><USER2> Mine too... nice..

</comment><comment><USER3> April fools ;)</comment>


C14, the Secure Cold Storage Platform, for Free During the Summer - <AUTHOR> https://blog.online.net/2016/07/04/c14-the-secure-cold-storage-platform-for-free-during-the-summer/ <comment><USER2> From their FAQ:

> Where is my data stored?

> Your data will be stored in our fallout shelter, located 25 meters under the > ground in Paris, France, starting in September 2016.

So where is it for now? And like Backblaze, a single site storage solution means you should only consider this as an extra backup (not primary storage).

There's a note that in September they'll also be expanding to offer multisite, but don't have pricing yet for that (hopefully just 2-3x depending on number of sites)

I'm curious about the 40 TB per archive limit. Is that some sort of equivalent to a full back blaze storage pod? I can't imagine an S3/GCS bucket restriction like that, so I'm curious how customers will be expected to work around it.

Disclosure: I work on Google Cloud (but not on GCS).

<comment><USER3> "I can't imagine an S3/GCS bucket restriction like that, so I'm curious how customers will be expected to work around it."

Amazon S3 has a 5TB object size limit and only 5GB (!) can be uploaded in a single PUT[1]. Different limits, but still something people have to work around.

An _actual filesystem_ on ZFS makes all of these limits disappear. Does anyone offer cloud storage based on that ?

Man, that would be awesome.

[1] [http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObje...](http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadingObjects.html)

<comment><USER4> > An actual filesystem on ZFS makes all of these limits disappear. Does anyone > offer cloud storage based on that ?

rsync.net advertises

> a ZFS filesystem, accessible with any SSH/SFTP tool, running on a UNIX > system.

You're paying for that though, rsync.net _starts_ at 8c/GB/month (for 10+TB), the smallest offering (under 1TB) is 20c/GB/month), by comparison S3 is 2.75c to 3c/GB/month in standard storage (and 1.25c/GB/month for IA)

<comment><USER5> I'd be really curious to know why rsync.net is so expensive. Is there something inherently costly about scaling a ZFS based filesystem like this?

<comment><USER3> We offer unlimited technical support and integration engineering for even the smallest customers.

You can emergency page us on Christmas day.

We'll set up "pull" jobs on our end to pull the backups from you.

These things are very valuable to some people ...

<comment><USER5> I can definitely see the value in those things but I think there's also a place for "dumb" storage. Some people want that great support, some people don't need it.

I'm in the latter category and I'd rather have the choice to pay for it than be forced into it, which is why despite loving the trial I had with you guys, I couldn't justify continuing.

</comment></comment></comment></comment></comment></comment><comment><USER6> Why is there a charge for deleting data? If I want to stop using the service or just lower the storage charge, I need to pay for that? Scrubbing I can understand if scrubbing is not mandatory, but deleting should just be marking data as free to overwrite so someone else can be charged.

<comment><USER7> I'm not speaking on behalf of C14 or similar service, but the charge for deleting data isn't very new. Quoting from [http://aws.amazon.com/s3/pricing/](http://aws.amazon.com/s3/pricing/)

      For objects that are archived to Glacier, there is a pro-rated charge of $0.021 per gigabyte for objects deleted prior to 90 days.

      Objects that are in Standard – Infrequent Access have a minimum 30 days of storage, and objects that are deleted, overwritten, or transitioned to a different storage class before 30 days incur a pro-rated charge equal to the storage charge for the remaining days.

The difference that I see here is that C14 appears to charge for deletion regardless of the access.

Maybe it's a way on ensuring income for a certain duration on capacity freed up by way of such deletes.

</comment></comment><comment><USER8> Does anyone know about a bare metal provider like Scaleway / Online.net in the US? I have no problem with the EU, other than the speed of light.

<comment><USER2> Digital Ocean is arguably kind of close. SoftLayer and Rackspace are the biggest players in this space, but unlike Scaleway there's no way to start at $10/month.

Why do you feel like you need bare metal though?

Disclosure: I work on Compute Engine, and we don't offer bare metal (so of course I'm trying to sell you on virtualized offerings).

<comment><USER8> I'm not really looking for someone like Rackspace. I want someone that lets me easily spin up capacity on demand at pretty low cost.

I love compute engine. I run a bunch of nodes on it, but unfortunately it doesn't do nested virtualization. I specifically want to run some virtual box workloads and some other stuff that needs light weight virtualization.

I've found a couple virtual server providers that offer nested Virtualization, but not entirely sure how it works. They were also crazy expensive.

</comment></comment></comment><comment><USER9> I have to register my debit/credit card and it refuses with "Error" :) I asked support but that's not a very good start.

<comment><USER10> Same for me. I wanted to use them two weeks ago but could not get passed it. I just gave up on 3rd card attempt. And btw why can't they support pay-pall? It always makes me uneasy to pass in the credit card details directly on a site.

<comment><USER9> Seems that under the guise of security it seems that sites can leave their payment process to be complete crap (UX/UI, feedback and everything else). I see this far too often; sometimes not even the "Error" appears, just a page reload without any indication. It is not that hard to be clear guys...

</comment></comment></comment><comment><USER11> It seems really cheap, do you think it's sustainable at those prices?

<comment><USER12> From the perspective of sustainable, I can find retail harddrives for about €0.023 per GB (not counting taxes). This site take €0.002 per month, so with a very simplistic view, a harddrive is producing profits after about a year. There is of course many additional costs, and they could also be getting a better deal than current retail prices, but from a pure question of "X+1 customer mean a gain or a loss", I would lean towards sustainable.

<comment><USER11> I'd expect energy costs of a data centre + wages to dwarf the actual HDD costs.

A half-hour support call is going to cost something like €10 - for which you need to service 5TB-months of data (ie one month of 5000GB of data at 0.2 euro-cents pays for the support cost in min. wage employees).

It's great if this is a sustainable business as I only have 1TB of data at home and probably only a third of that needs backing up. So 4TB-months of data per annum, €8 - that's much cheaper than buying a HDD myself c. £50 [currently €60] which I expect to have c. 5 years of life. Though the A in ADSL then starts getting really annoying.

</comment></comment></comment><comment><USER13> I wonder, can you use Carbon-14 to store something? A halflife of 5730±40 years should be fine for now but you should be prepared to copy it on a regular basis …

</comment><comment><USER14> Do they offer end-to-end encryption? If they use ZFS I assume they should have checksums that detect data corruption.

<comment><USER15> well kind of yes I guess, protocols to transfer from your side to C14 platform is fully encrypted (SSH/FTPS ...) then it's encrypted by the C14 platform itself to the end-storage backends

Mik

<comment><USER14> I've been primarily concerned if they store data encrypted at rest, with my own key.

<comment><USER15> yes every bit is encrypted with AES-256-CBC, we provide the encryption key which you must keep to restore

Mik

</comment></comment></comment></comment><comment><USER16> Has anyone tried this yet? It seems more than 50% cheaper than Backblaze B2 with a very similar setup.

<comment><USER17> Try it, it's free for the moment :)

<comment><USER11> You have to open an account with verified bank details first though, right?</comment></comment></comment>


Comcast Confirms End of Deal with Time Warner Cable - <AUTHOR> http://www.nytimes.com/2015/04/25/business/media/comcast-time-warner-cable-deal.html

<comment><USER2> The only thing coming to mind is they will re-file with the next administration.</comment>


Google Glass Graces the Runway at New York Fashion Week - <AUTHOR> http://mashable.com/2012/09/09/google-glass-dvf-fashion-week/

<comment><USER2> For those of you not in NYC, Fashion Week takes over the city twice a year, and these runway shows are huge productions. Lots of money & time goes into not only the clothes, but also the runway events themselves - especially with the major designers like this chick Diane von Furstenberg (wife of Barry Diller, founder / CEO of web giant IAC). Lots of celebrities show up, and photos from the events show up all over the press. Hardly the place I'd expect to see Google Glasses and Sergey.

Which is why this is so interesting. Seems Google is making a push for Glasses to be "hip", and not just a toy for us geeks and hackers. Not only did Sergey sit on the front row, but the models & designers wore Glasses during the show, and Sergey walked with the designers at the end. This last bit is a rare thing for any of the regular celebrity attendees to do, much less Sergey Brin who I doubt has ever been to a runway show before.

Think of it like Sergey attending a major opera or orchestra performance, and then being brought up on stage at the very end when the conductor / singer / director is giving their final bow.

<comment><USER3> Can't remember if it was Sergey himself or someone here on HN however there was a comment made not long ago that all it would take is for someone like Will.I.Am or other 'cool' celeb to be snapped wearing them out and about and Google Glass is instantly cool as a fashion statement.

Given the massive leap in technology I'll stand behind almost any PR move Google make to get this tech mainstream.

<comment><USER4> Like it or not, this is how fashion works. _Imitation is the sincerest form of flattery_ , right? And young people like to imitate their idols. Just make a few artists and a few athletes wear this product, and people will buy it.

<comment><USER5> That's also pretty much part of the Beats Audio success. They are featured in tons of music videos, movies and celebrities are spotted wearing them all the time.

<comment><USER6> Beats Audio success is also due to need. I have two laptops with Beats Audio, and presumably they got a few bucks from each. When buying them I wondered if there's something special about the speakers and probably made me more likely to buy them, but all laptops have speakers anyway.

Glasses are another animal, both price and the cool factor are hurdles. Not cool > [http://www.freetechnologyadvise.com/wp- content/uploads/2010/...](http://www.freetechnologyadvise.com/wp- content/uploads/2010/02/2-bluetooth-headset.jpg)

</comment></comment></comment></comment></comment><comment><USER7> Google Glass are the least conspicous item in the outfits! Seriously, they've done a really nice job of slimming them down. I walked by Sergey in Palo Alto last week and barely even noticed that he was wearing them.

<comment><USER8> I didn't even notice the Google Glasses in this photo...

</comment></comment><comment><USER9> For anyone wondering if there's any precedent for this sort of thing outside of movies and video games, then the answer is yes. In the Industrial/Cybergoth subcultures (and before that Raver culture), which have taken a great deal of inspiration sci-fi and art by Geiger, it's something you've been seeing for roughly 15 years. It's also something you'll see in Anime/Cosplay circles, and more recently, in Steampunk.

Edit: Fashionable Googler:

<https://plus.google.com/+JennyMurphy/posts>

</comment><comment><USER10> End of the show: [http://www.youtube.com/watch?feature=player_detailpage&v...](http://www.youtube.com/watch?feature=player_detailpage&v=_PU60bxRoHA#t=512s)

</comment><comment><USER11> The thought occurred to me that this is a really weird situation for a technology to be in.

Google Glass exists in a kind of public beta. We know it's coming, we've seen some impressive stuff with it, we know it could be huge or a flop. It's possible to buy a pair right now if you really want, but it's not "ready". What other products have been released this way?

<comment><USER12> > It's possible to buy a pair right now if you really want, but it's not > "ready".

You can? Where? How? For how much?

<comment><USER13> I think he's referring to the developer program. If I remember correctly, it was something like $1500.</comment></comment></comment>


Overview of Rust error handling libraries - <AUTHOR> https://blog.yoshuawuyts.com/error-handling-survey/ <comment><USER2> This is a nice overview of Rust's available error-handling crates, and some improvements to the language that are error-related. But I'd like to quickly point out that you do not _have_ to pick a library from this list! I don't want anybody to read this article and go away thinking "I need to learn nine libraries in order to use Rust effectively". In the majority of cases, I've found what the language and std offer is enough for me.

(In fact, it leaves my favourite solution out: using the derive_more crate to auto-generate From implementations for the ? operator to use. From is a general trait, useful for far more than error handling, which is probably why it's omitted here.)

<comment><USER3> Please forgive the tangent, but I'm curious about how people are using Rust if it's not in their primary day job? My impression is that there aren't yet many Rust jobs, but many practitioners. What are people building with it? For Rust enthusiasts, how do you use it? Are you contributing to an open source project or do you have your own pet projects? In either case, what are the projects? I'm asking because I might have some time to play around with it over break.

<comment><USER4> Here's a list of applications written in rust: [https://github.com/rust- unofficial/awesome-rust#applications](https://github.com/rust- unofficial/awesome-rust#applications)

People are using rust as they do other general purpose programming languages that have somewhat of a focus on systems programming: to write code. Your question isn't really easy to answer in the same way that someone asking "what are people building with python?" isn't useful. The answer is everything from webpages to text editors to operating systems, and everything in between.

<comment><USER3> Programming languages lend themselves to different applications and the kinds of projects one contributes to in one's hobby time are different than those one contributes to in one's professional time. As such, I wouldn't expect hobbyist Rust users to work on the same distribution of projects as professional Python developers. In any case, I just want to know what people are inspired to work on with Rust; it's an open ended question, and it's okay that this question has no single easy answer. (Also, "what are people building with Python?" is a very interesting question to me; it's pretty much why [https://github.com/trending?l=python](https://github.com/trending?l=python) and similar exist--and note, the kinds of projects that trend for Python _are_ very different from those that trend for Rust).

</comment></comment></comment></comment><comment><USER5> I've never quite understood all the interest in these error-handling libraries. I've had great success even in large projects by impl'ing From when I need implicit conversion between error types. Most of the time, though, I want to actually _handle_ the error at the calling site. I don't "bubble up" errors because they _mean different things_ at different levels of the stack.

<comment><USER6> I think the biggest benefit of these is automatic backtraces. That's what I tend to miss from e.g. Python. But this is usually more of a concern for applications than for libraries. If my application spits out "IO error: nonexistent file", I need to know which line it came from to know which file it's talking about. But in a library it's usually more obvious.

<comment><USER7> I mean, don't just bubble out errors until they lack context then. Rewrap them to add more context like ConfFileReadError(io::Error).

<comment><USER8> That would be a major point of my library, SNAFU, discussed in the article.

[https://docs.rs/snafu/0.6.0/snafu/](https://docs.rs/snafu/0.6.0/snafu/)

</comment></comment></comment></comment><comment><USER9> I like file and line numbers with my errors:

      // No need to use this directly. See the e!() macro.
      #[derive(Debug)]
      pub struct ErrInfo {
          pub file: &'static str,
          pub line: u32,
          pub msg: &'static str
      }

      impl std::fmt::Display for ErrInfo {
          fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
              if cfg!(debug_assertions) {
                  write!(f, "[{}:{}] {}", self.file, self.line, self.msg)
              } else {
                  write!(f, "{}", self.msg)
              }
          }
      }

      /// Use this with `failure` crate's `ResultExt` like this
      ///
      /// ```
      ///    $r = function().context(e!("Function failed"))?;
      /// ```
      ///
      /// Error context will then include that message, and the file and line number.
      #[macro_export]
      macro_rules! e {
          ($msg:expr) => {
              $crate::ErrInfo {
                  file: file!(),
                  line: line!(),
                  msg: $msg
              }
          };
      }

<comment><USER10> Some of the highlighted error crates will include a full backtrace if you are using nightly rust. Not sure when it will hit stable.

<comment><USER8> Some also produce backtraces on today's stable Rust and previous versions as well. SNAFU can produce backtraces back to stable Rust 1.31.

</comment></comment></comment><comment><USER10> Rust brings some great features to the table but the combination of them opens up a new level of challenges to deal with which is why there is so much talk in the community on error handling libraries.

Some of the competing needs that need to be dealt with to understand why include

\- Quickly create errors and extend them for prototyping while scaling to programmatically reacting to them

\- Easily convert errors with `?` has drawbacks. `?` wants you to implement the `From` explicit conversion trait but that becomes part of your public API, exposing implementation details (switch dependencies or one bumps major is technically a breaking change for you). Another problem is you can't both implement the `Error` trait and support `From` from anything that implements the `Error` trait because it will conflict with Rust's blanket implementation of `From` converting yourself into yourself. We need specialization to solve this.

\- You can return `Result<T, E>` from main but it prints `Debug` information rather than user-friendly `Display`. So we need to deal with `Debug` printing the right thing most of the time while printing something user-friendly in `main`.

\- Rust users have their errors wrap underlying errors in a giant chain. Rendering of this chain needs to be decoupled from a single `Error`'s `Display`.

\- We aren't clean which errors in a chain are context and which are meant to be actual root causes to programmatically act on

\- Supporting `no_std` for embedded cases.

On top of all of that are unsolved problems like process exit codes specialized for the error being returned, debug-only information (e.g. opt-in to rendering an original `errno` or `HRESULT`), error cloning (important for caching failable-operations), error serialization (important for network proxying APIs).

I think some in the Rust community are seeing Yoshua's comaprison and feeling like we are converging on a solution. While I think that is true for `derive(Error)` (code-genned trait implementations), I don't think this is true for our patterns for how to structure and communicate content in errors or how to do Dynamic errors. This post made me feel like Rust is in a rut. People have taken a pattern or two from cargo's source and refined it without branching out more into other ways of solving the problems. This ends up leaving a lot of the problems i listed above unsolved or less than ideal.

I'm toying with ideas for an alternative approach for solving most of these problems; just need to get some more time to get it in a shareable state.

<comment><USER11> > _Another problem is you can 't both implement the `Error` trait and support > `From` from anything that implements the `Error` trait because it will > conflict with Rust's blanket implementation of `From` converting yourself > into yourself._

I believe this issue would only come up if you're trying:

        impl<T: std::error::Error> From<T> for MyError

which seems like a really clumsy way to handle it. In most real cases, wouldn't you write the From impls for the specific types of errors you're expecting?

<comment><USER10> > which seems like a really clumsy way to handle it. In most real cases, > wouldn't you write the From impls for the specific types of errors you're > expecting?

In an application, yes. The problem is in libraries because the `From`s` are public so you have put the error type for your dependency in your public API and if you change dependencies or upgrade past a major, you've broken your API. Granted, it is unlikely someone is going to use it ... but I wouldn't put it past people to take shortcuts like that.

<comment><USER8> A benefit of SNAFU is that the `From` trait is implemented against the internal-by-default _context selectors_. Since enum variants are public if the enum is, SNAFU also offers a way to wrap an opaque newtype around the internal error, allowing the implementor to choose exactly what public API their error exposes.

</comment></comment></comment></comment><comment><USER12> One error handling pattern I'd like to figure out how to implement in Rust is where you trace the error _out_ from the point it was created rather than capturing a stack trace at creation time. Tracing the error this way is impactful when your application spans multiple processes or machines. Client/server systems, for sure (you can know what the server did to error, without extra noise in the trace from below where it received the command, and you also get a trace of the client's side. It's substantially more useful when the workload is distributed more.

The best I've come up with is using a custom ResultExt class which implements std::op::Try, marks its trait methods as inline(always), and then captures the program counter whenever you use `?` on it in order to build a trace. It's not the worst, but it still feels a bit odd — particularly the forced inlining since that will surely break if you're working with std::ops::Try from behind a trait object.

<comment><USER13> You can also make it never inline, and use the return address instead of program counter. That's what zig does to implement this feature ("error return traces").

<comment><USER12> This would mean an extra function call for _every _ use of `?` (rather than a conditional jump that the branch predictor has been well-primed for), even in the non-error path. My Rust code for some projects use `?` pretty frequently, to the point that I'd be concerned about perf. Of course, the only way to be sure is to profile. Do you have any perf measurements with this technique in zig?

<comment><USER13> By default this feature is enabled in the Debug build mode only, so its perf impact isn't a concern in release builds. But that being said, the function call only happens in the error path, when returning an error from a function, right? Are you concerned about the perf of the error path? Maybe I'm not understanding something about your implementation. But yeah the way to be sure is to profile. When I get around to it I'll add a flag to allow enabling this feature in release builds and do some profiling.

<comment><USER12> > But that being said, the function call only happens in the error path, when > returning an error from a function, right?

std::ops::Try looks like: \- fn into_result(self) -> Result<Self::Ok, Self::Error>; // called on `x` whenever you use the `x?` syntax. \- fn from_error(v: Self::Error) -> Self; \- fn from_ok(v: Self::Ok) -> Self;

It's been a while since I explored this. I was thinking you'd `#[inline(always)]` the `into_result` method, but now that I look at the trait again, I think you would only force inline the `from_error` method and it should still work but without impacting the non-error path much.

</comment></comment></comment></comment></comment><comment><USER7> I really don't like this whole "screw the type system, just throw string errors that you don't know the type of" behind all of this. It feels like backporting golang's error handling to rust, which feels like a step backwards.

<comment><USER14> That's a really unfair characterization of Go's error handling, and something only really novice Go developers do.

[https://dave.cheney.net/2016/04/27/dont-just-check-errors- ha...](https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them- gracefully)

<comment><USER4> Every time you use `fmt.Errorf` and `if err != nil { return nil, err }`, you're returning a stringly typed error up the stack.

The entire stdlib does this. An error stack is never present from stdlib functions' errors, and third party libraries I see it just as infrequently.

If only novice go devs do that, than the entire go core team are novices, as well as the authors of popular go projects like kubernetes and docker.

<comment><USER15> "Stringly typed" means literally a string. Go doesn't always distinguish between errors, but the error type does distinguish errors from non-errors and that's important.

It seems better to have coarse-grained types than to standardize the wrong type hierarchy?

</comment></comment></comment></comment><comment><USER16> While dealing with errors in any langauge is irritating, I think Rust has the best ideas.

* Pattern-matching for success/error check

* Error passing with the `?` operator

* The correct error seems to appear when panicing due to an `unwrap` call

The most irksome thing remaining is to have to create your own error objects..

<comment><USER8> > The most irksome thing remaining is to have to create your own error objects

That's generally the purpose of the libraries outlined in the article — reducing the pain of creating the custom error types.

</comment></comment><comment><USER17> It bugs me to no end that Rust _almost_ got conditions and restarts. Apart from proper macros, conditions and restarts are one of the few things that CL has that no other language has mimicked.

Sure, I have seen it faked in scheme with call/cc, but that will never be a proper, fast solution.

<comment><USER18> I think guile at least got prompt and abort functionality which makes it mostly doable?

Also, bizarrely, [http://p3rl.org/Worlogog::Incident](http://p3rl.org/Worlogog::Incident) exists.

<comment><USER17> Not only doable, but rather efficient. Delimited continuations are superior to undelimited ones in every way.

</comment></comment></comment><comment><USER19>
      struct Error {
        XAtLine47,
        XAtLine88,
        YAtLine13,
      }

This way you have error AND error place as contextualization.

<comment><USER8> Like the sibling, I'm not sure if you are serious, but my library SNAFU ([https://docs.rs/snafu/0.6.0/snafu/](https://docs.rs/snafu/0.6.0/snafu/)) is similar to this at a step or two higher level. The idea is that you wrap lower-level errors (a file system error) with a higher-level context (opening the config file).

Taken to the extreme, you have a unique context for every possible error source inside your library, which means you could directly search for the name to find the line number.

This does make me wonder how I could add line / file information to an error automatically though.

</comment></comment><comment><USER15> I'm wondering if there's any equivalent in Rust to how Zig does error traces?

[https://ziglang.org/documentation/master/#Error-Return- Trace...](https://ziglang.org/documentation/master/#Error-Return-Traces)

</comment><comment><USER20> I like the idea of TypeScript-like error handling.

Or more generally, functions that can return different types without having to define an `enums`. If only because naming these single-use `enums` is hard :)

<comment><USER10> Is it employing anonymous enums? They come up for helping errors in the Rust community from time to time. The main dropback I see on relying on them is that they make it easy to accidentally expose your implementation details as part of your public API, making it a breaking change to upgrade or change a dependency.

<comment><USER21> In typescript you can return union types. Rust doesn't allow that, at least not ergonomically.

</comment></comment></comment><comment><USER22> As a Rust newbie, this is why I end up just using .unwrap() everywhere. result::Result, io::Result, is something a Some/None or an Ok/Error, etc, etc. What (non-string) errors does this function return, etc? I find it easier to check for and propagate integer error numbers correctly in C.

<comment><USER23> One pattern is to use your own crate-level Error type and then Result::map_err to bubble up other error types into your own thing. Example:

[https://play.rust- lang.org/?version=stable&mode=debug&editio...](https://play.rust- lang.org/?version=stable&mode=debug&edition=2018&gist=48252c0056e0a13829bb5d24171687ed)

This makes error handling a little more verbose but you can use some quick and dirty macros for that.

<comment><USER8> > but you can use some quick and dirty macros for that.

That is the point of most of the libraries described in the article — to prevent having to recreate this particular wheel each time you need it. Do all Rust programs/libraries need one of the libraries? Not at all, but I find that using one that has some nice bells and whistles will encourage the programmer to improve the errors and their messages.

</comment></comment></comment><comment><USER24> Box<dyn Error> for life

<comment><USER23> when your error handler can also fail

<comment><USER24> The top level error handler is

        inner_main().expect("it should work")</comment></comment></comment>


Of Mice and Men - <AUTHOR> http://99percentinvisible.org/episode/of-mice-and-men/

<comment><AUTHOR> Some of his original ideas are still kicking around: [http://en.wikipedia.org/wiki/Chorded_keyboard](http://en.wikipedia.org/wiki/Chorded_keyboard)</comment>


'Virtual biopsy' could help physicians to diagnose precancerous pancreatic cysts - <AUTHOR> https://nuadox.com/post/189553142307/virtual-biopsy-pancreas <comment><USER2> This should be a direct link to: [https://eurekalert.org/pub_releases/2019-12/m-ba120519.php](https://eurekalert.org/pub_releases/2019-12/m-ba120519.php)</comment>


Ask HN: Does this seem like an interesting idea? - <AUTHOR>

It seems that it's fairly easy if you're recently out of college to find a cofounder and do a startup. However, once you've moved and been in a job for a while, your network dissipates. Would it be interesting to have some community that would allow you, as an employed hacker, to find other hackers to work on side projects with?
The idea here is that people join medium-sized startups to find people to potentially work with on bigger projects. Eventually you can quit your job and go work on the startup full time.
I've thought about putting together an e-mail list of people who want to work on side projects. There are people with ideas, and there are people who just want to join someone and hack on something.
If this seems interesting, how would you structure this? Would an e-mail list be good enough? <comment><USER2> > Would it be interesting to have some community that would allow you, as an > employed hacker, to find other hackers to work on side projects with?

I'd just go to local programming meet ups, hackathons, subreddits, github to new a few. Even on the internets I often see Sydney based hackers and it ain't exactly the tech mecca of the world.

I think the relationship is better if you meet in a way where the focus is not on networking but doing something else. The worst meetups are ones designed for networking. I hate those. It is like a shark tank and leads to very stinted conversations in my experience.

An idea for you:

Create impromptu 'popup' 1 hour hackathons. Name a cafe and a time, and anyone who pops up with a laptop you just work on something together, or share ideas or whatever.

You could get the idea started the good old boot-strappy way - set one up in your city every day (Mon-Sun) at a different location, and you and a friend turn up so that if anyone else turns up there will be at least 3 of you so it wont suck.

Make them find you via the website. Then if it catches on and grows add another venue, and you and your friend split up, so now you have two meet ups happening every day. Etc.

<comment><USER3> I kinda like this idea myself @bbcbasic. I think it would work on the west coast or nyc especially.

</comment></comment><comment><USER4> You had an idea and now you want to jump in and build. Take some time to research and analyze first. There are plenty of find-a-cofounder websites out there. Have you figured out what the typical experience is for their users? Have you talked to any of them or been through the process yourself?

<comment><USER3> +100 to this comment.

</comment></comment><comment><USER5> I recommend checking local Meetups(www.meetup.com). I have yet to be in any city where there aren't people just like you who are just looking for people to build cool stuff with.

I also believe that is actually the main objective of most Hackathons.

<comment><USER6> "I have yet to be in any city where there aren't people just like you who are just looking for people to build cool stuff with."

Try coming to my city :/

</comment></comment><comment><USER7> Assembly was doing this & pivoted to an entirely new idea/model.

Here's the old version: [https://cove.assembly.com/](https://cove.assembly.com/)</comment>


Free Udemy Course Python 3.7 Bootcamp| Beginner to Intermediate Level – A to Z - <AUTHOR> https://gscode.in/python-3-7-bootcamp-beginner-to-intermediate-level-a-to-z <comment><USER2> The coupon code entered is not valid for this course</comment>


Why do all code editors look the same? - <AUTHOR> https://medium.com/@jviereck/43de0df2daed

<comment><USER2> The basic idea of looking at how we can improve workflows in editors is great, but I have issues with much of the actual analysis. Even the core premise—that all editors "look the same" is flawed. They only look the same to the extent that most of the screen is taken up by, of all things, _text_. In this sense, image editors also start looking suspiciously the same...

Image editors, of course, have all sorts of tools and buttons, not just the image. But this is just a function of the main modes of interaction: mouse vs keyboard. Unlike an image editor, a text editor is used almost exclusively by a keyboard, so most of the controls are optimally presented as keyboard shortcuts.

Then, the post goes on to argue by analogy: always a risky strategy. Would I put two pieces of paper side-by-side when I'm writing an essay? Probably not. But code is not text; often, I _do_ want to compare two pieces of code next to each other, line-by-line... which is done perfectly by putting them next to each other. And the rest of the paragraph goes on to pretty much describe my Emacs workflow[1] anyhow: I often have one main buffer and a bunch of random resources in another buffer which I periodically move around or swap. Sometimes, I also have a browser window or two open in the same way.

The buffers don't overlap _per se_. In practice, they actually do: each one shows a _window_ into the underlying text or image or whatnot, and can just show a small part. (Moreover, I can have _multiple_ windows into one document, which is occasionally useful in practice). The only constraint is the physical grid... which I might use anyhow if it was easy with physical things. I lose a bit of flexibility in how things overlap in return for not having to worry about positioning and having everything line up nicely; a great compromise.

An important detail is that, in Emacs at least, open, closing and swapping panes is trivial. I constantly bring up new ones, look at new things in existing ones and then close them in the normal act of editing. Very transient, very flexible and largely possible because they _don 't_ overlap so that we can lay out new ones automatically instead of giving me a floating window to manually drag out of the way.

My workflow still looks just like the wireframe in the blog post. Interesting.

In the end, this is just going from the cozy world of tiling window management into the frontier of floating windows. While it might be friendlier to newcomers, floating windows are simply not as good for experts and, presumably, most code editors _are_ aimed at experts.

I would much rather take on a slightly worse learning curve to get my stuff laid out automatically, all from keyboard commands. My code editor is one of the tools I use the most, so the trade-off is a no-brainer.

In fact, by using Emacs, that's exactly what I've already done!

[1]: [http://jelv.is/emacs-workflow.png](http://jelv.is/emacs-workflow.png)

<comment><USER3> > They only look the same to the extent that most of the screen is taken up > by, of all things, text.

And the main thing I notice about most of the examples given in the article is that they involve most of the screen not containing text. In fact, most of the screen appears to contain nothing useful.

There's a reason why the major popular editors all fill the screen with text, and it's something I've discovered from years of editing code: nothing is more important to programmer productivity than being able to pack a lot of code on the screen at once. There is probably an upper bound to this, but I suspect it is higher than available space on my desk to put monitors in.

You don't really need annotations and graphics and dotted lines to show you how things relate. You just need to have all the things in front of you so that you can read them together. Since we tend to write code vertically, this is usually best achieved with a small number of side-by-side panes of text, a feature which basically every decent editor has.

<comment><USER4> When your project gets larger than one super screenful, the story changes, though. You'll need to see how things relate in the Birds-eye view.

<comment><USER3> With projects in the millions of lines, I have never reached this point. You just need to be able to pack in all the things relevant to what you're doing at the moment.

</comment></comment></comment></comment><comment><USER5> I approve of people trying to improve the editor experience. This is a good project! I have a nitpick though:

"forking the current panel using Ctrl+F is a game changer, as you don't have to scroll away from your current code location when looking up something at a different place in the same file."

A game changer over what? Are there editors that don't let you do this? The two I mostly work in are Emacs and Visual Studio, and you can do this in both. (I'd actually have to hunt around for how to do it in VS, I use both side by side because of a whole lot of Emacs muscle memory, but it's there for sure)

It worries me that he's not actually aware of the features available in the editors he's trying to improve upon.

<comment><USER6> This is exactly what I thought. I set vim to always open in new splits, I often have the same file open in 3 splits for 3 functions. It press 2 keys to open a reference to a function in a new split with me looking at the function.

It seems like the author might not have ever learned how to properly use the existing editors.

<comment><USER7> Creating your own tools are easier than exploring existing tool's documentation...

<comment><USER8> Yes, but that doesn't mean you can say "no other editor can do this".

Even Eclipse allows you to do this.

</comment></comment></comment></comment><comment><USER9> For what it's worth, not ALL editors look the same. :) I'm working on an editor with a friend of mine called Code Connect that is considerably different than most typical editors.

It's heavily inspired by Code Bubbles as well. However, instead of working with code on a file-by-file basis, we're working with code on a function-by- function basis.

We've got a demonstration video here: [https://www.youtube.com/watch?v=CuQ8NJOypqs](https://www.youtube.com/watch?v=CuQ8NJOypqs)

And we'll be shipping an alpha version for people to play with over the next two weeks.

<comment><USER10> That looks absolutely gorgeous. Working with functions like that is something I've been looking for. Is there a longer demo video? If like to see how new functions are added to existing files, how it handles a bigger code base, and how it deals with a clutter of bubbles e.g. does it remember old bubble path lists so they don't have to be expanded layer (or maybe this shouldn't be the case due to causing clutter).

I love how it has autocomplete due to VS integration. With the right keyboard shortcuts and some polish, I think your editor would be very useful. Keep us updated.

<comment><USER9> Thanks a lot! The video I posted is fairly dated, and we'll be releasing a new one this week to discuss how Code Connect deals with interfaces and inheritance. Adding bubbles is an issue we haven't solved yet. We've tried a few different approaches, but nothing feels quite right yet.

Like you said the user experience is key with a tool like this, so we're constantly working to refine it.

The biggest thing we're looking for right now is feedback, so I'll definitely keep you updated on our progress, videos and alpha release date.

</comment></comment></comment><comment><USER11> On one hand, it's always nice to see people experiment. On the other hand...

* I didn't leave KDE for XMonad to get a window manager in my editor. I'm interested in maximizing the real estate for my code, because I also need a web browser and two or three terminal windows.

* I don't see how that's going to scale to something useful when you have a project with hundreds of files where you often need 10 files open at the same time.

<comment><USER12> Which begs the question - why not open multiple windows and let the window manager take car of them?

<comment><USER11> No good reason? As long as they are in the same process or can communicate via IPC, it sounds more rational to me.

</comment></comment></comment><comment><USER13> The floating window style editor looks interesting, but ties you to working from a GUI environment. I quite frequently find myself working via SSH sessions to remote machines for a good chunk of my development. Anything that requires a GUI/mouse is a non-starter in that kind of setup.

<comment><USER14> I agree, I very rarely use my mouse when editing. I imagine this idea, and especially the Code Bubbles idea linked to in the article, would work best with a tiling window manager similar to awesome ([http://awesome.naquadah.org/](http://awesome.naquadah.org/)) or tmux ([http://lukaszwrobel.pl/blog/tmux-tutorial-split-terminal- win...](http://lukaszwrobel.pl/blog/tmux-tutorial-split-terminal-windows- easily))

</comment></comment><comment><USER15> People have different needs, and I get reminded of this when talking about editors/IDEs with others. Had a friendly 'discussion' with a dev a couple years back who was leading a discussion group and publicly scoffed when I mentioned I'd picked up IntelliJ. He went on to talk about his company's code and how 'lean' it was and how they didn't need any 'heavyweight' tools like a Java IDE.

I asked him about the code he was working on. How much of it did he write? "A lot". How much was written by people at the company "100% in house - we write everything from scratch". OK, great. Working on the exact same codebase with the same core team for years on end (2+ years in their case), you probably know every single bit and byte by heart - awesome. Very few of us operate in that world. Many of us come in to codebases where we didn't write every line. The original gone, hostile or possibly even dead at this point. Full-featured IDEs (the guy in question kept gushing over sublime-text and how fast and lean it was) provide another level of code insight that basic editors don't provide (not ragging on ST, just pointing out it doesn't do what I need for the breadth of projects I work on).

I think the OP needs to look deeper at the tools he's criticizing before writing them off. His ctrl-f example demonstrates that he doesn't seem aware of other IDEs that provide this (and... I'd probably use ctrl-f to _find_ something, not _fork_ ).

In the vEdit example, we get 'what file do you want to open?' That's generally precisely what I _don 't_ want to think about when I come in to a new project, because I want a visual overview of what's available. I want to see the naming convention, the layouts, note what's available and what's not. Removing that in an effort to be 'simple' hinders a heck of a lot of automatic project discovery for the sake of ... what? 'Simplicity'?

<comment><USER16> At my company, we are working on an Android fork, meaning a very large codebase of which we wrote almost none of. I tried useing an IDE, but found that vim+grep+locate turned out to be much more productive.

<comment><USER15> interesting you say that. there are times that vim/grep works better for me, but I've found jet brains tools phpstorm and intellij) really are more productive for more _most_ of the time. depends on how complex the code is, I think.

</comment></comment></comment><comment><USER17> This looks like a Smalltalk environment, which is also a 40 year old paradigm.

<comment><USER18> That was my first thought as well. I'll also add that it doesn't look like it would work as well in Java thanks to Java being much more verbose.

Given about 2 minutes of thought I'm leaning towards this being the wrong approach. The challenge with verbose languages is getting enough context on screen or in your head to think about the real problem; it's a pretty old problem and a lot of things have been tried, but not much has really worked. What I would like to see is something that hides more of the incidental complexity and lets you not think about it.

<comment><USER19> FWIW, the smalltalk browser _look_ ("hierarchical" selector blocks on top and content at the bottom) has been an available UI in java in eclipse for years, and IMO it's far better than the tree-ish browser on the side exactly because it helps with getting more context on screen

</comment></comment></comment><comment><USER20> this reminds me of Bret Victor's talk: The Future of Programming. [http://vimeo.com/71278954](http://vimeo.com/71278954)

Similar ideas on the problems with code editors / current programming, but Bret Victor's ideas are a little more fleshed out.

Also, if you haven't seen it, it's a pretty funny talk. Brilliant guy.

</comment><comment><USER21> John Carmack [1] highlighted the tyranny of limited screen real-estate could be vanquished by immersive media (virtual reality) headsets - easy to imagine a VR "code landscape" littered with derelict or active work-in-progress code dumps. It would still allow the best of current designs to exist in this new interaction space but no longer bounded by physically awkward wall of screens. Something like Croquet[2]+VR+editable-code-objects and so on.

[1] [https://www.youtube.com/watch?v=BMmwhjfVSbk#t=1h16m30s](https://www.youtube.com/watch?v=BMmwhjfVSbk#t=1h16m30s) (next minute) [2] [http://en.wikipedia.org/wiki/Croquet_Project](http://en.wikipedia.org/wiki/Croquet_Project)

</comment><comment><USER22> The killer feature for me would be able to "expand" method implementations at a call site e.g.

        class UserController
           def create
             ...
             UserMailer.send_invitation(user) # expanded line
               def send_invitation(user) # implementation from UserMailer
                 ...
               end
           end
        end

This way you could unfold the entire call stack in place i.e. you can see all the code you're working on at once.

<comment><USER6> It works for trivial examples, but on anything complex... as you go 3/4 layers down and on longer / more complex functions, I suspect it quickly makes less sense... what about when that function references other stuff in its local context, etc?

That is an amazing demo feature -- but maybe not as useful day to day versus just hoping around functions.

</comment></comment><comment><USER23> LightTable started it's life with an unusual layout which gave me hope we could break free of that classical layout. Unfortunately it reverted to the classical layout later on.

<comment><USER24> Interestingly, my Conception project shared a similar history. It started off as small individual boxes on a large canvas, but the latest version is currently more like Sublime.

I still haven't committed to either one paradigm, there are just certain problems with an open large canvas model that need to be resolved for it to be usable for large tasks.

</comment></comment><comment><USER24> It's cool to see more people thinking about and experimenting with this stuff. I've done a similar attempt with my Conception project,

[https://github.com/shurcooL/Conception#demonstration](https://github.com/shurcooL/Conception#demonstration)

One reason "all code editors look the same" is because they're really mostly "text editors" with some coding-functionality on top. And as tikhonj explains, they display text prominently like image editors display images.

I used to think writing code as text was an inefficient legacy decision and that moving up to working with higher level concepts would be a big improvement, since we usually think about code at a higher level than an ascii-character-at-a-time.

However, the limiting factor is the input hardware we use to interact with computers. The most efficient input device is a keyboard, and text is most efficient to manipulate with a keyboard.

</comment><comment><USER25> Emacs can already open multiple windows all showing views of the files currently being edited. It's easy to have multiple windows that can be dragged around on the GUI each split into as many panes as desired. I find that one big window split into three or four panes works best for me most of the time.

<comment><USER13> Being able to split one "window" into multiple panes has become an absolute must for me. Once a file get's longer than the screen's height, it's inevitable to need to go hunt something down that's one screen away from what I'm working on right now.

</comment></comment><comment><USER26> Most of the developers I work with (including me) already work in this fashion - multiple windows open on the desktop showing (for example) code being edited (usually in an IDE); code open for reference (a 2nd copy of the IDE, or simply notepad/uedit/vim/whatever); scripts (vi/emacs/grep/less); database stuff in another IDE; source control; folders view and usually multiple grep windows. My point being that I pick what they need to use and let the desktop take care of displaying them simultaneously. I'm not sure I can conceive of, or even desire, a single IDE that can handle every scenario that I encounter for me. I think most scenarios are handled by opening another vi/notepad/ide session as needed.

</comment><comment><USER27> The new idea looks like my desktop. A web browser, terminals, text editor windows ...

<comment><USER28> Or like Visual Studio. On the desktop. Where you can have your text editor windows float over multiple screens.

</comment></comment><comment><USER29> As long as you're using a desktop environment, you can have this environment today, with no extra programming required.

Those who live in an iPad-only world may still be slightly stuck though.

</comment><comment><USER30> The floating windows reminds me of the text editor called sam. You have floating resizable windows in the editor, one window being a command window to operate on the current buffer text. It's a powerful idiom . Here's a screenshot: [http://en.wikipedia.org/wiki/Sam_(text_editor)#mediaviewer/F...](http://en.wikipedia.org/wiki/Sam_\(text_editor\)#mediaviewer/File:Sam_text_editor.png)

The most different editor is 'ed' though :)

<comment><USER31> That was exactly the first thing that came to my mind as well. :)

</comment></comment><comment><USER32> Note that Emacs' window splitting ability doesn't stop at splitting the editor in two. You can recursively keep splitting as much as you want: when navigating complex code bases it has helped me in the past to have it split into four sections. More splits than that made the displayed sections too small for my taste, and even if you have all those splits right in front of you I personally felt that I had a harder time keeping track of where to look.

<comment><USER33> Cloud9 allows similar unlimited pane splitting iirc.

</comment></comment><comment><USER34> I've recently gotten a good XCode workflow going and it feels a lot like this. If I'm exploring code that's new to me, I'll have a tab dedicated to a file with several assistant editors open. An assistan pointed at counter parts and one at callers. If it's something I'm already familiar with my editor will usually look like the classic layout.

</comment><comment><USER35> To my best understanding, what the author has shown can be done in Visual Studio 2012/13 and i quite often work in a similar way.

</comment><comment><USER36> Some of the non-text-file-based environments edit different by default: Smalltalk, Interlisp, Self, Apple Dylan, Boxer, ...

</comment><comment><USER37> There are other IDEs as well, I'm aware of lamdu [https://github.com/Peaker/lamdu](https://github.com/Peaker/lamdu) which is for haskell or at least a very close variant. I'm not a big fan of haskell but I've seen a demo of an early version once and it seemed great.

</comment><comment><USER38> Because the job of a code editor is to get out of the way.

You get out of the way by emulating what people know to at least such a degree that they can filter it out easily and concentrate on the task, not the environment.

</comment><comment><USER39> The only big evolution I see with code editors in the next couple of years is real touch/gesture support. Any attempt to code on a touch device will convince you within 30 seconds that the IDEs of today are not adapted.

<comment><USER40> noflo looks like would work really well on a tablet [http://noflojs.org/](http://noflojs.org/)

<comment><USER39> Ooh that actually looks really cool, Thanks a lot for the link! :)

</comment></comment></comment><comment><USER41> Reminds me of "How to Think Like a Pioneer" (2010) by James Hague: [http://prog21.dadgum.com/69.html](http://prog21.dadgum.com/69.html)

</comment><comment><USER33> I didn't think of Cloud9 for that mockup. Cloud9 has two horizontal, tabbed panes, one being for files and the other being for the console (for the out- of-box workspace).</comment>


Code anywhere with your lovely iPad/iPhone - <AUTHOR> https://marknote.github.io/index.html?page=InstantCoder.html <comment><USER2> Downloading this app - very confusing UI. No idea how to create a new project and it seemed like it implied it would allow coding in objective C, but I can't see how.

<comment><AUTHOR> appreciate your feedback. You can create a 'project' with 2 options: \- by git clone a repo from a git server or github; \- by creating a folder; To code in obj-c, just create a file with extension of 'h' or 'm'</comment></comment>


Assessing the Ada Language for Audio Applications - <AUTHOR> http://www.electronicdesign.com/embedded-revolution/assessing-ada-language-audio-applications <comment><USER2> If you're interested in using Ada, be sure to also checkout SPARK - [http://www.adaic.org/advantages/spark- ada/](http://www.adaic.org/advantages/spark-ada/)

It's basically a more strict (in terms of safety) Ada

<comment><USER3> Ada is a language that I really _want_ to like, but I've never been able to get enthusiastic about it.

That being said, SPARK and the affiliated tools (particularly gps (? Programming Studio?) are much nicer to use than the other formal verification tools I've tried. (Frama-C, much as I do like it, is obviously more a research project; Dafny is undocumented. I haven't tried any of the Java options.)

[https://maniagnosis.crsr.net/2017/08/programming-language- sy...](https://maniagnosis.crsr.net/2017/08/programming-language-syntax- complaints.html)

</comment></comment><comment><USER4> I'm surprised this article barely touches on the language-level concurrency support in Ada. Back in university, Ada was the language we used to learn concurrency. It kind of sucked, and you kind of hated it... until you had to implement the same thing in C and wanted to shoot yourself, heh.

<comment><USER5> Audio with a few exceptions in synthesis is rather stream oriented. So at most you should get to build a pipeline.

</comment></comment><comment><USER6> If Ada had curlies and ran on the web, people would flock to it. But it has Begin/End which looks antiquated to people.

/slightly tongue-in-cheek

<comment><USER7> I had a look at few of these language lately (ADA,FORTRAN) and they don't look as bad as they sound, I mean they are not worse than PL/SQL syntactically.

Ada seems to have first class support for concurrency which is important for web apps. What are the downside ADA? looks like GCC supports it. Obviously the ecosystem isn't going to match Java's. But i wonder how does it fair against Go or Rust.

<comment><USER8> > What are the downsides of Ada?

Ada 2012 really caught my eye a while back. Looking at it from a C++ standpoint:

Pros:

\- Already has concepts (aka generics)

\- Already has contracts

\- Already has modules (aka packages)

\- Has really well thought out multi-threading (aka tasking)

\- The SPARK subset of Ada, allows for contract based formal verification (i.e. provable correctness)

\- The Ravenscar Profile, restricts the compiler to only allow for code which is safe to use in a free-standing system (for 'bare-metal' targets)

\- You can still write wrapper bindings to use C or C++ libraries

Cons:

\- It is most spectacularly not a terse language, I appreciate it was an intentional design decision for safety critical contexts, but it's quite mentally taxing to read any sizeable block of code

\- The ALGOL/Pascal like syntax is very off-putting for a lot of people have had to work with those in the past.

\- The GNAT compiler is available in 3 flavours 1) GNAT pro which you pay a lot of money for, is the most up to date compiler, and you can use commercially 2) GNAT GPL which is similar to pro but if you use commercially it must be under GPLv3 terms. 3) FSF GNAT which is analog to g++ so you can use commercially but compiler updates and fixes are rolled in at a much slower rate and lagging behind the other two options. Considering the 3 options available for a lot of businesses they would have to be able to fork the money for GNAT pro in order to use Ada commercially

\- Smaller community (and possibly less active online) means that it's harder to reach out for community support or start a collaborative project

\- The language and toolchain have, by design, very high constraints, regarding correctness. This means that you are not easily allowed to relax or shortcut aspects of your software. This is obviously a good thing but the downside of this is that initial prototyping/feasibility work may take much longer than in other languages.

\- The perpetuation of the myth that it is only suitable for high cost and high-criticality applications (Avionics, ATC, Aerospace, Railway systems, etc.) means that there are less market opportunities for Ada developers, which leads to less people being driven to learn Ada which means the barrier to entry for using Ada in other suitable markets (distributed systems, medical applications, automotive) is much greater.

<comment><USER9> That's a very interesting answer, thanks for taking the time to write it.

For the most part, as a professional Ada programmer, I agree with you on every point of your analysis. I personally like algol like syntax, but would like Ada to be less verbose at times.

I just want to say that there is now a fourth option, gnat pro developer, that is more reasonably priced than gnat pro, and more targeted towards regular companies' needs rt. Safety critical: [https://www.adacore.com/gnatpro/developer](https://www.adacore.com/gnatpro/developer)

<comment><USER8> That seems like the right direction to reduce the barrier to entry for smaller development teams and consultants. Thanks for this update.

<comment><USER10> But you still need to fill out a form to get pricing!

<comment><USER8> Arguable we could say the same from IAR or WindRiver?

I would love it if all these companies were more price transparent but ultimately they are not selling in high volumes, like the likes of MSVC, so I would hazard guess they probably depend a lot more on the margins from each individual sale.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> > Ada has been designed to support garbage collection, but does include a > garbage collector in the language, thus making it adapted for real-time > applications.

I think the author meant "does _not_ include a garbage collector in the language".

In my experience developing Ada software, not being able to depend on a garbage collector being present means that code intended to be used by others must manually manage memory. This means that it must manage memory exposed to client code and document who (the library or the client) is responsible for deallocation of a given data structure. In effect, this makes Ada no more reusable or composeable than C.

<comment><USER9> > In my experience developing Ada software, not being able to depend on a > garbage collector being present means that code intended to be used by > others must manually manage memory. This means that it must manage memory > exposed to client code and document who (the library or the client) is > responsible for deallocation of a given data structure.

Ada has controlled and limited objects, which allows implementation of shared/unique_ptrs, so that's not true. As in c++, if you are in a performance sensitive area you will not use those, but that's also true with a GC, and then you have other options, like memory pools or static allocation.

> In effect, this makes Ada no more reusable or composeable than C.

I think you meant "with regards to memory management" :). As pointed out above, that's not true.

Also beyond memory management Ada has a generics model that composes much better than C++, due to being based on contracts for generic formals (think C++ concepts lite).

In general your statement strikes me as oversimplifying to the point of being simply incorrect.

<comment><USER11> My last attempt at making reuseable Ada was with Ada95. Does the current standard provide for automatic deallocation such that one need never instantiate Unchecked_Deallocation? If so, I need to revisit it. Without a garbage collector, who deallocates graphs of objects with circular references?

<comment><USER9> Hello McCulley, sorry I missed your answer.

> Does the current standard provide for automatic deallocation such that one > need never instantiate Unchecked_Deallocation?

The standard provide a host of containers and pointer-like constructs that would indeed allow you to never use Unchecked_Deallocation. There's one caveat: Performance.

> Without a garbage collector, who deallocates graphs of objects with circular > references?

Like in other languages where you rely on ref-counting, you need to use weak references for that. This requires a bit more explicitness from the programmer.</comment></comment></comment></comment>