Ask HN: Monetizing a Twitter bot? - <AUTHOR>

I run http://usetrackthis.com (track your packages by Twitter direct message/email/SMS) and am looking for feedback on monetizing or improving it.
Right now all the action occurs through Twitter direct messages, so I don't have many pageviews to take advantage of. I've thought a couple strategies:
1. Deliver ads through Twitter once per user/per package/per update (how much SMS spam will users tolerate?, any ad services I could use?)
2. Develop a webpage to login and manage/view packages (Use AdSense?, make it a premium feature?, do I become yet another package tracker?)
3. Make the whole service freemium (limited number of free packages?)
Appreciate any feedback/ideas, thanks. <comment><USER2> Your stats are unfortunately pretty small when it comes to advertising dollars.

The fact is that Twitter doesn't lend itself to monetizing on the messages itself, and as that is how your bot operates that makes it quite difficult.

Twitter spam is pretty unwelcome in general, the "friending" (when users follow each other) is treated as a pact not to create noise. I think given time it will become more acceptable as Twitter ages and more services spring up that people want to use and need funding to survive.

I don't think Freemium will work for you, this isn't a necessary service and that's what is required for user conversion from Free to Premium.

The webpage login may work, but now you're just giving the user a specific action which means any ads you show them have a very low chance of catching their eye.

I think my suggestion is check out Magpie or something similar, and make one "broadcast" tweet rather than a DM to each user. They have to be following you to get your DMs so they have to get your tweets. That's my suggestion.

<comment><USER3> Or sell ads yourself the old fashioned way, and call them sponsors. Send 1 message a day, thanking them with a short message and a link.

</comment></comment><comment><USER4> Four ideas:

1\. Are you getting their e-mail addresses? You could send out some kind of e-mail once a month with a summary of their packages and some ads and/or affiliate offers.

2\. Since you are sending them direct messages, they must be following you. Use Magpie or some other service to just post advertisment tweets (not direct messages) to your public timeline. You get paid on a CPM basis.

3\. After every nth package, send them a DM asking for a donation if they appreciated the service.

4\. License your app to be the official Twitter bot of any of the package tracker services. So if someone tries to track a package on any of their sites it gives them the option to add to your twitterbot. (This one would be the hardest/most work, obviously.)

</comment><comment><USER5> I just started using the service a couple of days ago, and I'm very impressed. Awesome work.

I can understand your problem, though. Honestly, I'm not sure that I would pay anything for it, but I'm not a business user or anything - I'm just using it as a slight convenience.

So, for me at least, there's not much value. Maybe I'd pay a one-time fee for some kind of convenience, or to stop ads. I payed $10 for the Instapaper iPhone app, but mostly as a "thanks for the awesome service" kind of thing. I could see doing something similar for this.

Having some kind of ads doesn't seem like a bad idea, and maybe they could be coupons or something? I dunno - maybe something where you got an affiliate deal? I'm not sure how much I would tolerate, but if it was good stuff, maybe a couple a week.

I'm just a joe-average-user guy, though, so I'm not sure how valuable I would be as a way to profit. If there's a way to get after business or heavy users, that might be the trick.

If it's not very expensive to run, perhaps you could open-source it or simply use it as a portfolio piece. I've done some open-source work that ended up benefiting me when I was looking for work. At the very least, that should be somewhat valuable.

Sorry I can't be much more help than that. I think it's a great little utility, but maybe this is a "feature not a product" situation. Perhaps you could try to sell it to Twitter directly...? License it to UPS for exclusive use...?

<comment><AUTHOR> Thanks, I knew it'd be a tough one to monetize, or else I would've done something earlier. Perhaps some sort of donation nag screen on the website would increase the donation rate. It definitely doesn't take a lot of resources to run, but I just wanted to gather some feedback

</comment></comment><comment><USER6> maybe you could sell/license your feature to another package tracker that does make money?

</comment><comment><USER7> You need more traffic. Who has a line on people getting shipped packages? E-commerce sites.

You could develop a plugin for zencart or any of the other major shopping cart systems that lets users plug their twitter name in to get updates. That should bring you lots of traffic. Maybe you could sell that?

That's not real money though, so i'm wondering if each titter message could have a link to more info on the package? This would go to your site, where you can run ads.

Hope that's worth something.

</comment><comment><USER8> You have a lot of followers / are following a lot of users, so you could look into using Magpie (be-a-magpie.com) to do some ads. I think you would need to post more often to twitter.com/trackthis to really start making money from it though. It also raises the issue of advertising to your users / spamming them by requiring them to follow trackthis. Just an idea.

<comment><AUTHOR> Awhile ago I added a thanks/pls donate direct message nag when a first-time user submits a package. The results have been pretty poor, and theres been one complaint on the Uservoice.

</comment></comment><comment><USER9> "Search for the woman": You know which packages they're sending, where to, and with what providers. Is there a way to help your users save money? And is there a way to make money off that, for example by reselling the shipping services via an affiliate deal like the previous poster suggested?

d.

</comment><comment><USER10> your best bet is to get more users, get momentum, and hopefully one of the shipping companies notices you and partners with you.

</comment><comment><USER11> How many unique users per day do you have? The size of your service really determines the correct course.

<comment><AUTHOR> ~20 new users daily, ~40 new packages daily, ~180 unique users with stuff being tracked, ~150 updates sent out daily

<comment><USER12> Assuming you found a way to get ads out there and then got $1 eCPM for them that's still just $50/yr or so. Probably better to use this project to promote one that has a better chance of making money. IMHO.

</comment></comment></comment><comment><USER3> Whatever you decide to do, I think direct message ads are a bad choice.</comment>


Ask HN: Should I Use Vaadin Framework or Angular/React? - <AUTHOR> I stumbled upon Vaadin Framework and honestly really impressed by what they do. I even setup a demo application and writing code is just super easy. Understanding the  framework is really easy and has good documentation. Also, similar to swing it some ways.
Our team is trying to move to a better "web framework". The issue is no one in my team including me is good in latest trends in AngularJS/ReactJS or NodeJS. We know the tech just enough to get things working, but we can't  troubleshoot JS or don't know the right way to setup things, because our team has mostly C and Java engineers. None of my team member has experience in Webpack, nodejs, or any new fancy tech. We have an application based on swing, yeah, swing. And it has worked just fine for us. But, the limitations and changes in trend has finally made us to kill and re-write the whole application.
The reason, I personally like vaadin is, we can reuse some of the swing code.
My question, is anyone here have tried Vaadin Framework? How is your experience, is it worth paying for their designer and pro tools? Or we should spend time learning React/Angular instead, because most of the tools are freely available and the learning curve is high?
Thanks.
Pratyush <comment><USER2> If your team has more previous knowledge of desktop application development than web development, you should definitely look into Vaadin. If you mostly have JS developers who only know the front-end stuff, you are probably better of with React.

You could pose the question on vaadin.com/forum or look into the references [https://vaadin.com/success-stories](https://vaadin.com/success-stories)</comment>


Emacs vs. WebStorm for Node.js Development - <AUTHOR> https://spin.atomicobject.com/2016/01/26/webstorm-nodejs-development/?utm_source=hacker_news-ao&utm_campaign=webstorm-nodejs-development&utm_medium=referral <comment><USER2> I hadn't tried tern/company-tern before, that worked quite nice :-) I didn't have any problems getting tern to do multi-file completions/navigation though (just had to put "loadEagerly":["assets/js/*.js"] into .tern-project).

For refactoring, there's js2-refactor, though I tend not to use auto- refactoring much so don't really know how that fares.

Individual test-running ought to be possible in Emacs; you get that in python with nose-tests at least.</comment>


Does Crypto = Dotcom? - <AUTHOR> https://hackernoon.com/does-crypto-dotcom-a6b4574ce682 <comment><USER2> Why does the chart suggest bitcoin has only been around for a year?

<comment><USER3> Because it helps tell the narrative of a "bubble".

If bitcoin is a bubble, it will scare away investors.

If it is not a bubble, then people might take money from elsewhere and put it into bitcoin.

Look at the people who have an interest in bitcoin being a bubble, and you'll see the strings they are pulling on.</comment></comment>


Math Reveals the Secrets of Cells' Feedback Circuitry - <AUTHOR> https://www.quantamagazine.org/math-reveals-the-secrets-of-cells-feedback-circuitry-20190918/ <comment><USER2> Finally :) I have a degree in electrical engineering and a degree in immunology (in the early 90s) and was 100% sure that control systems math should be applied to biological systems, like the immune system.

Most biologists tend to take very little math (calculus and stats) and dont even realize that control systems are a thing.

We definitely need more of that cross pollination.

<comment><USER3> > Most biologists tend to take very little math

Wow, really? That's surprising to me. The hardest course I ever took was one I took for my MSCS in bioinformatics. It seemed very math-heavy, and math-heavy in ways that I couldn't lean on my past experience to "muscle" my way through.

<comment><USER4> In my experience, a lot of biologists learning bioinformatics/genomics tend to learn a specific set of general tools (HMMs, multiple hypothesis testing, PCA, etc.) and then learn some specific statistical tools that apply to their data (e.g negative binomial GLMs for RNAseq).

<comment><USER5> There is enormous room for original, fundamental, groundbreaking work here.

</comment></comment></comment></comment><comment><USER6> Highly recommend this text and Uri Alon's work in general for those interested in diving deeper into this subject.

[https://www.amazon.com/gp/product/1439837171/ref=dbs_a_def_r...](https://www.amazon.com/gp/product/1439837171/ref=dbs_a_def_rwt_bibl_vppi_i0)

</comment><comment><USER7> >> To minimize the effects of noise, the duo realized, the two controller molecules must have a very specific relationship: They have to bind to each other and neutralize each other's biological activity. One must be the antithesis of the other.

One more thing they may want to add. A way to break down all these neutralized pairs and clear them out. Depending that these molecules look like there may already be something in place to do that, then it's more a matter of ensuring compatibility rather than making a new clearing mechanism.

<comment><USER8> There are two major ways that happens. In growing populations of cells, they are diluted as the cells grow and divide, and there is ongoing recycling of proteins in the cell. Some are more labile (likely to be grabbed by the recycling machinery) than others, but it's an ongoing background process.

</comment></comment><comment><USER9> The article talks about negative feedback in the circuitry to maintain stability. Why can't the same be achieved using positive feedback in the biological and psychological realms? Only the sign is different. In the psychological system the negative feedback back can be thought of as pain. Why can't achieve stability through pleasure instead?

<comment><USER10> Just to be clear, negative feedback is not giving 'bad feedback', it's taking an action that 'dampens' a signal as it gets outside of a zone of control to bring it back in line. Positive feedback would not be pleasure or reward, positive feedback would be something more akin to a runaway chain reaction or an avalanche, where the system takes an action that emphasizes a signal as it gets outside the zone of control.

</comment></comment><comment><USER8> > The work is backed by a mathematical proof that no simpler answer exists — a > good indication that natural feedback systems probably work the same way.

On the contrary. It means that you probably won't find anything simpler, but you will certainly find more complex ones as exaptation drags part of the system off in a new direction.

</comment><comment><USER11> In a very general sense, feedback loops seem important in many areas.

A couple of potential examples: software engineering and animal intelligence.

In software there are loops between the programmer and various levels of the development process, from compilers to test runners all the way to user testing and feedback.

A large function of animal intelligence may be to integrate (in a very broad sense, not mathematically as used in the article) information about the environment in order to regulate the organism's place in it.

</comment><comment><USER12> My understanding, as someone who is rather scientifically oriented but not a biologist, is that a living organism is basically an elaborate, multi-level set of interconnected negative feedback loops. Have I got that right?

</comment><comment><USER13> Information security is about control, too. [https://dl.acm.org/citation.cfm?id=2898379](https://dl.acm.org/citation.cfm?id=2898379)

<comment><USER14> PDF: [http://sci-hub.tw/10.1145/2898375.2898379](http://sci- hub.tw/10.1145/2898375.2898379).

</comment></comment><comment><USER15> Wow that robot looks so cool. Wish I can build something like that with a raspberry pi 3 and a ton of my kid's lego lying around in my house.

<comment><USER16> If you find the robot cool... check this out. :-) [https://www.youtube.com/watch?v=cyN- CRNrb3E](https://www.youtube.com/watch?v=cyN-CRNrb3E)

<comment><USER5> outstanding!

</comment></comment></comment><comment><USER17> Too bad Arthur Winfree isn't around to update his book.</comment>


The UK is testing out roads that charge electric cars as they go - <AUTHOR> http://mashable.com/2015/08/17/electric-car-charging-uk/?utm_campaign=Mash-BD-Synd-Pulse-Ticker-&utm_cid=Mash-BD-Synd-Pulse-Ticker-&utm_medium=feed&utm_source=rss <comment><USER2> Could actually be feasible!? Unlike other hoaxes involving dual-purpose roadways.</comment>


Free Software Foundation Files Suit Against Cisco For GPL Violations - <AUTHOR> http://www.fsf.org/news/2008-12-cisco-suit <comment><USER2> The recent decision of Jacobsen v. Katzer (different jurisdiction) held that violation of an open source license can be a copyright violation, which is what is being claimed here. This filing suggests that they FSF was emboldened by the Jacobson case.

</comment><comment><USER3> And more gibrish from the peanut gallery. Cisco by far is one of the friendliest companies to the open source movement. How friendly do you think they will be now?

<comment><USER4> They were producing proprietary derivatives of open source software, over a period of many years, in blatant violation of the license. How exactly is that friendly?

<comment><USER5> "Yeager recalls, two support staff members, Bosack and Kirk Lougheed, asked him for his original program so they could modify it for the new system. Bosack and Lougheed removed its ability to route non-Internet protocols, keeping its network operating system and related features and improving its Internet capabilities. Later, they added back other protocols.

Yeager said he didn't know that Bosack had recently incorporated Cisco and asked Stanford for permission to sell the Blue Box commercially. He had been denied." [1]

Their whole business was built on this "borrowing" principle, but eventually some of it fired back [2] on the "original" gang, when they went "public" (Sequoia, hated by Lerner).

In essence, the following quote sums it all up: ``The fundamental problem is: how do you negotiate an equitable agreement with crooks?''

[1] <http://pdp10.nocrew.org/docs/cisco.html>

[2] <http://www.pbs.org/opb/nerds2.0.1/serving_suits/cisco.html>

<comment><USER5> ... the other take-away:

"I fear the Cisco experience has done unseen damage to Stanford in the form of creating inhibitions against sharing ideas, information and developments with possible commercial value among our groups which have need to benefit from each other's work"

</comment></comment></comment></comment><comment><USER6> Doesn't this sound like suicide for FSF?

With violations like these involving bare necessities of any application like gcc, binutils people would have no option but to pay MSFT or other companies. On these lines FSF can sue pretty much everyone.

This seems more like something went wrong with Cisco and Stallman and they suddenly cropped up.

<comment><USER7> When I first heard about this I thought that it sounded like suicide too but for entirely different reasons: If Cisco decides to fight rather than reconcile this case might not turn out the way everybody thinks it will.

And then what?

<comment><USER8> uh. Any decision that declared the GPL invalid would have to be so novel, and so far reaching that it would probably break all software licenses.

I truly doubt that Cisco (which describes itself as a software company) would want _that_ to happen.

The fact that it's never been seriously challenged in court is more a testament to it's soundness than anything else. A number of brilliant legal minds have looked at it and decided that challenging it would not be a profitable endeavour.

<comment><USER7> "Any decision that declared the GPL invalid would have to be so novel, and so far reaching that it would probably break all software licenses."

This is not true at all because regular software licenses are enforced under contract law and open source licenses are based on a legal theory about copyright law and granting permissions under a set of terms and conditions.

One way that this lawsuit could turn out to be a disaster is that the courts could decide to interpret the GPL as a contract rather than a (bare) license. As far as I can tell that would make it rather toothless and impractical to enforce.

When things that are as fundamental and important as that are still up in the air, you don't want to argue against Cisco's legal team about it.</comment></comment></comment></comment>


Go Screencasts by codegangsta are Coming Soon - <AUTHOR> http://screencasts.codegangsta.io

<comment><AUTHOR> I'm really excited to get these screencasts out the door. I'm also interested in episode suggestions from you guys who are either using Go or wanting to learn Go.

<comment><USER2> I would love to see an episode about effectively using or not using panic, understanding goroutine stack traces, etc. An episode about Go debugging in general i guess.

<comment><USER3> Or even I'll be glad to read simple examples about goroutines and channels in a "proper way". Sure, there are a lot of examples out there but everyone seems to have their own way to handle those.</comment></comment></comment>


Dianne Hackborn responds again about android graphics - <AUTHOR> https://plus.google.com/u/0/105051985738280261832/posts/XAZ4CeVP6DC

<comment><USER2> I just did an interesting side-by-side test of scrolling within a browser displaying Google on an new iPhone 4 and an older Android phone (HTC Incredible. I didn't actually see much difference as to how "smooth" or "choppy" the scrolling was, but there were distinct differences to fast motions.

The iPhone seemed better at keeping up with a fast moving finger. If you put your finger on a line at the top of the screen, and scrolled quickly until your finger was at the bottom, the same line would still be under your finger. On the Incredible, the line you started on would only end up 2/3 of the way down the screen.

More surprisingly, this seemed to happen to a lesser extent even on very slow scrolls. Put you finger down on a line, drag it to the bottom, and the amount scrolled is always significantly less than the distance your finger moves. Rather than being a rendering problem, this seems more like an event loop that throwing away some of the events!

<comment><USER3> Touch gestures generate a ton of events, specially in early versions. The most common fix is sleeping for a few ms in the UI thread. [http://www.badlogicgames.com/wiki/index.php/Touch_Event_Floo...](http://www.badlogicgames.com/wiki/index.php/Touch_Event_Flooding)

<comment><USER4> I have to kind of wonder if Apple is buffering touch events on their _controller_ and then sending them onward to the UI as postprocessed events and gestures.

Maybe I'm the only one left with a boggy 3G running iOS4, but when the system lags down I can usually keep typing and the keystrokes will catch up. Does the same thing happen on Android?

If gesture processing is being done on the controller side, that would take a lot of perceived bog out of the UI.

</comment></comment></comment><comment><USER5> This post basically amounts to: "There is no problem with graphics on android, it was designed to work this way because of the open nature of android, and other excuses"

Well, the design is broken then. Clearly, it is possible to achieve a smooth UI as demonstrated by iOS and have a solid and stable system. This post is actually worse than saying "we can't fix it" -- it's denying a problem exists in the first place, because "hey, we do it just like iOS." Except it doesn't work like iOS.

I recently went back to iPhone because I got so frustrated with Android's jerky UI on my 1-year-old phone (Galaxy S). I went back to a iPhone 3GS that runs iOS 5 faster than the Android ran Froyo (which, btw, I had to jump through 30 different hoops just to upgrade from 2.1). The takeaway is this: Android lost a customer because of slow, laggy UI, and I'm sure I'm not the only one.

<comment><USER6> Java is memory safe, and classloaders have been used since forever to sandbox applications (remember applets?). The whole 'designed to be open' argument is nonsense.

Let's face it, Android was hacked together by a small team on a deadline. It doesn't seem like a lot of thought went into the design and architecture of the system. The code is buggy, there are no tests, and half the tree doesn't even have comments. Bug reports are ignored, and there are about 22k open issues that are not even being triaged. Case in point: <http://code.google.com/p/android/issues/detail?id=19078> (not fixed in ICS)

Android is a rush-job, and the team's obvious lack of experience in handling large software projects is biting them in the ass. Rather than making excuses for their botched together software maybe they should just get their shit together.

<comment><USER7> > Java is memory safe, and classloaders have been used since forever to > sandbox applications (remember applets?).

Well, except that Android allows apps to run arbitrary native code using the NDK.

<comment><USER6> > Well, except that Android allows apps to run arbitrary native code using the > NDK.

I was under the assumption that they can support native code because of the way they designed Android, not the other way around. I highly doubt that supporting native code was the design rationale here. I think they just designed Dalvik to use Linux threads and assume it to run inside its own process. That certainly makes things much simpler for the VM. The fact that you can safely load native code follows naturally.

Still, supporting native code does not have to dictate how you ensure memory protection, or whether each app has to run inside its own process. You can always run a native library (i.e. a video codec) inside a separate process and use memory-safe communication with the process that runs the Java app. You can also go the NACL route.

There's absolutely no reason why supporting native code would result in a choppy UI on Android.

</comment></comment></comment></comment><comment><USER8> Devil's tongue: "This is very different from iOS's original design constraints, which remember didn't allow any third party applications at all."

This argument resume the whole article's _intent_. I'm not using iOS. I dislike Apple's way of enforcing it's products. But I know BS when I see it. iOS's security and sandboxing, while technically different, is practically similar to android. Each app is sandboxed. Oh and guess what, the AppStore let you install third party apps, and since before Android became Google's Android.

And for the actual thing that matters, Android uses multiple GL contexts by design, iOS doesn't, so Android is slower.

<comment><USER9> iOS has multiple processes on the system using hardware acceleration at the same time, and always has. A few examples are the system-rendered status bar at the top of the screen, or the "Notification Center" that you pull down from the top, or even the little volume adjustment popups. All of those are hardware accelerated and rendered out-of-process in the system UI manager ("SpringBoard"), not inside the app.

Both of those have smooth scrolling and animations, at the same time, overlayed on top of each other. I don't think there's anything here in iOS that shows the lack of "multiple GL contexts"; and I definitely don't think that is a significant contributor to making anything slower.

</comment></comment><comment><USER10> Probably the key paragraph, in relation to the recent discussion:

> In fact it was just not feasible to implement hardware accelerated drawing > inside windows until recently. Because Android is designed around having > multiple windows on the screen, to have the drawing inside each window be > hardware accelerated means requiring that the GPU and driver support > multiple active GL contexts in different processes running at the same time. > The hardware at that time just didn't support this, even ignoring the > additional memory needed for it that was not available. Even today we are in > the early stages of this -- most mobile GPUs still have fairly expensive GL > context switching.

<comment><USER11> So an attempt at a brief summary of (the non-thread-priorities portion of) her post:

The Android model of providing rendering isolation between apps/windows has limited hw acceleration of window contents rendering, which is a cause of some of Android's lagginess. That iOS forgoes this isolation and achieves better responsiveness is a reflection of a different security philosophy.

If this is an accurate summary, it's an interesting example of how platform design is wicked problem with complex interactions between concerns that you might expect to be orthogonal.

<comment><USER12> That sounds accurate to me. I'm not sure if its simply that iOS forgoes isolation or they've implemented isolation in a mechanism that allows for the context to be shared without security consequence.

<comment><USER13> On iOS, all standard rendering is done in a single context by the Core Animation window server which lives in SpringBoard. Only when an app adds an OpenGL ES layer to the view hierarchy does a separate context need to be created. When that happens, the render graph is split into subgraphs that are rendered to surfaces and displayed as overlays (with SpringBoard rendering all the standard layers and the app rendering the OpenGL layer)

</comment></comment></comment></comment><comment><USER14> There is one thing that can be observed here, imho. That iOS was made to be sleek right from the start, from there they sacrificed pragmatic system design, which efficiently crimped a lot of flexibility; flexibility such as 3rd party input, etc, of which has gotta be now implemented from system up.

As an Android user, given my (now) better understanding of the Android architecture design, I am happy and safely say that Android was made for the future, and is only gonna get better from here on.

<comment><USER15> Your views make no sense.

iOS applications also run in separate processes and are just as secure as Android apps. There's nothing "made for the future" in the poor up front design choices the Android team made early on.

In fact, we can clearly see that the iOS team made _all the right decisions_ because drawing/compositing in iOS on a 3GS is faster and smoother than on a shiny new Android Inspiration XL HD 4G.

Also, Dianne shows a fundamental misunderstanding of how drawing/compositing works on iOS. So this entire series of posts is just moot. The other guy (Windows Phone guy) had no idea how Android or iOS worked, either.

The most annoying thing about all this is that none of these views are based on actual facts -- and we all know what happens when someone is wrong on the Internet.

At the end of the day, who cares which one is better or how it's implemented? I don't care about the "Android has windows" explanation because it's irrelevant to me as an end user. It's all about perception.

This entire Android vs iOS thing is getting long in the tooth.

Edit: also, it's going to take a long, long time to be able to pull off something as awesome as Core Animation. Or Core Text. Or Core Graphics. These things have been stewing in OS X for more than a decade.

<comment><USER12> First, what poor design choices did they make? The entire post was attempting to debunk the perception that there was some simple decision that leads to the issues people describe. Second, I don't believe Dianne has a fundamental misunderstanding of anything regarding a mobile OS as she is one of the most preeminent people in the field.

Its frustrating and annoying to read posts like this where you try to walk a "I'm impartial" line and then pepper it with biased remarks that are misleading. You are unlikely to get more factual discussion about the situation then the post she offered, as she's a creditable expert who has written a not insignificant portion of the OS under discussion.

Its clear that iOS has some really technical achievement they should be proud of, but your desire for facts about the situation is subverted by your very own use of statements like "drawing/compositing in iOS on a 3GS is faster and smoother than on a shiny new Android Inspiration XL HD 4G" without anything to support your position. Its not a fact because you make a statement.

<comment><USER16> Well, she does (have a fundamental misunderstanding of something regarding a mobile OS): she is an Android developer, and it is pretty clear from this article that she has no clue what she is talking about when it comes to iOS.

Seriously: you should trust Xuzz from this thread much more than Dianne about issues related to iOS surface compositing. Xuzz worked on jailbreakme with comex, did much of the work for the recent Siri-on-non-iPhone-4S ports, and has written numerous modifications to the code of SpringBoard (the main window manager and graphical shell process on iOS) over the last few years he has spent reverse engineering that system, and most of his posts on this thread are corrections to statements that Dianne seems to have simply made up for this article of hers.

(For "people to watch" on this thread, I should also point out ryanpetrich, who is responsible for such modifications as DisplayRecorder (which records the iOS framebuffer to a video file) and DisplayOut (which splits the framebuffer out to a television), both available for jailbroken devices.)

</comment></comment></comment></comment><comment><USER17> The part about the graphics contexts and process limitation is key, and an area where iOS is far ahead of Android, since iOS does not have that limitation.

(Neither does Mac OS X, and it took Apple years and years to get to that point -- each year at WWDC you'd see more and more of the UI hardware accelerated.)

</comment><comment><USER18> The Android sandboxing feature is frequently invoked as providing dramatic security advantages, but there's really no reason to believe it.

Local privilege vulnerabilities [edit: enabling escape from the sandbox] in Linux kernel are dime a dozen, and Android phones are notoriously outdated wrt security patches.

There simply hasn't been a lot of OS level vulnerability exploitation in Android malware so far. Probably the biggest reason is OS fragmentation + malware apps can just request any privileges they need on the market and the users will haplessly click accept, and the biggest threat to the malicious apps is Google removing them from the Market when they're found out.

</comment><comment><USER19> It's easy to understand the point that window management in Android is complex and this complexity hampers graphics performance. On iOS, one process has the entire screen at a time. There are no widgets, no plugin viewports, no 3rd- party UI - but all this stuff _is_ happening on Android. The question becomes whether this is actually a good paradigm to have for a mobile platform and whether this compartmentalization mechanism is really needed.

For example, take this statement: " _This [window management technique] is also why Android can safely support third party input methods._ " Clearly, the perception at Google is that this model makes Android safe, and in a way that's understandable because the platform is way more open than iOS and thus needs more inherent resistance. But look at the concept of "safe support" for third party input methods. But does compartmentalization of UI operations in this case actually make, say, 3rd-party keyboards safe to use?

<comment><USER20> It all depends on what you mean by "safe". It is certainly possible to create input methods that behave as spyware, that's why Android puts a big fat warning telling you so whenever you switch to a third-party input method.

I think what is meant by safe in this context is that an that is not an input method cannot pretend to be one. Likewise, the interface between the input method and applications means that an application cannot normally wire itself into the input method and monitor everything the user types.

<comment><USER19> Yes, exactly, it's very open to debate what safety in this case actually means.

      I think what is meant by safe in this context is that an
      that is not an input method cannot pretend to be one.

But is that really a concern? If you're putting together a spyware app disguised as a keyboard, why not just include a keyboard and "fool" this protection by actually providing the advertised functionality?

I also believe that the Android people in this specific case define "safe" as "safe from crashes" in the way that a 3rd-party external component cannot easily crash the foreground app because of the windowing and thread-based compartmentalization.

</comment></comment></comment><comment><USER21> HN on previous post: <http://news.ycombinator.com/item?id=3310301>

</comment><comment><USER22> Users: Wow, android is neat, but why is the interface performance so crappy? Google: _silence_ Users: Hmm, I bet it's X, because of ____. Google: No, no, X in android is great, it's awesome, and even if it weren't awesome it totally wouldn't be the cause of anything anyone might think is bad.

Users: Ok, hmm, then I bet the clunkyness and chippiness are due to Y, because of _____ and _____. Google: No, no, Y is actually great in android; android has had Y since the beginning. Users: Ok, so why is the android interface universally clunky? Google: _silence_

"I am not writing this to make excuses for whatever things people don't like about Android"

Dianne, don't you dare insult our intelligence by pretending the worst thing about the android experience is a case of personal preference by a small group of loonies.

<http://i.imgur.com/e8S63.jpg></comment>


"McModerns" that are taking over from McMansions - <AUTHOR> https://www.cbsnews.com/media/10-mcmoderns-that-are-taking-over-from-mcmansions/ <comment><USER2> Oh my god these are so bad. Modernism without taste is just brutally, brutally ugly.</comment>


The Pencil of Nature (1846) - <AUTHOR> http://www.gutenberg.org/files/33447/33447-h/33447-h.html <comment><AUTHOR> Essay, _William Henry Fox Talbot (1800–1877) and the Invention of Photography_

[https://www.metmuseum.org/toah/hd/tlbt/hd_tlbt.htm](https://www.metmuseum.org/toah/hd/tlbt/hd_tlbt.htm)

</comment><comment><USER2> Making calotypes is my hobby! Here's another good resource about Talbot

[https://talbot.bodleian.ox.ac.uk/](https://talbot.bodleian.ox.ac.uk/)</comment>


The PlayStation Web App - <AUTHOR> http://www.satine.org/archives/2011/09/27/playstation-web-app/

<comment><USER2> I'd like to hear more about the Trilithium Platform, Sony's internal Javascript engine that has access to its 8 cores. This is the kind of stuff that'll make people take JS applications more seriously.</comment>


Oracle Enters the AWS Cloud - <AUTHOR> http://aws.typepad.com/aws/2008/09/hello-oracle.html <comment><USER2> Oracle is just 'allowing' you to use the product on EC2. You don't get utility licensing.

See [http://blog.mobocracy.net/2008/09/oracle-does-not-enter- aws-...](http://blog.mobocracy.net/2008/09/oracle-does-not-enter-aws- cloud.html)

</comment><comment><USER3> Oracle has new licensing, but the article doesn't say what it is. $10/hour? $100?</comment>


How to back up your password manager - <AUTHOR> https://www.ctrl.blog/entry/password-manager-backup.html <comment><USER2> Or you can use a local file (like in KeepassXC, or pass), that you can backup or sync yourself.

</comment><comment><USER3> personally I would rather use something like veracrypt for this (or maybe crypotmator if I needed to access the backup from my phone).

you could even just use the same master password for the veracrypt vault if you didn't want to have to remember another master password.

but anyway, the idea of using two online password managers at the same time seems like it would increase the risk of getting hacked at some point? at least with veracrypt you could keep it offline

</comment><comment><USER4> > Many password managers, the good ones anyway, store their customers' > passwords on their servers in an encrypted format. The best password manager > services store them so securely that not even they can access your passwords > if you forget your master password.

And even better ones keep a local copy of your passwords encrypted on your devices. If my password manager ever went down, I could access my passwords on any device that has it configured (phone, desktop, both laptops), and export them in the worse case scenario.

I only really need to worry when I travel. If I lose access to my password manager while traveling, I would certainly have problems. However, that would require my phone, laptop, and the online service to be unavailable at the same time, which seems very unlikely.</comment>


Show HN: Strobee in-browser video splicing (use Chrome) - <AUTHOR> https://strobee.net/index.html?user=146e5040000000&startAt=146e5040000000_11158600000000 <comment><AUTHOR> Goal was to create a platform for sharing user video that would otherwise be too awful to watch. By dropping length, but increasing variety, it's easier to create something like to watch...

More info on why we do this in the browser: [http://www.twak.co.uk/2016/04/browser-video- splicing.html](http://www.twak.co.uk/2016/04/browser-video-splicing.html)</comment>


95% of Programming Isn't Hard (and other random thoughts) - <AUTHOR> https://macwright.com/2020/08/01/recently.html <comment><USER2> My one friend writes code for satellites. My other friend is a security vulnerability researcher working on the Linux kernel. I write code to process terabytes, potentially petabytes of data consistently and performant. I don't really know people who do frontend professionally in my personal life but I can't imagine keeping a webapp serving millions of people on many different devices performantly is easy.

My point is it really depends on the scale or depth of the work you're doing. It's pretty easy to keep things running smoothly for a smaller company or one not doing hardware etc etc but I think this really misses the mark for a lot of work, there's a scale or depth where you can't get away with not using what the author says is only used in interviews.

<comment><USER3> What you described here falls within 5% of all programming jobs.The rest 95% aren't that demanding.

<comment><USER4> I would guess that most satellite and big data code falls into the non-hard category. In my experience working with things that sound similarly challenging, it's usually the case that one person or a small group of people do most of the "hard" part early on and then a much larger team spends years doing relatively simple work expanding on the foundation they built.

<comment><USER2> I think there are a lot of other issues with that and don't think your experiences reflect the norm, or at the least they certainly run counter to mine so far.

<comment><USER5> In my experience with being on a big data team is that most days you don't have to do anything all that hard but it always comes up eventually.

</comment></comment></comment></comment></comment><comment><USER6> What percentage of the population is even intellectually/psychologically capable of programming at a professional level? My guess is significantly less than half. That's not a we're smart and they're not. There's many jobs I'm psychologically ill-equipped to perform. For programming to be easy you have to have just the right amount of autistic/systemizing brain type, which appears to be significantly genetic. Everything in programming is abstract, so you have to be able to hold very large completely abstract systems in your brain. That's a different skill/aptitude than, for example, holding all the working parts of an internal combustion engine in your mind.

Programming is "easy" for only a tiny percentage of the population. That's just regular programming problems, not particularly difficult concepts/tasks I see many posts referring to.

<comment><USER7> I pretty much agree here. I am an example of someone who simply does not have the genes for it, so to speak. I have loved programming since I was a little boy but am horrible at it. I can learn a language's basic syntax just fine (and usually in very little time), and have written many little tools/small apps that I have personally found helpful in automating certain aspects of my life and work. So I certainly value what little bit I can do. But every time I've tried to study a serious book on data structures and algorithms, it's been a disaster. I simply lack basic problem-solving skills. I try but I'm just not good at it. I mean, I can usually come up with working code to do whatever I've ever wanted to do, and I'm certainly thankful for that since it's ok if my personal projects aren't terribly efficient. But professional programming would never be a possibility for me. I'd get laughed out of an interview b/c of the convoluted/entirely-too-complicated ways I solve problems. I just wish I had a good sense of what algorithms/data structures to use where. That would certainly help me a lot! But I'm just not sure I "have what it takes", if you know what I mean, to develop that skill.

<comment><USER8> > I can usually come up with working code to do whatever I've ever wanted to > do

Been working as a programmer for 25 years, and I've never read (or considered reading, or felt the need to read) a book on data structures or algorithms.

Also, I've seen plenty of people who are employed as programmers who simply __cannot __come up with working code. I don't see how you can write working code __without __problem-solving skills, as by definition you're solving a problem by writing working code..?

(I don't really have a point, sorry, this just resonated with me)

<comment><USER7> Yeah, my wording wasn't great, so your confusion with my post is my fault for not being clearer. I obviously can solve problems to some degree otherwise I wouldn't be able to even create the simple tools I've made to solve some problems in my work. What I guess I'm trying to say is that I don't solve them WELL or efficiently. I'll use a DS/algorithm that, sure, technically works and gets the job done but is by no means the most efficient way to do it. Someone who has the common problem-solving sense I lack would have solved the problem more efficiently, more quickly and with more attractive code. That's what I was aiming for.

</comment></comment></comment></comment><comment><USER9> > 95% of programming isn't hard

> It's easy to screw up the 95%, though

To me, those just don't seem like compatible assertions. If something isn't easy to get right, what else do I call it but "hard"?

<comment><USER10> I've been walking for a good number of years now, yet every now and again I'll trip on something, or bump into a wall. I wouldn't call walking hard.

<comment><USER11> I would call walking hard - most animals are just very good at it.

No programmer is good enough to build a walking algorithm that is 1% as good.

</comment></comment></comment><comment><USER12> > 5% or less of programming is hard: it's the stuff that interview questions > refer to. You might need to think about algorithms, might need to try out > multiple strategies before deciding on the one.

The author is correct that most programs don't need complex or clever leetcode type algorithms, but IMO program architecture is just as difficult to get right for any program longer than a thousand lines.

</comment><comment><USER13> The hardest part of programming is finding workarounds for undocumented bugs. And I don't mean the kinds of details people have to be told on stackoverflow after refusing to read the manual. I mean genuinely showstopping bugs with nonobvious workarounds like HTML5 audio didn't fire the ended event in Safari until iOS 13.4. There's a guy who complained about it on his blog for eight years until Apple allegedly fixed it. And I say allegedly because I consider the fix to be broken and I still use a workaround which I had to discover for myself through original research.

The only part of programming which is easy is copying example code from the documentation. Once you build a nontrivial project that solves a real problem you're already working beyond the trivial. Real work gets real challenging real fast. If you're staying within the percentage of programming that's still easy then you're just doing copypasta and not really programming.

</comment><comment><USER14> > every time that someone tries to use JavaScript objects for data, they write > a security vulnerability by way of prototype pollution

I would love to hear more on this, as it makes little sense as written. You never touch prototypes when using data objects, is the author talking about constructors pre-ES6? Or the fact you can shadow methods from the Object prototype? I don't remember seeing any exploits based on that (vs "that's, really often, a problem").

<comment><USER15> Concretely, at least on Node:

        const myData = {};
        myData[rawUserInput()].key = value;

This is vulnerable if rawUserInput() returns `__proto__`: `key` on the prototype may be set to value if `myData` had `__proto__` set. If the hacker controls `key` and `value` then they can effectively modify `key` field on all objects.

[https://github.com/HoLyVieR/prototype-pollution- nsec18/blob/...](https://github.com/HoLyVieR/prototype-pollution- nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf)

A common way is as described by that paper ^

Recursive merge functions, unless if they check for this vulnerability, are often susceptible, since JSON.parse defines __proto__ on its return values.

<comment><USER14> Indeed, though you'll only manage to break or DDOS the server by doing that.

It seems that the Ghost vulnerability explained in the paper relied on the handlebars engine calling the equivalent of `eval()` on a string value, in the global scope, plus a path traversal vulnerability allowing loading a template from node_modules.

Are there are any other examples of this being exploited in a meaningful way? Even if you end up passing raw user input to key and value, user payloads will never be able to define a function, so the possibilities are very limited. I think having every NPM library that does object assignment using a user- provided key be marked as 'vulnerable to prototype pollution' is quite different from it 'being a problem very often' in practice. Happy to be shown otherwise.

<comment><USER15> It could be serious.

Let's say your company's code is open-source, and the attacker knows there is code somewhere like this:

        let state = getState(); // returns empty {} if user not authenticated

        if (!state.userIsAuthenticated) {
           respond(401);
        }

        showBankAccount();

If the hacker is able to set `Object.prototype.userIsAuthenticated` then the auth check is now bypassed.

So I think the break / DDOS is pretty serious here.

</comment></comment></comment></comment><comment><USER16> >Once you're settled in, 95% of programming isn't hard. It doesn't involve algorithms, hard design problems, performance or storage constraints. It isn't worth blogging about.

Once you're settled in ... having dealt with architectural design in a way that allows you to continue doing something with the code for 20 years or more.

OK, sure, 100% of programming isn't hard. But if you think that the hard part is only 5%, you're not doing the right job.

<comment><USER17> I think you're right, but in a different way than I understand that you mean.

Whatever project I'm on I try my best to take on the hardest tasks. This allows me to code against things that are actually a challenge. Large refactorings, risky features, hard we-arn't-sure-if-this-is-possible tasks. This makes 40% of what I do hard. But it isn't because I'm writing software for ICMBs or satellites. I'm the dude that takes on the tough stuff and makes it work, and I think more developers would do themselves a favour if they did the same thing. Maybe you don't need to quit your job in order to change the ratio. If there is work at your present place that seems hard then volunteer for it. It will make you a better software developer.

</comment></comment><comment><USER18> I kind of disagree. When programming isn't hard, it is because it is not done right, and the coder uses repetition instead of higher level abstraction.

Regardless of the programming task, it is usually hard to find the best way to do it, and not trivial to implement it correctly. This is demonstrated by the fact that most code sucks.

<comment><USER19> > When programming isn't hard, it is because it is not done right, and the > coder uses repetition instead of higher level abstraction.

Aren't higher level abstractions supposed to make programming _easier_?

And yes, for the vast majority of programmers programming is easy thanks to existing high level abstractions, and it's usually the business domain that is hard.

<comment><USER20> They are supposed to ... but finding correct abstractions is hard. After a year or two abstractions usually are not correct anymore. That is why "favor composition instead of inheritance" is important because hierarchy of inheritance is fragile abstraction and if you compose things it is easier to swap one thing with other if they have the same interface.

</comment></comment></comment><comment><USER21> Almost everything I've ever attempted to do on my own, once I did enough research into how to do it, turned out to be extremely easy. The only time it's been difficult is when some other person put arbitrary and/or unexpected rules or limitations in place. Examples:

"Oh you want to make a website? You knew how to make a website in 2004? Well too bad, the tools you used in 2004 are now hopelessly broken. New tools have arisen to take their place, but you have to learn everything from scratch."

"Oh you want to make a video game? You learned OpenGL? Too bad that won't work on iOS. Looks like it's back to the studying phase for you..."

"Oh you want to compile Hadoop from scratch? Too bad it's a 9,000-step process, and anything could go wrong along the way."

"Oh you want to add a feature at the company you work for? Too bad someone wrote that module in an unnecessarily confusing way, so have fun tracing through that mess to figure out how it works before you can add the feature."

I've found these cases account for 95% of programming. So I guess I'm saying that 95% of programming is hard.

</comment><comment><USER22> It's as hard as you want it to be, right at the limit of what you're currently capable of dealing with if done right.

I find that with increased experience, writing (any kind of) code is more intense. Because I'm pattern matching 35 years of experience at every turn.

As a result, I tend to write code in short (2-4h) but very intense bursts with plenty of rest in between lately.

<comment><USER23> > I tend to write code in short (2-4h) but very intense bursts with plenty of > rest in between

At any level it's a great idea to ruminate and plan what you're going to do. Alas, current management trends are about keeping developers busy typing — which is something of a vicious cycle.

</comment></comment><comment><USER24> At the end of the day, we all implement systems - large and small. The more moving parts a system has, the more complex its implementation tends to be. Decomposing large systems with moving parts takes many tries to master.

</comment><comment> boris-ning-usds The rest of the 5%... well, that obviously is reserved for naming things.

</comment><comment><USER4> > Once you're settled in, 95% of programming isn't hard. It doesn't involve > algorithms, hard design problems, performance or storage constraints.

It sounds like OP thinks the hard parts are algorithm design and architecture. I wouldn't even really consider those programming. They're things you need to do before you can start programming.

</comment><comment><USER25> I like the article title and agree, the other points the author make are valid but seem like randomly picked issues.

<comment><USER26> He says at the start that he just kept some notes for the last month and was publishing them all

</comment></comment><comment><USER27> TLDR: People are hard, computers are easy.

The only hard part about programming, and computers in general, is other people.

The OC mentions JavaScript, something insightful about data and objects. Just imagine: where would JavaScript be today without people like Brendan Eichmann?

I imagine other industries are more or less the same wrt the work vs the people.

</comment><comment><USER28> I feel like there are two articles here one about politics and the other one about programming. I don't see how they are related in the way the author presented?

</comment><comment><USER29> > The obsession with citing facts in paranoid literature that Hofstadter > mentions is no longer a thing: modern paranoia is untethered.

The paranoid now cite "facts" that are stated somewhere online. They still cite them, though, as though they definitively settled the case.

</comment><comment><USER30> The author should ask himself if he is doing 5% writing (and thinking) or 95% writing.

An honest contemplation of this question would likely result in a very different set of ideas and likely a different presentation format to go along with it.

<comment><USER31> I commit my full force of being to craft the highest quality posts on my personal blog for you, this is really 1% stuff.

<comment><USER32> Thank you for your effort. It clearly shows both in your work which is prolific and creative as well as in your writing.</comment></comment></comment>


Writing a Quickbooks REST API - <AUTHOR> http://metricsapi.com/tour/intuit-quickbooks-rest-api?source=hn

<comment><AUTHOR> I do a lot of freelancing work to build up my small side business. A job I recently took on was to integrate an ecommerce site into Quickbooks using the Quickbooks Web Connector.

If you've ever had to use this software, I'm sorry. It is not friendly. You essentially have to write your own SOAP server that is called by Quickbooks.

Then you have to send them XML in their QBXML format (of which, the documentation only really works in IE, kind of works in Firefox, and not at all in Chrome -- that's right, just reading the documentation requires a specific browser). Debugging is a pain.

So I thought a service that abstracts that would be a good idea. We would provide the Quickbooks WebConnector file to you, you install it, and then start sending your invoice information to a nice RESTful API.

We handle the rest and ensure your data gets into Quickbooks properly. If you're interested in something like this, please subscribe to the mailing list.

PS. I'm doing the same for the Google AdWords API, which is also not a joy to use -- <http://metricsapi.com/tour/google-adwords-rest-api>

<comment><USER2> I'll look at this later, but I used Consolibyte's open source QuickBooks PHP DevKit[1] for a recent client project.

This is not a trivial process, but I didn't have to write my own SOAP server.

[1] <http://consolibyte.com/quickbooks-open-source/>

<comment><USER3> I used the same kit a couple of years ago: once I realised that I just needed to give it a database so that it could manage its own state and let it do its thing, it was generally a breeze.

At the time, at least, there was some weirdness with integrating with the Canadian version, however. Nothing I couldn't resolve generally, and it may very well not be a problem at all anymore.

But yes, '+1' for the QB PHP DevKit.

</comment></comment></comment><comment><USER4> We built an in house solution for communicating with quickbooks. We implemented the soap service and communicate with it via a message queue. The biggest issue we've run into is that the web connector is polling the soap service, so you can wait as long as 1 minute for a response depending on how often the web connector is set to poll. We implemented a work around that forces the web connector to poll more often, but when it is in this "synchronous" mode, the quickbooks file is held open and cannot be closed. I am curious how your api gets around this? If you have a good solution, I think we'd definitely be interested in using your api.

</comment><comment><USER5> i've worked with web connector before, though not extensively. we did invoice and customer imports. no extensive sync or anything. the key is just to write against their giant xsd schemas that are in the install or support folder. also this exists: [https://idnforums.intuit.com/messageview.aspx?catid=56&t...](https://idnforums.intuit.com/messageview.aspx?catid=56&threadid=9164)

<comment><AUTHOR> Yup, and none of that is any fun. As a developer, what would you prefer: writing against their giant XSD schemas or just making a POST request to a URL with invoice information? I'll take REST any day of the week.</comment></comment>


Show HN: Shorten your strings using common abbreviations - <AUTHOR> https://github.com/dnnrly/abbreviate <comment><USER2> Could have just named it "brev" as in brevity

<comment><USER3> alias brev=abbreviate

</comment></comment><comment><USER4> I love little programs that just focus on some one thing. Thank you for sharing it. I'm more interested in reading the code than using it, which I hope is cool.

</comment><comment><USER5> Oh the irony in a tool with a name that is pretty long as far as commandline tool names go, that abbreviates strings.

</comment><comment><USER6> I just submitted a small pull request to fix a few typos in the CLI. Neat tool!

<comment><AUTHOR> Thanks - that's much appreciated!

</comment></comment><comment><USER7> I like it! Since you wrote it in Go, it would be nice to also add a flag to export the result in camelCase, for easier variable naming :P

<comment><AUTHOR> It should already support that. If it doesn't then please feel free to create an issue or even raise a PR. :)</comment></comment>


Ask HN: Golang for Monolith Production Web Application? - <AUTHOR> We are revamping our product from PHP and I have selected Golang considering how much I loved learning it for the past 12 months personally. However, our Lead Architect (the guy who actually will run this) is a bit hesitant since he is not sure how mature Go is for monolith web apps (the usual CRUD/routing/server side templates etc with vuejs for frontend). He is very good at his job so he can pick up any language in a week. We are currently only into PHP as the server side language even though he has a .NET MVC background before he joined us.<p>How do I convince him ? I am the owner so I can tell him to suck it but he is the one who runs it. So he needs to be on board. Pros and Cons ? <comment><USER2> You should first consider what you want to achieve from this "revamp". Are you facing some issue with your existing tech stack?

I'm wary when I hear teams discuss a total rewrite of an existing application.</comment>


Ask HN: How not to be an annoying customer for a designer? - <AUTHOR>

We are working with a freelance designer on our small start up. My partner works on the business side of stuff, and the communications with the designer, while I develop the app.
I get the feeling we are not syncing well with the designer, making it a more 'Give us X' kind of relationship instead of a more mutual creative process.
I want the designer to be proud of the design he gave us. So, from the customer side of this, have you got any tips? (We are working remotely) <comment><USER2> I am a webdesigner and I am currently creating a website for a client. At the beginning the client told me that he wants a nice design, really ease to use, etc. Two days later he sent me a spreadsheet of 'What a top 5 marketing website looks like' full of ads, facebook like boxes, etc asking me to do something like that. As a designer, I like doing "what feels right", not "what it must have" especially if these requests are ads. I emailed the cliend that I would not work on a webiste like that and that I needed much more control over the final design. It helped. He now lets me do what I want to do and most of the time he likes it. He gained trust in me. I also enjoy more adding "must-have features".

While this is the reverse story of yours, I believe what you need is more trust in your designer (or your designer needs more trust in you). It is possible your designer is not enjoying working on your website and he needs more _freedom_. Maybe you should tell him to design it like he things it should look like, and if necessary remove anything that he considers useless.

Tell him to take a few hours and draw a sketch from scratch. Let him experiment. Then, once the quick sketch is complete arrange a Skype meeting and talk it over. Ask him questions, but don't be rude ("We really thing we need to include this feature"). Maybe he simply tells you "It doesn't feel right". Believe him, most probably he is right.

Finally try to reach some agreement. "OK, we will remove feature A, B, C, but we must have feature E and F. Is that fine?". I am sure he will like this and try harder to create a better user interface.

In short: Ask him to make decision. Trust him and give him freedom.

</comment><comment><USER3> This isn't a real answer but... <http://theoatmeal.com/comics/design_hell>

In seriousness, just be aware that sometimes the changes you ask for can seem incredibly simple but have major ramifications for the overall design. Also, treat your designer like he knows what he/she is doing. I don't think there is a designer out there that doesn't want input but to some degree you have to trust their vision even if it doesn't quite mesh up with yours.

I also had a client that spent a month tweaking and tweaking (make the logo bigger, move it over about an inch, add this below the logo, etc.) and then was surprised when their website wasn't available on time. That can be frustrating even if you're getting paid hourly.</comment>


Why Uber and Airbnb Needed a Different Kind of CEO - <AUTHOR> https://hbr.org/2017/01/why-uber-and-airbnb-needed-a-different-kind-of-ceo <comment><USER2> Makes me wonder, how many kinds of CEOs are there? How portable are the different kinds? For example, how would Kalanic do at running GE? To what extent does the success depend on the founding CEO vs. a succeeding CEO?

I'd guess that successful founding CEOs vary in personality and style quite a bit and succeeding CEOs are more consistent. But that's just a theory...</comment>


Ask HN: Is It Burnout or What? - <AUTHOR> Given:
Working remotely for 5 years. Two jobs in the same time. For the last 2 years.
Working as a techlead\teamlead. Got good salary.
For the last month I can't write any line of code. Can't make any more or less useful decision. Can't analyse any required task at all.
Don't want to think about job tasks at all.
This state of mind more or less recurrent. Every 6-8 month. I'm just sitting in front of laptop all the day and browsing some newsfeeds, youtube, twitter. Shitty.
I feel myself useless and weak. Can see all the people around me doing their jobs with smile. All I want to do is just sleep, play games and think nothing.
I know that's happens quite often and more or less common in industry but I want to hear more personal advices. Maybe it will help.
Thanks for listening me. <comment><USER2> You are not useless or weak. You are also more than a collection of job tasks. Working remotely can be very isolating and that isolation can take a toll on your mind and well-being. Self-care isn't something you can skip without consequences. Getting away from the keyboard, getting exercise, spending time with people you care about, taking care of you is a good place to start. Is it burnout? I can't answer that, I can only tell you that other people feel the way you've described and it's not permanent. How you feel is not what you are, and you can (with effort) change your life.

<comment><AUTHOR> The thing I'm considering is quit my jobs, accept playing games and doing nothing for month together with working on my side-project.

<comment><USER2> You might not have to quit. You may be able to ask for a leave of absence or an extended vacation or something less drastic than quitting. You mentioned in another comment that you are living in a country where language is challenge, that can be very difficult to do. Being cut off from normal communication is a very stressful way to live.

</comment></comment></comment><comment><USER3> Make an appointment with a mental health professional. They can help you contextualize what is going on (is it burnout? Depression? Maybe something with a physiological cause? Is your current gig not a good place for you?) way more effectively than a forum of your peers. I'm sure many people here can relate to some/all of what you describe, but that doesn't make them qualified to answer your question as it applies to you as a whole person. Professionals, while not perfect, are much better at doing that.

<comment><AUTHOR> Will try doing it. While it could be a problem, I'm leaving in another country so the language is still the problem.

</comment></comment><comment> coding-columbo I totally understand this and you are not alone, I have been remote working for the same amount of time. The thing that helps me is having a separate room and desk that I call an office. I take myself for walks to get 'away' sometimes you just need to reignite your passion be it by doing something new or getting another hobby that has nothing to do with computers.

<comment><AUTHOR> I'm always having problems with "getting hobby". Think I require it for sure but it is not something that easy to get...</comment></comment>


Windows will start supporting Linux GUI apps - <AUTHOR> https://devblogs.microsoft.com/commandline/the-windows-subsystem-for-linux-build-2020-summary/#wsl-gui <comment><USER2> But when will linux start supporting windows gui apps? It kinda irks me that Microsoft crows on and on about how they love open source now, yet still haven't committed anything that makes this relationship more than a 1-way bridge.

<comment><USER3> They don't own all the IP used in Windows. Even if they wanted to open source Windows, they couldn't without a very expensive licensing agreements with all of the rights holders of technologies they have licensed.

</comment></comment><comment><USER4> Also in this update: GPU compute support. Hopefully these two come together to make GPU gaming possible on WSL... That would make porting Windows games to Linux slightly more frictionless.</comment>


The Odds of Becoming a Millionaire - <AUTHOR> http://www.bloomberg.com/features/2016-millionaire-odds/ <comment><USER2> "The same résumés bearing monikers such as Emily Walsh and Greg Baker received 50 percent more callbacks for interviews than those with names such as Lakisha Washington and Jamal Jones."

I wonder if the fake resumes had the exact same schooling and experience. I've been in a management position at multiple companies over the years and we didn't even look at anyone's name. Companies just want someone that can do the job.

I'm not saying it doesn't happen, but if it was as prevalent as this article is implying, I would think I would have seen it by now.

This study looks at stats only, but doesn't do anything to tell us the underlying reasons. For instance, culture.

Pretty much every Asian family that I know stresses education and success. They will sacrifice everything to ensure the success of their kids.

My cousin was a teacher for inner-city kids, which were majorly African- American. No matter what she taught them in the class room, it was mostly forgotten or ignored when they got home. Many of the parents either didn't finish elementary school themselves, or felt threatened that their children would learn something that they didn't already know. This just wasn't one set of parents, the majority of the parents had attitudes similar to this.

<comment><USER3> The bit you quote says "the same résumés" \- if that means documents that show different schooling and experience, that seems awfully disingenuous.</comment></comment>


I just made something, so how do I sell it (tool for web developers)? - <AUTHOR>

So, now that it is too late, is there even a market for tools for developers? I've seen so many attempts fail. But if there is, how do I improve my pitch?
By too late, I mean I developed an extension to Firebug and made it available for sale[1]. Very version 1, yet very useful for people using some JavaScript frameworks. But shipped. Still embarrassed by the code, so I have it minimized. I can finally start on that refactor. Well, if there is a market...
I focussed my attention on ExtJS because it uses abstractions that happen to map to the DOM, rather than building the other way around. It wasn't built to fit Firebug. So this makes Firebug fit the framework. I have a sucky 60second screencast if you want to know what I mean[2]. Yes, it is silent. So that ought to be the first change, I suppose...
I also used ExtJS because I knew it well, and I wanted to address my personal pain points. I added Dojo Toolkit, SproutCore, and qooxdoo in various degrees of support along the way. The jQueryUI support makes me wince, but it is something, and I have ideas on how to improve it in the future.
I tried to make the site[3] simple in design, and use color in only a few places -- to draw attention to the download button, for example.
I got some great quotes from Mozilla and Sencha, and posted them on the home page.
I suck at copywriting and sales pitches. But I'm trying, and want to learn. Please help!
Thanks!
-steve--
[1] http://www.illuminations-for-developers.com/product/debugger/ [2] http://www.illuminations-for-developers.com/about/ [3] http://www.illuminations-for-developers.com/ <comment><USER2> I'm actively developing a very large scale ExtJS project and this looks awesome. Have you thought about pitching it to Sencha themselves?

I just done a quick google to see if you can extend the Chrome developer tools (as this is what we use in work) and came straight across your posts asking the same question .. it's a shame you can't. But I could quite happily pick up firefox instead, if this extension works as well as it looks in the screencast.

<comment><AUTHOR> They mentioned it at the end of the Sencha conference, back when it was in beta. Hopefully there will be more to come.

BTW: I am in contact with the Chrome people, and have a start on things there...

And the extension does work as well as the screencast... :) Let me know if you have an experience otherwise, and I'll fix it.

<comment><USER2> Nice work.

I just purchased it and will be sticking it under the other developers noses tomorrow (only two other guys and myself). Will feedback on how it fits in.

<comment><AUTHOR> Awesome, thanks!

</comment></comment></comment></comment><comment><USER3> You don't. Developers would rather spend two months building their own than spending a dollar on yours. No matter how awesome. I have been there.

<comment><USER4> In all honestly I don't think that is true, and would really like to see your product.

As a developer unless the utility provides a huge boost in productivity ( which is relative ), or is a tool that i've been looking for a long time.. its not really worth paying for. Also developers tend to be forgiving when it comes to tools and will accept free or open source alternatives more than an average user, again unless their is a perceived huge productivity boost. For example: Firebug was such a huge boost in doing web development, they could of easily charged for this and developers would of payed.

<comment><AUTHOR> Maybe, but I know how much developers have donated to Firebug, and, well, I hope this does better!

</comment></comment></comment><comment><AUTHOR> Someone on #starups mentioned that I didn't post a writeup, so here it is:

[http://www.illuminations-for- developers.com/blog/article/201...](http://www.illuminations-for- developers.com/blog/article/2011/01/07/48809/Introduction-to-Illuminations- for-Developers)

</comment><comment><USER5> I am working on something to help developers sell their products. Feel free to email me (in profile).</comment>


Applicative Functors - <AUTHOR> http://pbrisbin.com/posts/applicative_functors/ <comment><USER2> I like to think of Applicative Functors, Monads, etc as the Design Patterns of functional languages (though I've developed most of my understanding by applying these ideas in JavaScript).

A nice way to think about how they can be used (and the difference between parallel and sequential evaluation discussed towards the end of the article) is in handling promises:

The parallel or sequential composition of a list of promises returns a promise of a list.

The monadic composition resolves each promise sequentially (via the Haskell operator `sequence` or as a cascade of JavaScript `.then` calls).

The parallel applicative composition resolves all promises simultaneously.

<comment><USER3> That is a misconceptio and is only possible if you break monad laws. Monads aren't about sequencing. Just some monads are.

        (+) <$> a <*> b

And

        x <- a
        y <- b
        return (a  + b)

Will yield exactly the same behaviour. Even in evaluation order. And they can be interchanged. It may look like we are sequencing in the second example but that's only true in datatype with sequencing embodied in their monad and application implementation ( State monad). An example of a datatype that doesn't have this property is [a]

<comment><USER4> Even the state monad is not actually sequential. It just appears that way conceptually. It can, just like most haskell code, end up being computed in any order (because of laziness and lambda calculus reordering rules).

For the most part, only "special" monads like IO enforce sequential computation.

<comment><USER5> > For the most part, only "special" monads like IO enforce sequential > computation.

No, IO doesn't either, because of laziness. If you need a demonstration, then, in the IO monad, open a file (using the functions in System.IO), read the contents (without doing anything else that depends on them), close the file, and then use the file contents.

IO still works in data dependency order.

<comment><USER6> That behavior can be seen as a perversion of IO's behavior—it's roughly known as Lazy IO and is considered convenient but potentially very dangerous.

The whole cottage industry of streaming monadic operators like enumeratees, pipes, conduits, io-streams, etc takes "fixing" Lazy IO as a major design goal or inspiration.

Lazy IO depends upon using the function `unsafeInterleaveIO` which, as its name suggests, is considered potentially unsafe---and your example demonstrates why!

</comment></comment></comment></comment></comment><comment><USER7> Great article, but there is one nitpick: you need parentheses in the signature for bind. It should look like

        (>>=) :: Monad m  -- for any monad,
              => m a      -- take wrapped value
              -> (a -> m b) -- and a function which needs it unwrapped
              -> m b      -- unwrap it, and apply that function

Or, written the other way:

        (>>=) :: Monad m           -- for any monad,
              => m a               -- take a wrapped value
              -> ((a -> m b) -> m b) -- and return a function which can take an
                               -- unwrapped value and a wrapped one and
                               -- return another wrapped one

Which also makes the comments on the second one a bit inaccurate. It should read "return a function which takes a (function from an unwrapped value to a wrapped one) and returns another wrapped one."

<comment><USER8> Thanks, fixed!

</comment></comment><comment><USER9> Wonderful piece. A small typo: "Fuctor" in the first code sample.

Edit: I think "dependant" is also a typo. Apparently in British English it is used to mean a dependent in the sense of a child who relies on a parent for support, but when it's used as an adjective, "dependent" is still the correct spelling, even in British English.

<comment><USER8> Thanks! Both fixed.

</comment></comment><comment><USER10> The example applicative still respects sequencing - to do what the last paragraph claims to be doing you'd need to use some kind of nondeterministic gather.

Honestly I think the differences in that example are pretty superficial. The real advantage of applicative is that because the assumptions are weaker, some things that aren't Monads are Applicatives.

<comment><USER11> >Honestly I think the differences in that example are pretty superficial.

For most instances the difference is superficial, but for some problem domains the difference can have a pretty big impact.

All of this is because Applicative composition (using apply) statically guarantees there is no data dependencies between the (possibly) effectful computations. Monadic composition (using bind) can (but might not) introduce a data dependency which can only be reasoned about at runtime.

Facebook's Haxl project is an interesting example of this: [http://www.cs.ox.ac.uk/ralf.hinze/WG2.8/31/slides/simon.pdf](http://www.cs.ox.ac.uk/ralf.hinze/WG2.8/31/slides/simon.pdf)</comment></comment>


Trying to build a web scale semantic image search. Anyone wants to hack with me? - <AUTHOR> https://medium.com/@deepmike/hacking-on-semantic-image-search-f8e4ca55278b <comment><USER2> @deepmike, Interesting project. I have seen something similar on the web, namely here, [https://github.com/paucarre/tiefvision](https://github.com/paucarre/tiefvision).

Would like to collaborate. Send me a message on hackernews, if you feel likewise.

<comment><AUTHOR> I did see tiefvision, yes. Somehow, their approach didn't quite work for me, although that was the first attempt. Maybe it's good when you have only few classes of images ("only dresses") and modest amounts of training data.

..there are no direct private messages on HN, right? I have an email in the blog post, just in case there is no other way

</comment></comment><comment><USER3> How are you planning to pay for webscale computational resources?..

<comment><AUTHOR> Good question. Right now I am using AWS spot instances + credits bought for Bitcoin. This makes the thing maybe 70 times cheaper than on-demand instances paid normally.

But when I go above several billions of images, I'll need some investment for sure :-)

Tineye indexed about 20 billions of images, and my estimates show that I should be fine with my own resources up to 1B. This is good enough to improve and test the tech

</comment></comment><comment><USER4> what will this do that google / baidu search dont do

<comment><AUTHOR> Google searches for exact match + image classification + text search, and also recognizes some famous images (such as Eiffel tower). E.g. if Google sees an unfamiliar image, it converts it to something like a "red swivel chair", and searches for that (so no way it can find the same object unless it is really unique).

I want to make it possible to just snap a picture of anything and find this object. Try to take a picture and search for it on Google Images.

Although, I should say, image search in Baidu works way better than Google's

<comment><USER5> How do you suppose the program should perform image recognition better than existing tools? Not a lot of experience in this realm, just curious</comment></comment></comment>


Show HN: Attributed strings in Swift 4 - <AUTHOR> https://github.com/Nirma/Attributed <comment><USER2> ?? why is this lib on front of HN ? i mean, it's a nice wrapper around a dictionnary, but NSAttributedString isn't really a hard part of the api, nor is it really awkard to use (especially since all the keys have been properly named in the latest releases)...

<comment><USER3> Right? Not mention the "crashes" mentioned in the repo will be caught as soon as you test it...

</comment></comment><comment><USER4> I do hate using attributed Strings, but tbh not enough to install an external dependency for it. Some syntactic sugar is not worth the overhead

</comment><comment><USER5> I've had the pleasure of working with Swift for a few months last summer to develop some iOS prototypes. To borrow something Douglas Crockford said about JavaScript and the DOM in 2006[1], Swift is a pretty good language saddled with an awful API. I cannot believe that this is the stuff a multi-billion dollar company (Apple) is giving to developers to build the billion dollar "App economy".

As an example: To this day I have no idea what media formats are supported by AVAudioPlayer on iOS[2]. The documentation's links (Cmd+F "iOS Hardware and Software Audio Codecs") have been broken for so long that not even the Wayback Machine has a copy. And Googling for the same information only gives me Stack Overflow answers that references the same broken link. I suspect at this point not even Apple knows what formats their own audio framework is capable of playing.

[1]: [https://yuiblog.com/blog/2006/10/20/video-crockford- domtheor...](https://yuiblog.com/blog/2006/10/20/video-crockford-domtheory/)

[2]: [https://developer.apple.com/documentation/avfoundation/avaud...](https://developer.apple.com/documentation/avfoundation/avaudioplayer)

<comment><USER6> I think the API's for iOS aren't that awful but they've been designed in a different era for a different programming language. Untyped dictionaries as parameters for a method that actually will crash if you supply the wrong value for the wrong key is just against pretty much any philosophy that's behind Swift.

Also the current state of how ViewControllers interact with each other and the views just doesn't work too well with Swift. I tend to use coded views instead of Interface Builder just to get rid of those IBOutlets that only get set after init, forcing me to make them optional or crash-prone force unwrapped.

In Objective-C in conjunction with a clever type replacement for the root view it actually isn't so bad because everything is optional anyway.

It's impossible to overhaul the whole SDK without freaking out developers, but step by step things improve. A compile time error for outlet problems would be a good step.

<comment><USER7> Re: avoiding IB, [https://github.com/SnapKit/SnapKit](https://github.com/SnapKit/SnapKit) is a lifesaver, a lightweight DSL that nearly 1-to-1 wraps around AutoLayout APIs.

<comment><USER6> Tried it, didn't really like the syntax but Cartography has some performance problems so at the moment I'm back to hand rolled wrappers that are somewhat leaky but a lot less verbose and more readable:

        Constraint.space(imageView, .horizontally, to: textView, distance: 8)

I can imagine going back to SnapKit though. It really did what it should do.</comment></comment></comment></comment>


Rust vs Go - <AUTHOR> http://jaredly.github.io/2014/03/22/rust-vs-go/index.html

<comment><USER2> As someone who has written a fair bit of Go code, I also find myself keeping a close eye on Rust. The things that really appeal to me are the possibility of immutable (by default) types, thread-local memory (ie. owned pointers), no null pointers, and generics. These are all basically aspects of the type system that make concurrent programming safer and more predictable.

<comment><USER3> I've also written a fair bit of Go and have recently taken a full dive into Rust [1, 2] and it's been a ton of fun so far. I really love both languages. Their features and goals have a pretty small intersection, but I enjoy both a lot.

If you want to take a dive and are willing to put up with a little instability, now wouldn't be a bad time. The 0.10 release appears to be on the horizon and they just released binary installers, which should make tracking tip much easier: [https://mail.mozilla.org/pipermail/rust- dev/2014-March/00922...](https://mail.mozilla.org/pipermail/rust- dev/2014-March/009223.html)

[1] - [https://github.com/BurntSushi/quickcheck](https://github.com/BurntSushi/quickcheck)

[2] - [https://github.com/BurntSushi/rust- csv](https://github.com/BurntSushi/rust-csv)

</comment></comment><comment><USER4> Sounds like you would like Haskell (which Rust was heavily influenced by.)</comment>


The CEO who took a pay cut to give his staff a $70k minimum wage - <AUTHOR> http://www.theguardian.com/society/2015/nov/29/future-of-work-dan-price-gravity-ceo-cut-own-pay-to-give-staff-increased-minum-wage <comment><USER2> Substantial discussion from just over 7 months ago:

[https://news.ycombinator.com/item?id=9388168](https://news.ycombinator.com/item?id=9388168) (102 comments)

and here:

[https://news.ycombinator.com/item?id=9371854](https://news.ycombinator.com/item?id=9371854) (224 comments)

and here:

[https://news.ycombinator.com/item?id=9375978](https://news.ycombinator.com/item?id=9375978) (51 comments)

If you're interested in what the HN "community" thinks about this, those discussions might be worth reading about. If you want to have a say, you'll need to do it here, as those discussions are now closed.

It's really not clear if this article adds anything new - I wonder why it's re-surfaced.

<comment><AUTHOR> Ah, thanks, those threads are great reading. Yeah there's not too much new here, although I was surprised to read that some employees and customers got out, apparently in protest to the pay raises.</comment></comment>


Ask HN: How do you store customer-supplied (POC) data? - <AUTHOR>

How would you handle/store customer-supplied data and/or code for a POC? Store it in git? It would be nice to have version control to know what arrived when and what changed when. What if it's a LOT of data (TBs). Store it in an S3 bucket or a DropBox?<p>We'd like something that gives our employees shared access, version control, is relatively inexpensive, is reliable, etc. <comment><USER2> I think (though not from first-hand experience) there may be some ugliness in keeping large binary data in git ?

If the data is reasonably small, then I would pick S3 (or some other redundant cloud object-storage) as an easy and disaster-proof solution.

If it gets big, then access bandwidth and latency and cost may all be a problem. Maybe a master copy in S3, and a copy on hard disk of some machine near the benchmark system ?</comment>