How to abuse a C++ compiler? - <AUTHOR> http://mysticalprogramming.wordpress.com/2014/03/19/how-to-abuse-a-cpp-compiler/ <comment><USER2> It should be noted that at least some cases which previously required template meta programming can now be done in a more natural style with constexpr. A constexpr function can be evaluated at compile time, this means that its return value can be used in places that require a compile time constant.

constexpr functions where quite restrictive in C++11. They could pretty much only contain a single expression and a return. C++14 significantly relaxes these restrictions.

[http://en.wikipedia.org/wiki/C%2B%2B14#Relaxed_constexpr_res...](http://en.wikipedia.org/wiki/C%2B%2B14#Relaxed_constexpr_restrictions)

Type-level meta programming is still confined to using templates though...

<comment> hun-nemethpeter I tried to make a proposal for a more natural meta programming:

[https://github.com/hun-nemethpeter/cpp-reflector- mini/blob/m...](https://github.com/hun-nemethpeter/cpp-reflector- mini/blob/master/Proposal.md)

</comment></comment><comment><USER3> I think it is neck and neck whether C++ template instantiation or XSLT is the ugliest unintentional functional programming language.

<comment><USER4> I'm pretty sure XSLT functional paradigm was intentional.

<comment><USER5> I don't think it's even functional, as it lacks lambdas. It's just pure insane.

<comment><USER6> It's declarative at any rate. It's verbose but as long as it isn't used like an imperative language, I don't find it ugly.

</comment></comment></comment></comment><comment><USER7> It's funny that in C++ this is 'abuse of the compiler' and it is awkward, in lisp this is called 'writing lisp code'.

<comment><USER8> That's because it is awkward.

One of the fundamental properties people expect from a step called "compilation" is that it finishes. Also templates notation wasn't designed for this kind of use, and does not scale well for complex programs.

In Lisp code generation is done in Lisp, a notation that scales quite well, and there isn't a separarted step called "compilation". There is no general assumption that "execution" finishes.

<comment><USER9> > That's because it is awkward.

It's more than a bit awkward really.

Still, the OP is right: it's funny.

</comment></comment></comment><comment><USER10>
         ... in order to evaluate InfRec<T>::value ...

I've been spoiled lately, this is jarring to read.

        InfiniteRecursion<T>::value

C'mon, spoil me some more, text is cheap :-)

<comment><USER11> Horizontal space isn't.

</comment></comment><comment><USER12> I don't understand clang's behavior in the last three examples, but then again I'm not a C++ expert. Is it conforming, and is it reasonable?

<comment><USER13> It looks like clang creates it's data structure representing the template instantiation, caches the instantiation for the parameterizing types, then begins instantiating the types for the members. When it first hits the static bool, it reserves space for it's static value, then recurses into the static bools type in order to determine the value. Since the recursion uses the same parameterizing types, it finds the type it was midway through constructing, finds the space-reserved-but-no-appropriate-value-set static member in it, takes a 0 from that memory ( presumably from having allocated and zeroed the memory when initially saving space for the final value ).

For the MutualRec it may not set the static const value as being derived from a constexpr until after having retrieved the value, causing it to access the member in the cache before it's constexpr'ness has been determined.

For the Contra example, it would return 1 from having not'ed the 0 it found in the uninitialized static const.

Russel's paradox would be subverted in the same manner as the Contra example, returning true because it found false ( 0 ) in an uninitialized member variable after looking up the partially instatiated template instantiation in a cache.

This is all conjecture, but it fits, and it's where I would look first if debugging this. I do not know whether this is allowed by the standard, but I'd wager they did not account for referring cyclically to partially instantiated template parameterizations in a cache. GCC's errorful death is probably the correct action here, rather than clang's return of spurious values.

<comment><USER14> You are correct. The Contra example is not different from the much simpler program

        #include <iostream>

        int main()
        {
            static bool p = !p;
            std::cout << p << std::endl;
        }

The static storage specification ensures that p is initialized to 0 before main is executed, and the standard's scoping rules (§3.3.2) allows a variable to reference itself right after declaration.

The same thing happens with Russell's Paradox, with the added twist that HasElement<M, M> always resolves to the specialization HasElement<M, T> (it 'fits' better) rather than the general version, which is never used.

<comment><USER13>
        ~/test/O$ cat break.cpp

        #include <iostream>

        template <typename A, typename B>
        struct MutualRecursion {
          static const int a = MutualRecursion< B, A >::b ;
          static const int b = MutualRecursion< B, A >::a ;
        };

        int main( int argc, char ** argv ){
          std::cout << MutualRecursion< float, int >::b << std::endl;
          return 0;
        };
        ~/test/O$ clang break.cpp
        break.cpp:6:49: error: no member named 'b' in 'MutualRecursion<float, int>'
          static const int a = MutualRecursion< B, A >::b ;
                               <comment><comment><comment><comment><comment><comment><comment><comment>~^
        break.cpp:6:24: note: in instantiation of template class 'MutualRecursion<int, float>' requested here
          static const int a = MutualRecursion< B, A >::b ;
                               ^
        break.cpp:11:16: note: in instantiation of template class 'MutualRecursion<float, int>' requested here
          std::cout << MutualRecursion< float, int >::b << std::endl;
                       ^
        break.cpp:7:24: error: in-class initializer is not a constant expression
          static const int b = MutualRecursion< B, A >::a ;
                               ^<comment><comment><comment><comment><comment><comment><comment><comment>~
        2 errors generated.
        ~/test/O$

~~This is definitely a bug in clang~~. clang doesn't find the member "b" here because it's referencing the cached still-in-construction version of the template. Furthermore, it still does this even when "b" is a regular constant.

          // static const int b = MutualRecursion< B, A >::a ;
          static const int b = 10 ;

gcc, since it appears to always instantiate a new copy of the template compiles successfully for when "b = 10".

~~clang needs to wait until it has fully constructed a type before putting it into the cache, even if it might be slower in some recursive cases. Better than wrong in them.~~

I don't know if clang is in the wrong here, so I'm rejecting a couple of statements. Its method does not allow for compilation in these circumstances, but may be technically permissible, even if gcc jives with how I envision templates operating.

<comment><USER14> I don't see how that could not be a compiler error. The case b = 10 is more interesting because, as far as I can tell, it shows the differences between compilers that do two-phase lookup correctly and those that don't.

This seems to be a rare case where GCC is in the right, but I'd have to double-check the standard to be sure.

<comment><USER13> It was pointed out to me after I joined #llvm when considering reporting this that using the value of "b", which is defined after "a" in the class before it has been initialized is, I suppose obviously in retrospect, undefined behavior.

In effect, I was subverting the undefined behavior associated with expanding a set of infinitely deep template instantiations by accessing a variable that was as yet undefined at the point of access.

So, my initial retractions stand, and this compiler behavior will remain appropriately undefined.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> Fingermann's assertion: at the point where a preprocessor becomes Turing complete it is time to write a preprocessor for it

<comment><USER16> C++'s template mechanism is not implemented by the preprocessor.

Templates control actual code generation (that's sort of their point, with generics) so they must be handled later in the compilation, by the compiler proper.

</comment></comment><comment><USER17> as far as I can tell, the Russell's paradox example would be the same without the template "template<typename U, typename V>"?

in other words, both compilers seem to be being consistent with the previous demonstrated behavior using self-recursion, and the more generic template is being ignored altogether.

Am I perhaps missing a reason it was included?

</comment><comment><USER18> The first thing I thought was using C++ templates like Haskell.

<comment><USER9> Not that unusual, though there are some subtle differences in what C++ templates can do.</comment></comment>


Shopify's Frenzy – Sell to the most loyal customers in a new way - <AUTHOR> https://getfrenzy.co/ <comment><USER2> you guys need to read up on QA

The only way to use it between launches is to delete app and re-download from the app store

And the only way to figure that out was to follow them on twitter, 4 minutes before the launch. Anyone else just couldn't open the app

Awesome work guys, how about testing on "normal" products before asking companies to give you their most important launches of the season

</comment><comment><USER3> I think this is a brilliant move. I've seen people lining up around the block at the sneaker shop near my house for a new release, so I'm sure there is the online equivalent.

<comment><USER4> It happens online as well, some people build "snipe" browser plugins to put shoes into baskets as fast as they become available.

These scripts are used both by fans and resellers, but there is another angle: The developers behind the plugins include their own reseller-id in all orders, so they get a bit of money for every sale.

The reseller ids is given to these developers, which makes me think that the brands are in on it as well, they don't care who buys the shoes, as long as they sell them, and they maintain scarcity.

</comment></comment><comment><USER5> Hello! I'm Tucker, Product Manager on Frenzy.

Frenzy came to be from one of Shopify's quarterly hackdays projects, with the goal of changing flash sales for both merchants and consumers forever.

Frenzy is the best way to buy from brands you love. Whether you're looking to buy rare products, discover new ones, or learn about new brands, Frenzy is the place to do it. Rather than waiting in line at a retail store, missing out online, or simply forgetting about a sale – Frenzy puts the hype of the best product releases in your pocket. When you buy from a seller on Frenzy, it's just like buying from them in person – but you can do it anywhere in the world.

Frenzy will be launching this week with merchants Kith, Love Your Melon, Raised by Wolves, Off the Hook, and more, who will be selling products exclusively on the app.

Happy to answer any questions!

<comment><USER6> > Rather than waiting in line at a retail store, missing out online, or simply > forgetting about a sale – Frenzy puts the hype of the best product releases > in your pocket.

So I was attempting to decipher this sentence, which while apparently written in English, appears to be incomprehensible. I've identified the subject as "Frenzy" and the verb as "puts" and the object as "hype" but then I got a little lost and wandered off.

In all seriousness, learning how to present product in way that's free from content free superlatives and meaningless phrases will help greatly in communicating with customers.

<comment><USER7> Would it help you if they phrased it as "Frenzy helps their clients grow their business by delivering results-oriented digital solutions?"

I do not think anyone working for a 'digital strategy firm' should be the first to throw stones.

<comment><USER6> Seems to me that the opinion of someone running an agency that, among other things, implements Shopify integrations, would fall under the general category of customer feedback.

<comment><USER8> I hope you two know each other IRL. If not, maybe you should - you both have a good sense of grammar. And humor.

Made me laugh, at least...

</comment></comment></comment></comment></comment><comment><AUTHOR> Here is the news coverage: [https://techcrunch.com/2016/11/22/shopifys- experimental-prod...](https://techcrunch.com/2016/11/22/shopifys-experimental- product-shop-launches-flash-sales-app-frenzy/)

</comment><comment><USER9> I see that it's iPhone only. Does anyone know if they are making an Android app?

<comment><USER10> Yes, the team did an AMA on /r/sneakers yesterday: [https://www.reddit.com/r/Sneakers/comments/5e5d9a/ama_were_t...](https://www.reddit.com/r/Sneakers/comments/5e5d9a/ama_were_the_team_behind_frenzy_ask_us_anything/da9tvjn/?st=ivv33gyy&sh=1318be75)

Disclosure: I'm at Shopify, but not part of the Frenzy team.

</comment></comment><comment><USER11> Seems to be like ibood.com but as a service. Really like the ibood concept as its European based, a lot of the deals you see online are exclusive to the US, hope that won't be the case with getfrenzy

</comment><comment><USER12> Ottawa tech :)

</comment><comment><USER13> I wish Amazon used this for their sale of the Classic NES ([https://techcrunch.com/2016/11/11/nintendowned-amazon- sells-...](https://techcrunch.com/2016/11/11/nintendowned-amazon-sells-out-of- nes-classic-editions-in-null-seconds/)) flash sale.

<comment><USER5> That would be sweet!

</comment></comment><comment><USER14> Damn. Wonder if we'll see any merchants using this on Black Friday.

<comment><USER15> Shopify has been piloting the app with retailers that have the same target market as Restocks (YC W16).

The first pilot was with Kith in October sometime and now they're definitely doing some Black Friday stuff and are launching Yeezys for Off the Hook today.

</comment></comment><comment><USER16> This seems oddly worded:

"With Frenzy, there's no limit to your sales volume, the number of products you can sell, _or the bandwidth you need._ " [emphasis added]

<comment><USER17> Let's not get pedantic! Sales of limited-stock goods will ideally run their course in a super short span of time. For example if I am running a Magento site and am anticipating 100k+ visitors per minute, then I have to start worrying about the need for load balancers, etc. Shopify removes this burden. I think it's clear that that's what they're saying.

</comment></comment><comment><USER18> This sounds exciting specifically for selling tickets to anticipated events. The amount of servers crashing under load is too damn much in my experience.

<comment><USER5> Thanks! We hope to ease some of that pain soon.

</comment></comment><comment><USER19> This looks cool. Shopify seems to be one of / the most competent players in the eComm space. Wonder if it will pan out successfully.

<comment><USER20> Shopify is the best, but it's not a high bar. I've been on the platform for almost 7 years. I have two major issues:

1\. They're still lacking some major features imho (ability to sell in multiple currencies, can't put tracking JS on checkout pages, access to payout reports for bookkeeper, got lots more)

2\. They do terrible product marketing - no email about newly launched features. In an extreme case, they launched a feature that sent emails to customers when their order was out for delivery, delivered, etc. Problem is that I was already using an app for that, so when they launched the feature and enabled it by default without letting me know, customers got _two_ emails telling them their order was out for delivery, delivered, etc. It was a __terrible __customer experience (for us and for our customers) and I can 't imagine how that decision was made. ("Hey, want to enable this feature that sends more emails to our customers' customers without announcing it? Yeah? Great!")

<comment><USER21> >>can't put tracking JS on checkout pages

Holy shit, that sounds awful. How do you perform conversion optimization if you can't do tracking on checkout pages?

<comment><USER22> [https://help.shopify.com/themes/customization/order- status/a...](https://help.shopify.com/themes/customization/order-status/add- conversion-tracking-to-thank-you-page)

They try to make it slightly harder to write a store that steals credit cards.. not a terrible thing..

<comment><USER20> Thanks, will look. Last I checked you could put a tracking pixel on the confirmation page that appeared after a purchase was made, but not in the intermediate checkout steps.

If this is possible it's another example of poor product marketing: I've asked for this feature multiple times via email and forums over the last 6 years, and I hear about it from HN? That's a broken experience for a customer who's paid them approaching 5 figures.</comment></comment></comment></comment></comment>


The Fitness Shift That Should Worry Every Gym Owner - <AUTHOR> http://www.wsj.com/articles/the-fitness-shift-that-should-worry-every-gym-owner-1485000002?mod=e2fb <comment><USER2> I wish i could read this. Is there a legal way to post the article in a comment? Not sure.

<comment><USER3> The "web" link (which finds the article via a Google search) usually allows paywalled WSJ articles to be read, but it's not working for me today.</comment></comment>


$6B+ subprime auto lender has solvency questions [pdf] - <AUTHOR> https://www.plainsite.org/realitycheck/cacc2.pdf <comment><USER2> Wow time to short if possible.</comment>


The Capacitor Plague - <AUTHOR> http://www.deadprogrammer.com/the-capacitor-plague

<comment><USER3> Electrolytic caps typically have low lifespans compared to other types of caps, especially over larger temp ranges.. even with proper construction.

When I use to do design for circuits that needed a long lifetime I would _really_ question any use of electrolytic caps.

<comment><USER4> what would you use? tantalums? ive have the joy of recovering old equipment with dried tant caps on the power rails. (23 of 'em!) maybe tants are made better these days...

<comment><USER5> In _some_ cases you can use ceramic capacitors instead of electrolytic ones. I've done this exactly because I don't trust electrolytic capacitors to be anything more than big and cheap.

<comment><USER4> for a PC switching power converters, such as in this article?

sooo...where are you buying these mystical 2200uF ceramic caps? :)

</comment></comment></comment></comment><comment><USER6> On the positive side, this has led to some improvements, at least in the motherboard market. I've seen both Asus and Gigabyte market motherboards with "High Quality" "100% Japanese" capacitors.

</comment><comment><USER7> This almost ruined my company... I still have nightmares about it.

<comment><USER8> Not to dig up the dark past, but could you share more. I'm interested.

</comment></comment><comment><USER9> I once bought a set of monolight strobes (for photography) made by a respected brand name (Bowens.) Every unit in the set failed shortly after the 1-year warranty due to failure of the electrolytic capacitors in the power supply. I used these lights heavily, so for other users, they might last two or three years. That's still a remarkably short time to failure for this kind of component.

<comment><USER10> A friend has an Apple iMac G4 that they paid a shed-load of cash for and expected to last well - it nearly made 3 years. The point of failure? Electrolytic caps in the [overheating] graphics card. The card is soldered in on the screen side of the mobo.

<comment><USER11> I think this is a known issue that Apple will fix, however. I remember reading something related to Apple fixing bad caps in iMacs, anyway...

<comment><USER10> They did change the caps from what I've read (there was a court case about it in the US I gather) but the real fix on teh iMac was putting ventilation holes in! Who'd have thought. Damned form over function. Also I gather they use slot mounting GPUs now?

</comment></comment></comment></comment><comment><USER12> Is this a long running problem? I remember reading somewhere that most of the problems with old hi/fi and tv electronics were due to bad capacitors which can easily be replaced.

</comment><comment><USER10> I assumed that they were carefully designed so that the electrolyte would go off just out of warranty (no I'm not kidding) and force a resale.

Perhaps electronic manufacturers that are big enough could have a state mandated "cost of parts and _actual_ labour costs" repair service.

<comment><USER13> actual labor costs quickly make repair more expensive than replacement.

<comment><USER10> Yeah, call out charge for washing machine repair is around £100 (minimum), actual cost is travelling 14 mi (at most where I am)@ 50p (that's the reclaimable amount for mileage) plus the "engineer's" hourly amount for perhaps 2 hours (I'm going with £25 per hour gross). So not £157 but £57 - <USER2> company absorbs the downtime costs of callout personnel - this would make a whole heap of difference in whether it is worth repairing ones washing machine.

</comment></comment></comment><comment><USER14> For about 6-9 months in 2006 We had a series of Dell Optiplex GX 270s that had a remarkable failure rate - close to 60% of our systems failed. We knew that Dell must have been having a tough time, when the FIRST question they asked on a support call was whether we saw any "Bulging Capacitors on the Motherboard" - I mean, not "Have you Tried Rebooting", or, "Have you tried powering down for 90 seconds", but "Do you have bulging capacitors."

I'll say this for Dell though - they fixed every last one of those systems within 4 hours of our call.

I have to wonder whether Large Manufacturing organizations are aware that there is a good chance that going with subpar capacitor manufactures will cost them, but do so anyways because of the amount of money they save.

<comment><USER15> How did they fix a hardware failure in 4 hours?

Telekinesis? Teleportation?

Is there something I'm not understanding?

<comment><USER16> Enterprise customers can get hardware replacements same-day.

<comment><USER17> When I worked for $BIGCORP we'd get hardware failure calls from IBM to the tune of " _server_ just phoned in with a drive failure, that part's not in stock locally, a plane left Atlanta with the part 15 minutes ago."

It was damn slick.

</comment></comment></comment></comment><comment><USER18> So, for hardware manufacturers, is there any reliable way to identify good quality caps?

<comment><USER19> Test them under ridiculous load. 120% of peak voltage, _huge_ ripple, let them get nice and toasty. The bad caps will pop in minutes, a good one can survive for weeks.

The problem is that the prototypes you get from your Chinese manufacturer will be made with top quality Japanese components. They'll switch them for the cheap junk later while you're not looking, about a 10th of the way into your 1 million unit production run.

</comment></comment><comment><USER20> Interesting post, I never knew about the Capacitor Plague! Will be sure to remember it.

<comment><USER21> Marginal (although not always illicit; sometimes just marginally spec-ed) capacitors have long been an issue including in consumer electronics.

As an example, the Mac Plus power supply was notorious [well, at least if you were repairing them] for failing. Some people put out instructions for upgrading it by replacing a subset of components including IIRC certain capacitors.

I've also read accounts of people improving the output e.g. of cheaper CD and DVD players, by replacing certain components particularly in the post DAC circuitry, again including capacitors, with better quality/rating components. I've never experienced this first hand, so I can only pass on second hand anecdote.

<comment><USER11> This is indeed true. Some (all?) amp designs place resistors and capacitors in the signal path. This distorts the sound. For one channel, that would be fine, since the distortion is usually just a phase shift that you won't notice. (Play a song. Then play a song but start it 1ms after you were planning to start it. It will sound fine both times :)

The problems start to show up with stereo, though, where you have two channels to deal with. When you use low-quality components, the phase shift can be significantly different between the two channels. (Components have a, say 10% value tolerance. If one channel is +10% and the other is -10%, you have a problem.)

This difference destroys the phase information between the two stereo channels, resulting in poor "imaging".

When you replace the 10% tolerance components with 1% tolerance components, you lose the phase distortion, presumably increasing sound quality.

(I am not an EE, but I have built a lot of headphone amps. The sad part is how people with $1000 amplifiers often have worse components than an amp built from $30 worth of parts. Ah, the free market...)

<comment><USER11> Also, I now have a sudden urge to build another headphone amplifier... :)

<comment><USER21> Glad to be of service. Hmm... and since you seem to know your way around them, do you take orders?

(Another startup born on HN! ;-)

<comment><USER11> I did for a while. I am not sure I am knowledgeable enough to do a good job anymore, however.

If you are ever in Chicago, we can have beer and I will teach you how to build an amp :)

<comment><USER21> Far north suburbs. I've been a recluse, lately, but maybe when things pick up for me, I'll see you at one of the HN meetings. (Didn't realize until now that you're in the neighborhood.)

</comment></comment></comment></comment></comment></comment></comment><comment><USER22> So basically, this, plus looking at the pics he links from the over clockers forums leads me to this conclusion.

You should buy

         A whole house surge protector
         A really nice UPS supply with a lead acid battery that does line cleaning for your computer equipment.

Doesn't solve the real problem, but at least saves a significant amount of hassle... Why systems survive so well in a proper colo environment over most homes. (Aside from air particles and temperature).

<comment><USER23> That is a different sort of ripple. Your big electrolytic capacitors are used in the AC/DC conversion where the rectified sine wave is smoothed into a constant voltage.

      |                           |
      |  _   _   _         ===>>  |
      | / \ / \ / \ /             |</comment></comment><comment></comment><comment>--
      +V---V---V---V-             +</comment><comment></comment><comment>---

The capacitors store energy during the peaks and return it during the troughs. The ripple is the current in and out of the capacitor which heats them and does "stuff-I-don't-understand" to their chemistry.

The article complains that some capacitors don't last their 4000 rated hours. But even if they do, 4000/24 is 167. All of your electrolytic capacitors are tiny time bombs.

<comment><USER24> It looks like lifetime is specified in hours of life at a high temperature - e.g.:

[http://www.rubycon.co.jp/en/catalog/e_pdfs/aluminum/e_BXF.pd...](http://www.rubycon.co.jp/en/catalog/e_pdfs/aluminum/e_BXF.pdf)

Lifetime is specified at 10000hrs at 105deg C.

As temperature decreases, lifetime appx doubles per 10deg C:

<http://www.low-esr.com/endurance.asp>

It looks like a cap rated at 4000h @ 105deg C should last around 60 years at 100deg F or so. Anecdotally I have a guitar amp made in the 60s with the original electrolytics still working. Sounds great.

<comment><USER25> As per my other comment on this thread, you can intentionally decrease the lifetime (aka MTBF) by running the part at 10 or 20% overvoltage, in addition to extreme temp, to create a corner case and stimulate premature failure in reasonable amount of time. 20% overvoltage won't kill the cap, as any part has absolute maximum ratings well beyond what the spec sheet says. Even bad caps have some degree of guard band, else they would never leave the factory.</comment></comment></comment>


Korean Messaging App Has More US Users Than Path - <AUTHOR> http://pandodaily.com/2012/07/06/what-does-this-korean-messaging-app-think-its-doing-with-more-us-users-than-path/

<comment><USER2> I live in South Korea and use KakaoTalk ("Katok"). I haven't exchanged phone numbers with a Korean in the past year who didn't already have the app.

I know because the moment I add a phone number to my iPhone address book, KakaoTalk notices it and adds that user to my contact list, along with their photo.

Everybody has a KakaoTalk photo, many have 4 or 5. I haven't been able to figure out how they do that. I can only find the setting for one user pic. Perhaps they do it with the associated app, kakaostory, which is sort of like a blogging engine on top of the Kakao platform, if I understand it.</comment>


The Era of 'Founder-Friendly' Startup Investing Is Over - <AUTHOR> http://fortune.com/2017/08/14/founder-friendly-startup-investing-is-over/ <comment><USER2> TL;DR: The article offers no evidence that this has started to happen but raises the sensible point that Uber, Snap, and Blue Apron are all poster children for "founder-friendly" terms run amok.</comment>


Delivering useful software - <AUTHOR> http://gojko.net/2008/04/28/delivering-useful-software/

<comment><USER2> Good article. It gets at one of the more difficult nuts to crack in Agile development-- how to organize the project so as each iteration produces actual business value to the end-user.</comment>


Ask HN: Remote desktop into personal machine from work machine to start startup? - <AUTHOR> It's clear to me that work resources should not be used at all when starting a new company. (Or, for that matter, for anything that isn't work related.)
However, dealing with multiple machines can be somewhat of a headache. What would the law say about using a work laptop, when at home, to remote desktop into a personal machine?
I imagine that most people here will advise against this. But where does the line get drawn? Am I allowed to access my personal Gmail account from my work machine, or would accessing my Gmail account from my work machine render every email in that account (including those pertaining to a new company) as work property?
I'd love to better understand the extend to which complete and total separation is necessary: including separate accounts of all sorts (email/Dropbox/Evernote/etc.) and never opening the wrong account on the wrong machine. <comment><USER2> Just don't do it.

If you are creating a startup, particularly if it is in any way related to your current work then the clear answer would be to never use any work computers in any part of the startup.

Your workaround of just remote desktop'ing into your machine is not a good idea. Personal emails is one thing, but if you use your work computer for emails that are part of your other startup then you are tainting your new business.

</comment><comment><USER3> I suppose you are currently an employee at a company. You want to start your new business. You are working on "the private" project while working for the company. Your question is "Can I use my work resources for the private project?"

All lawyer will answer "It depends". It depends on the contract you have with the company. Usually any output generated from the work machine is considered the IP of the company, not yours. In work contract, usually this is clearly stated.

So the first thing to check is your contract :)

</comment><comment><USER4> I'd advise against this unless you've cleared it with your lawyer. If you start a successful business, you wouldn't want to lose it because of some stupid legal technicality.</comment>


Innovation in the Enterprise Is Coming from the Corp Labs Not Only from Garages - <AUTHOR> https://medium.com/@jrodthoughts/innovation-in-the-enterprise-is-coming-from-the-big-corp-labs-not-only-from-garages-b1c29442855b#.nquwlgn8g <comment><USER2> To me the true test of innovation is the product that makes 100 m - 1 b but replaces a product/market that made 1-10b. Those are the products/services the tech companies aren't going to be looking at.

</comment><comment><USER3> Google's acquisition of DeepMind was just that - an acquisition. So that runs counter to Rodriguez's thesis.</comment>


WebGL interfaces discovered in leaked Internet Explorer 11 build - <AUTHOR> http://www.gamedevnews.net/news.php?id=10

<comment><USER2> Next: adding built-in OpenGL support in Windows.</comment>


(def newsletter) – a weekly Clojure newsletter - <AUTHOR> http://defnewsletter.com/

<comment><USER2> Unfortunately some of the links in issue 2 are broken

<comment><USER3> There's some sort of systematic bug where many of the titles go to <http://script.google.com/undefined> but in all those cases there's a useful Code link a little lower.</comment></comment>


Ask HN: My employer is asking me to copy proprietary code - <AUTHOR> This is an anonymous account. I'm not seeking legal advice, just options to explore.
I have access to the code base of a company undergoing liquidation. My new employer (who took over the client base and some of the employees of the company being liquidated) is asking me to copy the code base on to their servers so that they can service these clients.
As far as I know, my employer has tried to negotiate terms with the owner of the code, but hasn't secured anything yet. It boils down to that my employer wants it for free, and the code's owner wants to charge a fee to help pay off debts before final liquidation.
What are my options? Can they force me to do this? Can they fire me if I don't? I have already resigned, and will be joining a new company on the first, but can they legally withhold my salary if I refuse to do this? <comment><USER2> "Ah, boss, that thing you're asking me to do is, technically speaking, theft. In addition to exposing us both to liability, if it is ever discovered, for example when a potential acquirer or large corporate customer does a line-by- line source code audit like they frequently do, our company is finished."

Boss plays ball: "Great, glad we're on the same page."

Boss directs you to steal it anyway Option A: "OK boss, if you're sure it's OK, I'd like you to send me a written email or memo instructing me to copy this code from their computers to our computers. You should CC it to $OWNER so that he knows we've taken action on the IP agreement we made with him, or if you'd prefer I can forward him a copy."

Boss directs you to steal it anyway Option B: "Alright boss, push or shove time. You can, probably, convince someone here to copy that code for you. If you do, I will hand in my resignation immediately. Think it over."

Boss directs you to steal it anyway Option C: "I quit, effective immediately."

n.b. In many US states you can get fired for just about anything, including "no reason at all." Regardless, the market for engineers is super hot right now. Work for someone who isn't an abusive jerk, because you're highly likely to find that he is not solely abusive to business partners.

n.b. #2: It is almost impossible in the US to get away with withholding salary for work already performed. One complaint to your state's labor relations board and he'll wish he had never been born. This assumes you have an employment relationship with the new evil boss. If you're working without a contract (don't ever work without a contract), you're probably best served by just writing off the three days or whatever you have invested in this job.

<comment><USER3> Technically speaking, and in the US, it's copyright infringement and not theft.

Dowling v. United States (1985) says "Since the statutorily defined property rights of a copyright holder have a character distinct from the possessory interest of the owner of simple "goods, wares, [or] merchandise," interference with copyright does not easily equate with theft, conversion, or fraud.

<comment><USER2> I know you want to make a statement about piracy not being bad as theft, but you're wrong here.

The Economic Espionage Act makes theft of trade secrets a federal crime. The act defines a trade secret as "all forms and types of financial, business, scientific, technical, economic, or _engineering information, including_ patterns, plans, compilations, program devices, formulas, designs, prototypes, methods, techniques, processes, procedures, _programs, or codes, whether tangible or intangible_ and whether or how stored, compiled, or memorialized physically, electronically, graphically, photographically, or in writing if the owner has taken reasonable measures to keep such information secret, and the information derives independent economic value (actual or potential) from not being generally known to, and not being readily ascertainable through proper means by, the public. The act defines owner as "the person or entity in whom or in which _rightful legal or equitable title to, or license in_ , the trade secret is reposed.

So: regardless of what sophomoric opinions you have about copying music, copying trade secrets really is, in black letter federal law, theft.

<comment><USER3> Huh? Where did I ever imply "not as bad"? The previous poster said "technically" and I thought I would be a smart-ass by saying "well _technically_ ...".

In any case, given the description here, how do you determine that theft of trade secrets is also involved? Pretend I'm a sophomore who doesn't know better and who can quote Wikipedia that a trade secret "confers some sort of economic benefit on its holder (where this benefit must derive specifically from its not being generally known, not just from the value of the information itself)". :) What's the implied trade secret above and beyond that of the copyright?

(Also, have you established that this crosses interstate lines? Otherwise the Economic Espionage Act does not apply and you need to deal with state trade secrets laws. OTOH, given the federal reach of the interstate commerce clause in Gonzales v. Raich, I realize that this is not a strong counter question.)

<comment><USER3> Okay, how is this worth -2? 0 I can see, but several others downvoted as well.

I seriously don't see how trade secret law applies to this case. Trade secret law rarely comes up in the context of software, so please treat this as a chance for education, not downvoting.

</comment></comment></comment></comment></comment><comment><USER4> I don't think anyone is actually reading the whole question. The OP has already resigned, leaving in 2 weeks. He is asking what to do in the interim.

This is not legal advice:

1\. Good for you, sticking to your principles and quitting.

2\. They can try to force you, but you don't have to do it.

3\. They can't hold salary for this, they might try, but they will loose.

4\. They can however, fire you on the spot, not letting you work out your notice. You won't get paid for the next two weeks you would have been working. (Some states differ)

<comment><USER5> I would think the ethical thing to do would be to inform the code's owner of this attempt, though you may wish to consult a lawyer on the best way to go about it.

</comment></comment><comment><USER6> I think it's pretty straight forward. You're being asked to steal. You don't want to steal. So don't.

Sometimes standing up for what you believe to be right is a costly stance to take, or at the very least difficult.

If the worst case is that you get fired...well you were leaving anyway. What's to be lost? Even if for some bizarre reason they did withhold your salary, I'd personally rather than that be an accomplice to their wrong doing.

</comment><comment><USER7> You are not being paid to steal, nor did you agree to do so when you joined the company. Your employer cannot legally withhold your salary for not doing something illegal. That being said, if they want they could find some other reason to do the same.

You should ask them to send you an email, detailing what they want you to do and you can respond to it. I think they will get the message and probably will refuse to do so. But at-least you will have some leverage in case they deny it in the future.

<comment><USER8> If they "find another reason", I would think -- but IANAL -- that you would have a pretty strong case for a lawsuit.

Whether you would want to go that route is another question. But if they ask/tell you to do something illegal -- and you can document this -- and then fire you after you refuse, I imagine most courts/judges/juries would look upon this pretty unfavorably.

I further speculate that it might even rise to the level of criminal prosecution, if it was high profile enough. Probably, though, most prosecutors would pass it by.

Basically, though, I agree with other comments here. For a couple of weeks' salary, it's not worth it. Borrow the difference from family/friends if you have to (and make a note to self to maintain a "rainy day" balance, in future). Be grateful you already have something else to move onto, meaning also a "secured" future paycheck.

Just, also, beware of any damage your current employer might try to do to your future position/employment, if they are the vengeful type. Ideally in this case, they would not know of or where your next position is.

</comment></comment><comment><USER9> It depends on your situation. If you can afford to loose your job (so you can find another one) just stand up for the right thing.

</comment><comment><USER10> Walk. Now!

Your reputation isn't worth two week's salary.

And you will be the one thrown under the bus.</comment>


Illuminating the Raspberry Pi with Mathematica - <AUTHOR> http://wolfram.com/broadcast/video.php?channel=105&sortBy=date&video=1571

<comment><USER2> Interesting, product not released yet and with that I wonder what they will charge for the software given the current student flavour is £96 for other systems. Mention of access to the preview version for free are mooted in the video.</comment>


EpicEditor – An embeddable JavaScript Markdown editor - <AUTHOR> http://epiceditor.com/ <comment><USER4> "Because, WYSIWYGs suck"

I think this is a bit short sighted. I like Markdown and I'll eventually integrate it into my product, but to discredit the usefulness of WYSIWYG would be foolish. Maybe there is a lack of good implementations for it to show any value. I'm currently evaluating redactor ([http://imperavi.com/redactor/](http://imperavi.com/redactor/)) as my WYSIWYG editor and I've been happy with it so far.

For example this is how I render the html that is generated by redactor:

[http://screenshots.gitsense.com/wysiwyg-1.html](http://screenshots.gitsense.com/wysiwyg-1.html)

If you click the edit button on the bottom right hand corner, it'll bring up the WYSIWYG editor:

[http://screenshots.gitsense.com/wysiwyg-2.html](http://screenshots.gitsense.com/wysiwyg-2.html)

And if I need to do a complex layout like the one in the screen shot, redactor lets you edit in raw html, as shown below:

[http://screenshots.gitsense.com/wysiwyg-3.html](http://screenshots.gitsense.com/wysiwyg-3.html)

If you are working on a product and believe Markdown is the only way to go, you'll probably do yourself and your customers a disservice.

<comment><USER5> wysiwyg is fundamentally flawed because the web is not wysiwyg. And HTML is a semantic description of content, not its formatting. We fought long and hard for that to be recognised, only for people to come along and try to derail that effort with wysiwyg editors.

Case in point: the markup in your final link is terrible: tables for layout, inline styles, DIVs containing nothing by BRs, etc. I could never sanction the use of an editor that produces that kind of garbage.

Don't get me wrong, Markdown is not the solution either. For the novice, it shares the same sort of cognitive barrier as HTML - confusing symbols that take time and effort to understand, the whole notion of plaintext being rendered as formatted text - without the huge benefit of flexibility - <USER2> things just can't be done in Markdown.

I don't really know what the solution is, but - in my experience - <USER3> the problem set from a general purpose editor to do 50% of what HTML does, to context-specific 'wysiwyg-like' editors is a step in the right direction.

<comment><USER6> The only sane solution I've yet seen is WYMeditor[1]. All the ease and immediacy of WYSIWYG, but producing proper standards-compliant code with the classes you choose. The code's not brilliant (having Rangy mixed in to cope with legacy IE annoys me), but the concept is so far ahead of anything else that I now use it pretty much exclusively for in-browser editing; as a professional writer I could never rewire my habits to the obtrusive markup of Markdown.

[1] [https://github.com/wymeditor/wymeditor](https://github.com/wymeditor/wymeditor)

<comment><USER7> Too bad it looks kinda ugly. Example: [http://wymeditor.github.io/wymeditor/dist/examples/01-basic....](http://wymeditor.github.io/wymeditor/dist/examples/01-basic.html)

<comment><USER4> I think these things are quite easy to fix. I definitely prefer redactors look, but being able to see each container is actually quite nice. You sort of have use your imagination when it comes to layout spacing, but I think this route is definitely better.

</comment></comment></comment></comment></comment><comment><USER8> Whilst I do enjoy the idea that is a Markdown editor, I think one of the main feature missing from this and most(?) is the ability to continue bullets and code indentations. Shameless plug I know, but that is why I built and use the following when editing Markdown in a textarea:

[https://github.com/jamiebicknell/Markdown- Helper](https://github.com/jamiebicknell/Markdown-Helper)

</comment><comment><USER9> I feel like a lot of Markdown editors get posted on HN. Some of them seem pretty cool, but it gets hard to keep track of them all after a while. Has anyone tried keeping a running list of these editors with their pros and cons?

<comment><USER10> I maintain an inventory¹ of Markdown dialects, editors, parsers, stylesheets, etc. — basically just some lists with links. They're in YAML, though, so you may want to add extra info (like a short description with pros/cons), and file a pull request. I am considering to split the list of editors² into one for native apps, and another for web-based implementations (such as EpicEditor).

[¹] [https://github.com/rhythmus/markdown- resources](https://github.com/rhythmus/markdown-resources) [²] [https://github.com/rhythmus/markdown- resources/blob/master/m...](https://github.com/rhythmus/markdown- resources/blob/master/markdown-apps.yml)

<comment><USER11> by the way, thanks for maintaining that fantastic resource!

-bowerbird

<comment><USER10> Thanks!

By the way: I'm very curious about your "zen markup language" in the make. Got some unfinished work in my drawers on "the best possible tool for writers", too. Some more research, wireframes, and a few drafts on an _extensible_ markdown-like lightweight markup language. E.g. this little discussion: [https://twitter.com/rhythmvs/status/423123272809455616](https://twitter.com/rhythmvs/status/423123272809455616)

I sympathize with the idea of poet-turned-programmer. Maybe have a chat?

</comment></comment></comment></comment><comment><USER12> I looked at this a while back, it's big and bloated. Despite having no real UI it requires jQuery UI... I don't understand.

<comment><USER13> > Despite having no real UI it requires jQuery UI

Where?

        $ git clone https://github.com/OscarGodson/EpicEditor.git
        Cloning into 'EpicEditor'...
        remote: Reusing existing pack: 2951, done.
        remote: Total 2951 (delta 0), reused 0 (delta 0)
        Receiving objects: 100% (2951/2951), 1.53 MiB | 192.00 KiB/s, done.
        Resolving deltas: 100% (1392/1392), done.
        Checking connectivity... done.
        $ grep -ir jqueryui EpicEditor/|wc -l
        0
        $

</comment></comment><comment><USER14> Looks like the same one used in Telescope, the Meteor app: [http://demo.telesc.pe/posts/a05eba73-cdd9-4d64-933d-2586ffc5...](http://demo.telesc.pe/posts/a05eba73-cdd9-4d64-933d-2586ffc58739)

<comment><USER15> It is :)

</comment></comment><comment><USER16> I don't understand in what sense it's an MD _editor_. It's an MD previewer all right. But no smart indentation (no Tab/Shift+Tab either). No syntax highlight. I can't find a single feature which helps me actually editing markdown.

P.S. Auto-saving in localStorage is a cool though.

</comment><comment><USER17> The text seems old, it mentions posterous and didn't that shut down a while back?

</comment><comment><USER18> Tab doesn't work.

</comment><comment><USER19> Just what I needed! Thanks.

</comment><comment><USER20> Very lame! This is much better, splitscreen, full screen, markdown, html code, or preview view. [http://markdown.pioul.fr/](http://markdown.pioul.fr/)

<comment><USER21> You created an account just to say that?</comment></comment>


Google should buy RIM - <AUTHOR>

According to this report http://www.businessweek.com/magazine/the-biggest-ip-war-chests-08042011-gfx.html RIM has the biggest I.P. war chest in mobile (more than Microsoft or even Nokia). With a current market cap of about 12 billion US$ it would be "only" 3 times more expensive than the Nortel patents but would bring much more to the table than just patents (RIM is stil pretty profitable and could help Google significantly in the attempt to gain more corporate clients). <comment><USER2> Yes, that's what I was immediately thinking too when I saw that. RIM is still quite expensive though, and unless they plan on turning RIM around and getting a strong foothold in enterprise with Android within like a year, then $12 billion seems too expensive for patents.

This also reminds me what a mistake Google did when they didn't buy Palm. They could've paid _only_ $1.2 billion for their huge mobile patent chest (probably about as big as RIM), their WebOS technology, which I'm sure they could've used, and also 1000 employees, where many of them were engineers. Palm would've been a total bargain for Google.

With RIM, Google has 2 strategies:

1) Get them now by spending 1/3 of their cash, and immediately switch the company to Android. If they move it fast and do it right, they have the opportunity to make Android bigger in enterprise than iPhone will ever be. With RIM, they also have the opportunity to make a _lot_ of money from hardware - maybe close to what Apple is making. The downside is some Android partners may not be too happy about this, but as long as they remain fair towards them and give them access to Android no later their their own RIM division, I don't think they'll mind it too much. They'll still want to use Android because Android is still the most popular smartphone platform they can use by far, right now. It's not much different than if Microsoft bought a PC manufacturer.

What I'd love about it as a consumer, is that there would be a strong manufacturer, Google's no less, that will make great stock Android smartphones.

2) They can let RIM collapse, and buy them in 2013 for much less just for their patents, maybe for 2-3 billions or so.

Either way they have to take into account that others, like Microsoft might bid for them, too, although I'm not entirely sure Microsoft will buy them right now, after their partnership with Nokia. And at least Android has 50% market share, while WP7 has 1%, so Microsoft's other partners besides Nokia might leave them altogether. And then if Microsoft can't turn WP around with the fast declining RIM, and the even faster declining Nokia, they're gone from the mobile space, and they'll take both RIM and Nokia with them. Google buying RIM at its peak is one thing, Microsoft buying it when WP hasn't even become larger than WebOS, is quite another. Why would the others stick around for an OS that doesn't bring them any significant sales, and when Microsoft will play strong favorites with Nokia and of course RIM, which would be theirs?

<comment><USER3> I'm sure that Google could turn RIM into Google North and do quite well with the people alone. The patent portfolio and the technology wouldn't hurt either.

</comment></comment><comment><USER4> The trick, strategically, would be arranging to do this without having the transaction turn into yet another bidding war --- which they'd be at risk of losing once again to a coalition of their adversaries (as with the Nortel patent auction).

Perhaps they could arrange a coalition of their own, involving IBM, or one of the other phone manufacturers as the ones who would take over the actual phone business...

<comment><USER2> I was actually very surprised they didn't do this to begin with in the Nortel case, especially since the patents being bought would've helped all of them. The risk was simply too high for Google even if it was only Apple bidding against them, without all the others. Apple has twice as much cash as they do, and if Apple really wanted the patents, there's nothing Google could've done.

They need to set up a patent pool with their Android partners, and then start bidding together for other patents as well. This would probably be the most effective strategy that they can relatively quickly implement.

As for buying RIM together with other companies, I suppose Google could spend a big part of their money to buy it, and then they'll sell the hardware division to Samsung or whoever, the other divisions to other companies, and keep only the patents for themselves. But they'll have to make the deals prior buying RIM, so they can make their money back later.

</comment></comment><comment><USER5> Guess it won't happen now, Google just bought Motorolla for (about) the same price they could have bought RIM: [http://techcrunch.com/2011/08/15/breaking- google-buys-motoro...](http://techcrunch.com/2011/08/15/breaking-google-buys- motorola-for-12-5-billion/)

</comment><comment><USER6> Google buying RIM would make the other Phone companies very unsettled</comment>


2048 on 8-bit Sega Systems - <AUTHOR> http://www.smspower.org/forums/viewtopic.php?t=14698

<comment><USER2> To put things in perspective, this is a system with a 4MHz CPU and 8K of RAM, and has roughly the same compute power as an Arduino. Good example of how you don't need multi-GHz processors and tons of memory to do something interesting and entertaining.

</comment><comment><USER3> What's the big deal? This has been on android for ages.

<comment><USER4> 1) It's a port to a platform a lot of people remember fondly.

2) It's a port to a platform that is a little bit more arcane.

<comment><USER5> Z-80 ASM is arcane? Well, it is also has custom audio and graphics.</comment></comment></comment>


Ask HN: Vendor Agnostic Email SaaS - <AUTHOR> Since sendgrid is down (https://status.sendgrid.com/) ... again, does anyone have a recommendation on a service that will abstract sending emails.
We'd like a service that would present a single mail sending API, and automatically distribute outgoing emails between different providers (that we have accounts with individually).
It doesn't need to send the email itself, just act as a 'load balancer' for outgoing emails and detect when a given provider is having issues.
Bonus points if it can detect deliverabilty issues and adjust accordingly. <comment><USER2> Awesome! We plan to build a solution that does exactly that. Please DM me.</comment>


Pain Points of Haskell - <AUTHOR> https://dixonary.co.uk/blog/haskell/pain <comment><USER2> As a guy who casually (definitely not in-depth) reviewed working with Haskell about 2 years ago I'd say the most relatable part of the article to me is: complexity in tooling and unnecessary tension when working with libraries. Also the String situation (several types of them).

A lot of the other points could be addressed but the community's seeming unwillingness to tackle everyday productivity sends to me the message: "Keep out!". :(

As a comparison, Elixir's Mix and Rust's Cargo are amazingly ergonomic build systems and provide all the tooling you need to work with the languages and your projects.

And hey, don't kill me. As I said, I reviewed it casually for several days while comparing it with Rust and OCaml. They aren't the easiest to start with either but Rust's tooling is excellent, OCaml's is also excellent but not immediately obvious (their docs have improved a lot), and Haskell's is... kind of there, as the article points out.

<comment><USER3> > OCaml's is also excellent but not immediately obvious (their docs have > improved a lot)

Interesting! The last time I tried OPAM, it actually seemed more frustrating than Cabal! Maybe it's improved? Last time I tried OPAM it would install packages globally by default, and avoiding that was a confusing process, when that should be the default behavior.

Cargo (while not perfect) has really nice defaults out of the box - ie. it generates a lockfile by default, scopes packages locally to individual projects, and lets you use more than one package of the same version in the same project.

Really hoping OCaml and Haskell can improve their package management story - they are getting there, but it still holds me back from really using them on a daily basis.

<comment><USER4> A bit off topic, but is Haskell viable for production? Or is it just really intended as an experiment? Is it worthwhile to jump into Haskell now, or perhaps one should look into Idris or Agda? Any companies using Haskell where it has proven a distinct advantage?

Ocaml and SML (the former being sadly quite unpopular these days) are an order of magnitude simpler than Haskell. They are easy to master. I have been quite productive with Scala which, while being a member of the ML family, is much more intricate due to OO + FP on top of great Java interop and many Haskell- like features (laziness, monads, lenses...).

Haskell doesn't feel the same. I have learned some Haskell over the years. Since I come from a pure FP education (started with SML) and I have lots of type theory background, everything feels familiar, yet I've found it really hard to be productive or to justify the mental overhead of laziness. I have developed some small projects in Haskell, but I haven't found it a productive alternative to the languages above.

<comment><USER5> To answer your questions literally without much nuance:

Yes, Haskell is viable for production. There are caveats, as with any other language. Haskell has _more_ caveats that most other languages you would be familiar, but it's nonetheless perfectly suitable in the right environment.

No, don't use Agda or Idris in production, they're totally unfit. Agda is not intended to be. Idris _may_ be but it will take 5 or 10 years.

The only members of the ML family that I'm aware of are Ocaml and the flavours of Standard ML. Only Ocaml is fit for production.

<comment><USER6> There's ReasonML, which compiles to JS and seems intended for production

<comment><USER7> Reason is a syntax layer on top of OCaml, so it shares OCaml's production- readiness. The tooling that Reason uses to compile to JS (Bucklescript) was originally designed for OCaml, and Reason supports native targeting via the plain OCaml compiler backend as well. It's a pretty pleasant ecosystem at the moment.

</comment></comment></comment></comment></comment></comment><comment><USER8> As someone who stopped following Haskell world few years ago, this was quite interesting read. I wonder what is the state of ecosystem (libraries) now: a few years ago one of my friends complained that for most basic tasks there is some library but usually half-working and abandoned.

However: I think the point about monads is fundamentally misguided. Monad is an abstract concept and trying to explain it in non-technical way (as linked from the post) will always fail. It makes as much sense as explaining time signatures in non-musical terms, or a Banach space in non-mathematical terms. I've seen this sentiment recurring every now and then; it feels like some people really want to avoid formal definitions for the sake of it, even when formal definitions make things easier. When it comes to monads, I think you can't get any better than the semi-formal definition (typeclass with return and join) plus some motivating examples. For me looking at Reader/Writer/State helped get this; I agree with OP that List is kinda weird.

<comment><USER9> I fully grok monads. I've done enough reading and usage of them to understand them.

They are not a _useful_ abstraction for programming. They're mathematically correct, but that's not the same as what an industrial engineer needs.

The big warning sign is monad transformers. Alone, monads are totally fine, but the issue is that you rarely want _one_. So you end up with this unwieldy tower of transformers that would make an enterprise Java engineer worried.

<comment><USER10> I firmly believe that monads (and monad transformers) are exactly what an industrial engineer needs, for the following important reason.

A monad describes its scope in such a way that writing code outside of its scope is a compile time error. If your code needs certain capabilities, it must invoke the computational context of those capabilities (which is usually a monad in Haskell). If it doesn't, then the context can (and should) be omitted.

It's worth noting that monad transformers are themselves monads. So drawing a distinction between "monads" and "monad transformers" to say that one is good and one bad is not very meaningful. The composability of monads, as exemplified in MTL, Transformers and similar, is a positive sign of their power and not a red flag.

If your code ends up with an "unwieldy tower" of transformers then that's a strong indication that the principle of separation of concerns has not been adequately followed. The fact that Haskell makes that evident seems to me like a benefit.

<comment><USER11> Even if you have separated concerns by having method 1 return Monad transformer A and method 2 return transformer B, you will still have to combine the results of both your methods at some point.

<comment><USER12> Sure. But if you're doing it right, that combination happens in a place whose sole responsibility is doing that combination. The only case where you have to carefully interleave A and B is if your business logic really does involve carefully interleaving two disparate effects, and in that case the complexity is genuinely there in the domain and it's good to surface it explicitly (or else you're modelling it wrong).

</comment></comment></comment></comment></comment><comment><USER13> This is a great post. However, there are so many more things that should be on here!

If I could suggest just one, it would be lazy evaluation by default, which makes it exceedingly hard to reason about time and space complexity.

Also relevant is the author's article on problems using Haskell on Arch Linux: [https://dixonary.co.uk/cabal-2020](https://dixonary.co.uk/cabal-2020)

<comment><USER14> That's not a pain point, that's a core part of the language. If you don't want that use Ocaml.

<comment><USER2> Then maybe an argument can be made that this should be front-and-center in the docs? (Note that I am not claiming anything though, haven't checked Haskell's docs in a while.)

It's also a surprise to me that you seem to say that OCaml is Haskell without the lazy eval being the default, mind expanding on that? Quite interesting.

<comment><USER15> They're similar but not really the same. The big differences are:

* Haskell is pure whereas Ocaml is not

* Haskell has a great story for parallelism whereas Ocaml does not

* Haskell has ad-hoc polymorphism (via typeclasses) whereas Ocaml does not

* Ocaml has an exceptionally powerful module system whereas Haskell does not

<comment><USER16> I've heard it best as: both Ocaml and Haskell are pure functional languages. Haskell is Extra Virgin.

That said, the notion of purity is a bit BS. At some point in your program you are definitely going to invoke the world-at-large. Whether you do it through IO(), tap your nose and call it "pure" or you do it other way is all down to semantics (not in the PLT sense of the word - the PLT term to use would be "pragmatics"). The core of both Ocaml and Haskell are pure functions.

Also, Ocaml doesn't really need typeclasses. Modules. Modules are everything

<comment><USER17> OCaml is a lot less pure in spirit as well. Not only can you read and write to the outside world without having to jump through hoops, you can also write all your code with pointers, for loops and (mutable) arrays if you so desire.

</comment></comment></comment></comment></comment></comment><comment><USER18> This is nice, and yet, not much different from what the Haskell community was dealing with 5 years ago. They are also mostly programming concerns, as opposed to engineering concerns.

How do you deal with simple things like exceptions and string interpolation? There are guides trying to explain monads, but no straightforward answer for dealing with these sorts of things, with building separate libraries / packages, setting up your own CI with your own stackage repo. And we haven't gotten into production yet. The ecosystem doesn't have these things built out, or, it's just not documented/agreed upon so you'd effectively be starting from scratch.

While it might be nice to use Haskell for math-y things, in the end, you'd have to be able to instrument it, monitor/log it, etc. That doesn't appear to be in place either. When I worked with Haskell last, these were all blockers.

<comment><USER19> > How do you deal with simple things like exceptions and string interpolation?

While I agree string interpolation isn't convenient, exceptions in Haskell are great. You can throw exceptions in pure code (throw upon evaluation), in IO (throw when sequenced), catch them, inspect them by doing type down casting, etc, all without pulling a dependency. It's even better than Rust. (In Rust I had to use the anyhow crate to get back some basic features I thought should be present by default.)

</comment></comment><comment><USER20> Linked page just says "something went wrong" at the moment; cache:

[https://web.archive.org/web/20200608072453/https://dixonary....](https://web.archive.org/web/20200608072453/https://dixonary.co.uk/blog/haskell/pain)

<comment><USER21> Seems to be back with the following added to the top of the article:

> This is a temporary rehosted version while my website is hugged to death.

</comment></comment><comment><USER22> I would say all this is improving, and while these are all pain points, they are much less a pain point than they were just couple years ago.

My personal ergonomics improved when I ditched standard prelude for classy- prelude. Regarding Strings, I just use Text type.

<comment><USER23> What is classy-prelude? Last time I coded something in Haskell (ages ago :() I didn't hear of this.

<comment><USER5> The first hit on Google will tell you :)

<comment><USER23> Hehe, such a classy way of telling me lmgtfy :P You're right of course, and I've found out what it is.

</comment></comment></comment></comment><comment><USER3> The new improvements to Cabal have been super nice of late, but one thing I _really_ wish Cabal would do is allow for multiple versions of a library to be used in the same project. Having to satisfy a single library version is incredibly frustrating, and the solver errors are incredibly confusing. This is especially confusing when it complains about a library deep in your dependency graph being in conflict.

Ultimately the failure mode means that you can't build your package and are blocked until a fix is made upstream, where as with a package manager like Cargo you can still build your project. The downside is that you have a duplicate in your dependency graph - but this can be fixed upstream in an asynchronous fashion.

<comment><USER24> I agree that this is a pain point. I not familiar with Cargo and would like to know how this actually works. Don't you risk binary incompatibility issues because the same symbols are occupied by different versions of the same package?

For example, what if my package depends on A(v1.0) and B, B depends on A(v2.0), and furthermore B exposes a type from A(v2.0) in its API? Does the package manager distinguish internal dependencies from dependencies that are exposed in the API of the package?

<comment><USER3> I think Rust gives the symbols unique hashes for each crate version to avoid this. See this answer on Stack Overflow for more information: [https://stackoverflow.com/a/51722134](https://stackoverflow.com/a/51722134) \- not sure if there is a better reference document though.

You sometimes get weird errors like expected `A` but found `A` in the unusual event that you actually run into this, but this is probably something that could be fixed.

<comment><USER24> Thank you for the link, that clarified it for me. It seems that it requires compiler support to do it in the same way as Rust does it, but I like that approach better than complicating the package definitions with two types of dependencies.

Reading that post also reminded me of the Unison language [1] which would even allow the same type from different versions of a library to be identified as the same if it wasn't altered. It does this by identifying every type and function by the hash of their respective definitions.

[1] [https://www.unisonweb.org/](https://www.unisonweb.org/)

<comment><USER25> What's interesting is that GHC absolutely supports this already. If you manually link your projects you can use multiple versions of the same library in your project. _Cabal_ doesn't support multiple versions of the same library.

</comment></comment></comment></comment></comment><comment><USER10> Thanks for hugging my site to death!

Note to admins: I've swapped it to Github Pages for the time being and the DNS change should propagate soon.

Edit: Github Pages doesn't support adding HTTPS to a newly added domain for some reason.

<comment><USER26> You can put it behind Cloudflare and it should provision a certificate instantly.

</comment></comment><comment><USER25> The complaint about records is interesting because there aren't that many major languages that actually do records well. For a language of its age, it actually does records rather well. People sometimes forget that Haskell is older than Java and like Java it has a ton of baggage from its early days.

The tooling is definitely an issue for bringing in beginners, but as far as the build process goes if you're using docker and hosting your own package mirror (as you should be for a professional deployment) it's perfectly serviceable.

<comment> iso-8859-1 And records will be a lot friendlier with RecordDotSyntax! :D

[https://github.com/ghc-proposals/ghc- proposals/blob/master/p...](https://github.com/ghc-proposals/ghc- proposals/blob/master/proposals/0282-record-dot-syntax.rst#1-motivation)

</comment></comment><comment><USER27> One additional pain point for me is the number of symbolic operators. It's hard to search for what some of them do, and even harder to have a conversation with a coworker when half your code is things like <$> or >>=.

<comment><USER28> Those two operators are very common, and they're typically called "fmap" and "bind", respectively.

<comment><USER29> Right, and when you have three or for libraries defining different symbolic languages, your code begins to resemble J.

This is one of the reasons I gave up on Scala.

<comment><USER28> This hasn't been my experience writing Haskell every day.

The language is a good tool, but it isn't magic. You still need to apply good taste.

</comment></comment></comment></comment><comment><USER30> I've been doing professional FP work for 20+ years at this point. Haskell has community was the biggest killer for me. It was great when I made the jump from Standard ML to Haskell about 15 years ago. About 5 years ago I just couldn't stand what it had morphed into any longer - from the tension created by certain companies to well known community members who were just trouble for one reason or another. Instead of returning to Standard ML, I've been doing Ocaml for the last 5 years or so and couldn't be happier.

</comment><comment><USER31> Surprised that no one mentioned what a headache arrays are in Haskell. First, there are several different libraries: Data.Array, Data.Vector, Repa, etc. Second, the syntax is very clunky, especially if you are using multidimensional arrays. It's a real shame, since most machine learning/scientific computing programs are very heavy on arrays.

</comment><comment><USER32> While there are lots of benefits for choosing Haskell it is certainly not without its flaws as a development platform.

IDE has been my largest point of pain so far. I'm just used to a more interactive development experience, and sadly the tooling is just not there yet with Haskell. That said, there's great effort right now in that area so hopefully it'll improve.

On top of the broken record system, another annoying part is that the runtime monitoring and introspection story isn't so great compared to the likes of Erlang.

<comment><USER33> Atom editor with its Haskell IDE plugin works like a charm. It has REPL and all other inspection stuff you need out of box. What other feature you would need is an unknown unknown to me.

<comment><USER34> An Atom plugin that actually worked after at most 3 days of effort trying to get it to work would have been nice.

<comment><USER33> If you have ghc and stack installed, this plugin will automatically recognize a project bootstrapped with stack and decorate Atom with IDE like widgets, without requiring a configuration. It can take a few minutes to make it work if your bash_profile doesn't do unexpected stuff on the PATH variable.

</comment></comment></comment></comment><comment><USER35> > There is no featureful Haskell plugin for any major text editor which can be > installed without command-line intervention

This is not true for at least a year already, as there's IntelliJ Haskell:

* [https://github.com/rikvdkleij/intellij-haskell](https://github.com/rikvdkleij/intellij-haskell)

* [https://plugins.jetbrains.com/plugin/8258-intellij-haskell](https://plugins.jetbrains.com/plugin/8258-intellij-haskell)

<comment><USER36> This one's a good start, but it's still painfully behind other IntelliJ language plugins. E.g. I expected HSpec tests to work in the same way that I can run JUnit tests within the IDE, but no such luck.

</comment></comment><comment><USER37> One thing that irks me about the current Haskell ecosystem is that it seems to be going all-in on Nix. Nix is interesting, but I can't think of another programming language where the only way to get a reasonable development environment is to run a particular Linux distribution.

(I know that you can install nix as a package manager on OS X and other Linux flavours, but at least on OS X, packages don't work all that reliably. The enormous disk space requirements are also an issue when using a laptop.)

<comment><USER5> Could you share what you mean by that, or how you got that impression?

I've used Nix once, four years ago, and I didn't really like it[1]. I've never used it since. The only thing in the Haskell ecosystem that requires Nix is GHCJS, I think, which is bleeding edge technology that few use. Cabal's new package management style is _called_ "Nix-style" but otherwise has no connection to Nix whatsoever (I wish they'd use a different name actually -- "persistent style", "immutable style"?).

[1] For various reasons to do with user experience. I'm sure it's improved a lot by now.

<comment><USER37> I guess my experience is colored by my last gig as a Haskell developer, where our entire development and deployment process was nix-based.

I understand that it is possible to use Haskell without using Nix. However, I do get the impression that a significant section of the community see nix as the best way to manage Haskell dependencies. The (insanely confusing) naming of the new cabal features seems to support that.

<comment><USER5> Well, I don't know the details of your personal experience, but I'm confident to declare that the vast majority of the Haskell community has never used Nix and has no particular intention to.

<comment><USER38> Nix has managed to permeate almost every repo I work with. Only a minute ago I realised a Make file had had nix-shell stuff added to stack build.

There is no escape, only Nix.

<comment><USER5> Intriguing. Are these public repos? Care to share some examples?

<comment><USER38> Sure! [https://github.com/input-output-hk/](https://github.com/input-output- hk/)

</comment></comment></comment></comment></comment></comment></comment><comment><USER39> I think Haskell would be the perfect language to write reference implementations in. I.e., stuff that gets spec'd out by committees like RFCs or Web technologies.

</comment><comment><USER40> I personally don't understand the hangup on the existence of an IDE.

Don't get me wrong - IDEs are great, especially for beginners. But "one- editor-per-language" is an increasingly outdated mode of thinking. The culture shock of having to download a whole new IDE for a new language is a distinct negative. Beginners benefit from new languages slotting neatly into existing tools, which is exactly what the language server efforts in Haskell have yielded.

A (perhaps) valid criticism would be "the Haskell community has not done enough to make sure the language server is easy usable" \- and I wouldn't even say that _that_ was the case.

<comment><USER41> > I personally don't understand the hangup on the existence of an IDE.

I don't understand the lack of a hangup. It's obvious from using an IDE to going back to a text editor. It hurts adoption, it hurts beginners, it hurts the ecosystem...ie disparate tools grouped with known interactions are not necessary to fully understand when creating a program, leave those details in the IDE as a simplified interaction (eg checkbox to run a lint every save). Lack of tooling (erlang and lua's lack of a comprehensive package manager comes to mind) stunts language maturity. It's a pain point.

<comment><USER40> My point is there's no "lack" of tooling. Nowadays, the Haskell IDE engine is good enough for general use. It's pretty trivial to plug into every general- purpose editor.

More and more beginners nowadays do not want to install a whole new IDE. They don't want to have to configure it, learn it, and understand all of its nuances and foibles. They prefer using their existing setup (VSCode, Atom, vim, emacs, etc.) with a nice slot-in for the new language - which is exactly what the Haskell tooling supports.

By comparison, a custom IDE is a massive undertaking, and a relatively fruitless one. It takes a tremendous effort to do _well_ , and up until that point it actually negatively impacts the learning experience: if you encourage beginners to use a mediocre IDE, they will experience the language in a mediocre way.

<comment><USER10> > Nowadays, the Haskell IDE engine is good enough for general use.

Sadly I am unconvinced of this. If it were true, there would not be an immediate and significant push to make `haskell-language-server`.

Having tried many times to get `hie` working, I can say that it's a pain in the bum.

Suppose I have 12 projects, one made every month for the last year. Each of these 12 will be using a different stack resolver, possibly with different ghc versions. As a result, I will need to compile and use up to _twelve_ different versions of hie, and make sure that the correct one is on my $PATH depending on which project I have open.

<comment><USER42> I don't think it's quite _that_ bad. Most likely you could easily use 1-2 ghc versions for those, and you need one build of IDE tools per ghc version, not per resolver, no ?

<comment><USER10> Sure, I'm outlining a worst-case. But realistically, even having two different hie versions is enough to make switching environments a Hard Problem.

</comment></comment></comment></comment></comment></comment><comment><USER43> The compilation time is the dealbreaker for me right there. If your language is slow to compile, it cannot be that good.

<comment><USER12> If the compiler finds problems that you'd otherwise need a test suite to catch, then as long as the compiler is faster than that test suite you still come out ahead.

<comment><USER43> If the compiler is slow, I _feel_ unproductive. I need to try out things quickly, I need to iterate. The bugs don't matter at this stage.

<comment><USER12> You may not need a full compile for that though. Some combination of incremental compilation, non-optimising compiles, or a presentation compiler / typechecker only can be enough to iterate with.

</comment></comment></comment></comment><comment><USER29> Does Cabal still have issues with multiple, conflicting versions of packages installed globally?

Stack's main advantage was that packages ( _essentially everything_ , including the compiler if I remember correctly) are installed in project- space, so that two different projects don't conflict, anyway.

<comment><USER44> the new cabal v2 system does not encourage global package installation. It adopts a stack-style approach and IMO is actually better than stack.

</comment></comment><comment><USER45> I would add a debugger to this list.

The one built into GHCi is the only working one I know of, and it has major failings (such as telling me that variables aren't in scope when they clearly are).

</comment><comment><USER46> It strikes me that I need to be a mathematician to use Haskell. Especially when someone like Rob Pike makes claims that "I cannot read the syntax of Haskell and understand it."

<comment><USER47> That's because Rob Pike never learned Haskell. Expecting to just look at it and know it because you know other languages is quite frankly silly!

You don't need to be a mathematician though. Many Haskellers I've worked with either didn't go to university or went for something else. I only ever learned C before Haskell, for instance.

<comment><USER48> cough _Python_ cough

</comment></comment></comment><comment><USER49> The community has different priorities than industry

<comment><USER50> Which priorities are those, in your opinion?

</comment></comment><comment><USER51> Warning possible flamebait: could Clojure be the solution?

<comment><USER10> I've tried to get into Clojure multiple times and it feels quite unergonomic to program. I think my brain is not correctly shaped for its constructs, whereas Haskell fits my mental models perfectly.

<comment><USER52> Would you say you are a top-down thinker/programmer?

<comment><USER10> I think so, yes. I think Haskell helps with this. You can write the top level code first, and be fairly confident that, if the types are sensible, there will be a sensible implementation by the time you reach the bottom.

It also helps that there's so much code reuse that the "depth" reached is quite shallow compared to what you might see in other languages.</comment></comment></comment></comment>


I Left a Buddhist Retreat in Handcuffs - <AUTHOR> https://www.esquire.com/uk/latest-news/a25651175/the-other-side-of-paradise-how-i-left-a-buddhist-retreat-in-handcuffs/ <comment><USER2> traditionally, there are separate practices for laymen/householders and monks/ascetics. it looks like translating to modern western society is losing the distinction and is causing problems</comment>


Amazon Aurora Under the Hood: Fast DDL - <AUTHOR> https://aws.amazon.com/blogs/database/amazon-aurora-under-the-hood-fast-ddl/ <comment><USER2> Their benchmarks are confusing. Is that what they claim is the time to run a migration or something else?

I would love not having to rely on pt-online-schema-change or gh-ost, and just letting aurora do its magic.</comment>


Airtime, a Pedigreed Start-Up, Is Tested - <AUTHOR> http://www.nytimes.com/2012/10/19/technology/airtime-a-pedigreed-start-up-is-struggling.html?pagewanted=1&ref=business Ugh. <comment><USER2> It is really easy to see the problem with Airtime and you could have recognized this already with Chatroulette: It is really exhausting, people don't relax while video chatting. Even with your mum you constantly have to think about what is seen on the video feed right now.

Especially on Airtime there is no purpose. This would maybe make sense in a clear dating context, but a rejection would hurt much more this way - not fun to do. So why should somebody put effort in talking with some stranger about something?

</comment><comment><USER3> The consumer social space is a crapshoot: you can't predict consumer behaviour, no matter how good an entrepreneur you are. Color, Airtime, the one that wasn't instagram, and probably many more examples. Seriously, who would have predicted that the valuable part of Chatroulette was the dicks!

That said, investors are probably still right to throw money at experienced entrepreneurs. Airtime probably has lots of money left for a pivot, so best of luck to them.

<comment><USER4> That's kind of a contradiction. If you can't predict consumer behavior why would investors give money to experienced entrepreneurs? From their point of view, they would be better off giving money to someone naive so they would get a bigger cut for the same price, while getting the same odds on the "predict consumer behavior" front.

<comment><USER3> I never said it's the same odds. Maybe "crapshoot" isn't the right term. Maybe "lottery", and its certainly the case that people who can execute well get many many more tickets. They were at 30K users at one point, how many companies get that far? Airtime is only a failure if you're trying to get a $1B exit - which of course they are because they took $30m in investment and that's the deal.

You could take your $30m, throw it at 30 different teams and pray for an instagram. But then you'd have to sit on 30 boards and keep up with 30 companies. Making one large investment is not only easier to manage, but also much more likely to succeed when it's a known executor.

</comment></comment></comment><comment><USER5> I hate to be that guy, but who didn't see this coming?

Is the valley truly this out of touch with "the real world"? No amount of millions of dollars or celebrity endorsements or Sean Parker is going to get real people to live video chat with each just for the hell of it.

It's a solution looking for a problem.

</comment><comment><USER6> Another shipwrecked sailor, doomed by the Siren's call of live video.</comment>


Illinois moves to tax online purchases - <AUTHOR> http://pointsandfigures.com/2011/01/06/cut-spending-in-illinois-nah-we-will-just-raise-your-taxes-but-you-wont-know-it/

<comment><USER2> the reason is it is not as big a deal as it seems is that it only applies to affiliates who have a physical presence in the state. For example, if I buy an e-book for my Kindle, it would not fall under this law.</comment>


How Apple became a monopsonist - <AUTHOR> http://tech.fortune.cnn.com/2011/07/05/how-apple-became-a-monopsonist/ <comment><USER2> The original quora post was at: [http://www.quora.com/What-would-make-sense- for-Apple-to-use-...](http://www.quora.com/What-would-make-sense-for-Apple-to- use-its-51-billion-in-cash-for-a-strategic-acquisition/answers/612608)

The business insider article: <http://news.ycombinator.com/item?id=2727494>

Really sad that the news outlets aren't really adding any insight to the conversation

</comment><comment><USER3> I'm confused by the numbers here:

"$65.8 billion in liquid assets at the end of March that have probably swelled to more than $70 billion by now."

"COO Tim Cook pointed to the $3.9 billion Apple prepaid last summer to three unnamed suppliers for new process equipment and tooling"

Why would apple save all of that money to direct towards these goals instead of half or a third of it? It seems like it might be being wasted, at least partially.

<comment><USER4> It's probably a case of locking down future supplies, with the added advantage of getting a massive discount for paying up front. Tim Cook isn't one for waste.</comment></comment>


University Bans Social Media for a Week - <AUTHOR> http://mashable.com/2010/09/13/harrisburg-university-social-media-ban/ <comment><USER2> University officials were banned from using (fossil fuels | artificially hydrogenated lipids | fax machines) for a week. "we just wanted them to see the impact these technologies have on their lives."

</comment><comment><USER3> Yep, I think it won't work either (too many holes in their ban).

However I would have really wished for the University to use this chance to carry a proper experiment, gathering data, analysing them, etc. They are a university, after all! They got a chance to study the effect of the ban on people's activities and behaviour... why not try to collect some data?

It may be useless and too noisy, but still.

</comment><comment><USER4> This brings back memories of trying to find open proxies in high school and middle school. Hopefully these college students will be as enterprising.

</comment><comment><USER5> I think 24 hours would be long enough to get the point across. I expect 100% of the students at that university will find other access during the week, but if he kept it to a length that the ADD addled brains of college students could possibly have a chance of withstanding I think he'd have much better results. Interesting idea though.

</comment><comment><USER6> Oh no, you mean they have to go to Starbucks or something?</comment>


Microsoft to acquire Intentional Software - <AUTHOR> https://blogs.microsoft.com/blog/2017/04/18/microsoft-acquire-intentional-software-expand-future-productivity-capabilities/#sm.0000390swm7fhf6z10x1cyr7laes7 <comment><USER2> _> The Intentional platform can represent domain specific information both at the meta-level (as schemas) and at the content level (as data or rules). It has patterns for distributed interactive documents and for views for a universal surface._

Is there a technical paper on the implementation?</comment>


Show HN: Receivd - Real-time file sharing for families, friends and coworkers - <AUTHOR>

Hello HN, meet Receivd. Receivd is our solution to the problem of sharing files securely and easily with your family, friends and coworkers.
http://receivd.com/early-access
With the desktop and web app, you can create lists of people, then drag and drop files to share instantly. You can also send files to just one person. On top of that, you can even send files to people when they're offline.
It's standards-based and powerful enough that you can send files in the gigabyte range with ease. Any photos or videos you transfer will not be touched up, delivered just the way you sent them.
Please feel free to share your comments and suggestions. We'll be monitoring this thread all day.
EDIT: Just in case you were wondering, we're targeting sending out the app to the first round of early-access users next week. <comment><USER2> As a parent, I think this is a great idea. I have trouble sharing photos with family members, not all who are on Facebook (my default sharing method). Plus Facebook's privacy settings are confusing, and their business model runs against keeping my photos private, which is somewhat unsettling.

FYI, Ash Maurya built CloudFire to solve this problem, but since he's moved on to being a "lean startup" guy, the product seems to have been abandoned. There are probably valuable lessons in the history of that product.

Finally, I have to admit I'm getting tired of the landing page gambit. Maybe it's just early-adopter-itis, but if I'm interested in your product, I want to touch it, play with it, right now.

A landing page doesn't solve my problem. And there are so many "landing page" products in existence now, that I question whether the strategy is beginning to turn people off.

Having to wait for a product that on average never actually ships is annoying. Don't bother me until you have something to show. YMMV. :)

<comment><AUTHOR> We built Receivd to solve the exact problem you are describing.

The landing page allows us to gather numbers on how many folks are actually interested. We're planning to send out builds early next week to the first round of early-access users :)

</comment></comment><comment><USER3> Love the URL (clickable): <http://receivd.com/early-access>

</comment><comment><AUTHOR> clickable URL: <http://receivd.com/early-access></comment>


Google is manipulating search results in favor of Hillary Clinton - <AUTHOR> http://siliconangle.com/blog/2016/06/10/google-is-manipulating-search-results-in-favor-of-hillary-clinton/ <comment><USER2> Is there someone that google WILL autocomplete "criminal" for? I tried a lot of people, including those who have been convicted of crimes, and it seems to refuse to do so. (E.G Mike Tyson, John Gotti, as well as politicians like Nixon, George W Bush, and even hitler.)

<comment><AUTHOR> Interesting. It did seem a bit heavy handed, which made me wonder if something else was going on (and I figured by posting here I'd find out :).

For what it's worth, I _can_ get indictment to autocomplete for others (e.g. try "vick indi").

Also, I'm guessing this whole story would have gone nowhere if Google had just said "we filter labels like criminal" rather than claiming they only filter "offensive or inappropriate content".

<comment><USER2> Hmm, vick indi works but michael vick indi doesn't. Maybe it's doing it based on a name detecting NLP component.

</comment></comment></comment><comment><USER3> Just tested this and the article is on point, at least about "Hillary Clinton cri" search autocompletes. I took some screenshots for proof:

[http://imgur.com/R2uqYlL](http://imgur.com/R2uqYlL)

If we can't trust Google, who can we trust?

Bing?

I don't want to live in that world.

<comment><USER4> It's called "filter bubble", see [http://dontbubble.us](http://dontbubble.us)

<comment><USER5> They filter lots of stuff in their autocomplete, people have observed for years that "embarrassing" questions work for a while, then disappear. You used to be able to measure how many people "wondered" if a particular celebrity was gay, e.g. "$CELEBRITY g"...[autocompletes to gay, because a lot of people typed it] because of autocompletion, that's now vanished. It's not got to do with the bubble.

</comment></comment></comment><comment><USER6> You see similar behaviour with trump and bernie. Also the stanford rapist dude and martin shkreli. This isn't a story until they have evidence that it is significantly different than many other famous people on google. People keep comparing google results to bing but they are different engines

</comment><comment><USER7> So we are upset over autocomplete now? Why not type in the word criminal yourself you lazy bums. If it wouldn't show any results for that then maybe the rest of us would care but google not autocompleting your bias is actually quite refreshing.

</comment><comment><USER8> isn't this just showing the effects of your filterbubble as defined by google?

</comment><comment><USER9> When life imitates begins to reflect a Netflix series it is sometimes hard to tell real life from fiction.</comment>


Functional Secret Santa - <AUTHOR> https://github.com/yurifrl/secret-santa <comment><USER2> I read the description and README and I still don't understand what this does. Send text messages to your friends with their Secret Santa. So is their Secret Santa like a username or something? What am I not understanding?</comment>


Show HN: Find personal blogs written by humans - <AUTHOR> https://github.com/brundonsmith/blogs <comment><AUTHOR> Hi all, author here. The thinking behind this was, "there are tons of cool little blogs out there and they're really hard to find, so let's make it easier". If you agree then I'd love to get contributions to the list, or even the code if you feel so inclined. More details in the README. Feel free to ask me anything.

</comment><comment><USER2> I think the fact that you only got programming blogs says quite a lot about us and this community (even me, who I'm not a programmer)

<comment><AUTHOR> That's not _quite_ the case. There's additional tagging that could be done even just with the ones that are already present; certainly more nuance than just "programming" and at least a couple that wouldn't fit that tag at all. I was just tired at the end of working on this all afternoon and didn't want to take the time to go through all the websites I'd found and come up with tags for them, haha.

</comment></comment><comment><USER3> It would be great to have a filter to cluster themes of blogs so people can find blogs of specific topics.

<comment><AUTHOR> There are links to filter by different tags underneath the search bar, it's just that there's only one tag right now :)</comment></comment>