Lesser-known Pandas tricks (2019) - <AUTHOR> https://towardsdatascience.com/5-lesser-known-pandas-tricks-e8ab1dd21431 <comment><USER2> Something I love about pandas is that often you can pass a URL in place of a file name.

The other day I needed to scrape data from a table on a webpage. Thinking about traversing the DOM and building up an array was already giving me a headache. Thankfully pandas has the "read_html" function. Getting a list of dataframes for each table on the page was as easy as:

      dfs = pd.read_html(url)

<comment><USER3> 1\. pandas can do date ranges _date_range =

pd.date_range(date_from, date_to, freq="D")_

2\. merge with indicator

if you set `indicator` parameter of _merge()_ to _True_ pandas adds a column that tells you which dataset the row came from

3\. merge with approximate match - the _tolerance_ parameter of _merge_asof()_

 _pd.merge_asof(trades, quotes, on= "timestamp", by='ticker', tolerance=pd.Timedelta('10ms'), direction='backward')_

4\. Create an Excel report and add some charts

5\. Save the dataframe in gzipped form

edit: formatting

edit2: I managed to get an outline link

[https://outline.com/fY26Aw](https://outline.com/fY26Aw)

<comment><USER4> This is basically a summary of the link posted by OP.

Edit: not that it's a bad thing, I just mention it so people who read this know for sure they can avoid the link if they already know how to use the tips listed here. The article has code examples and more details.

</comment></comment></comment><comment><USER5> Medium wants me to upgrade my account to read this article, please people share your posts in somewhere else.

<comment><USER3> You are not missing much, the article isn't groundbreaking.

</comment></comment><comment><USER6> Merge with indicator is also useful for doing anti-joins:

        left.merge(right, how="left", indicator=True, ...)
        [lambda df: df._merge == "left_only"]

</comment><comment><USER7> My favorite, most elegant SO answer I've ever gotten was to a question about Pandas.

The question was "How do I create a column where each row's value is the mean of another column's values starting at that row?" The answer was:

      df.loc[::-1, 'col_1'].expanding().mean()[::-1]

<comment><USER8> I guess elegance is in the eye of the beholder.

Separately, I find it upsetting there are at least 6 ways of reversing a dataframe. It suggests some API smell.

<comment><USER7> I get tripped up by the Pandas API no matter how often I use it, and when I haven't used it in a while I practically have to re-learn all the basics. But whenever it does exactly what I need in a readable one-liner, I forgive it for all its transgressions. It's an abusive relationship.

</comment></comment></comment><comment><USER9> Note that there is a handy PeriodIndex version of pd.date_range:

      pd.period_range(date_from, date_to, freq = "D")

AFAICT, a PeriodIndex and DateTimeIndex function mostly the same, and have many of the same methods, except...

      * DateTimeIndex can't hold dates far in the future
      * PeriodIndex can't easily round to the end of a period (e.g. date + 0*MonthEnd() errors)
      * PeriodIndex doesn't handle timezones?

</comment><comment><AUTHOR> TLDR;

5 lesser-known pandas tricks:

1\. Date Ranges

2\. Merge with indicator

3\. Nearest merge by timestamp

4\. Create an Excel report from pandas

5\. Use gzip with when saving to csv

</comment><comment><USER10> Does anyone want to do a TLDR? I don't especially want to sign into Medium.

<comment><AUTHOR> you have it above

<comment><USER10> Ok, that's been posted since I posted this question.</comment></comment></comment>


Ask HN: What VPN Service do you recommend? - <AUTHOR> I have been traveling a lot and honestly I don't feel comfortable with Internet connections at various airports and access points. Researching a bit, there are many VPN services to choose from... and it feels a bit overwhelming!
I could setup my own using OpenVPN or use a SaaS service, however, not all VPNs respect privacy (e.g. there were some controversies with HideMyAss).
Supporting video streaming services like Netflix/Hulu/Amazon Video would be a nice plus.
What VPN do you use when you are away from home? <comment><USER2> I had been using PIA [1] for several years and had been quite satisfied.

I have never liked Pure VPN - weird ports, and it seemed to disconnect when downloading larger files. But I had their account for almost free for two years. Not extended.

TunelBear is cute and easy to use but not configurable on client side.

I always appreciated the dedication and innovative approach of CryptoStorm [4].

[1] [https://www.privateinternetaccess.com/](https://www.privateinternetaccess.com/) [2] [https://www.purevpn.com/](https://www.purevpn.com/) [3] [https://www.tunnelbear.com/](https://www.tunnelbear.com/) [4] [https://cryptostorm.is/](https://cryptostorm.is/)

</comment><comment><USER3> Windscribe: [https://windscribe.com/signup](https://windscribe.com/signup) I got a vastly discounted "lifetime" signup for them (seems to be good until 2028 on the expiry page but whatever).

</comment><comment><USER4> If you are concerned with security over defeating regions for viewing video I would recommend that you roll your own. The reason is trust. You trust your home lan I presume. How can you be sure there aren't the same kind of bad actors in the exit point of a third party vpn that could also be at a coffee shop or airport? There really is no way to be sure.

If your not too technically savvy some premium home routers have a vpn in them. Just be sure it's up to date with the latest firmwares. There are some older vpns that are really very vulnerable. It's a sensitive issue. You want to guard the vpn because it's a door to your entire lan.

</comment><comment><USER5> If you are looking for a free VPN service, then there is no one better than Windscribe. But, freemium packages come with intrusive advertisements here and there which interrupts your online experience, plus you are never truly sure if you are 100% secure and anonymous (they can't advertise you if they are not tracking you, so...). So, when it comes to premium VPN services, and more specifically for fast streaming purpose, I would suggest you use either [https://www.expressvpn.com/](https://www.expressvpn.com/) or [https://www.ivacy.com/](https://www.ivacy.com/) (Ivacy has recently also won an Award for being the Fastest VPN Service of the industry in the VPN Awards 2019 held at Las Vegas).

As well as security and privacy go, their log policies are quite Black & White, so, never really had an issue with that too.

I would strictly advise not to set up your personal VPN as it would never be as safe as the companies who are spending millions in an year trying to make their VPN infrastructure hack-proof, so, that'll be my two cents on the subject. Cheers!

</comment><comment><USER6> Proton, which comes cheap with their encrypted email, also recommend. The setup couldn't be easier and it's very flexible.

You can choose what country you want to come through each time you connect and change it with a click. They also offer to route all connections through Switzerland with its strict privacy laws before connecting through your country of choice.</comment>


We built an engineering job ladder from the ground up - <AUTHOR> https://www.thumbtack.com/engineering/how-we-built-an-engineering-job-ladder-from-the-ground-up/ <comment><USER2> How does it take 150 engineers to run a platform like that?</comment>


PayPal blocks transactions that include the word "tardigrade" - <AUTHOR> https://twitter.com/cpm5280/status/1303402125205082114 <comment><AUTHOR> Tested this myself by sending some money to a friend with a note reading "tardigrade," and was told the payment is "pending."

> As part of our security measures, we review certain payments more closely to > ensure our platform is being used properly and to minimize the potential > risk for us and our customers. One of the payments that you sent is > currently being reviewed. We are working to resolve this matter as quickly > as possible. We apologize for the inconvenience.

</comment><comment><USER2> I'd guess this [https://documentation.tardigrade.io/](https://documentation.tardigrade.io/)

Which is blockchain related.

<comment><USER3> This appears to be specifically _not_ blockchain related.

[https://documentation.tardigrade.io/concepts/decentralizatio...](https://documentation.tardigrade.io/concepts/decentralization/coordination- avoidance#comparison-to-blockchain-networks)

</comment></comment><comment><USER4> Sounds like a repeat of the case that Paypal blocked an artist's account for having the word Iran inside her full name [https://news.ycombinator.com/item?id=24359821](https://news.ycombinator.com/item?id=24359821)

</comment><comment><USER5> For those of you, who like me, couldn't remember what a Tardigrade is, they're microscopic animals that live in water and are also known as Water Bears.

[https://en.wikipedia.org/wiki/Tardigrade](https://en.wikipedia.org/wiki/Tardigrade)

All I can think of is that this is some obscure word used to test functionality of their the piece of software that blocks payments based on a keywords contained within. I suppose someone could test out a transaction with obvious blocked keywords like "nazi terrorist child porn" and see if it behaves similarly, but I'm not going to try it.

<comment><USER6> It would be weird to block those as they are pejorative used only by people who oppose these things. Try "national socialist freedom fighter". I don't know what child porn is called by pedophiles.

<comment><USER7> > I don't know what child porn is called by pedophiles.

There's a rabbit hole.

<SFW> [https://www.wired.co.uk/article/child-sexual-abuse- keywords-...](https://www.wired.co.uk/article/child-sexual-abuse-keywords-iwf)

</comment></comment></comment><comment><USER8> Somebody in the Twitter posted screenshot from sanctions list for entry "Tardigrade limited". [1]

Sounds plausible for me that some automated tool found a match and these transactions went for manual review.

[1] [https://sanctionssearch.ofac.treas.gov/Details.aspx?id=7935](https://sanctionssearch.ofac.treas.gov/Details.aspx?id=7935)

</comment><comment><USER3> JFC. It's 2020. Natural language processing is ubiquitous. And clowns like this are still denying service based on keyword matching. Get better programmers, Paypal.</comment>


Code Wars (JS, Coffeescript & Ruby) - <AUTHOR> http://www.codewars.com/

<comment><USER2> The first Javascript kata fails with an unknown error, even if the code is correct.

You probably want to fix this bit too: [http://imgur.com/KqYuCHn](http://imgur.com/KqYuCHn)

Also, if your browser window is too narrow it suddenly thinks you're on a mobile device and ceases to work.

<comment><USER3> Wow! We had no idea someone would be posting about us on HN today. We were not prepared. The site has been scaled up and it should working now.

 _UPDATE_ :

I was a bit hasty with my original comment. There was a regression bug that was still causing the landing page to be broken. A fix has been deployed and things should be working now.

<comment><USER4> I got to the final one then it just refreshes when I submit my solution (Note: I have to click JS rather than Submit or I get "Unknown Error").

</comment></comment></comment><comment><USER5> I love when a site asks me to write code that works when its own code doesn't.

Unknown error.

</comment><comment><USER6> Yea.. Can't get this to work..

Q: Given 2 strings, a and b, return a string of the form short+long+short, with the shorter string on the outside and the longer string on the inside. The strings will not be the same length, but they may be empty (length0).

My Answer:

      function solution(a, b){
        if(typeof(undefined) == typeof(a))
          a = "";
        if(typeof(undefined) == typeof(b))
          b = "";

        if(a.length > b.length)
          return b + a + b;
        else
          return a + b + a;
      }

Result: "Unknown Error"

Of course my solution doesn't account for a.length == b.length, but the question is somewhat nonsensical in that it states '...strings will not be the same length, but they may be empty...' (2 empty strings would be the same length)...

</comment><comment><USER7> Aside from the code tester not working properly, their branding and design are ignorant and overzealous.

"Katas"? an Ensō? It's code, chill out.

<comment><USER8> I actually liked the design. There is always someone who looks at a "Show HN" just to tear it down though.

</comment></comment><comment><USER9> Little flakey (running on Chrome Mac). I type in an answer, press Submit, and nothing happens. When I reload it finally updates and shows the next question.

<comment><USER10> Same here (even on Chrome Mac), but I get an "unknown error". But when I switch to coffeescript or ruby, it then shows up that I got the correct answer (in the Earn an Invite section).

<comment><USER11> Same, that only worked a couple of times for me though (Safari Mac)

<comment><USER10> I ended up making it all the way past the third question (though I had to enter the same solution a few times). I ended up getting the invite page but then just left.

</comment></comment></comment></comment><comment><USER12> Ooops – @setAnnotations:

Chrome: "TypeError: Cannot call method 'replace' of undefined"

Safari: "TypeError: 'undefined is not an object (evaluating 'f.text.replace')"

Firefox: "TypeError: f.text is undefined"

Not exactly advertising competence in JS ... (Wasn't there any testing?)

</comment><comment><USER13> I like the concept + UI and have saved the bookmark.

Don't let the bug comments get you down - this is cool.

</comment><comment><USER14> Nice, haven't touched ruby in awhile but glad it's not just me. I was worried when I couldn't troubleshoot a simple multiply function:

def multiply(a b)

      a*b

end

<comment><USER15>
            def multiply(a, b)

              a*b

            end

note the comma in params

<comment><USER14> Sorry wasn't clear in my post, that was the broken code I had to fix. I added the comma and got the unknown error message.

However I just reloaded the page and it's showing a different code snippet and says 1 of 3 completed.

</comment></comment></comment><comment><USER16> Stupidly buggy. The correct answer tells me "Unknown Error".

</comment><comment><USER17> FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU...

I'm glad it's their fault, i was actually getting depressed not finding my error...

</comment><comment><USER18> Apparently there wasn't a lot of collaboration on the site code itself; as has been mentioned, it's pretty buggy. Or maybe that's the REAL test...

<comment><USER19> It's possible. The site does instruct the user: "The code does not execute properly. Try to figure out why."

Maybe it's not talking about the function.

</comment></comment><comment><USER20> Thanks for all the feedback - we got caught in the middle of a performance upgrade so the sites code challenge engine isn't working under load right now.

</comment><comment><USER21> I dig it! Didn't get any of the errors everyone else here seems to be experiencing (Chrome on Win, v27). Looking forward to more of this. Nice job.

</comment><comment><USER22> "The code does not execute properly. Try to figure out why."

I guess the challenge is to build a working version of their site for them?

</comment><comment><USER23> I don't know what this is, but apparently I'm "enlisted" now... The design on the site looks really cool, though.

</comment><comment><USER15> I fixed the code, click submit. nothing happens?

<comment><USER24> The site is definitely buggy. I'm getting the following errors in Chrome:

       no pushstate application-2667ae701c78991056dcdf4c46459327.js:19
       Uncaught TypeError: Cannot call method 'replace' of undefined ace.js:1
       Given URL is not allowed by the Application configuration.: One or more of the given URLs is not allowed by the App's settings.  It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains.

</comment></comment><comment><USER22> Whew. Yeah, I thought I was going crazy.</comment>


Show HN: Scary Productive – Aversion therapy for your procrastination problems - <AUTHOR> https://www.scaryproductive.com <comment><AUTHOR> Hi all,

Scary Productive is a browser extension that lets you block websites you shouldn't visit.

The twist is, when you do visit a website you shouldn't, a video plays that scares the hell out of you.

The Chrome extension is ready for download.

Firefox and Opera are pending approval in their respective stores.

Any feedback is appreciated.

<comment><USER2> Is there a demo video available for this?

<comment><AUTHOR> There you go!

[https://www.youtube.com/watch?v=ZfPNoVGTUs0](https://www.youtube.com/watch?v=ZfPNoVGTUs0)</comment></comment></comment>


Ruby on Rails Tutorial Chapter 12 is out - <AUTHOR> http://news.railstutorial.org/chapter-12-is-out-the-rails-238-tutorial-is-c

<comment><USER2> This is an awesome tutorial not just for programmers new to Rails, but also people new to programming and web development. I'm glad you gave an overview of editors, IDEs, version control, and all the other tools associated with development that you usually don't see mentioned in programming books.

<comment><USER3> I couldn't agree more. This is _the_ place to go for learning Rails _and_ about other programming must-haves.

</comment></comment><comment><USER4> This tutorial is great.

One question for experienced Rails folks:

I noticed that a lot of the test code seems to be somewhat redundant and not actually testing many different paths of execution.

E.g. I saw a lot of test cases like this in his examples:

      it "should be successful" do
        get :new
        response.should be_success
      end

      it "should have a follower attribute" do
        @relationship.should respond_to(:follower)
      end

      it "should have a followers method" do
        @user.should respond_to(:followers)
      end

      it "should render the home page" do
        post :create, :micropost => @attr
        response.should render_template('pages/home')
      end

Writing a unit test that verifies that some object has a new method/attribute that you're about to add to it, or that some request returns a 200 OK, or that some request renders a specific template? It all seems very...boilerplate to me.

Is this a common practice?

<comment><AUTHOR> This is a good question, and I actually just added a footnote yesterday to address it. The deal is that, when doing test-driven development, you often bounce back and forth between test and application code, like this:

      it "should be successful" do
        get :new
        response.should be_success
      end

Then

      def new

      end

Next you'd add a test for what the 'new' action actually does, and then get the 'new' action to do it.

In a book, interleaving the test and application code like this is rather cumbersome. The real payoff to this approach will be in the upcoming screencast series (<http://www.railstutorial.org/screencasts>), which will allow me to interleave the tests and application code much more finely. Together with Autotest continuous testing and Growl notifications, the screencasts will show just how addictive TDD can be.

I should probably motivate this practice better in the book, because it is counter-intuitive. In fact, I thought this technique was crazy when I first saw it. (The same goes for TDD in general.) But it's amazing how much easier it is to get started on a method when the first step is "make sure the method is there". Indeed, such tests aren't really designed to make the application better-tested; they're designed to help the programmer stay in the zone.

That being said, there probably are some places where such fine-grained tests aren't worth the trouble, or might even be confusing. I'm about to embark on a Rails 3 update of the book, so I'll keep my eye out for tests that should be removed. If you have any suggestions for tests that should be on the chopping block, please let me know (<http://www.railstutorial.org/feedback>).

<comment><USER4> I guess my question is whether that type of testing is worthwhile. It seems to create a lot of brittle test cases where renaming or moving something can cause a bunch of tests to break, creating extra maintenance overhead, while not actually telling you all that much.

<comment><AUTHOR> I've taken a run at this, and I can't find any tests that obviously need to go. In many cases, some tests aren't strictly necessary, but they do make clearer what the code is supposed to do. Indeed, they often bring to mind the maxim from _Structure and Interpretation of Computer Programs_ :

      Programs should be written for people to read,
      and only incidentally for machines to execute.

(That's a bit of an over-statement, of course, but its spirit is true.)

I also reevaluated the code for possible implementation lock-down. It looks like most such cases involve standard REST action names, such as _new_ and _show_ , or other aspects of the application that are unlikely to change.

In the end, you'll have to develop a style that works for you. The code presented in the book is based on the style I've developed in my own work and from reading the code of others, but there are as many styles as there are Rails developers. My job is to help get you on the road to finding a style of your own.

</comment></comment></comment></comment><comment><USER5> I've gone through 9 chapters of this tutorial, but I don't know if I want to finish it. The first few chapters were great and a lot of fun. Michael removed a lot of magic that I never understood. But I suppose my worries are irreconcilable: Michael attempts to please both programmers and non- programmers at the same time.

For example, I enjoyed things such as Figure 2.11 (a detailed explanation of MVC in Rails), but then Michael flashes through Ruby in Chapter 4. I understood it because I'm a programmer, but I don't know if any of the other target audiences would.

And as the tutorial progressed, I felt that Michael explained concepts and topics less and less.

For example, for user sign-in/out, another Rails book simply insert a session[:user_id] = @user.id, but Michael goes through the trouble of creating a new User.remeber_token field (Chapter 9). Why?

Security? Surely not, since he previously explained that cookies are checksumed to make sure that it was not tampered with on the client side. Efficiency? Nope. The session[:user_id] = @user.id is more efficient.

Then there are also other quirks such as modifying the Users table everytime the user logs in (it calls User.remember_me!). (I might be wrong about this, please check me).

I started this tutorial to remove some magic fairy dust from my eyes, but I'm afraid it has blinded me even more.

Michael, I'd really appreciate it if you could answer some of my questions.

NOTE: I've played around w/ RoR before, but not much.

<comment><AUTHOR> I think that as the tutorial progresses, the number of potential confusions increases combinatorially. I've done my best to answer them in the text, but given the broad audience for the book it's hard to anticipate all possible questions.

I'll do my best to answer _your_ questions. The session[:user_id] solution you mention only persists over one session, i.e., if a user closes his browser, his session is lost. The tutorial's remember token, on the other hand, persists even after the browser is closed. Once you have a persistent cookie, though, you have a potential security breach. The reason a persistent cookie can't just be the user id is because it can be trivially spoofed: if you can simulate a cookie with id 17 (not hard with, e.g., Perl, Python, or Ruby), you can log in as user 17. That would be a Bad Thing™. By hashing the user id with a salt, we avoid this problem. I've made a note to motivate the remember token better in the tutorial.

Saving the user on each login is correct; it's needed to change the remember token for security purposes. That the remember token doesn't currently change on each login is a bug in the tutorial, and I'll fix it ASAP (probably tomorrow). (The id-salt hash should also include a timestamp.)

Finally, Rails does have a lot of magic, which is a source of its power but is also a potential stumbling block. The _Rails Tutorial_ book is designed not to remove fairy dust but rather to teach you how to use it—mainly because most Rails application developers never need to know what's behind the curtain. (Indeed, in many cases _I_ don't know, nor do I particularly care. After all, Ruby is mostly written in C, but you don't have to dig into the C source to use Ruby.) If you're a pull-back-the-curtain kind of guy, I recommend _The Rails Way_ as a companion volume to _Rails Tutorial_.

You've raised some good issues here. Let me know if you have any other suggestions: <http://www.railstutorial.org/feedback>

<comment><USER6> You can configure cookie-based sessions to be persistent.

[http://api.rubyonrails.org/classes/ActionController/Session/...](http://api.rubyonrails.org/classes/ActionController/Session/CookieStore.html)

For rails 3 in config/initializers/session_store.rb

        Rails.application.config.session_store :cookie_store, :key => '_session', :expire_after => 2.weeks

<comment><AUTHOR> I'll take a look at this. I know that Rails 3 has a new way of doing things, but every Rails 2.3.x authentication system I've seen uses some kind of remember token. Maybe we're all just doing it wrong. :-)

 _Update:_ I don't see any way to persist the session variable (where do the options go in session[:user_id] = user.id?), and I'm a little nervous about doing so, since the whole point of a session is that it _doesn't_ persist. I'll stick with cookies for now. The Rails 3 version of the tutorial will probably use "permanent" cookies as per this blog post: [http://m.onkey.org/2010/2/5/signed-and-permanent-cookies- in-...](http://m.onkey.org/2010/2/5/signed-and-permanent-cookies-in-rails-3)

<comment><USER6> Well I did roll my own signed cookies using <http://gist.github.com/416030>

Just a note, that cookie is used by created by rails and used dokuwiki using a custom authenication class I made. (dokuwiki verifies the signing)

</comment></comment></comment></comment></comment><comment><AUTHOR> Here's a direct link to the new chapter:

<http://www.railstutorial.org/chapters/following-users#top>

<comment><USER7> Great work! This tutorial is a huge asset to the Rails community.

<comment><AUTHOR> Thanks! Glad you like it. :-)

</comment></comment></comment><comment><USER8> I've been through the tutorial using Rails 2.x and also 3beta. The tests don't all work in 3beta but in case you're wondering, yes, you can almost the entire app in 3.0. It is indeed a wonderful thing and Michael has, I think, become one of the largest gems in the Rails community with this contribution.

\-- Fred

</comment><comment><USER9> I think this tutorial is THE place to start to learn rails.

</comment><comment><USER10> This is an awesome tutorial one of the best I have seen in quite a while. This book is highly addictive.

</comment><comment><USER11> What's the best way to send you feedback from a non hardcore programmer perspective on a chapter by chapter basis? I am very much enjoying your book and wanted to contribute back.

<comment><AUTHOR> There's a feedback link in the top menu of the website and also on the right sidebar. In the PDF, each page has a feedback link in the footer. Or just click here: <http://www.railstutorial.org/feedback>

</comment></comment><comment><USER12> I'm working through this now. As an experienced ASP.Net developer it's a great intro to how things are done in the Rails world.

</comment><comment><USER13> Any plans on releasing PolyTeXnic soon(ish)?

<comment><AUTHOR> (N.B. For those who don't know, PolyTeXnic is the markup system (built on top of LaTeX) used to produce the Ruby on Rails Tutorial book.)

There's a lot of prepwork to be done before PolyTeXnic is ready for release—among other things, I want to write some good documentation first, which IMHO is important for an open-source project but takes a lot of time—so it won't be available soon(ish). More like eventually(ish). :-)

</comment></comment><comment><USER14> Are you still planning to release screencasts as part of railstutorial?

<comment><AUTHOR> Indeed I am! Sign up for an email notification at <http://www.railstutorial.org/screencasts> :-)</comment></comment>


The wondrous life and mysterious death of Golden Eagle 1703 - <AUTHOR> https://www.theguardian.com/world/2020/apr/01/golden-eagles-us-dying-why <comment><USER2> That was a fascinating read, and I had no idea the national eagle repository existed which sounds like a great program from my cursory knowledge

[https://www.fws.gov/eaglerepository/](https://www.fws.gov/eaglerepository/)</comment>


Niklas Zennstrom: What I've Learned - <AUTHOR> http://www.wired.com/epicenter/2010/11/what-ive-learned-by-skypes-niklas-zennstrom/

<comment><USER2> A couple interesting recurring themes from advice lists like these is that failure is ok, and that often times no one buys into a project that will later become successful. This is consistent with my experience as well. I've had probably 10 businesses fail. When I started the one that supports myself and my family no one was interested in helping, possibly in light of past failures. Many people passed on partnership opportunities. As a result I had to learn a lot of sys admin stuff and figure out how to promote my product alone. Six years later, I am the sole owner and employee. No dilution, I know how everything works and it pays for a comfortable life in Southeast Asia. (I am an American.) Launched a couple business since that one -- both failures. But all you really need is one good one to change your life.

</comment><comment><USER3> What's most fascinating about Niklas is his recurring theme of P2P on Kazaa, Skype and Joost. At the first sight it seems that these companies are disconnected (different markets) but his true accomplishment was to leverage the P2P technology for different use cases (file sharing, voice and video) and at the same time making it transparent from the user experience.

I also find fascinating that even Skype's business model seems to be P2P-driven: Skype seems to charge only for services that use the company's infrastructure, while P2P services (those that do not directly use Skype's servers) are free.

</comment><comment><USER4> Also, maybe, Meg Whitman is a moron? Purchasing skype w/o also purchasing the backing tech has to be one of the dumbest acquisitions in a long time in the valley, rivaling the acquisitions of bebo and myspace.

<comment><USER5> Myspace used to make money, actually - so that is not so dumb an acquisition as you might think.

Really the others where just money loosers - and if you run a big company, you risk loosing a large amount of money.

IBM licensing DOS, that was stupid.</comment></comment>


For online publishers, editing can lead to copyright liability: 9th Circuit - <AUTHOR> http://www.reuters.com/article/us-otc-internet-idUSKBN17C291 <comment><AUTHOR> This is a very significant case to follow. EFF siding with LiveJournal. Mavrix has a compelling case for Market Harm by way of Copyright exploitation.</comment>


Did Google create a better smartwatch interface than Apple? - <AUTHOR> http://phandroid.com/2014/09/11/apple-watch-ui-vs-android-wear-ui/

<comment><AUTHOR> Bear in mind this is from a website called 'phandroid' and is therefore unlikely to be impartial. However the screenshots are rather interesting.

If you sent them back in time a couple of years and asked someone to pick which side was more 'Apple'-ey, would they choose the left or right?

<comment><USER2> The source of the photos is from ArsTechnica ( [http://arstechnica.com/apple/2014/09/smartwatch-wars-the- app...](http://arstechnica.com/apple/2014/09/smartwatch-wars-the-apple-watch- versus-android-wear-in-screenshots/#image-8) ). So the only thing he did was write some text about it...

It doesn't seem to matter the article is from a website called phandroid in this case.

Edit: Downvoted because i said where the source of the pictures come from?</comment></comment>


Reversing Safeway's private APIs to automate coupon collection - <AUTHOR> https://blog.jonlu.ca/posts/safeway <comment><USER2> I enjoyed the article and would recommend it.

Aside: At the end of the article they have a "Bonus: Speeding things up" section where they automate adding 300~ coupons via 300 HTTP connections in 5 seconds (instead of 60~ seconds).

In my _opinion_ if you're going to automate stuff like this, you should do so with the goal of minimizing disruption (and frankly, detection). They run the script automatically at midnight in the background via cron, so why was going slower problematic? 300 requests in a span of 5 seconds seems much more likely to trigger an IDS[0], get flagged as unusual in the logs, or similar than 300 over 60 seconds. Particularly at midnight.

I'd be trying to look at human as possible and not set off automated security systems. Heck you could add a randomized delay (e.g. 1~2 seconds) between requests and it would still be completed inside of 10 minutes. Plus then nobody can reasonably accuse you of trying to "DoS" them/violate the CFAA.

[0] [https://en.wikipedia.org/wiki/Intrusion_detection_system](https://en.wikipedia.org/wiki/Intrusion_detection_system)

<comment><AUTHOR> I agree - I actually built the thread pool stuff for work while I was testing, since I had the code from a previous project.

If I was more worried about Safeway catching on I'd probably do something as you suggested (at the very least I'd add user agent headers and the other cookies expected from a real session, as right now it's trivial to detect my requests).

Sneaker bots do this exceedingly well - it's a constant cat and mouse game to make the requests look as human as possible, very interesting space right now.

<comment><USER3> I highly recommend not making more then say 5req/s - and preferably do it at like 2am.

These projects are fun IMO, but it's best to not hammer anyone's servers if it isn't necessary.

<comment><USER4> But at 2AM your traffic will create a more noticeable spike...

It doesn't blend in as well...

<comment><USER3> In my experience, unless they have excellent monitoring and a team looking to ban you they won't notice. It's half courtesy, and the other half is because it's not likely to affect their business operations (by slamming the servers when they're busy) they're less likely to notice or care.

</comment></comment></comment></comment></comment><comment><USER5> I did something similar with Safeway's API back in the day. But rather than chew up their API with unsupported usage--CFAA case territory--I now just log into Safeway's website and issue a one-liner on the coupon page:

$(".grid-coupon-clip-button button").click();

<comment><USER6> what does this do exactly?

<comment><USER7> > _$( ".grid-coupon-clip-button button").click(); _

> _what does this do exactly?_

The command allows you to click all buttons in the page at once:

• The dollar sign is an alias for jQuery [1];

• The text between double quotes is a CSS selector;

• Select every DOM element with a _"grid-coupon-clip-button"_ and _"button"_ CSS class;

• The thing at the end is a JavaScript function call which triggers an "onclick" event [2];

[1] [https://jquery.com/](https://jquery.com/)

[2] [https://api.jquery.com/click/](https://api.jquery.com/click/)

<comment><USER8> This is a great little write up, but the third bullet point should be:

\- Select every button with a parent element that has the css class "grid- coupon-clip-button"

</comment></comment></comment></comment><comment><USER9> This reminds me of a very similar case a decade ago I never figured out.

Anyone remember Coupon Guy from 4chan in the 2009/2010 timeframe? You could make your own "Buy 1 Get 1 Free" or variant (for both N, "buy 1 get 10", or for kind of coupon, like "buy 1 get half off") Tv, Xbox 360, near anything etc. For Walmart, Best Buy, other chains etc. The tools were passed around stegonographically in the instruction images. Since coupons weren't properly accounted for until they hit a place in Texas, whole threads full of Anons over the course of weeks fabricating working coupons.

Until they stopped working, and of course rumors of "the FBI" apparently grabbing the guy.

I never did figure out what happened tech wise under the hood there.

<comment><USER10> >> The tools were passed around stegonographically in the instruction images

Whoa, really? I remember the coupons flying around 4chan of course. Had no idea the tools were in the images.

<comment><USER11> It's easy to make a file that both a valid image and a valid zip file, because zip readers start from the end-of-central-directory at EOF and most other things start from a header at the start of the file. Many such images included a winrar icon.

There might have also been some steganographic images, but I know for sure I saw several of the image+archive kind around then.

</comment></comment></comment><comment><USER12> This is the kind of stuff where I tell people that coding can be a real practical skill (that gives you an unfair advantage these days).

I did something similar (read-only) for Home Depot Truck Rentals. To check if the truck was available at my local store, each time, you had to put in your zip code, and click a couple of times. Once I found that was an API, I rebuilt the call in Postman and kept hitting that endpoint until a truck was available.

That way I could check really fast.

The twist: None of it mattered because their data itself didn't update accurately (I saw one in the parking lot and they had one available and never updated their site). :)

<comment><USER13> Exactly this.

I did the same thing to find available camping spots in Hawaii because they are super difficult to get. Wrote a script that would query their "API" every 5 minutes and alert me if a spot became available anywhere.

<comment><USER14> Have you considered whether doing this might be...wrong?

Presumably those campsites are permitted by some government agency (NPS, BLM, the state of Hawaii, etc.), and presumably that agency designed permitting system with the assumption that _people_ with _limited time and attention_ would be vying for the permits by having to visit the site themselves to get one.

This encodes a particular definition of fairness: that those who register early, or are very motivated, or simply those with a lot of free time to refresh the site, will get permits.

I can also whip up a quick script to replace refreshing an unprotected HTTP API with a notification email. Does that make me more deserving of the camping spot?

<comment><USER15> > _presumably that agency designed permitting system with the assumption that > people with limited time and attention would be vying for the permits by > having to visit the site themselves to get one._

That's quite a very large assumption that I don't think we can accept as fact.

> _that those who register early, or are very motivated, or simply those with > a lot of free time to refresh the site, will get permits._

Perhaps someone who writes a script would count as "very motivated"?

> _Does that make me more deserving of the camping spot?_

"Deserving" has nothing to do with this in the first place. The only way that works is if you define "those who register early", "motivated", "a lot of free time" as "deserving". I could maybe see an argument for the first two classes of people as being "deserving", but I don't think you can justify "I have a lot of free time" as a reason for deserving anything, really.

Doing first-come, first-served based on availability and the random possibility of a cancellation isn't ever going to be a "fair" system. This sort of system is put into place because it requires very little coordination and work on the part of the agency that maintains the reservations. Holding that up as some sort of standard for fairness, and suggesting that anyone who thinks outside the process is _wrong_... is a little much.

<comment><USER14> I'll bite.

I think you're right the agency probably didn't sit down, write down definition of fairness, then design a permitting system around it. They probably implemented the cheapest/easiest digital analog they could find to a traditional fax-in/walk-up first-come/first-served permitting system.

However, the intentionality of the implementers was not central to my argument.

The system was created by (probably) non-technical people under a certain set of assumptions: namely, that this digital first-come first-served system would function approximately like the old paper one, but with fewer dead trees and toil. The old one was rate-limited by having to call an office and probably talk to a human, and the assumption that if you call every 5 minutes that human will probably get annoyed with you and stop answering your calls. The new one is rate-limited by the assumption that most campers simply can't spend all day refreshing a website.

The traditional first-come first-served system isn't intrinsically "ethical" or "fair" for some classes of people (as you've astutely pointed out), at best it's a crude approximation of some version of fairness. While crude, it was established by a democratically-elected government tasked with allocating a shared resource. "People who can automate HTTP API calls" and the nearby "people who can hire people to automate HTTP API calls" (as has actually happened with some outdoor permits) were almost certainly _not_ in the groups of people the government was seeking to advantage by choosing this system, and I think most engineers are smart enough to be able to intuit that.

So the root of my comment was this: GP is using special knowledge they have (and probably worked hard for) to extract more of a public good than the public really intended to have access to.

* Is that fair to everyone who doesn't have GP's knowledge? Do people like the GP deserve more camping spots than others? This is a public resource, not sneakers, so fairness is important. * If everyone with programming knowledge acted the way GP acts, would that maximize the public good? * If everyone with programming knowledge acted the way GP acts, would the system even function at all?

My answers are basically: * No. Everyone who wants deserves an equal chance at the spots. If there's more demand than spots, it's the government's job to decide. Random programmers on the internet intentionally subverting the government's intentions is _wrong regardless fairness (or lack thereof) of the original system)._ It would nearly-minimize the public good. Only programmers and people who can hire them would get popular camping spots. This is a real problem is popular outdoors areas around tech hubs. There's a reason NPS will only accept old-fashioned faxes provably _not_ sent from a free online relay for the most popular Sierras routes in CA (e.g. the JMT and much of Yosemite), and it's not because they want to rock like it's the 80's or because the government is backwards. It's because assholes tried to spam the process with automation. I think some (like Half Dome) were migrated to a new lottery system on outdoor.gov this year. * The system would completely collapse, and most smart programmers could predict that. The government would have to spend more money on servers just to serve bots pinging the registration system constantly, or it would crash. Even if they did that, the people who gots slots would be a vanishingly small subset of the population (programmers) or people who can hire them. Likely, a grey market for "scalped" permits would arise.

<comment><USER16> If you want to see a world governed by a non-human understanding of fairness and one in which a highly technical cohort was entrusted to make these sorts of judgment calls, look no further than the domain industry in the early 2000s.

Specifically, consider Snapnames -- a company born out of the notion that snapping up a domain name coming up for renewal was something that was legitimately fairly awarded to the automated process that was fastest.

</comment></comment></comment></comment></comment></comment><comment><USER17> Another tip: (area code) 867-5309 works for Safeway club card discounts in most area codes while piping tracking of your purchases to essentially null.

Yes, Jenny's number.

<comment><USER18> At risk of ya'll taking "my" safeway gas rewards, this is almost always good for whatever the maximum discount off per gallon is at any safeway that also has a gas station.

<comment><USER19> Its amazing to me the degree to which people will go to save 3% or less on gas once a month. If you fill up 4 times a month you're saving about $4, and all it costs is a profile of everything you buy attached to your phone number.

<comment><USER20> Given that they're probably already tracking everything via my credit card number (whether I sign up for anything or not), I don't feel like much privacy is being given up.

Though as a rule I don't bother with most of these programs, mainly due to the inconvenience factor.

I've lost hope of maintaining my privacy through any actions I can take individually. A legislative solution is required.

<comment><USER21> Correct me if I'm wrong, but if you're using a credit card the bank is only getting a receipt that shows the sum total of the transaction and not an itemized receipt. The club cards are consuming and tracking the data of the entire transaction.

<comment><USER22> The club card acts as unique id to track you. The credit swiped at the machine has a unique id that they can use to track you.

The club card works across multiple credit cards and cash. That's the main difference. And you might possibly track 2 people who control the household (wife gets one, husband gets one)

<comment><USER23> Using Apple Pay would circumvent the CC tracking because it only transmits a one-use number.

<comment><USER24> Unfortunately (from some perspectives), this isn't true. Each instance of a card in Apple Pay has a long term Device Account Number (DAN) that functions the same as a physical card's number (though there is no link between the DAN and actual card number from the merchant's perspective). The same DAN is used across every transaction. The only way to get a new one (which is pretty easy, relatively speaking) is to unload the card from Apple Pay then re-enroll.

<comment><USER23> Was not aware, thanks for the clarification.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> Is there a private API for a particular store's prices?

It seems like coupled with couponing, you can build a decent price tracker that can tell you if you're actually getting a good deal. (like [https://camelcamelcamel.com/](https://camelcamelcamel.com/) for amazon, [https://steamdb.info/sales/](https://steamdb.info/sales/) for steam games)

Otherwise I've noticed that many(though not all) coupons are for items which recently had their base price increased to make the coupon seem like a better deal than you're actually saving.

</comment><comment><USER26> When I see access to private API's like this, I wonder how judges would interpret these actions as they relate to the CFAA. By accessing "private" API's like this, are you knowingly accessing a computer without authorization? Are you exceeding your authorized access?

The fact that Aaron's Law never went through has disturbed me...

<comment><USER27> I know you are just playing devil's advocate but why "without authorization"? You are using your account and your cookies so it should be fair game?

<comment><USER28> +1 you're only doing things you're already authorized to do, just with a different client.

<comment><USER29> Many sites view that as "unauthorized" because they like that top-down control

<comment><USER30> It's not any individual site's view that matters to me. It's the view of the courts that's the most concerning/pressing.

</comment></comment></comment></comment></comment><comment><USER31> On a slightly unrelated note, I was trying to figure out why this guy is using a .ca domain when I realized, his name is Jon Luca. At first I thought his name was Jon Lu (and therefore asian). Good use of domain name.

<comment><USER32> I'm in Canada and shop at Sobeys, which owns the Safeway brand up here, thought there might be some relevance to me thanks to the .ca domain name. Unfortunately, there was no relevance but it was still an interesting read.

On a side note, Safeway and Sobeys in Canada don't have a loyalty program, instead they piggy back off of Air Miles. All of the special offers available just amount to bonus Air Miles, so they're not actually that worthwhile (IMO).

<comment><USER31> What a blast from the past. I am actually Canadian but have been living in the Bay Area for over 10 years so I've already forgotten that you can collect Air Miles through Safeway (which was why I clicked on this article in the first place thinking of the .ca)

I don't think Air Miles are completely useless. I do remember redeeming air miles at least once in the past for a one-way trip somewhere...

<comment><USER32> They're not completely useless, but I do find that I don't seem to get much benefit from them.

For example, I needed to rent two cars on a trip last year. The first car I was able to rent through Air Miles, but I had to pay the taxes and any fees beyond the base price myself so it didn't feel like much of a deal. The second car required more Air Miles than I had, so I had to pay for the whole thing myself, I couldn't do part on Air Miles and part cash.

I ended up renting the second car through Costco and felt like I got a better deal overall than I did with the first car.

Maybe rental cars aren't the best way to use them.

</comment></comment></comment></comment><comment><USER33> Haha, I did something similar a while ago - I just invoked a click() on every "add coupon" button on their website, I didn't want to reverse engineer their APIs - way easier but also it requires a desktop browser with the page open.

I'm not sure if using this API is any different but a few months ago Safeway made a change that only lets you have 20(?) coupons at any time. After you add more it kicks off your oldest one. Which sounds like plenty but if you're adding every single coupon you're gonna get a ton that you have no desire for ($1 off diapers when you don't have a kid etc).

It worked for a while, though!

<comment><USER34> You can use Selenium to do the same thing in a headless browser, no need for a desktop browser with a page open.

[https://www.seleniumhq.org/](https://www.seleniumhq.org/)

<comment><USER35> In which case you want to probably use their headless Docker containers. [https://github.com/SeleniumHQ/docker- selenium](https://github.com/SeleniumHQ/docker-selenium)

You can also use Puppeteer for this purpose (using headless Chrome) [https://github.com/GoogleChrome/puppeteer](https://github.com/GoogleChrome/puppeteer)

</comment></comment></comment><comment><USER36> Curious, why implement your own threadpool? Python has two built in already: concurrent.futures.ThreadPoolExecutor and multiprocessing.pool.threadpool.

</comment><comment><USER37> For a while I actually tried doing something like this -- the coupon page included jQuery, so a quick one-liner self-XSS clicking the right elements would iterate through all the pagination, and then you could call the click handler on all the Add buttons (which share a CSS class for styling).

The problem came at checkout -- whenever I typed in my phone number (to apply the coupons from the loyalty account), the point-of-sale system would hang for tens of seconds while loading and then trying to apply all those coupons.

</comment><comment><USER38> This is cool but I'm not sure the purpose. I use the Safeway app every time I go to Safeway. I scan all the offers and just add the ones I want, which builds a shopping list for me.

This gives me a list of things to buy but more importantly _I know what 's on sale_. If I just added all the coupons

I'd still have to scan the list of things to find what I want to buy, but then I'd have to track them elsewhere, because the built in list would be useless.

Safeway actually made a decent app that helps me shop faster. This feels like it would ruin that.

<comment><USER39> Coupons have two purposes, which seem contrary, but are essential to understand how coupons are a form of advertising:

1) Saves you money (versus the retail price of the item)

2) Makes you more likely to buy the product on the coupon.

Your use of coupons adheres to both value #1 (saves you money, because you know what's on sale) and value #2 (advertises products on sale, increasing your chances of buying them). This is the core advertising model of coupons and why they've been popular forever.

This automated use of coupons saves you money _if_ you happen to purchase an item for which a coupon exists, _without_ requiring you to do any extra work to save that money — but also _without_ having the desired advertising outcome of making you more likely to purchase that item.

This compares well to adblocking. Internet advertising on websites:

1) Saves you money (versus subscribers-only paywalls)

2) Makes you more likely to buy the product on the advertisement

And in that analogy, ad-blockers are directly equivalent to coupon auto- adders: they allow you to save money _without_ having the desired advertising outcome of making you more likely to purchase that item, in a fully-automated manner that doesn't require you to exert any effort doing so.

Coupons are a precursor form of advertising ("pay-per-clip" :) where you are paid money to view the advertisement, and are more likely to commit to buying the product when you 'clip' the coupon — it's a marketing psych thing. They also have perfect tracking, since retailers provide coupons to manufacturers along with purchase date and location.

Coupon autoclippers break that agreement, such that you're 'paid' for being influenced by the advertisement without ever having been influenced. The coupons are no longer valid for tracking the effectiveness of advertising A/B tests in different markets (your Safeway account's zip code is surely part of that data). They are no longer proof that you viewed an ad at all.

You're not wrong that this app would ruin how you shop quickly, but you're also shopping quickly _using_ a list of products that were predetermined by Safeway and/or other marketing divisions to be of maximal interest to _them_ for you to purchase. As long as you're okay with that, coupon clipping is an excellent approach. For others, autoclippers would minimize the price paid _without_ changing their purchasing methods (which may be paper-based, brand- focused, or random-chaotic)

<comment><USER40> > ("pay-per-clip" :)

You have a well-written and accurate comment, but I'm overwhelmingly distracted by the combination of the adorable "pay-per-clip" and the historied debate about how to handle an emoticon smiley at the end of a parenthetical. (conclusion: you're doing it wrong and are a terrible person!....but, "pay- per-clip"...tee-hee)

<comment><USER39> Thank you, I do my best :).

</comment></comment></comment></comment><comment><USER41> I had written a similar program for US supermarket Publix, however I used it as an exercise to learn puppeteer[0] rather than using their private API directly.

Reading this inspired me to finally release it here: [https://github.com/davecardwell/publix-coupon- clipper](https://github.com/davecardwell/publix-coupon-clipper)

[0] [https://github.com/GoogleChrome/puppeteer](https://github.com/GoogleChrome/puppeteer)

</comment><comment><USER42> > This brought what used to be a painstaking process of clipping coupons from > magazines to a slightly less painful process of having to click "Add" on all > the coupons every week after logging onto their site.

This is an insane trend in supermarket usability. You want to offer low prices, but only to people who go through a practice round of online shopping before doing it in person?

Why are we doing this to ourselves?

<comment><USER43> They wouldn't make as much money if everyone clipped the coupon. However, most of the time, the coupons aren't really special. The loyalty club member price is already shown on the shelf anyway. Most "coupons" are more of an advertisement for the old folks who still do that. The incentive for the actually good coupons is to get you to come into the store and buy other stuff alongside the on-sale item. If I only have a few key items on my shopping list, I might be more inclined to buy more if the coupon app shows buy one get one half off for something. Or I might buy a different brand than I normally would because there is a coupon only on the app.

<comment><USER42> > They wouldn't make as much money if everyone clipped the coupon.

I get on a basic level it's a form of price discrimination, it just seems unfathomable that this bizarre skeuomorph, totally dependent on a series of random historical developments, would actually happen to line up with the way to extract the most return from your customers and/or give them the best experience.

But hey, I found the perpetual fake "50% off" sales at JC Penney's crazy making, and when they reversed that for more honest pricing they almost went out of business. I know I'm just shaking my fist at irrationality for no reason.

It still bothers me though.

</comment></comment></comment><comment> crooked-v This seems like prime territory for a Mac menu bar / Windows system tray app that runs this process once a day.

<comment><USER44> Why would it need a visible UI component? Just put it in a cron job

<comment> crooked-v Ordinary people don't use cron jobs.

<comment><USER45> This is not made for ordinary people I would say

<comment> crooked-v Ordinary people would absolutely use an app that lives in the menu bar/system tray, has a Safeway login page and a "run on startup" option, and once a day does magic stuff in the background that adds all the available online coupons.

<comment><USER46> Right but now Safeway will update something that will cause this to break, and now people who use this super handy app will expect the maintainer to update it - even if it was just a one-off project that the original developer had no interest in maintaining.

So now people will complain and your inbox is flooded with "please fix this" because people feel entitled when all you really wanted to do was just try some cool thing.

</comment></comment></comment></comment></comment></comment><comment><USER47> Nice article... I'd have probably just used node+puppeteer for this.

</comment><comment><USER48> Great article. Not sure why the author re-implements a thread pool when there is not one, but two in the standard library (futures and multiprocessing.pool.ThreadPool).

</comment><comment><USER49> It needs some tweaking to work now, but here is what I was using (in Python):

[https://gist.github.com/danielatdattrixdotcom/bd6a05e3d8c499...](https://gist.github.com/danielatdattrixdotcom/bd6a05e3d8c4994f6994d71527397c5d)

Executed via cron every day at a time before I would make a potential grocery run meant the coupons were already waiting on my account when I went to the store.

</comment><comment><USER50> Anyone know if the dev lurks here? I'm wondering if there's a way to fork his code or add Kroger functionality to it. If im not mistaken Kroger is a safeway acquisition that is a popular grocer in the south/southwest of the USA. this would be very helpful for those of us without safeways.

<comment><USER51> Kroger is the second largest supermarket in the US (after Walmart) that has many subsidiaries grocery chains that they have acquired in its 100+ years of existence. Pretty much Kroger bought up other "family" grocery chains and then keeps those chains local names such as Dillons, Frys, King Soopers, City Market, Gerbes, Kwik Mart, etc.

Safeway by contrast is part of the Albertson and Albertsons and its Subsidiaries is the 3rd largest Supermarket chain.

</comment></comment><comment><USER52> Next time you are at the store look at the circular. There is a barcode you can scan with their app that adds everything to you app that week.

<comment><USER53> That doesn't fix the information overload which the OP's solution solves.

</comment></comment><comment><USER54> digression - if anyone has evidence that Safeway Inc gave back to the postgres project, it would be great to hear about it (in public)!

btw- how many people here have contributed directly to PostgreSQL in any way.. "food for thought"

</comment><comment><USER55> Can I just subscribe to the coupons? Please. I give you my email, and using this - email the coupons to me in a pdf that I can print out? (Or is this a stupid request)?</comment>


Yandex.Browser for Linux - <AUTHOR> http://browser.yandex.ru/beta/ <comment><USER2> Now your private information can go directly to the russian government using this amazing fork of google chrome.

<comment><USER3> Sounds like you were ok with sharing with western governments (regular chrome).

<comment><USER4> In the US and most Western countries, that data can only be accessed with a warrant or other court order.

In Russia, the prosecutor can demand the data himself. Bloggers with at least 3000 followers automatically get put under surveillance ([http://www.washingtonpost.com/world/russian-blogger-law- puts...](http://www.washingtonpost.com/world/russian-blogger-law-puts-new- restrictions-on-internet- freedoms/2014/07/31/42a05924-a931-459f-acd2-6d08598c375b_story.html)), and the surveillance infrastructure is modern ([http://en.m.wikipedia.org/wiki/SORM](http://en.m.wikipedia.org/wiki/SORM)).

<comment><USER5> You might have missed all the Snowden / NSA posts if you think the first paragraph is really true.

<comment><USER4> I didn't miss those disclosures. None of them contradict my first paragraph.

</comment></comment></comment></comment></comment><comment><USER6> I dont see a point in using yet another proprietary branded chromium, that sends info to yandex instead of google.

<comment><USER7> Makes sense to those who'd rather phone Moscow than Mountain View.

</comment></comment><comment><USER8> Seems like a natural progression. Yandex gets a significant chunk of Russian search traffic and also offer email and cloud storage. Presumably the default search engine will be Yandex...

</comment><comment><USER9> The sad thing is that it doesn't run on GNU/Linux natively, but runs via Wine.

<comment><USER6> I think thats incorrect. It was made from chromium which has native linux support. In fact, I unpacked archive and I couldnt see any wine parts

</comment></comment><comment><USER10> Whoa, It automatically imports everything from Chrome. Which includes cookies (and as extension login sessions), bookmarks, extensions etc.

Is it just me or - I find that somewhat scary.I daresay, I would expect Chrome to encrypt sensitive information it saves on disk. Yandex does not seem to have imported the plaintext passwords thankfully, but I don't think I trust a new service with this much of private information.

In other words - Chrome, please stop random applications from copying my login sessions and cookies.

<comment><USER11> That isn't necessarily very easy thing to implement. If the data is accessible by one application, how could it not be available by some other application running with the same credentials? Maybe some "vault" daemon running as a different user could do, but then it would only take reverse engineering the client part from Chrome (if it wouldn't be open source via Chromium already). And all this to protect the application data from other application user is willingly running? TL;DR: don't run applications you don't trust.

<comment><USER10> If you have configured Chrome with a Google account, on Linux - for me, it does ask me for password on restart. I am assuming the password is for decrypting the passwords it stores in browser's "manage passwords".

Overall, I think either:

a. Chrome can use that account password for decrypting the other senstive information too. b. or it can integrate with keychain of operation system. If I am not wrong, each time a new application accesses keychain of OS, OS prompts for user's password.

</comment></comment></comment><comment><USER12> Where's the source?

<comment><USER13> Just after Chrome's source.

</comment></comment><comment><USER14> Just like I switched off Opera when it became a webkit fork, I do not see any reason in installing another one.

From my experience, Yandex is only good for one thing: Russian maps. Their accuracy and features are still unparalleled on Russian territory.

When it comes to browser though, I would still use Chrome if I wanted WebKit, FireFox if I wanted features and Opera 12 if I wanted great user experience.

<comment><USER15> >Their accuracy and features are still unparalleled on Russian territory.

2GIS blows Yandex out of the water as long as you're in one of the many cities it supports.

<comment><USER14> I think last time I tried it, it was behind on the nav part. Did they improve it? Does it allow setting marks for other drivers? Does it show traffic jams?

</comment></comment></comment><comment><USER16> How does Yandex compare against Google? Is their search experience and their algorithms similarly advanced?

<comment><USER17> We built a site for a Russian supermarket and tried using Yandex maps as that's what they wanted. Was accurate for Russian addresses, as you would expect, but ended up switching for Mapbox so we could heavily customise it.

<comment><USER18> Yandex maps is way more accurate and way more pervasive in Russian than Google Maps in my experience.

</comment></comment></comment><comment><AUTHOR> Download page is in Russian, but the interface is in English when installed. International site ([http://browser.yandex.com](http://browser.yandex.com)) still has "We're working on it".

<comment><USER19> Looks like they did work on it. Working now, including a download for Mac and Windows.

</comment></comment><comment><USER20> So much anti-Russian sentiment - why is Hacker News so full of politics!? Are NSA or GCHQ any better? The thing is that other countries don't trust stuff built in the US anymore and you will see more and more of these.

</comment><comment><AUTHOR> Some useful extensions like LastPass, Adguard, Pocket and Evernote are packaged (but not enabled) by default. Functionally it's Yandexified Chromium (vs Googlized Chromium aka Chrome—and modulo UI chrome of course).

</comment><comment><USER21> Nice try, KGB!</comment>


Ask HN: Best front-end framework to use with React to make a web app? - <AUTHOR> I've been looking at Meteor and Electron to build a node.js app. Are there any other options to consider?  Which would you go with? Please support your decision with a few arguments such as one has more libraries, better structure, preference, etc <comment><USER2> I use Redux with React. Quite happy with that.

Here you can find the FullStack Redux Tutorial: [http://goo.gl/QYLB3s](http://goo.gl/QYLB3s)

It is a great starting point if you want to learn more about Redux :)

<comment><USER3> Another vote for React + Redux here.

I'm using a mix of ES6 and JSX with Babel.

My favorite aspect is that it seems like there is less mental overhead/stress - that makes coding easier and more enjoyable for me - but there's no way to quantify that other than I don't feel drained at the end of the week. It seems to me there is a lot less you have to keep in your head (state) once you "get it" vs. ng directives (state+behavior+scope) or 2-way backbone data binding (kitchen sink). Personally not a big fan of Webpack only because it doesn't have all the nice plugins and addons available for grunt/gulp.

The React developer add-on for chrome is pretty impressive, better than the ones for ng. When things go really bad (white page of death), it's much much faster to find and fix the issue than with other frameworks using the chrome extension. It provides better insight into what your code is doing/try to do.

The hardest part I found when starting React was deciding to Flux or not to Flux; and then which router to use. A couple hours to kicking around a few starter kits should be expected.

<comment><AUTHOR> Can you please clarify something. You say you vote for React+Redux,but then at the end go on to say the difficulty of using Flux or not and what router to go with. Are you saying this as a reason that you went with Redux, or are you saying you use Flux in addition to Redux?

<comment><USER4> I don't think he/she meant that they used a flux pattern in addition to redux. Even though redux differs in many ways (self-admittedly) to canon Flux implementations, it's largely regarded to be in the flux family when folks are weighing up alternatives.

The problem detailed reared itself in my own efforts too, all the flux implementations promise elegance until a router comes along, which in many ways is another actor exerting control over what's on the user's screen.

You have to then make the choice on whether you want the router to handle what high level components are displayed, or if you want changes in the router to feed directly into changes in your state tree and then have it handled from there. That's where the complication comes in.

</comment></comment></comment></comment><comment><USER5> There are a few choices, like using React with Backbone [https://blog.engineyard.com/2015/integrating-react-with- back...](https://blog.engineyard.com/2015/integrating-react-with-backbone)

Facebook also came out with a storage interface and state management library that is used to manage unidirectional data with a backend called Flux [https://facebook.github.io/flux/](https://facebook.github.io/flux/)

And a lot of the cool kids these days are using a Flux-like state management system called Redux - [http://rackt.org/redux/index.html](http://rackt.org/redux/index.html) which is roughly based on the immutable patterns from Haskell/Elm.

</comment><comment><USER6> I'm using React/Flux/Electron and am really comfortable with it. Highly recommend checking out this project (which was posted on HN a while back) for ideas: [https://github.com/jingweno/hacker- menu](https://github.com/jingweno/hacker-menu)

<comment><AUTHOR> Have you ever played with Meteor?

<comment><USER6> I used to use Meteor a lot. However, I ran into problems with Meteor eating up lot's of memory for a very trivial app. Maybe things have improved now, but I prefer to work without the magic.

</comment></comment></comment><comment><USER7> React itself can be used as a framework to make front-ends.</comment>


Innovation for baby delivery.  - <AUTHOR> http://www.thingamababy.com/baby/2007/01/baby_patent_his.html

<comment><USER2> I know absolutely nothing about baby delivery, but I don't see how this could go wrong.

<comment><USER3> I am also not medically trained, but I was present during my wife's two childbirths. I am strongly opposed to described method and would not advice anyone, let alone my wife, to undergo such treatment. Why ? Because delivering a child is a process, during which many things may go wrong and there's a number of possible complications. Baby is stressed, mother is stressed, no one knows in advance, what can go wrong. The staff needs time to react and help the baby (and possibly mother) if needed. I can't see them helping anyone with a machine spinning so fast that centrifugal force ejects a baby. Actually, I can't even imagine the force needed for that, would probably kill the baby and mother.

<comment><USER4> I voted you up because my son, born six months ago, underwent periodic slowdowns in heart rate because the umbilical chord was wrapped around his neck.

</comment></comment></comment><comment><USER5> For a split second I thought it was a newly discovered da Vinci sketch.

</comment><comment><USER6> This obviously is a joke. I mean, a bell rings when the baby is ejected. :)

<comment><USER7> "The _carnie_ gynecologist then pulls a hand brake to quickly slow the mother's rotation so that she can safely exit the ride."

This really gave it away.

</comment></comment><comment><USER8> I'm sorry, but this just made me literally laugh out loud:

"The mother is then spun around and around at a speed the gynecologist has predetermined will be sufficient to dislodge the infant (or as the patent states, "the fetus"). The apparent maximum g-force for the machine is 7."

Priceless.

I want to see this in action.

<comment><AUTHOR> Many people here are taking this invention seriously. seriously!

</comment></comment><comment><USER9> How about harnessing space-time geometry? In other words, why not use a birthing chair so gravity is assisting?

<http://www.google.com/search?q=birthing+chair>

</comment><comment><USER10> Invented by a man, I'm sure.

<comment><USER11> "Inventors: George B. and Charlotte E. Blonsky of New York City."

Looks like a husband and wife made it together, actually. It's just mind boggling to me that more than one person thought this was a good idea.

<comment><AUTHOR> And this idea is patented. Imagine what it the intelligence of person at patenting office must be.

</comment></comment></comment><comment><USER12> And so many of you think patents should be abolished...

</comment><comment><USER13> Why does that contraption look like a cross?

</comment><comment><USER14> I thought this would be a riff on the 'machine that goes "ping"', but no, it's completely insane.

Wheel of morality, turn turn turn, tell us the lesson that we should learn.

</comment><comment><USER15> dough rollers</comment>


Show HN: SqlPad – Run SQL in browser and chart results - <AUTHOR> https://github.com/rickbergfalk/sqlpad <comment><AUTHOR> Hi HN - SqlPad has shown up here a couple times before but I've never taken the opportunity to do a a Show HN on it yet, so I'm doing that now :)

I recently took a sabbatical of sorts to clean it up a bit, as well as catch up with modern javascript developments.

I just published 2.0.0 to npm. No crazy new features from 1.x or anything, more of a front-end rewrite and polish of user experience while trying to keep the application simple and focused.</comment>


Village Capital is ditching Demo Days - <AUTHOR> https://techcrunch.com/2017/03/04/why-were-ditching-demo-days/?ncid=rss <comment><USER2> Former Village Capital graduate here.

I consider it one of the biggest waste of my time ever!

I'm hoping the program has grown more and I know Ross works hard and I congratulate him on keeping the program going. If you're an international company, perhaps their programs outside of US are more valuable since there are no other options for you. But if you're US based, I would do my homework before joining them.

Why? 1 - the program was so disorganized. We were forced to follow this automated Powerpoint slide progression. If you needed it more time on one of your slides you copied the slide twice, to give yourself double the time. So basically we spent 3 months optimizing our pitches around this auto powerpoint process.

2 - we were used to build credibility for Village Capital. They would shuttle us around to their potential LPs to show it was a viable program. That's not bad in itself, however, it felt like we were providing more value to Village Capital, than Village Capital to us.

3 - Very founder-unfriendly terms. As I said we were one of the two top finishers. However, their financing term (which we only learned the details pass the half-way into the program) was nothing short of usury. We were forced to do a down round (by 4x) OR do the revenue share financing, where we would pay back 3X the money they loaned us.

I decided not to write about our experience, but given the reach of HN, I decided for the first time to publicly speak about it to warn other founders who might be interested in their program.

<comment><USER3> Can you clarify what "the program" refers to? Is this the new variant where demo days are discarded in favor of mock board meetings (as discussed in the blog)? Or is the demo day/mock board meeting just the last piece, and the underlying program is the same? Thanks.

<comment><USER2> When we graduated. The cohort class would vote the top 2 finishers among themselves. Which then would get the financing. This was a horrible idea!

It became very political. Basically we had 4 major sessions each 3-4 days alternating between Salt Lake City and Houston. At the conclusion of each session, we would rank each company on a set of criteria. The total score would rank each company. However, the last ranking would determine the final winners.

We finished #1 after the first session. However, I soon realized giving feedback (even privately) became rather contentious. People could easily mistake a genuine feedback for a political move to downgrade a company for scoring reasons. As a result, the value of cohort feedback diminished a lot.

The mock board meeting, was probably one of the more valuable things in the program. But the problem was the time with the mock board members was short, these "board" members had very little context about the company (so not very realistic). As a result, you had to spend most of the "board meeting" time educating them about your business before getting into the actual practice of a board meeting.

If you're in a remote location or city, with very little resources, then the program might be somewhat valuable. But if you live in any big cities, especially silicon valley. Then there is no value to it.

<comment><USER4> This is bad. The biggest value I get from YC are my peers from the batch and other alumni. We still reach out constantly and ask each other for pieces of code, business leads,etc.

YC puts A LOT OF EFFORT to build the community in the right way.

</comment></comment></comment></comment><comment><USER5> "When we surveyed our companies and asked them where they met investors, it was rarely at an actual pitch event."

Seems like the author might be learning a lesson based on Village Capital's apparently unsuccessful demo days and applying it to all demo days. As someone who's gone through YC's demo day and who's attended it a few times since, I can tell you that startups meet _a lot_ of great investors there. That some demo days add no value to either startups or investors is not in doubt. That doesn't mean the structure of a demo day makes no sense.

One thing YC recently did to address some of the concerns he has is introduce "Investor Day" immediately after their demo day. Will be interesting to see how that experiment plays out. [https://blog.ycombinator.com/investor- day/](https://blog.ycombinator.com/investor-day/)

All that said, his points about pitch day formats exacerbating existing biases is quite interesting. Would love to see more data on that.

<comment><USER6> _That's why we made the decision to ditch the Demo Day — and why I encourage others to rethink how they support innovation._

Notably, the article doesn't call for others to abandon Demo Days. They're just giving a case study on their logic and their startups.

</comment></comment><comment><USER7> I was prepared to skeptical--investors of course will dislike situations which set up competitive bidding scenarios.

But the writer has some good points, including demo days favor men more than women, as well as extroverts:

 _For entrepreneurs who don't pitch well — or who don't fit investors' mental image of a successful entrepreneur — Demo Days may hurt more than they help. The preparation teaches entrepreneurs to focus on transactions more than relationships (when, in reality, an in-depth conversation after the pitch matters a lot more than the pitch itself).

The Demo Day format is not ideal for investors, either. If you're picking who pitches best, not who runs the best business, you're not getting the best results._

What I have seen happening at accelerators, universities, and startup events in the Boston area is this intense focus on pitching. It's all about showing off the team, presenting a problem, sharing market or usage stats, prepping a slick video, and getting the deck just right. This approach emphasizes superficial qualities over the product or service being built. Product demos are almost an afterthought, and information about build progress or actual discussions with customers are turned into a couple of bullets on slides 4 and 5.

So yeah, by all means, ditch the demo days. But don't assume that focusing on "building relationships" will solve the problems of investors favoring certain types of people, or glossing over product and customer discussions. Extroverted founders and talented salespeople can project empathy, ask the right questions, and send other signals that are more likely to suggest a "good relationship" to investors. These qualities/skills will not determine who runs the best business.

<comment><USER8> Eerily similar to problems associated with tech interviews: favoring extroverts and smooth pitch-people over substance.

<comment><USER9> I actually like tech interviews specifically because it's hard to BS your way through them.

I've definitely seen smooth talkers with great resumes get through any other filter, but I've never seen a false positive with the technical interview.

<comment><USER10> I've seen people who can whip up a nice solution to an interview problem but can't plan out a larger system. Or they have some cool way of solving the interview but then it turns out they want to write 100% of their code as monkey-patches. Or they write great code but cannot get along with anyone. Or they can solve the interview but don't actually have the deeper expertise that they said they did. I'd call all of those false positives from the technical interview.

I guess you could counter that you need to have a 10x longer technical interview that covers all these aspects, but a long interview process is going to filter out all the candidates who are good enough not to have to put up with one.

<comment><USER11> This is why I wish system design questions were more common. I couldn't care less if you can do a bunch of palindrome algorithm problems on a white board. I do care if you understand the scalability, maintainability, and implications of your code. And if you understand how different data structures work and are used. Most whiteboard problems fail spectacularly at this.

<comment><USER9> I agree that, in principle, system design interviews are great. The problem is that, in practice, I have seen them generate way too many false positives. This was at great companies and with people who had absolutely stunning resumes.

</comment></comment></comment></comment></comment></comment><comment><USER12> Is this what Garry Tan was referring to on Twitter?

[https://twitter.com/garrytan/status/838101657107881984](https://twitter.com/garrytan/status/838101657107881984)

<comment><USER13> No - Garry was talking about investors claiming to "skip" YC Demo Day who were never invited in the first place.

<comment><USER12> It's not clear to me from the article that Village Capital has attended a YC Demo Day. It only mentions that organizations like YC helped popularize the concept.

</comment></comment></comment><comment><USER14> I think for someone that has gone through a startup program most that is written in the article are obvious truths. Yes, there might be a lucky few who benefit from a demo day, because that's one of the few chances where you might get the attention of investors that might usually not be that easy to reach. However most people will meet their investors during the program via some connections.

To me, demo days feel like they are mostly PR events for the accelerator. It is a very easy way for an accelerator to get people to notice it, since it is one of the few events an accelerator is usually hosting, where they have significant presence and they can attract a lot of reports with the startups. Apart from that, it is very hard, especially for smaller accelerators, to even be mentioned in an article of one of the startups they funded.

</comment><comment><USER4> Its funding criteria is very unusual - [http://vilcap.com/method/](http://vilcap.com/method/)

Did they ever have demo days in the first place ?

 _At the end of each program, the entrepreneurs assess each other in an open and transparent process. The two highest-ranked ventures receive seed capital from VilCap Investments and co-investors. In 2013, this peer-selected investment model won the Harvard Business Review /McKinsey M-Prize for innovation._

Is a survivor-style fundraising mechanism better than a demo day in front of investors, who are probably well experienced to look beyond stagefright?

<comment><USER15> Another overlooked aspect of this is simply debate experience and skills.

Being able to defend any given perspective quickly and easily is just a learned skill. People who took years of debate have a massive advantage.

</comment></comment><comment><USER16> Does this create an opportunity?

Do investors who target women and unattractive men have less competition for the same product?

Or does the effect last through all rounds of funding, customers, going public and so on? In that case the investor would be rational to mimic the preferences of the market.

I suspect it lasts through a few rounds of funding but at the point the company is large and can afford PR, and so on, it no longer matters.

This might mean that the smart investor should target the ignored company if the investor has enough money to get them to the point that they are self- sustaining.

<comment><USER15> UglyFounders.com?

<comment><USER17> What's ugly is only attractive men getting funding regardless of substance. Like a beauty pageant.

<comment><USER18> This is probably two categories "attractive people" and "men" being conflated, "attractive men" are who you meet on Grindr and not at a VC pitch.

</comment></comment></comment></comment><comment><USER19> This is why I enjoyed the Indie.vc program - No demo day. Instead, stay where you are and focus on building your business. Since the goal is growing a business, not prepping for another funding round, there's no need for a demo day.

<comment><USER20> Can you tell more about the experience? Indie.vc otherwise sounds fantastic. Good option to other debt and loan options for startups.

<comment><USER19> That's a very open ended question which is hard to answer. Do you have a more specific question? My company (Tapster Robotics) was part of the first Inde.vc "batch" of 8 companies. We were the guinea pigs as we figured out what worked and didn't. But I liked that we didn't have to move (I'm in Chicago), though we did meet up once a quarter in different cities to catch-up for a few days. With no demo day (and no expectation to raise another round) all our discussions revolved around building the business, not grooming ourselves for the perfect investor pitch. My previous startup followed the "traditional" Silicon Valley model of being in forever-VC-pitching mode. This time around, I'm happy to be off that treadmill.

</comment></comment></comment><comment><USER21> This makes a lot of sense. If investors can get a real feel for who they're investing in rather than a lot of marketing/canned pizzaz, I think they'll make consistently better decisions and founders will get a much clearer understanding of where they fall short.

Not to say that showing a proof of concept should be ditched entirely, but making a marketing pitch is not always the same as having a good idea.

</comment><comment><USER22> "You desperately need a good pitch when you have a bad company. When you have a great company, you don't need a great pitch." -Peter Thiel (Maureen Dowd interview NYT)

</comment><comment><USER23> I don't think there's anything new here. This is real life, human nature --however one might care to put it. Startup demo's are not about demo's at all.

From politics to selecting an air conditioning contractor and beyond, presentation and engagement matter a lot. It's not that people are stupid or superficial, these things (and others) create impressions and confidence. And, in some cases, they are crucial to the success of the venture.

When I first launched into the world as an entrepreneur, decades ago, I was too much of an engineer. One key element that was missing is I sucked at selling. You can engineer an amazing product but, contrary to the popular saying, people won't beat a path to your door unless you are good at selling it. The history of business is paved with the carcasses of great products that never got off the ground because the people involved couldn't sell them.

In my case I recognized this from the very start and actively sought help in the area where I was most deficient. The first few months after we started to sell our hardware product were terrible. I'd mess-up presentation after presentation. Yet, with constant coaching I eventually figured it out. Within about eight months or so I was so comfortable selling that I could actually sell a product without saying a single word about it during a demo.

These presentations to potential investors have a far greater purpose than simple product demos. They serve to communicate to the audience a range of information about the entrepreneur. Important data points. One of them being whether or not the person can actually sell what they are making. If you can't sell and are going to hire someone to do so, you might be better off having them do the presentation. Folks who understand selling can sell anything, including a startup looking for funding.

To paraphrase an observation made decades ago by Smokey Yunick, a famed race car designer:

"When all the smoke and bullshit clears out you have to sell the damn thing".

<comment><USER7> _One of them being whether or not the person can actually sell what they are making._

If the founder is indeed going to be in a position of standing up to a group of potential customers and selling something to them, whether it's a car or an expensive software package, then I can see the importance of such a presentation.

If, however, the sales takes place in a store, on a website, or in a catalog, then a different set of skills are needed--developing sales funnels, setting up distribution partnerships, converting online visitors, and writing stellar marketing copy. Yet I have never seen a demo day or investor pitch session that focuses on _those_ skills, even though they will have a huge impact on the success or failure of many types of ventures.

 _If you can 't sell and are going to hire someone to do so, you might be better off having them do the presentation._

That makes sense. Serious question, though: but do demo day organizers encourage it? How would investors or audiences react?

 _Folks who understand selling can sell anything, including a startup looking for funding._

I know this is true, yet I find this disappointing. It means that great salespeople can sell a turkey, which not only hurts investors but takes money away from more capable enterprises.

<comment><USER23> > If, however, the sales takes place in a store, on a website, or in a > catalog, then a different set of skills are needed--developing sales > funnels, setting up distribution partnerships, converting online visitors, > and writing stellar marketing copy. Yet I have never seen a demo day or > investor pitch session that focuses on those skills, even though they will > have a huge impact on the success or failure of many types of ventures.

I understand what you are saying. Still, selling hasn't really changed in a long, long time. People were doing what you listed back in the days of mail order catalog selling. The technologies are different today but a lot of the same skills apply.

Selling isn't about technologies, it's about people. Of course, anyone can spend thousands of dollars a day on AdWords, blast a product out and generate tons of traffic. That doesn't sell. Generating good copy that sells and excellent landing pages and maybe even videos requires understanding how and why people buy. If someone can't sell themselves in an in-person demo they are not going to do well in any other medium. Are there corner cases? Of course. Yet, they would be better if they could sell in person. Writing copy or making a great video don't happen in isolation of an understanding of interpersonal dynamics.

Why doesn't Coca Cola just say "Our product tastes better and it's $1.23 per bottle. Buy it"? Instead they create these elaborate commercials with cute computer generated bears or groups of people dancing, etc. They understand they need to sell on emotion, not logic.

Most products, even something as dry as penetration testing software, have an emotional element. In some cases it might be more overt than in others, still, it's there. In the case of penetration testing software you need to convey strength, confidence and experience in order to generate one of the most powerful emotions: Trust.

</comment></comment></comment><comment><USER24> One thing to bear in mind is how different Village Capital is than YC. I think it makes a ton of sense for them to do it this way, I think Techstars (alum!) should consider it, but it does seem like it works for YC.

</comment><comment><USER25> A related article I wrote as an entrepreneur and professor of entrepreneurship: "11 Reasons Why Business Plan Competitions Should Die": [http://www.inc.com/joshua-spodek/11-reasons-why-business- pla...](http://www.inc.com/joshua-spodek/11-reasons-why-business-plan- competitions-should-die.html)

</comment><comment><USER26> So maybe solution is in changing optics for such events - Demo Days are primary for PR stage play helping humanizing startups and their creators and not for helping entrepreneurs raise money and meet investors?

</comment><comment><USER27> "Because we were sick of idlewords mocking them incessantly"</comment>