Show HN: Pagoda, a Zen-mode Jekyll blog editor - <AUTHOR> https://github.com/alagu/pagoda#pagoda-----

<comment><USER2> I only had a chance to gloss over it but it looks great. I love the fact that it uses Jekyll and not rails like Obvtse.

Can you use Jekyll plugins?

Does it output a static website?

Is it possible to write the posts using mark down instead of the web editor?

Not so much a question but a suggestion, you should have a version of this hosted on AWS/Heroku so people can see it live.

<comment><AUTHOR> _Can you use Jekyll plugins?_

I haven't tested with plugins. But I doubt if it would work. It works great for Vanilla Jekyll with Markdown.

 _Does it output a static website?_

This is independent of your jekyll site generator. What it does is, gives you an editor for your files inside _posts. It understands yaml matter and saves in Jekyll format.

 _Is it possible to write the posts using mark down instead of the web editor?_

The web editor isn't rich text. You edit in Markdown in the web editor. It is an easier way of creating new posts.

 _Not so much a question but a suggestion, you should have a version of this hosted on AWS/Heroku so people can see it live._

Totally agree. I had thoughts on hosting a demo site. I'll do it.

<comment><USER2> Would be you interested in teaming up to make a separate project to provide the layout to make your blog look like a svbtle blog? I used to Obvtse but I didn't like it because it the over head of a Rails application.

<comment><AUTHOR> Apart from svbtle, there are lot of themes that are unique and beautiful (of course with jekyll as backend):

\- <http://clayallsopp.com/posts/rubymotion-year-one/>

\- <http://paulstamatiou.com/responsive-retina-blog-design>

\- <http://zachholman.com/posts/left/>

I think dcurtis should be already pissed off that I ripped his design. So not sure about doing it again :)

</comment></comment></comment></comment><comment><USER3> This looks very nice, I think I'll be using this to write my blog posts in the future. Just one whinge: Jekyll 1.0 now has support for a _drafts folder. You might want to consider using that instead of 'published'.

<comment><AUTHOR> Thanks for bringing this up. I haven't upgraded to Jekyll 1.0. Will add this soon.

</comment></comment><comment><USER4> This looks great, I'm definitely going to give it a try. Thank you!

</comment><comment><USER5> This is great. I started working on something very similar to this a few weeks ago. Your project is much more mature, so I may end up contributing.

<comment><USER6> Samesies. Sad but happy to see someone is further along than I was.

</comment></comment><comment><USER7> If you had this as a hosted service, I'd sign my clients up for it!

<comment><AUTHOR> That is a good idea. But where do you have your jekyll blog repo? Github?

</comment></comment><comment><USER8> So I guess "Zen" is SF-hipster for "simple" now?

<comment><USER9> > So I guess "Zen" is SF-hipster for "simple" now?

Well, if you eliminate or substantially expand the geographical restriction, and consider "now" to be for the last few decades or so, sure.

The route to the usage may be kind of weird, but it hasn't been _novel_ to use "zen" for "simple" or "minimalistic" for quite some time.

</comment></comment><comment><USER10> wish I wasn't such a noob. good job on the typography and thanks for contributing.

</comment><comment><USER11> Very cool.

<comment><USER11> Edit on your android phone: <http://blog.teddyhyde.com>

<comment><USER11> Though, I have to say, Pagoda by itself is an awesome project because it supports mobile devices as well.

</comment></comment></comment><comment><USER12> This is awesome!

</comment><comment><USER13> <rant>

This "pop" usage of zen hurts my religious sensibilities. zen is about being a lotus in a dirt-pool.

I use a custom aspell dictionary for writing in German.

I use a word count status bar.

I use dumb vim aliases to correct "fro" to "for".

I have aliases for unicode symbols.

I have a single bash function that does the editing and push on save.

Isn't my dumb solution better than yours, for me atleast ?

WTF is so zen about full-screen ?

Why aren't you solving _real_ problems for bloggers, getting heard in a sea of me-too's, separating advertisers(propaganda) from truth.

</rant>

edit: Grammar based correction. I'd pay for that, having corrected some just now :)

<comment><AUTHOR> _This "pop" usage of zen hurts my religious sensibilities. zen is about a being a lotus in a dirt-pool._

I'm sorry about it. I assume the word is also used in a sense of being calm and out of clutter.

 _Is't my dumb solution better than yours, for me atleast ?_

If your solution works for you, it is definitely better. If you think others also would subscribe to your solution, do post it.

 _WTF is so zen about full-screen ?_

IMHO, Zen is not just about fullscreen. It is about how much minimalistic and uncluttered your experience is.

 _Why aren't you solving real problems for bloggers, getting heard in a sea of me-too's, separating propaganda from truth._

I didn't start this project to solve problems for bloggers, there are plenty of them solving it really well. It is a niche problem that I had.

<comment><USER14> _I didn't start this project to solve problems for bloggers, there are plenty of them solving it really well. It is a niche problem that I had._

This. The startup-oriented audience sometimes forgets that people don't always start a project that scratches a universal itch. Sometimes you just want to make a small bit of your own life better and then share the solution with the world, just in case it helps someone else, too.</comment></comment></comment>


Make Bitcoin Great Again (with Monero's Full Privacy) - <AUTHOR> https://freedomnode.com/blog/61/make-bitcoin-great-again-with-monero-full-privacy <comment><USER2> If you care about Privacy in your crypto Monero really is the current fore runner. BTC is only pseudonymous and given KYC of the exchanges everything in bitcoin land can be traced.

[https://twitter.com/DelRayMan/status/824697015523246080](https://twitter.com/DelRayMan/status/824697015523246080)

FBI love the open ledger.

Anyway given this is a tech site, here are some Monero based privacy techs you might be interested in

\- RingSignatures [https://en.wikipedia.org/wiki/Ring_signature](https://en.wikipedia.org/wiki/Ring_signature)

\- Stealth Addresses [https://getmonero.org/knowledge- base/moneropedia/stealthaddr...](https://getmonero.org/knowledge- base/moneropedia/stealthaddress)

\- RingCT - [https://getmonero.org/knowledge- base/moneropedia/ringCT](https://getmonero.org/knowledge- base/moneropedia/ringCT)

And some more information from their lab which is always interesting

[https://lab.getmonero.org/](https://lab.getmonero.org/)

</comment><comment><USER3> Bitcoin has never been "great". The market cap is miniscule compared to some unicorn startups and a killer use case hasn't been developed to grow the tech virally. Continuing to talk about dark nets with the tech is only going to tarnish the image people have, which is unfortunate given how awesome the trust is that it embodies.

</comment><comment><USER4> TL;DR - Sell BTC on Shapeshift for XMR, Sell XMR on XMR.TO for BTC.

You're basically tumbling the coins through third parties. In reality this has little to do with BTC/XMR but more of a generalized strategy to obfuscate via alt-shifting. You could do the same via Changer, Coinigy, or any other similar service.

</comment><comment><USER5> I'm all for monero, and have been keeping my eye on its development.

An important aspect of a private cryptocurrency is fungibility, which is something that only a truly private currency can provide. Bitcoin's public ledger means that coins found to be used for illegal purposes can be seized. This creates a greater demand for newly mined coins, and a lesser demand for older coins. Monero's transactions are hidden by their nature, so each monero is of equal value.</comment>


A New Coding Project Every Week at Code52 - <AUTHOR> https://github.com/blog/1024-a-new-coding-project-every-week-at-code52 <comment><USER2> Great mission statement. Nice to see what you've been up to.</comment>


Is Anyone Making a Data Processing Unit (DPU)? - <AUTHOR> For computer games we have the Graphics Processing Unit (GPU) which is great for doing lots of tasks in parallel, and now GPU has found uses in machine learning and bit-coin mining. Google has developed the Tensor Processing Unit (TPU) for neural network type computations.<p>Is anyone developing a Data Processsing Unit (DPU) designed for data manipulation tasks such as group-by, joins, and sorting? There's some effort to code GPU to do some data processing, but I feel like data manipulation is specialised enough to warrant its own hardware. There is definitely a market for it. <comment><USER2> TerraData used to have something along the lines that you describe for DB2.

The major bottleneck with databases is the storage media, i.e. disk drive arrays. Since these are always orders of magnitude slower than CPU bound operations, databases would only minimally, if at all, benefit from a DPU.

Even if you consider memory-resident only databases, once you go beyond cache memory access times become a big concern. Naturally still faster than disk, but compared to cache access times still a significant issue.

It might be possible to program FPGAs for some of the most critical operations. However, the CPU to FPGA interconnect could then become a problem.

<comment><AUTHOR> Interesting. I saw a paper talking about implementing radixsort of FGPA see [https://news.ycombinator.com/item?id=10939681](https://news.ycombinator.com/item?id=10939681) and [https://ieeexplore.ieee.org/document/7168848?denied=](https://ieeexplore.ieee.org/document/7168848?denied=)

I am interested in trying some of them.</comment></comment>


Most Americans' Wages Have Actually Declined Over the Past Year - <AUTHOR> http://nymag.com/daily/intelligencer/2018/06/most-americans-wages-have-declined-over-the-past-year.html <comment><USER2> I think it would be unusual to see wage gains.

Wage gains at this point would occur when labor pressures / basically existentially threatens capital, and probably nothing else. We don't see a lot of labor pressure; there is no organized labor movement left anymore.

There has been more and more talk about developers unionizing, although less about money and more about ethics (e.g. the AI stuff with Google).

I say that to suggest we might see other areas unionize, and obviously they will demand more money, and then wages will rise.

Unfortunately, the catalyst for pressure on capital / resurrection of labor power might be a "more-severe-than-2008" style depression. Because even if wages aren't rising now, things are kind-of-sort-of good / not terrible for a lot of people. I think most people would be scared to risk it if life is bearable.

Such a recession (if it occurs) would undoubtedly strip away any of the defenses of the ruling classes that remained after 2008 (and have slowly been hammered at ever since), so the ppl with the power will be weak and those with the demands will be extraordinarily motivated and with nothing to lose.

<comment><USER3> [https://www.washingtonpost.com/news/wonk/wp/2018/06/13/a-min...](https://www.washingtonpost.com/news/wonk/wp/2018/06/13/a-minimum- wage-worker-cant-afford-a-2-bedroom-apartment-anywhere-in-the-u-s/)

Most minimum wage workers can't afford a 1br apartment in most of the country. "Kind of sort of not terrible" may actually be a high target to aim for.

<comment><USER4> One of the surprising things about poverty statistics is that you find that most people classified as living in poverty are families, because your expenses go up drastically.

Many young people - eg those making minimum wage - live with roommates or in studio apartments and don't really feel significantly disadvantaged by the fact that they can't afford a 1br apartment.

I say this not to say that everyone is doing fine, but that the details can matter a lot.

On a different note, for a fixed amount of housing stock, it is a purely positional good, you can't improve the number of people who can afford a 1br by simply paying people more, you have to build more, or enforce strict rent controls which makes it not a problem of income, but one of luck and inevitably corruption.

<comment><USER5> I recall an interview with E.B White who just, incidentally, as part of a larger answer, mentioned he roomed with, I want to say three, other guys when he first graduated college and moved west (to SF if I recall). That he had roommates at that agr seemed to be stated with nonchalance that he would use to set the stage, like, to mention he was eating lunch with friends when something interesting happened.

<comment><USER6> Is it unusual to have roommates after you graduate university in the USA?

In New Zealand it's considered normal to share a house until you have a long term partner who you move in with, then you find your own house.

I know people in their 30's who still share a house or apartment. It's a social thing as much as a financial thing, your roommates are like platonic partners.

<comment><USER5> I personally spent the following six months with 2 roommates and the next six months on a ship with 6 roommates in a room slightly larger that my parents' closet.

<comment><USER6> Since we're comparing stories, I spent 16 months living in backpacker hostels, including 12 months in the same one.

People always ask me how I managed to live like that, but they don't realise that you tend to adapt to your living conditions fairly quickly. If you can manage a couple of months, you can manage a year.

It's actually weird for me to live in a house with only a couple of other people now. I got so used to having people to hang out with practically on tap. There's always somebody to drink with, or watch a movie with, or snuggle up next to. It's strange for me to come home from work to an empty house.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> > There is essentially no evidence that the president's tax cuts (his sole > piece of major economic legislation) did anything to significantly improve > America's macroeconomic performance.

This is probably true. But there's also no evidence to support that it hurt either. It's quite disingenuous and misleading to make such claims when there hasn't even been a single year of tax filings since the new tax policies have taken effect. Policies, especially tax policies, have long lag effects.

Also, there are so many variables and other factors to consider that it is impossible to think so 1-dimensionally.

<comment><USER8> > But there's also no evidence to support that it hurt either.

Yes, there is. People seem to forget that a tax cut is actually a government subsidy. Coupled with increased spending, if the assumption is that if the macroeconomic performance hasn't been improved that means it hasn't been hurt, then it remained constant despite the 'cuts' \+ 'increased spending'. Which means that it could have grown/improved if the tax cuts were not in place.

<comment><USER9> "a tax cut is actually a government subsidy" - only if you believe that all money earned by residents of a country is actually the property of the government, for them to distribute as they see fit.

<comment><USER10> Government provides services. Services cost money. That may sound like a complicated and largely unbelievable concept but it's true.

<comment><USER11> That's not a coherent rationale to say a tax cut is a subsidy.

Let me guess, cutting welfare payments is stealing?

<comment><USER8> [https://www.investopedia.com/terms/s/subsidy.asp](https://www.investopedia.com/terms/s/subsidy.asp)

And yes, cutting welfare payments while welfare payouts are constant/growing will be taking money from other sources to keep the balance. So depending on one's definition of stealing, it can be.

<comment><USER7> You mean welfare taxes and welfare payouts?

All of this seems like gross oversimplification and it worries me that it is so common.

Words have definitions and meanings and when you conflate them you reduce your ability to understand and reason about the world.

I see why people think not doing something is equivalent of its opposite but this is not the case.

Not taxing someone is not the same things as subsidizing them for the same reason that not expressing hate is not the same thing as expressing love. Not attacking someone is not the same as healing them. Hospitals can't heal people by simply not attacking them.

Police reduce violent crime but it would be inaccurate to say that police are the same as hospitals because they both reduce personal injury.

Not doing harmful drugs and studying both make you smarter, but not doing drugs is not the same as studying.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> I was just complaining about articles like this. If you are discussing a trend, you have to show a time series graph that demonstrates the trend you are claiming. Anything else is blather.

There are three graphs, none of which are about wages.

Call me crazy, but I would like to see a graph of, you know, "most Americans' wages" over the last few years if we are talking about the trend in most Americans' wages.

</comment><comment><USER13> The problem with articles like these is that they leave out the fact that non- wage benefits are consuming more and more of the compensation growth that may have otherwise gone into wages.

Particularly healthcare costs… largely accelerated since the ACA, which NYMag supports wholeheartedly and is IMO a glaring omission in an article like this.

<comment><USER14> You'll have to cite evidence the ACA is accelerating it especially when the majority of health care economists disagree with that.

<comment><USER15> That and most wage workers are not part of the public insurance pool and are therefore mostly insulated from the ACA. Any increased costs due to insurance requirements or regulations should be stabilized by now for employer plans.

</comment></comment></comment><comment><USER16> There is a feeling among some economists that some key data like inflation, wages and unemployment are fudged by government departments to make them look good.

Things like the definition of "unemployment" have changed. If you work 1 hour a month you are employed. If you have been unemployed for longer than 3 months, you are no longer among the unemployed. The reasons cited by the officials always sound rational, but their net effect is to make government statistics look a lot better than they actually are.

There is a discussion of this here [http://www.shadowstats.com/alternate_data/unemployment- chart...](http://www.shadowstats.com/alternate_data/unemployment-charts) or here [https://www.sprottmoney.com/Blog/big-mac-index-suggests- amer...](https://www.sprottmoney.com/Blog/big-mac-index-suggests-america-in- decade-long-depression-peter-diekmeyer-30-042018.html)

</comment><comment><USER17> These were labor and manufacturing jobs that were created and actually the retail jobs took a hit according to this: [https://www.marketwatch.com/story/half-of-new-jobs-were- crea...](https://www.marketwatch.com/story/half-of-new-jobs-were-created-in- these-5-states-2018-01-26)

If I read that article in combination with the one we're discussing it looks like there is a race to the bottom whether its temp jobs or contractors. For instance here in Florida we employ lots of people in the hospitality industry and in the outskirts of those bigger cities (Tampa Bay for example) average wages are so low its shocking. Just take a look some time, whether this is good or bad is up for you to decide. For me I think unless we subsidize education more and do it fast that will be the new crisis.

</comment><comment><USER18> Wishing for a version of this article for those who don't care about Trump or the debunking thereof.

</comment><comment><USER19> Yikes, what happened to impartial (or at least the apperance of it) reporting? This thing reads like a straight up hit piece on Trump. It's impossible to take something like this seriously when it's so obviously slanted. Sad to see it on the front page of HN.

<comment><USER2> This article mentions the Koch Brothers, as if they are allied with Donald Trump. They are not. Donald Trump actually hates the Koch brothers (or at least his base does), and there is deep hatred for them on the comments section of Breitbart. Steve Bannon ha basically accused the Koch's of treason.

One way of viewing Trump's actions might be in terms of "crisis theory", or the idea in the 70's to destroy the welfare system by overpopulating its sign- ups, thus forcing the creation of something new.

He pouring gasoline on the economy to ignite and bring about its ruin. If you're poor right now, you can probably live in some very creative ways. The wealthy are not very good at dealing with large declines in income, as evidenced by the German billionaire who killed him self in 2009 after his net worth dropped from $8 billion to $5 billion: [https://www.reuters.com/article/us-merckle-newsmaker-sb- idUS...](https://www.reuters.com/article/us-merckle-newsmaker-sb- idUSTRE5055O820090106)

The opposite goal of this is the elites of the world who want to run a steady, slow-mo bubble ala Japan of the last 25 years. It definitely would be stable and work, but it would preserve the status quo and not really offer anything new to the working class.

<comment><USER20> Sounds like accelerationism, which is a Marxist theory of destroying capitalism by helping it reach excesses that cause a systemic collapse. Perhaps the far right and the far left and not so different in matters of eschatology.

<comment><USER21> Accelerationism could be advocated by anybody who wants radical change that the majority of the public are not on board with, under the belief that the present course will bring more people to agree with them. If it makes sense to the Marxists, it probably makes sense to the far right as well. Of course if they miscalculate, they just end up working against their own interests.

</comment></comment></comment></comment><comment><USER22> Unemployment sinks to record levels, is this celebrated?

Not at this 'news' source. Here the argument is twisted to be about tangential issues. Odd, there was none of this a few years ago...

<comment><USER15> Or, and this may just be a crazy thing to think, unemployment is at historic lows so why aren't real wages rising is a valid question to be asking and explaining.</comment></comment>


How LINE is turning Instagram into an ecommerce app in Thailand - <AUTHOR> http://rude.vc/40z8 <comment><USER2> "Few e-commerce specialist investors in Europe seem to be waking up to the mind-boggling potential of e-commerce in Southeast Asia, at least beyond Singapore."

That's because there are huge barriers to overcome for e-commerce in Thailand.

1\. Lack of access to bank cards and credit cards that work online. Most people bank here with paper books. This is why 7-Eleven pay (cash for vouchers that work online) and other offline solutions have taken off.

2\. People don't trust banks, the sellers and most importantly the Thai postal service to get the item to them. Sure you could use private couriers, but they are prohibitively expensive.

3\. It's hard for Companies to find payment processors. Paypal operate in Thailand but are more stringent that other countries because of the fraud that goes on here.

<comment><USER3> I think the real problem is more of that people hates fees. Any kind of fee, no matter how small it is. That's why most Facebook/Instagram stores in Thailand always have at least 2-3 bank accounts for the buyer to pay to, each from different banks. Inter-bank transfer cost from 25 THB to 35 THB (about $1) depends on bank and amount while same-bank transfer is free.

This fact plus how hard it is to get payment processor to talk to you is really hurting the credit card adoption rate, despite acquiring a card is very easy here in Thailand (I have 5, 3 of which they ask me to have one). For example, K-Bank Payment Gateway requires you to sign lengthy documentation and need to pay them 200,000 THB ($6,500) as a reserve fund and still require redirection to the bank website to make payments (with 3DS, success auth callbacks and all.)

Using PayPal is possible, but transferring money from PayPal to bank account here still isn't very straightforward. It involves either cheque, or routing the money through BBL NYK, each with its own set of fees. I'm not sure if this has changed because it has been a while since I used PayPal to accept payments, but for social network merchant it is still a hassle.

In Thailand (and Vietnam) there is [http://get.page365.net/](http://get.page365.net/) who tries to tackle this problem about managing social network stores and payments. I've heard a lot of their successful stories, which may implies there's still a lot of opportunities in this market. (Disclosure: one of their founder is my close friend.)

<comment><USER4> As a foreigner with a new company in Thailand (and a couple of companies setup around the same time in Australia too) I don't think the banks specifically are the problem.

It's a lot of f*cking around to get a merchant account in Australia too - it's only because of newer payment providers like Stripe and Pin (AU only) who don't require a merchant account, that it's feasible for a small bootstrapped company to consider accepting credit card payments in Australia.

Here in Thailand it seems there is much less demand for online services, so there has been much less pressure/incentive for innovation in the payments space.

Omise are a reasonably new player (similar concept to Stripe or Pin), and seem to be tackling this gap in the market, however I'm not sure how fast they're taking off. I'm still waiting for USD support (I want to be able to charge foreign clients in a known currency) but no specific word yet on when it will be available.

<comment><USER3> Personally, I believe this is a chicken and egg problem. Lack of a good way to accept online payment is partly the reason why online services here couldn't take off as fast as they should, and that in turn caused the lack of pressure for innovation in the space you speak of.

However, with the recent stories of Ookbee and Stock Radars, or even how Uber becoming a real threat to Taxis, I'm sure the demand is only growing larger and larger, even more so now that prepaid cards are really easy to get (you can buy one at 7-11). If the payment experience is good enough that it increase sales, people might eventually quit bothering about the fees. So to me, the missing link right now seems to be a payment gateway.

I have been working with Omise under contract for a while (I'm omise-python[1] maintainer). I'm not sure to what extent I'm allowed to speak about the plans, so I can't really answer your question (sorry). In my opinion, I'm really glad that Omise is tackling the payment gateway problem. Especially how nearly all other players in Thailand require redirection to their payment page to accept payment (some even require successful redirect back to merchant's callback url to finish a transaction) having someone who say "you hate that redirect? we too!" is really reassuring.

[1]: [https://github.com/omise/omise-python](https://github.com/omise/omise- python)

</comment></comment></comment></comment><comment><USER5> To me this looks like an organic extension of how Thai people go about engaging retail and service industries. This is a country where you step out your door and there are street carts soliciting you with every product and service you could want. This is taking that type of p2p business interaction which Thai people are comfortable with and expect and moving it to the internet.

</comment><comment><USER6> Using Instagram/Kik in a similar fashion is quite popular among glassblowers in the US. People post their wares on IG and say 'kik me for prices'.

<comment><USER7> Glass blowers = selling bongs for dabs (highly concentrated thc oils)

My cousin showed me over Christmas what this scene looks like. There's a bustling market on Instagram of "glassheads" buying and selling wares under pseudonyms. It's super interesting, and people are spending a lot of money. Obviously transactions take place offsite, but instagram is entirely the conduit.

<comment><USER6> Essentially. "Bongs for dabs" has been the most thriving sector of the artistic glass market for several years now. The tag #glassofig is a good place to start for anyone interested in checking out the artistic glass smokeware and jewelry market on Instagram.

The majority of borosilicate flameworking artists are independent and Facebook and Instagram are important to most people's marketing, if not sales. Some people make a living solely from selling on Instagram. Payment is a problem in this market, as pipes are forbidden by PayPal and other processors, despite being sold in all 50 states and being without question of legality in many.

</comment></comment></comment><comment><USER8> Instagram is used a lot to promote similar products in Turkey as well. In fact people try to create popular accounts and get advertisements for different products. I see promotions so often in some comic accounts I follow, bothers me sometimes.

</comment><comment><USER9> I'm not convinced "social media e-commerce" is a better way to sell.

Blurring the lines between commerce and friendship creates false assumptions of trustworthiness.

I've witnessed people walk into stores demanding discounts they saw on unofficial social media merchant accounts. Needless to say no sale was made and both parties were worse off.

Ordering something as simple as a Raspberry Pi was a tedious process involving several emails and a walk to the bank. Very personal and yet utterly inefficient for everyone involved.

There might be a great demand for a user friendly e-commerce app here.

</comment><comment><USER10> "this almost suggests that people trust LINE more than the credit card processing infrastructure"

And to think that until recently LINE used to send things unencrypted over plaintext when using mobile internet.

<comment><USER4> Online credit card payments are not ubiquitous or well supported in Thailand.

When we first got here, my wife couldn't pay our phone+internet bill (using the third largest telecom in the country) online, because they need to whitelist card numbers on accounts because of fraud (or so we were told).

When we tried it once with my (then) Australian Visa card, it failed miserably and the app dumped out a PHP stack trace in its web view with a SCARY amount of information exposed to me.

Even things like using a banks' "Pay Bill" feature is apparently not reliable here, because payments somehow don't turn up in a timely fashion or they don't know they've arrived or something.

People do what they're comfortable with and what they know - just like how staff always ask for a signature on the bottom of a credit card slip that clearly says "signature not required" because I used a PIN.

</comment></comment><comment><USER11> Curious that payments isn't anywhere near the same revenue as Stickers and Games</comment>


Ask PG: reply delays? - <AUTHOR>

Are reply delays new? It seems like I can no longer insta-reply to somone who has, in turn, replied to me. The wait looks to be around 10 minutes or so.
I only ask because I noticed it last week and didnt see anything about it. And I swear I've not seen it before.
great addition dont get me wrong :) just interested :D <comment><USER2> I wish this weren't FORCED on us, because there have been times when I'd like to simply reply to some benign thread where people are asking for information, and then get back to work.

The best solution would be to put a chatterous widget on HN so people can take such conversations off the thread. I'm still not sure why this can't be done or hasn't been done yet.

<comment><USER3> By the time this feature has kicked in, you're usually going to increase total happiness (including your own) by deferring and --- most likely --- eventually discarding your reply.

Think of it not just as a way to dampen unproductive threads, but also as a way to redirect your energy to more productive threads elsewhere. They're not trying to shake you, they're trying to route you!

</comment></comment><comment><USER4> <http://news.ycombinator.com/item?id=585507>

<comment><AUTHOR> merci :)</comment></comment>


A BNF Parser in Forth (1992) - <AUTHOR> https://www.bradrodriguez.com/papers/bnfparse.htm <comment><USER2> Here's a FORTH program to simulate a 7 bit paper tape puncher. Type PTAPE <cr> and then start typing. It will terminate and cut the tape when you type a <null>.

        \ FORTH PAPER TAPE PUNCHER:

        : PT# ( L --- L/2 )
          DUP 1 AND IF
            ASCII @
          ELSE BL THEN
          HOLD
          2/
        ;

        : PT. ( N --- )
          <# PT# PT# PT#
             ASCII . HOLD
             PT# PT# PT# PT#
          #> TYPE
        ;

        : CUT
          ." </comment><comment>-----" CR
        ;

        : PTAPE
          CUT
          BEGIN
            KEY ?DUP WHILE
            DUP ." |" PT. ." |"  SPACE EMIT CR
          REPEAT
          CUT
        ;

PS: I rewrote PTAPE in PostScript for NeWS, so it makes a window with actual holes punched into it in the shape of a piece of paper tape with the text you pass in as a parameter:

[https://www.donhopkins.com/home/archive/news- tape/fun/ptape/...](https://www.donhopkins.com/home/archive/news- tape/fun/ptape/ptape)

Can anybody write that for X11 using the SHAPES extension to punch the holes in fewer lines of code? ;)

(The comments about an elliptical canvas and round shape must have been copied from some other old code, because the shape of the window (and icon) it makes is rectangular with lots of round holes punched into it.)

</comment><comment><USER3> There's another parser generator written in Forth, that I have personally used myself: Gray [1-3]

The zip file [1] has english documentation, the papers [2,3] are unfortunately only available in german.

This [4] is a mostly working grammar for the Verilog language written using Gray. It uses a lexer that sits on top of Gforth's regexp [5] package that directly compiles regexps into forth code (BTW quite a few bugs in the regexp package were triggered by the lexer and subsequently fixed upstream).

[1] [http://www.complang.tuwien.ac.at/forth/gray4.zip](http://www.complang.tuwien.ac.at/forth/gray4.zip)

[2] [http://www.complang.tuwien.ac.at/papers/ertl89.ps.gz](http://www.complang.tuwien.ac.at/papers/ertl89.ps.gz)

[3] [http://www.complang.tuwien.ac.at/papers/ertl97.ps.gz](http://www.complang.tuwien.ac.at/papers/ertl97.ps.gz)

[4] [https://sourceforge.net/p/fourhdl/code/HEAD/tree/trunk/parse...](https://sourceforge.net/p/fourhdl/code/HEAD/tree/trunk/parser.fs)

[5] [https://github.com/forthy42/gforth/blob/master/regexp.fs](https://github.com/forthy42/gforth/blob/master/regexp.fs)

<comment><USER4> Here's a toy parser generator I wrote that works for context-free languages[0].

[0] [https://github.com/siraben/meta-yacc](https://github.com/siraben/meta- yacc)

</comment></comment><comment><USER5> Argh. BNF. I had enough of that to last me a lifetime by 1986 (I used to do X.400 stuff).

That said, it's pretty cool.

</comment><comment><USER2> Oh wow, that's old school, and brings me back. I haven't thought of "SMUDGE" in a long time! One thing I love about FORTH is how completely off-the-wall and arbitrary some of the words are, even weirder than LISP's CAR and CDR. Most modern FORTH don't have SMUDGE any more, which has been replaced by HIDE and REVEAL.

Perl programmers may savor and fetishize their weird arbitrary unreadable code like letter-sparse sigil-saturated line noise, but Perl can't hold a candle to the subtle beauty and enigmatically punctuated surrealistic symmetry of FORTH code:

        8 : BNF:   [COMPILE] : SMUDGE COMPILE <BNF ; IMMEDIATE
        9 : ;BNF   COMPILE BNF> SMUDGE [COMPILE] ; ; IMMEDIATE

>b) Line 9 shows a recursive production, <S>. During the definition of a production, its name is automatically unSMUDGEd.

Of course it's still possible to write self documenting FORTH code:

        : C(-; LICK SMILE NOSE WINK ;

comp.lang.forth: Why smudge?

[https://groups.google.com/forum/#!topic/comp.lang.forth/olO-...](https://groups.google.com/forum/#!topic/comp.lang.forth/olO- VHXJa1Q%5B1-25%5D)

>Does "smudge" have any other use than to stop the current word being found during a dictionary lookup? If not, then its only use would seem to be to allow a word to be defined in terms of another (older) word with the same name. Are there some useful things that can be done with this ability that make up for the (minor) extra complication?

My other favorite (and much more useful and powerful for metaprogramming) FORTH words are <BUILDS and DOES>, but <BUILDS has been replaced by CREATE now, so they don't look as cool when used together.

[http://amforth.sourceforge.net/TG/recipes/Builds.html](http://amforth.sourceforge.net/TG/recipes/Builds.html)

<BUILDS is the older sibling of CREATE. It has been in use in pre-ANSI Forth's and is still around as an supplemental tool. It is a parsing word that takes the next word from the input source and creates a dictionary entry in the current word list. Unlike CREATE it does not add an execution token. Thus the word list entry created is unfinished and calling it will crash the system.

The definition of the word list entry is finished with the DOES> section, that makes the word list entry a proper callable word.

The big advantage over CREATE is that CREATE requires a rewrite of the contents of the execution token. That is on microcontrollers with the flash based dictionary only possible if a single cell can be re-programmed. The Atmegas can do that with little efforts, the MSP430 lacks essential ressources to do so.

From the programming perspective there are no differences. <BUILDS can safely replace CREATE in defining words that contain a DOES> section as well. All other occurances of CREATE should remain unchanged.

        : constant create , does> @i ;
        \ or
        : constant <builds , does> @i ;

<comment><USER3> > Most modern FORTH don't have SMUDGE any more, which has been replaced by > HIDE and REVEAL.

I think, the modern Forths (i.e. since 1994 ANS Forth standard) need neither HIDE nor REVEAL as these are made superflous by RECURSE.

Other edge cases could be handled using a mechanism like DEFER [1] (which can be implemented in terms of ANS Standard words).

Just looking through the manual, even the modern Gforth has something like RECURSIVE [2] which is just a differently named implementation of REVEAL.

[1] [http://www.complang.tuwien.ac.at/forth/gforth/Docs- html/Defe...](http://www.complang.tuwien.ac.at/forth/gforth/Docs- html/Deferred-Words.html) [https://forth- standard.org/standard/core/RECURSE](https://forth- standard.org/standard/core/RECURSE) [2] [http://www.complang.tuwien.ac.at/forth/gforth/Docs- html/Call...](http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Calls- and-returns.html#Calls-and-returns)

<comment><USER2> One thing I love about SMUDGE is that SMUDGING again undoes the effect. If only that worked for my glasses.

DEFER is great! But the word that resolves it should have been named REFED.

</comment></comment></comment><comment> java-man When I coded a Forth virtual machine in 8080 assembly in 1985, I soon realized Forth is a write-only language.

Fun, but totally unusable for a mediocre programmer like myself.

<comment><USER6> It has less syntax than any other language and it's very good for making a thin DSL layer above your hardware. Please share your experience on this :)

<comment><USER7> "My" FORTH was done in 6502 assembler, and used for a water company records and billing system which included interfaces for the company to get the local water flow rates! The meters reported with synthetic voices. Back then BT owned the phone system and were very resistant to letting us pass data from the flow meters to the head office: was it voice or was it data? We argued over that for weeks.

<comment> java-man I am almost afraid to ask: is it still in operation? Some of these systems are kept for surprisingly long time (don't fix if it ain't broken)</comment></comment></comment></comment>


Ask HN: When you turn down employment, is that considered burning a bridge? - at-fates-hands

I've had a few friends tell me not to interview somewhere unless you know you're going to take the job since the manager won't consider you again because you turned them down.<p>How true is this? <comment><USER2> I once interviewed for a job, turned down the offer. A year later, got in touch, and they were eager to bring me on board. Worked there for two years and there were absolutely no hard feelings. Many managers are not petty and are just interested in hiring talented people.

<comment><USER3> I've not quite had this experience, but similar, and agree - if you've got what they want, then they'll be happy to receive your call. (As long as you're polite about it!)

</comment></comment><comment><USER4> Don't listen to your friends blindly on this. It depends. If you accepted it, signed the paperwork and then 1 day before, you decided not to join, it could burn bridges with that particular group/manager. But turning down employment is totally acceptable in cases where you have multiple options and you decide what is best for you. It is totally ok to go for an interview and then decide if you want to join or not (if they do give you an offer).

</comment><comment><USER5> Yes. And don't date someone unless you know you are going to marry them. ;-)

Job interviews are "dates" - you are checking each other out. If your date goes poorly, yes you probably won't get another date with that person - <AUTHOR> you might with her sister.

In other words, the same manager probably won't hire you but it shouldn't keep you from being hired by another group in the same company. If you turn down a QA job you won't be blacklisted (that I'm aware of).

</comment><comment><USER6> There's an easier way to make both sides happy. Instead of "interviewing," suggest that you come and check the place out, talk to employees, and just get a feel for the company.

If you like it, follow up with an interview. If not, no expectations are broken, and no one gets hurt.

<comment><USER3> Ah, I wish this were so easy! Perhaps it's a certain lack of kahunas, but I never felt like it would be appropriate to ask the recruitment agent if I can swing by... plus, now in my consulting gig (sub-contractor) I get a call, hop on a plane, and go work someplace. (That said, no interview...)

</comment></comment><comment><USER7> In the Netherlands it is pretty common to do multiple interviews and only agree to taking a job after hearing back from all the companies. This way you may have to turn down multiple offers. I don't know if this is normal in the US.

</comment><comment> at-fates-hands Thanks for the info guys, appreciate it!

</comment><comment><USER8> It could be considered burning a bridge on the way you handle the situation. I would turn down the job, but do it in a way where I make myself look good doing it. I interview for the job, then let them know that you are very interested in the job, but due to prior work commitments you have to decline at the moment. You can tell them that you are in a serious project and that you are a crucial part of it. The project would be undermined if you abruptly leave. You can explain that you wouldn't want to leave in that type of situation and could explain there is currently not a set deadline. There would be other ways to handle it as well, and always keep in contact even if it's infrequent. You never know what circumstances may arise where you will need to find work right away.</comment>


Show HN: Dist – Manage and distribute essential information (on any webpage) - <AUTHOR> https://di.st <comment><AUTHOR> Hi HN- looking for feedback and crit of this initial product and service. If you have any questions or comments, I'd be glad to field them.

PS: here's a 3min read on Medium on why I built Dist: [https://medium.com/@distHQ/why-i-built-di-st- dfff0f1ba3de#.r...](https://medium.com/@distHQ/why-i-built-di-st- dfff0f1ba3de#.rem8403lb)</comment>


Heroku API down again :( - <AUTHOR>

Everything from heroku console, logs, run and there website seems to be down https://status.heroku.com/ <comment><AUTHOR> They're back up.</comment>


Ask YC: What corporate stuff is needed in the beginning of a startup? - <AUTHOR>

I have a start up idea and found a co-founder and we are working on the project. I want to take care of all the incorporating stuff and all that jazz.. How do I do that? <comment><USER2> Here's a good place to start: [http://www.gabrielweinberg.com/startupswiki/Ask_YC_Archive#t...](http://www.gabrielweinberg.com/startupswiki/Ask_YC_Archive#toc24)

<comment><AUTHOR> Thanks. The link has a lot of good info.

</comment></comment><comment><USER3> Gotta have an atty. I was able to incorporate myself but I needed an atty to talk to you about what the best structure was.</comment>


Remote Exploit Against the Aircrack-NG Tools - <AUTHOR> http://www.exploit-db.com/exploits/12217

<comment><USER2> _This reveals the possibility to gain control over $EIP._

Wow, it's Gibson's Black ICE for real. We live in amazing times.

<comment><USER3> Perhaps someone could explain this.

<comment><USER2> Go read _Neuromancer_. It's a little dated now, but in the 80s this was cutting-edge science fiction.

Black ICE were security countermeasures that would infect _you_ , even kill you, for getting to close to a machine in cyberspace.

<comment><USER3> Ah, perhaps I should have been more specific. Through Neuromancer, Shadowrun, and other Cyberpunk works, I'm familiar with Black ICE.

But what's $EIP?

</comment></comment></comment></comment><comment><USER4> Application-level software written in C mismanages memory allocation? I can't believe it!

</comment><comment><USER5> Mmmm, this irony is delicious.

</comment><comment><USER6> Spy vs. Spy

</comment><comment><USER7> Hey, you're sneaking around someone else's network. It's an occupational hazard :)</comment>


Camera, while recording, falls from airplane and lands in pig pen - <AUTHOR> https://www.youtube.com/watch?v=QrxPuk0JefA

<comment><USER2> I assume this is one of them newfangled viral adverts?</comment>


New York Times Launching Groupon-Like Daily Deals Service - <AUTHOR> http://mashable.com/2011/03/02/timeslimited/ <comment><USER2> Why would NYT want to get into this business? Do you think its as simple as: "people dont pay for newspapers anymore, and we know we can use our huge circulation to make money somehow?"</comment>


Did Google Manipulate Search for Hillary? [video] - <AUTHOR> https://www.youtube.com/watch?v=PFxFRqNmXKg&feature=share <comment><USER2> These claims are pretty flimsy. For one thing, Yahoo's search engine is Bing, so it's fallacious to say that two of three search engines yielded the same result, and that result is thus more valid or accurate than that of the dissenting engine. Further, if Google did scrub results, they didn't do a very complete job, as they're more than happy to suggest "hillary clinton email" and plenty of other negative terms. I also suspect that Google's search suggestions algorithm is a bit more involved than "tally the frequency of entire search queries and return the most common ones."

In a wider sense, it's a bit of a leap to think that Eric Schmidt has direct control over Google searches. There would have to be a chain of contacts leading from him to someone in the engineering department, or at least a few developers who built the "scrub sensitive terms from the suggestion list" feature. Surely they're not _all_ working for Clinton. Or surely this power would have been abused other times in the past. It's just so much more plausible that this is a complete coincidence than that there's some kind of Google-based conspiracy to install Hillary Clinton as a dictator by forcing people to type the entire phrase "hillary clinton indictment" into a search engine before they can have their crazy beliefs validated.

</comment><comment><AUTHOR> Additional reading:

[http://www.ibtimes.co.uk/wikileaks-founder-julian-assange- cl...](http://www.ibtimes.co.uk/wikileaks-founder-julian-assange-claims- google-involved-hilary-clinton-campaign-1564220)

<comment><USER3> also [http://qz.com/520652/groundwork-eric-schmidt-startup- working...](http://qz.com/520652/groundwork-eric-schmidt-startup-working-for- hillary-clinton-campaign/)

</comment></comment><comment><USER4> It is interesting that this got removed from HN's homepage. But I'm sure there is a good reason as the moderators seem to do a great job.

Edit: maybe I don't understand the ranking algorithm. I saw this at the bottom of the best first page. 15 minutes later and I can't find it in the first few pages. But only 24 votes so maybe it doesn't qualify for the secondary pages?

<comment><USER5> It fell in rank because it was flagged by users.

There's a penalty on youtube.com stories by default, but we turned it off in this case because the allegation seemed _prima facie_ interesting enough to let the community have a crack at it. Of course, it's highly politically charged and we normally don't want that stuff on the front page. But there was an intellectual-curiosity element to it as well.

That said, the community _has_ had a crack at it, in votes, comments and flags, and the flags won. I don't see a reason to override that.

(By the way, it's on our list to display [flagged] on cases like the current story when the flags are this powerful. Hopefully that would have answered your question.)

<comment><USER6> Sad that a small minority of users can manipulate HN's front page to suit their political biases. This post is certainly more interesting and important than everything else on the front page.

Flags should be used for stuff that actually violates rules. Not a "disagree button".

<comment><USER5> It's a bit of a strange example to make this claim about, since the argument that that post broke HN's rules is pretty easy.

The balance between upvotes and flags (and moderation) on HN is pretty stable; it's been this way for years. It doesn't always produce what I think is the most interesting and important result, either. Probably true for most readers if not everyone.

<comment><USER6> What rule? That it's political? But it's not really. It's not about any specific candidate or policy, but whether Google censors search results.

"Hillary Clinton is a jerk" would be a political article.

"Google removes 'Hillary Clinton is a jerk' from search results" is not.

>The balance between upvotes and flags (and moderation) on HN is pretty stable

By what metric do you measure stability?

<comment><USER4> The video isn't that strong, really. I'd _love_ for Google to make such huge mistake, and even think the hint of impropriety here is almost good for the public: to trust Google/SV less. But it's really not HN quality.

I'm sure if someone did a more comprehensive article on what autocomplete filters, along with how this might introduce bias even if fairly solid, HN wouldn't flag it. It could be political if it's comprehensive and clear. (Perhaps research why "Mein Kampf" shows up when searching images of Trump's book.) Even an expose on how SV money affects government should be fine. (I think it was on HN I heard about Google coordinating with the US to destabilize some place, maybe Libya?)

Dang is being excellent here, allowing the community to decide.

Honestly the only thing is the opaqueness of the flagging process. I was just caught by surprise after reloading a tab. On its merits it's just a weak video.

</comment></comment></comment></comment></comment></comment><comment><USER7> Its hard to believe Google would do that. There is so much risk of being exposed. As an alternate hypothetical - A Google engineer who has knowledge of their internal systems could suggest a means of external manipulation, that would accomplish the same goal, without the risk.

<comment><USER3> With conflicts of interest like this [http://qz.com/520652/groundwork-eric- schmidt-startup-working...](http://qz.com/520652/groundwork-eric-schmidt- startup-working-for-hillary-clinton-campaign/) it's easy to believe Google would do that.

<comment><USER8> Also Google may have violated ethics rules with its hiring practices of Obama Administration Staff.

[http://thenextweb.com/google/2016/04/29/if-you-want-to- work-...](http://thenextweb.com/google/2016/04/29/if-you-want-to-work-at- google-get-a-job-in-us-government/)

</comment></comment></comment><comment><USER9> If you type just "hillary clinton", Benghazi is in the autocomplete, so this seems like cherry picking to serve a narrative to me.

<comment><USER10> im not getting that. 'hillary clinton ' on Google:

        twitter
        facebook
        email
        age

on yahoo:

        email scandal
        indictment
        for president
        criminal charges

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

<comment><USER9> It changes based on who knows how many factors. Benghazi was showing for me when I typed the message, now it's not.

Google's autocomplete is likely based on recent searches, so it can suggest things based on very recent events. It will vary wildly.

<comment><USER10> ok that's fine. but if Google is so current with latest searches it's still pretty weird that "crim.." shows nothing but positive results. surely other terms are more popular now than "crime bill 1994".

[http://i.imgur.com/vt7rcov.png](http://i.imgur.com/vt7rcov.png)

<comment><USER9> Right now, as I type this, typing "hillary clinton crim" brings up "hillary clinton criminal video" in the autocomplete.

You have NO idea how their autocomplete works, so jumping to conclusions about Google filtering for positivity, specifically for a candidate, is entirely stupid.

</comment></comment></comment></comment></comment><comment><USER11> This is really concerning, and disappointing if true.

I'd be less concerned if they were also cleaning up autocomplete for the other candidates, but it appears they are not.

</comment><comment><USER12> "Brock Turner Cri" also autofills "cricket" and not anything criminal related. This is likely due to the hoopla around people googling for criminal records and google penalized a bunch of companies for it a while ago.

</comment><comment><USER13> I did this autocomplete exercise with several candidates about 6 months ago, and Hillary-related search autocomplete terms were (by far) the most damning and amusing.

If this is true (and based on my exercise, it is), I'll be deactivating my accounts and adding 127.0.0.1 google.com www.google.com accounts.google.com to my /etc/hosts file.

</comment><comment><USER14> Their examples of supposed manipulation mostly work the same if you replace "hillary clinton" with "jeffrey dahmer". In particular, "jeffrey dahmer ind" suggests "jeffrey dahmer indiana" and "jeffrey dahmer indonesia".

</comment><comment><USER15> If your headline can be answered with "no" then you probably shouldn't post it.

<comment><USER16> episodes like this are the most evident reasons why we need a distributed internet search engine in our future

</comment></comment><comment><USER17> Who knows, maybe they got cleared because someone was trolling the suggestion engine, just because there is heavy logical correlation that suggest higher rated search terms should be suggested, that doesn't mean there are not other factors that outweigh it. We don't really know how it works.

I am not being defensive of them, in fact it wouldn't surprise me if it was true, just that they got caught. It is actually pretty fascinating and scary how entangled the Google universe and the Government are, and right or wrong, they are seem to be more invested in their vision of the future more than financial* gains.

* but money is always a little bit a part of it

</comment><comment><USER18> When I was following the primaries, I preferred Bing's tool to Google's here(just search "primaries" from a US location in either tool). The Google one seemed overly simplistic, especially earlier when there were more potential delegates.

I still tend to search with Google, but Bing at least seems to give a more 'unfiltered' view of your query. Google seems to have a lot more heuristics tweaking things in the background, so I use them for my first search and switch to Bing if I need to see everything for some oddly specific query.

</comment><comment><USER19> I also don't see electoral fraud and exit poll discrepancies talked about as much anymore:

[https://medium.com/@spencergundert/hillary-clinton-and- elect...](https://medium.com/@spencergundert/hillary-clinton-and-electoral- fraud-992ad9e080f6#.tm9sulbiq)

An interesting read from April which continues to be relevant and attributable to last Tuesday's primaries as well.

</comment><comment><USER20> I'm glad this guy knows so much about how search engines work. He should start one, it sounds easy! He just has to map each query to the single, unchanging answer that's the same for everybody!

</comment><comment><USER21> This is was I get in Berlin, Germany in Incognito mode:

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

</comment><comment><USER22> This could also be neighborhood or search history or social network related, no?</comment>


Immutable Data Structures and JavaScript - <AUTHOR> http://jlongster.com/Using-Immutable-Data-Structures-in-JavaScript <comment><USER2> The main issue I've had using immutablejs with Redux is debugging. Whereas previously I could simply mouse-over a data structure when I hit a breakpoint (or crash), I now have to do a REPL dance to see what's in any of my data structures.

I also find myself often having to do trial and error stuff to fix my code (also while in a paused state in the console). I mean it's pretty nice that you can actually do this, don't get me wrong. But overall, I am slower and less productive with immutablejs than I am with vanilla JS / JSON objects.

It's a trade off people really should keep in mind before pulling the trigger on immutable data structures. Sure, you get that performance boost, but do you actually need it? Are your React views really so slow (or are you running on slow embedded hardware like I am)? Or are you just drinking the kool aid because immutable data is hot right now?

You get runtime perf improvements in certain cases, at the cost of opaqueness, productivity and complexity. Make sure it is worth it.

<comment><USER3> Hi, shameless plug: another ( __typed __) immutable data structure library,[https://github.com/gcanti/tcomb](https://github.com/gcanti/tcomb). Main features:

\- works with __regular objects and arrays __\- runtime type checks \- easy debugging with Chrome DevTools \- immutability and immutability helpers \- runtime type introspection \- easy JSON serialization / deseralization \- pattern matching

Also [https://github.com/gcanti/redux-tcomb](https://github.com/gcanti/redux- tcomb) (Immutable and type-checked state and actions for Redux)

<comment><AUTHOR> I wouldn't call it an immutable data structure library. As far as I see, it does not implement any data structures.

This looks like a nice alternative to seamless-immutable though.

</comment></comment></comment><comment><USER4> Clojure's motivating reasons for immutability are around correctness, not speed. In typical Clojure, immutable data structures are somewhat slower (25%-100%) than standard java, but make up for it because they can be trivially parallelized, don't require locking, and are significantly easier to reason about.

From that perspective, immutable structures should be the default, with mutable structures being reserved for when they're truly needed.

<comment><USER5> Mutable structures should be optimizations of immutable implementations.

<comment><USER4> They are! [http://clojure.org/transients](http://clojure.org/transients)

</comment></comment></comment><comment><USER6> People often say that immutable data structures are fast because pointer comparison is fast. But as soon as you do any transformation, even something as simple as map(), the pointers all change. So it seems like the speed of pointer checks is only relevant in cases where you're not doing anything interesting with the data.

In particular, if you need to apply any transformation to your model before displaying it in a view, it's not going to be a fast pointer check - you need to do dirty checks on all the elements just like you would with mutable data structures.

<comment><USER7> Sure you would need to do go one level deeper if the top level is different, but you can still use pointer equality at the lower levels

      immutableEq(a1, a2) {
        return (a1 === a2) || all(mapPair(a1, a2, immutableEq))
      }

Now if you update the value of a single element in the array a2, you would not have to check all the elements in depth (only their references):

      a1 = Immutable.List(el1, el2, el3, el4, el5)
      a2 = a1.set(2, Immutable.Map({hello: "world"}));
      immutableEq(a1, a2) // all but el3 compared by reference equality

<comment><USER6> In your example you're just changing one element and leaving the rest the same - a pretty trivial transformation. If you're applying map() to a list then all of the elements change.

If you have a pipeline then it's going to result in everything downstream re- running, unless you compare the _output_ of the map() transformation to the previous value, like some build systems do.

<comment><USER7> Or alternatively, run all the major data transformations necessary to get from data to VDOM from the render function, passing as much as possible of the original data to the bottom-most components.

</comment></comment></comment></comment><comment><USER8> So Immutability is Facebook's solution to excessive virtual DOM checks, which is Facebook's solution to the render everywhere problem, which is Facebook's solution to state change, which is a problem created by abstracting away DOM manipulation, which was never a real problem in the first place...

<comment><USER9> The chain of reasoning is wonderfully put, but DOM manipulation was definitely a problem. When elements are inserted or removed from lists, you'd have to do a dance of many jQuery() steps. There is no concept of state, it is all tangled up in DOM values, and the most elegant solution was to use $.serialize() if it works in that context.

This mess was why people hated front-end programming. It has only been a year or two since Angular/React became mainstream and allowed us to think of state as plain JS objects. Lest we forget, it was truly bad times before.

</comment></comment><comment><USER10> "And strict mode, which is the default in ES6", this is not true, I think you probably meant "in ES2015 modules". "Loose" mode still very much exists by default in ES2015 (ES6).

<comment><AUTHOR> Thanks, I changed that

</comment></comment><comment><USER11> I'm a big fan of immutable data structures, but I will caution people to blindly adopting them just because they've heard they are "fast" and it's something that has been popularized by companies like Facebook.

The vast majority of apps, when properly designed (and using things such as paginated datasets, and properly managing memory/cleaning up after themselves), do not need immutability.

You should first ask yourself, is this a problem that can be solved with immutable data structures, or why do I need to have huge data structures in the browser for my frontend? Unless it's a very special case, you can do more for frontend performance with lazy loading, and some good old fashioned performance analysis (take inventory of event listeners, look at a heap dump from Chrome dev tools, etc) than you can from adding the significant developer and cognitive overhead of immutable.js or its ilk.

It may seem nice to say if obj === obj2 and if any deeply nested things have changed it's just a pointer, but as others have mentioned this is not the primary use case for many UI's that are constantly recomposing and creating different kinds of data structures from other data structures (think map, creating a hash from an array, etc).

There is no silver bullet and premature optimization with a highly specific design pattern is the root of all evil. Don't worry about performance until there is a legitimate performance problem that needs to be worried about.

<comment><USER12> I don't use immutable structures for speed (they're often slower), I use them because they can eliminate entire classes of bugs.

<comment><USER13> This. By making everything immutable by default, a program becomes much easier to reason about. If I can quickly see this variable is set here and since it is immutable it will never change, I can now quickly reason about other parts of the function.

</comment></comment></comment><comment><USER14> I really hope immutable collections get added to the standard library eventually (probably ES2017 at this rate). Proxies should allow them to be used with libraries which expect mutable objects and arrays, as long as they don't mutate them.

Having them built in to the language would open up some interesting new possibilities too. It should be possible to send immutable data between Worker threads without the overhead of serialization and deserialization, which is currently one of the main barriers to doing heavy computation in a web worker rather than on the UI thread. Of course, there would be some nasty internal implementation details to sort out, as it would require sharing heaps, but it should be possible.

</comment><comment><USER9> Where does React's Immutability Helpers fall in this spectrum? I was mulling over switching my entire codebase to ImmutableJS when a friend asked to try them first. It worked out well, but I wonder whether anyone here has experience with it in a large long-running project. So far it has allowed me to use Javascript primitives everywhere; all I need to ensure is to avoid direct mutation and use `update` that gives a new object whose properties shares the same references with the original one, except for the path in which the leaf node that needs to be mutated sits.

<comment><AUTHOR> Those helpers are basically the equivalent of seamless-immutable, which uses native JS objects but updates them by copying. You make the exact same tradeoffs as if you chose it over Immutable.js. Comparing those two libs represents the choice of either persistent data structures or copying JS ones.

(Note that seamless-immutable also enforces immutability by using `Object.freeze` in development)

<comment><USER15> It's worth mentioning that the ES6 array spread operator provides similar functionality:

[https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Operators/Spread_operator#A_more_powerful_array_literal)

The object spread operator (proposed in ES7) is essentially syntactic sugar for Object.assign:

[https://github.com/sebmarkbage/ecmascript-rest- spread](https://github.com/sebmarkbage/ecmascript-rest-spread)

[https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)

I've even used jQuery's extend in legacy projects:

[https://api.jquery.com/jquery.extend/](https://api.jquery.com/jquery.extend/)

</comment></comment></comment><comment><USER16> A big issue it seems that these immutable libraries and Redux seem to neglect is JavaScript's OO nature. I'm talking about instantiated function declarations, something that's more readily available with ES6's class notation. Most of these libraries (sans Redux) take advantage of this aspect of JavaScript, yet leave you to figure things out if you do the same. This blog post kind of touches upon this regarding Map and Set.

Now, functional programming is nice and lends itself some useful benefits, but unfortunately JavaScript just wasn't built in the value-oriented sense. And given the native features of JavaScript, such as the ability to create "classes," I'd like to take advantage of these features and reap all their benefits, such as encapsulation (which of course, some in the FP community don't seem to care about[1]).

I'd like to see a middle ground somewhere between having e.g. immutable objects yet respecting the way JavaScript is built. Until then, I'd have to ditch common JavaScript idioms, which are only being advanced in ES6. Not something I'm very keen on doing.

1\. [http://programmers.stackexchange.com/a/216358](http://programmers.stackexchange.com/a/216358)

<comment><USER17> Flux seems linke the FP equivalent to the OOP mvc to me. So there is no need for what you say.

<comment><USER16> I don't follow the point you're trying to make. What I'm referring to is how JavaScript's object orientedness, which relies heavily on references, doesn't play very well with immutable values.

The only way to really eschew mutability is to ditch the concept of objects representing a state and a set of methods that mutate its state (which maintain encapsulation and enforce separation of concerns). Unless you decide to make all your prototype methods return new instances of the constructor upon mutation, which would be both inefficient and prone to error.

</comment></comment></comment><comment><USER18> The problem with Immutable.js is that you have to remember to convert them to regular objects to use with third-party modules that expect plain JavaScript objects. One way to address that is to use Object.freeze instead. There's a nice library called icepick[1] that facilitates using Object.freeze to create immutable plain objects.

[1] [https://github.com/aearly/icepick](https://github.com/aearly/icepick)

*EDIT: Clarification

<comment><AUTHOR> Sounds like you just skimmed the top of the blog post.

<comment><USER18> I read it. I was just commenting on an alternative that uses native objects rather than custom objects.

</comment></comment></comment><comment><USER19> Nice article, but I think some of the ideas need some clarification.

> For example, keys of a Map object are value equality checked... This has a > lot of really nice implications.

I'm not sure how immutability helps here. And it's not possible to use reference equality, since with queries, you're converting user input into a data structure.

Edit: never mind. Precisely because you're dealing with input, you have to use value-equality.

</comment><comment><USER20> One issue with the sample code. In the runQuery snippet, you call .set(...) on queryCache. But since it is an instance of Immutable.Map(), without re- assigning it to queryCache, it would really have no effect.

        queryCache.set(query, results);

vs

        queryCache = queryCache.set(query, results);

<comment><USER21> Mixing immutably with mutation (using let) seems weird to me. If you want to go immutable to make understanding your app easier then great, but use const throughout then.

<comment><USER22> Why? `const` isn't that much immutable than `let` is. For any reference type that's bound to a variable with `const`, you can mutate it without getting errors. This was very confusing to me at first, even though I understand the mechanics behind it.

        const a = {}
        // That's OK:
        a.a = 1
        // That's not OK:
        a = 1

While I don't disagree with you on your point, one could easily create the counter-point that by using `const` you're implying something that's not true.

<comment><USER23> The translation to C would be * const, not const *. Const is strictly better than let because it prevents a certain class of bugs - use it everywhere possible instead of let/var.

</comment></comment></comment></comment><comment><USER24> One problem with the Immutable.js library is that you can still not run a fast "diff" of two immutable values. This makes it difficult to write fast updating code.

<comment><USER25> Correct me if I am wrong, but the big advantage is that in most cases you no longer need to run a diff on the two values. You can do a naive comparison, and if their references are different then you can assume the values have changed.

If you truly do need to run a diff, you're going to run into the exact same optimization problems with both immutable values and mutable values.

<comment><USER26> Since assignment of an object is by reference, if you say: var stateB = stateA, then both stateA and stateB now point to the same JS object. If you change stateB then stateA will be changed too since they both point to the same object

So you would have to do: var stateB = JSON.parse(JSON.stringify(stateA))

to get a copy and then you can change stateB and it will not be equal to stateA.

The problem is without use of actual "persistent data structures" (not "immutables" based on Object.freeze etc) the copy/clone operation is expensive. With persistent data structures as in ImmutableJS you get faster (O(1)?) copy. Therefore, building your state store on ImmutableJS and doing an explicit comparison (if you're using React) with shouldComponentUpdate by comparing 'prevState != curState' is the only thing you need, and I had seen benchmarks that show 35% increase in performance over not using ImmutableJS.

Update:

in response to the question about having a list of items and React invoking shouldComponentUpdate, that should not be the case if React stops comparing when the parent aka the list itself says that update should not happen. Does React in that case descend down the tree to compare the state of the list items? I suppose it would but there must be a way adound it. I heard about batchUpdate add-on in this context. Researching now!

<comment><USER24> But let's say the UI consists of a list of N text elements. That list is encoded as an immutable vector. When one of the elements changes, react will run through the complete list and call shouldComponentUpdate for each item (!)

In contrast, with a fast "diff" operation, we could simply determine which of the elements in the state have changed, and this would be fast.

<comment><USER27> How would you implement a fast diff that didn't involve looking at each text value anyways? Would there be a separate store in the structure that tracks changes, or something along those lines?

<comment><USER24> You can do this by skipping over shared sub structures, while comparing, for example.

<comment><USER27> I don't see how that is related to immutability. Immutability gives you the ability to verify that it's unchanged in O(1), but it doesn't change your ability to do optimizations like that...

<comment><USER24> Well, immutable data-structures use "structural sharing", internally. Search for it. For example, this image, [1], shows two data-structures (the green nodes), that internally share many nodes. Now, comparing those two structures can be done efficiently, because the shared parts don't need comparing.

[1] [http://eclipsesource.com/blogs/wp- content/uploads/2009/12/cl...](http://eclipsesource.com/blogs/wp- content/uploads/2009/12/clojure-trees.png) (a random image I found on the internet that illustrates my point)

<comment><USER27> Wouldn't that be an argument for using an immutability library then? If you can implement a shallow equality that takes shared structures into account, what about non-immutable structures makes them a more efficient option for such a thing?

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER28> Regarding javascript interop and immuatable.js, it seems that the authors of immuatable.js are trying to have their List/Map/Set objects as close to ES2015 ones as possible [1].

[1]: [https://github.com/facebook/immutable-js#javascript-first- ap...](https://github.com/facebook/immutable-js#javascript-first-api)</comment>


Let's avoid talk of 'chemical imbalance': it's people in distress - <AUTHOR> https://psyche.co/ideas/lets-avoid-talk-of-chemical-imbalance-its-people-in-distress <comment> Pick-A-Hill2019 This one touches on the 'what do you call something without giving it a label' category. When it comes to physical conditions people are comfortable with the phrases healthy or unhealthy. Saying that somebody is mentally healthy seems ok, but calling someone mentally unhealthy seems off. I have seen people react badly to the term mental illness. Equally saying that I 'suffer from' xyz strikes me as negative ('suffering' is too negative, 'experiencing', 'dealing with', 'enduring' are more personally more apt /applicable but are such odd phrases that using them in conversation would stigmatize things further or make people suddenly start walking on egg shells).

Which leads to the question – What is the best term to use when it comes to discussing mental health (mental un-health?) issues with prospective employers?

Personally I am fortunate that in my area of industry I'm required to list any and all prescription medications as part of background checks. This allows me to steer the dialogue at an early stage of the process ('what are these for, why do you take them, what impact do they have' etc.) Most have been extremely understanding and supportive. A very, very few have run for the hills so having that discussion at the start of things saves time all round. As with all things in life, your mileage may vary

<comment><AUTHOR> I am glad the article got reposted and that the HN community had a chance to have this discussion.</comment></comment>


Tell HN: Creepy Facebook Ads - <AUTHOR> Here is the sequence of events:
1. I was talking to a coworker about a brand of shoes.
2. He sent me the link to the website on slack on my desktop.
3. I opened the link on my desktop and visited the site. No facebook activity at all.
I open my facebook app on Phone and bam, I see an ad for the same shoe company.
Is facebook tracking cookies cross site ? Is this possible ? I mean how else they knew. Are they listening to conversations ? <comment><USER2> Simplest explanation: many websites embed FB trackers/Like buttons in their pages. By visiting the website, you told FB you like shoes from that company, hence the targeted ads.

Occam's Razor.</comment>


More Visibility into the Android Open Source Project - <AUTHOR> https://android-developers.googleblog.com/2018/12/more-visibility-into-android-open-source-project.html <comment><USER2> Interface for the CI looks very barebones, though from the looks of it they just threw it up for public consumption.</comment>


Show HN: Stay 100% motivated - <AUTHOR> http://www.imralsoftware.com/100

<comment><AUTHOR> Many HN'ers will be familiar with Don't Break the Chain - a technique that motivates you to achieve your goals by working towards them every day, thereby building a chain of days in a row that you have done something.

It's a great technique, but having used it for years I started to notice a pretty big flaw, which is that if a chain does get broken it can be pretty demotivating - and the longer the chain, the more demotivating the feeling.

And so I developed 100%, which rather than using 'days in a row' as a motivator, instead calculates a 'dedication percentage' based on the number of days in last 30 where you completed a task, with the aim being to keep that number at 100%.

By using a percentage, you don't get a massive crash when a chain gets broken, and by using a rolling time period you can build back up to 100% in relatively short time (compared say to rebuilding a 150 day chain).

The idea was to build upon the basic premise of don't break the chain, and address what I saw as its main flaw.</comment>


Ask HN: Confessions of a Non-Tech Co-Founder in Health-Tech - <AUTHOR>

I am the "business guy" building a startup focused around data analytics in healthcare. Two more technical guys I've been working with are both still in school, and I'm looking to bring another individual onto the team. Before you pull out the pitchforks, here's some context:
During grad school, I saw a scalable opportunity in health-tech, brought on two tech friends and started user research. However, when looking for a co-founder, it's either "too early" or people who think health is boring. My guys can put in a few hours a week. What more can I realistically do to get "traction"? I do know the basics of coding, but in health IT, complexity is high. In my mind, I can only wear so many hats (see below). I've been in the health-tech community long enough to know the value a true technical co-founder brings. We need deeper technical leadership; there are things we know we don't know and things we don't know we don't know. I've done my best to make sure that my contributions would be valued:
Competitor / market research: Done. I've studied the major competitors / familiarizing myself with their products.
Legal / investors: Already in touch with several of the best startup lawyers / investors in Chicago (my hometown) thanks to previous relationships.
Relationships with medical research community: Done. In the process of formalizing one with a leading medical school.
Relationships with hospitals: Ongoing. I've been working with physicians / hospital administrators on this for several months, have plenty of user research and a network of strong advisors for making warm calls when the time comes.
Mock-ups / wireframes: Nearing completion this week.
I want to solve an actual real-world problem (not "Yo"). I'd appreciate any feedback, and, if someone wants to help, just email me. <comment><USER2> I'm a doctor and I do tech (details in my profile). I might have missed this by skimming quickly, but it isn't clear to me whether you are creating a new startup without your current co-founders, or whether you want to bring in new people with your current group.

Actually, it's not totally clear what the relationship is between you and the "technical guys" \- are they co-founders, hired hands, etc? More clarity there would be useful, I think if you're looking for people from this community to potentially join you.

<comment><AUTHOR> Tl;dr: creating a new startup and having them join when they finish school.

Allow me to clarify:

The relationship has been amicable, as these were peers of mine from grad school (one going all the way back to middle school). Although we began hashing this out together, it became clear that neither could commit full-time until after graduation (for one, that's next spring), for a second, that's 2016.

The agreement that we have worked out has been that they would provide as much technical advice as they could (one being a CS guy, the other being a CS/Stats guy), and would be happy to review code, but beyond that, I would be on my own for the time being. No equity has been dispersed, and they're okay with that. It's simply a matter of slicing the pie.

So, now I'm wearing multiple hats, with a fairly strong business model / product concept, and a decent amount of clinician interest, but the implementation is lacking. And that is where I need help.</comment></comment>


Bruce Schneier: Contact Tracing Covid-19 Infections via Smartphone Apps - tony-allan https://www.schneier.com/blog/archives/2020/04/contact_tracing.html <comment><AUTHOR> Schneier makes an excellent point about the usefulness of the contact tracing apps that I (personally) haven't seen much elsewhere.

> As long as 1) every contact does not result in an infection, and 2) a large > percentage of people with the disease are asymptomatic and don't realize > they have it, I can't see how this sort of app is valuable. If we had cheap, > fast, and accurate testing for everyone on demand...maybe. But I still don't > think so.

> So I agree [...] that this is primarily an exercise in that false syllogism: > Something must be done. This is something. Therefore, we must do it. It's > techies proposing tech solutions to what is primarily a social problem.

<comment><USER2> You're absolutely right. 10X for point 1. Millions of people are carrying this virus by now. Most (probably 99.99% of "contacts" do not result in transmission), and the virus is airborne ffs, it could easily blow down wind and somebody could catch it. Are these apps accounting for this too?

Honestly how accurate do they expect these apps to be?

Absolute waste of time. Nerds with too much time on their hands.

</comment></comment><comment><USER2> This is absolutely dumb. You can't solve every problem with an app.

<comment> tony-allan Contact tracing apps (especially those that respect privacy) are just one tool, even given the limitation that a Bluetooth LE ping by itself does not prove a person to person contact.

I will be interested to see if they ultimately are of any benefit. Perhaps not, but we don't have effective testing, treatment or a vaccine yet.</comment></comment>


Show HN: CircuitLab, an in-browser schematic editor and circuit simulator - <AUTHOR> http://www.circuitlab.com/

<comment><AUTHOR> We've been building a SPICE-like mixed-mode circuit simulator plus a SVG-based schematic editor, HTML5/Canvas-based plotting, in about 20K lines of CoffeeScript. No browser plugins required -- runs directly in the browser's JavaScript engine, and all simulation is client-side. (We generate and factor big matrices on the client side.) We currently do DC, time-domain simulations, and frequency-domain analysis (small signal, "Bode plots" if you're familiar with the lingo). Circuit analysis results compare well to "real" desktop SPICEs. We evaluate real and complex electrical quantities. In fact, we have a graphing calculator essentially embedded in our tool. Since it's browser- based, it's immediately Windows/Mac/Linux cross-platform, unlike most software EDA tools which are Windows-only. Check out the cross-tab copy-paste functionality as well!

If you look at any electronics forum online, it's normal to see scanned hand- drawn schematics, or static screenshots from various desktop tools. There's no reason why we shouldn't instead be sharing useful URLs that enable editing and simulation. If someone uses CircuitLab and posts a public URL, they enable the entire community to easily open their circuit, make a few changes, simulate / iterate, and share the new version.

Looking forward to hearing your feedback!

<comment><USER2> Neat stuff.

I briefly considered doing something like this myself, there are some interesting ways to monetize this if you manage to become _the_ web circuit designer/simulator.

Some things you might want to consider:

      * be more Mac friendly -- backspace instead of delete, Cmd instead of Ctrl on Macs
      * It feels unnatural that I have to press a button on the menu to enter a placement mode. Something like drag and drop might be more natural.
      * There's no obvious way to delete stuff with the mouse

Your mileage may vary though, just me 3 cents. Other than that, looking pretty good. Good luck!

<comment><AUTHOR> Thanks! Yes, there are some important Mac usability issues we need to take a closer look at. Ctrl-click, etc. Some of these will be limited by what kinds of UI events we have access to in-browser, but others are just tweaks we need to make on our end.

</comment></comment></comment><comment><USER3> Very impressive! A few comments and first impressions:

Wires seem to remain in the same place as components move. I'd love to see wires that connect two components and whose ends follow those components as they move.

Typo on several elements: s/contolled/controlled/

The zoom widget doesn't seem to let me set a precise zoom level. If I zoom around a bit, then type "100%" and hit enter, I end up with 96%. Also, you might consider providing some standard zoom shortcuts, such as "100%" and "fit to circuit".

I'd really like to have keyboard shortcuts to quickly switch between components; perhaps some kind of search-based mechanism, where I can hit a key to bring up a search box, type a few letters to get to a component, hit enter, and have that component selected.

How can I "export" a schematic to some useful standard format (other than a read-only PDF)? (In particular, a netlist, or something usable as an initial input to a PCB tool?)

I'd love to have the ability to save a circuit with named nodes as a "part", which I can then use as an IC-like component in other circuits, hiding the details of that circuit normally but drilling down into it if desired. Ideally, this would support versions of individual parts, making it easy to upgrade a circuit using a previous version of a part to a new version. Also, ideally the part could have parameters of its own, and use those parameters to assign parameters to its own components.

Any plans for collaborative editing and "team" repositories?

Do you have any plans to support more of the EDA workflow? For instance, a decent PCB layout tool? This seems like a great opportunity for a future business model: find one or more good board fabrication companies willing to do small-run work, and work with them to provide an easy way to go from CircuitLab to a built board.

<comment><AUTHOR> Thanks for the feedback! (Typos fixed, thanks.)

Yes, wires do currently stick to the grid, not to the elements. I wouldn't mind having some mode where they do stick to the elements to make parts a bit easier to move around.

Nestable subcircuits (named nodes as a "part") is on the long-term roadmap, but it's a big feature -- it'll take some time.

As far as collaborative editing, team workspaces, netlist export, PCB layout: we're thinking about all of them, and will just have to see where the users take us!

</comment></comment><comment><USER4> Cool idea. Even more cool for doing something like this that doesn't require Flash.

</comment><comment><USER5> Very nice, I like it. I've come across a few online/web-based logic and circuit sims before (example logic.ly , <http://www.falstad.com/circuit/index.html>) but this one seems the most complete and polished. I'm signing up for it right away.

</comment><comment><USER6> Looks great! Have you looked into trying to do any realtime feedback like in Bret Victor's recent talk? (amazing watch - <http://vimeo.com/36579366> the circuit part is ~23 min in)

</comment><comment><USER2> I found some examples here: <https://www.circuitlab.com/user/CircuitLab/>

</comment><comment><USER7> Looks great guys!

</comment><comment><USER8> Neat!</comment>