Tell HN: I need a Designer Founder - <AUTHOR>

I am looking for a design founder to join a very new startup focused on offering all-inclusive web hosting / design / maintenance to greek organizations in the Southeast.
This isn't the next Twitter (Substitute "Next Big Thing" if you want), but it does have potential to generate quite a bit of income.
Here are some examples done by another company:

  -http://auburnalphagam.com/

  -http://www.whiteoaksofauburn.com/

  -http://www.fountainviewmansion.com/
 If you feel like your skills are up to par to help me found this company, shoot an email to Jud dot Stephenson at gmail dot com, where I would be happy to discuss the business further.
Im hoping to find someone who is a compliment to my skill set and can take an active role in the decisions of the company as a co-founder, not employee. You can be compensated in upfront equity, cash, gold or beer (Its up to you) ;)
*I'm obviously not requiring you to be from the southeast, remotely working is acceptable.
Again, I can be reached at Jud dot Stephenson at Gmail dot com <comment><USER2> What role do you fill in this company? Coding the web designs?

I've done work like this and I fail to see how it would be different from any freelance web developer looking for work. There's no reason not to stick to standard hosting (resold by you) and maintenance contracts. Unless you have a good amount of guaranteed work ahead, I don't see any more potential for income than a web designer/developer finding their own clients.

<comment><AUTHOR> Good questions.

If a developer is interested in doing everything himself, then there really is no reason for this partnership. In my experience, though, it is hard to put in the time required to keep a growing list of clients as well as continue to work on their projects without a partner to share some of the burden.

The great thing about Greek organizations is that they all need maintenance contracts (though rarely use them) and their budgets are typically large enough that $50-70/mo hosting isn't a dent at all.

Shared between the founders, the maintenance/hosting would generate a good amount of passive income. Like you said, though, maintenance contracts aren't something I created ;)</comment></comment>


Ask HN:How to talk to manager abt career development goal as a junior dev? - <AUTHOR> <comment><USER2> It's always best to keep an ongoing conversation. Remember, there is no "right" time, your boss will always be busy, so it's always better to bring it up sooner rather than later. Also, you don't have to have a pitch/goal the first time you talk about it. Just tell them you want to grow and want to know what they think and what they recommend to help you do that. Note: if you're asking for a position change/raise, it'll be a different approach.

Experience: Engineer that went from intern to engr 1 to engr 2</comment>


Africa by Toto to play on eternal loop 'down in Africa' - <AUTHOR> https://www.bbc.com/news/world-africa-46861137 <comment><USER2> That installation won't even last a week before being destroyed by weather. Cool concept though, but I was expecting a bit more than just a few tiny speakers and a wire.

<comment><USER3> "Mr Siedentopf says he hopes the song will play for another 55 million years."

I think I can hear the engineers over at the Long Now foundation pissing their pants with laughter: [http://longnow.org/clock/](http://longnow.org/clock/)

They are _only_ aiming for 10,000 years. A walk in the park compared to this apparently godlike and immutable mp3 player atop a painted plywood box. Has this guy even heard of atomic diffusion? Not like it'll last long enough for that to even come close to becoming a relevant factor.

Where do people get this idea that machines are eternal? It's outrageously rare to find a machine more complex than an adjustable wrench that lasts half a lifetime, let alone surpasses generations, but in nearly all of fiction machines are portrayed as ageless things that dwarf our puny lifespans as fragile meat-beings. It's simply not true.

This is a weird tangent, sorry for derailing.

<comment><USER4> It's not rare to find a 50 year old car or motorcycle. Did you mean something that functions for that long without maintenance?

<comment><USER3> It's pretty rare if you consider it percentage wise, as in proportion to all the vehicles on the road. Because there's so many hundreds of cars we encounter every single commute, even small percentages are reliably represented which makes rare things seem commonplace--after all, you see them every day. But the percentage of cars and motorcycles on the road that are older than fifty is still pretty dang low. Rare isn't the same as nonexistent, after all. I believe the average age of a vehicle on the road in the US is around eleven years, which is a record high.

My BMW R50/5 just turned 47, getting real close to that over-the-hill party. I'm planning to buy it a cake in a few years, plus I've got the parts for a top-end reseal. Going to be real classy. Definitely looking forward to it.

</comment></comment></comment></comment><comment><USER5> > The 1982 track is quadruple platinum, and was the most streamed song in > 2017, with over 440m views on YouTube

That can't be right. Despacito has 5.9bn views on Youtube now and came out in January, 2017.

<comment><USER6> Strangely, it links to an article [1] that says "It was _one of_ the most streamed songs in 2017" (emphasis mine), not the most streamed one.

[https://www.bbc.com/news/newsbeat-45810659](https://www.bbc.com/news/newsbeat-45810659)

</comment></comment><comment><USER7> I bet this thing will be rickrolling the desert in a few weeks.

</comment><comment><USER8> Hasn't this continent suffered enough already?

</comment><comment><USER9> It will be functional for about a week.

</comment><comment><USER10> Looks like Mr. Siedentopf is safe as none of the PROs[1] seem to collect royalties in Africa. I'd hate to get the bill for a perpetual public performance license fee.

[1] [https://en.wikipedia.org/wiki/Performance_rights_organisatio...](https://en.wikipedia.org/wiki/Performance_rights_organisation#International)

</comment><comment><USER11> The artist has been amusing himself in London too [https://news.artnet.com/art-world/tate-modern-viewing- platfo...](https://news.artnet.com/art-world/tate-modern-viewing-platform- binoculars-1395007)

</comment><comment><USER12> The Weezer remake is really good too, and Weird Al is in the video. How can you beat that?

[https://www.youtube.com/watch?v=mk5Dwg5zm2U](https://www.youtube.com/watch?v=mk5Dwg5zm2U)

<comment><USER13> I'm partial to Leo Moracchioli's metal version, myself.

[https://www.youtube.com/watch?v=MH9FyLsfDzw](https://www.youtube.com/watch?v=MH9FyLsfDzw)

</comment></comment><comment><USER14> The wiring detracts from the overall presentation of the art piece.

Cool idea though

</comment><comment><USER15> there's quite a distance between that and the serengeti which was somewhere in the lyrics, so what I mean is I think this might be at the wrong place.

<comment><USER16> The lyrics also mention Mount Kilimanjaro and (in a metaphorical sense) Mount Olympus. I think it's probably generous to assume that the lyricist had a specific place in mind :)

<comment><USER15> Serengeti National Park and Mount Kilimanjaro are both in Tanzania though.

Metaphorical Mount Olympus must lie in every human heart.

</comment></comment></comment><comment><USER17> First time I heard this song in a Family Guy episode. Have it in my playlist ever since.

</comment><comment><USER18> It's running on eternal loop in my head since i read this.

</comment><comment><USER19> How would you better engineer this instead for it to actually last 55 million years?

Edit: For the defeatists, I meant if you had access to all the Earth's resources and the full effort of mankind.

<comment><USER20> Make a sphere from glass that is hard to scratch. Put everything inside, including the solar panels and the speakers (make the speakers touch the sphere surface so you can hear it from outside).

Sphere should be mosty empty so that it has lower density than sand - it will float on it no matter how the dunes change.

Add small electric engines that rotate against the sphere in 2 axis, that will move the sphere back to its desired geographic position slowly.

<comment><USER21> The mp3 player itselft won't last 55 milions years. It will break way before. And be buried in the sand by the first sand storm, no matter how flotty the sphere is. Footballs get buried in the desert, no matter how light they are. Source: I lived in Bamako.

<comment><USER20> I think if it moved a little every so often it would get unburied. But I don't live near a desert so maybe I'm wrong.

<comment><USER21> You will have so many sand storms in 55 millions of years. And one is enough.

</comment></comment></comment></comment></comment><comment><USER22> Naysayers aside ("it won't last a week"? How about the healing power of music you cynics...)

What I want to know - who's going to sort out the mess this is going to cause with streaming fees?

<comment><USER23> If I play a song from a legally-owned MP3 in public but no one is around to hear it, do I have to pay licensing fees for a public performance?

<comment><USER24> "To perform or display a work "publicly" means—

(1) to perform or display it at a place open to the public or at any place where a substantial number of persons outside of a normal circle of a family and its social acquaintances is gathered; or

(2) to transmit or otherwise communicate a performance or display of the work to a place specified by clause (1) or to the public, by means of any device or process, whether the members of the public capable of receiving the performance or display receive it in the same place or in separate places and at the same time or at different times."

17 USC §101

(note that this doesn't appear to answer your question!)

<comment><USER25> Is this Namibian law?

<comment><USER24> Nope, that's a great point!

Here's the Namibian copyright act from 1994

[https://laws.parliament.na/cms_documents/copyright-and- neigh...](https://laws.parliament.na/cms_documents/copyright-and-neighbouring- rights-protection-7133f08250.pdf)

which does include an exclusive right to "perform in public" a copyrighted work, and doesn't seem to further define or clarify this concept.

</comment></comment></comment></comment></comment><comment><USER26> Cross that off my list of places to visit. One of my most hated songs of all time.</comment>


Show HN: Using LDA to suggest GitHub repositories based on what you have starred - <AUTHOR> http://www.gitsuggest.com <comment><USER2> This only uses LDA on your starred repository descriptions, to find topic terms that describe your starred repositories. These topic terms are then used to query the GitHub search API to find matching repositories. The results are then sorted by star count.

That is a clever way to make use of a search API like GitHub's. The principled way to do this, though, is to run LDA over all descriptions on GitHub, then use that similarity index to find similar repositories. You could run LDA over code, too.

I'll note that there is a cold start problem with this implementation: using LDA on such a small set of short documents will often lead to uninformative topics with words that are too-specific. You need a big corpus to capture e.g. synonym relationships.

<comment><USER3> Your point is quite interesting although I'm not sure running LDA on the entire code would be useful. I spent half a year writing my postgraduate thesis on a recommender systems for streaming services based on LDA, in particular we wanted to infer who is watching what and when in a shared account. From all the tests I did with LDA I believe the best thing would be to run it on the README files.

<comment><USER2> Good idea, the READMEs would be best of all.

</comment></comment></comment><comment><USER4> Typo when you don't have the right kind of repos starred: "yeild" should be yield

I've worked with NLP a bit before, but haven't worked with LDA and have only read the wikipedia article and gensim documentation. One thing I don't understand is why you only generate a single topic for each user, and then query the top n (5) terms. From what I understand of LDA, its usefulness is in partitioning text into k separate topics based on how often words are used in similar contexts. In my mind, this is more or less analogous (please tell me if this is wrong) to finding k centroids for a vector representation of text after training a word2vec mapping (in an appropriately low dimension given the document size) on that text. However, if you are only finding a single topic, you are only using one centroid, so your search will be the n tokens that are closest to the centroid. I'm pretty sure that the tokens (from the text) closest to the centroid of a word2vec mapping trained on a text will mostly consist of high-frequency words and semi-stop words (by this I mean words used in varied contexts because of their use in language, but not filtered by the stop word check).

Then if someone has many different topical interests, LDA might over-represent whichever topic has the plurality of text dedicated to it. For example if my starred repos are something like 30% Fortran, 30% Javascript, 40% Java, I believe your algorithm will mostly contain Java terms as queries. This seems to run counter to the goal of using LDA, which would be (to my understanding) to identify these latent topics and give relevant queries for each one / combining them.

I think a good way to address this would be to implement some way to change the default number of topics. One approach may be to use a trained (perhaps on github instances itself) word2vec instance to determine the "spread" of the incoming tokens: you could construct cliques based on pairwise distance between vectors and do something with that (let k be the number of cliques, or the number of cliques of size greater than m, etc.).

A different approach might be to precompute the vector average of each github repo. Then you could perform richer comparisons directly to documents (e.g. compare each clique's centroid to the repos) without directly querying github for tons of repos.

<comment><AUTHOR> Thanks for your suggestions. Will keep track of it and try including them in the next run. Raise it as an issue if it bothers you a lot.

Also, I have rectified the typo.

</comment></comment><comment><USER5> Very interesting. I've implemented something similar[1] using a pure Collaborative Filtering approach[2][3], that I think works better for me, but it's unable to recommend unpopular repositories.

The New York Times recommender system uses a hybrid approach (Content Based + Collaborative Filtering) called Collaborative Topic Modeling on top of LDA[4]. It would be interesting to try that.

[1]: [https://github-recs.appspot.com/](https://github-recs.appspot.com/)

[2]: [https://medium.com/towards-data-science/recommending- github-...](https://medium.com/towards-data-science/recommending-github- repositories-with-google-bigquery-and-the-implicit-library-e6cce666c77)

[3]: [https://github.com/jbochi/facts](https://github.com/jbochi/facts)

[4]: [https://open.blogs.nytimes.com/2015/08/11/building-the- next-...](https://open.blogs.nytimes.com/2015/08/11/building-the-next-new- york-times-recommendation-engine/)

<comment><AUTHOR> Really nice links... Thanks! Will take a look at it and compare and contrast for better tuning. :) Feel free to do the same and raise some pull requests :)

</comment></comment><comment><USER6> [https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation](https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation)

For anyone else who didn't know :D

<comment><USER7> I thought it was about Linear Discriminant Analysis..

<comment><USER8> It is.

<comment><USER3> no, it's not

<comment><USER9> You can, however, use Linear Discriminant Analysis on thr topic scores from Latent Dirichlet Allocation.....

<comment><USER3> I guess, if you have a fair amount of topics, although the point was to explain the title :)

</comment></comment></comment></comment></comment></comment><comment><USER10> I appreciate the effort but it is giving me as a scala guy, an author of books on such subjects as distributed computing and akka, links for PHP libraries. I think the ranking should account for language interest very highly.

<comment><AUTHOR> That is a thought which indeed crossed my mind.

I personally play around with a lot of tools and languages and wanted to make sure that language barrier didn't make the tool limited. In the sense that if there are a lot of repositories out there in js for something I am starting in python I may wanna take a look at why so many people chose to do it in js instead of python and then make my decision based on it.

This definitely will be lost if I filtered based on languages. In the current form, it gives importance to the topic and not the language for this specific reason.

<comment><USER9> There's a variant of LDA called "structured LDA" that allows you to introduce a linear combination of "structural variables" into the topic distribution prior. If you wanted to make this project "language-aware", might be a good use case for sLDA.

</comment></comment></comment><comment><USER11> Does this only recommend awesome style repos? I got about 20 of those despite having over 400 stars, majority computer graphics. Also a lot of Ruby, a language I don't use or less than 1% of my stars. Odd.

<comment><AUTHOR> Problem is this, the suggestions are generated by using the repo descriptions as the starting point dropping all references to language and non-English words. What this means is even if you have a lot of stars on ruby repositories, if the search on terms derived from the above process leads to non-ruby repositories that is what is shown. Will look into tuning it better.

<comment><USER12> I'd suggest adding a filter at the top of results to filter by language- i.e. a checkbox by each language result at the top to specify which results to filter to

</comment></comment></comment><comment><USER13> Well not sure why, but it definitely didn't work for me. Random would have outperformed it. I like the idea though. Suggested github repos would be fun to have a look at.

<comment><AUTHOR> Take a look at the repositories suggested, you may find it interesting after some digging or add a new liking to your list. After some more starring, the tool might actually start suggesting repositories to your liking.

Also if you find something strongly troubling feel free to create issues on the repo and I will try to see how it can be better tuned/filtered.

</comment></comment><comment><USER14> Cool project! Thanks for publishing and sharing it.

It'd be interesting to know what topic terms it produces for each of my repos. It looks like it's taking all the repo descriptions, producing a topic model over that corpus with a single topic (`LdaModel(num_topics=1)`), and retrieving the top N terms for that topic. Those topic terms will be the most frequent words from the topic, so I think this will end up producing the most frequent words from the cleaned token set.

I'd be curious to see what happens if you could run LDA over the full dataset, produce multiple topics, and suggest repos based on those topics. This would be a pretty fun extension to the project!

If you're just running LDA over the repo description (and not looking into the content of any file, e.g. README), might [http://ghtorrent.org/](http://ghtorrent.org/) be able to provide this?

Alternatively, maybe you want to include text from the README files -- could you use the Google Data snapshot of GitHub [https://cloud.google.com/bigquery/public- data/github](https://cloud.google.com/bigquery/public-data/github) and do analysis like this: [https://blog.exploratory.io/clustering-r-packages-based- on-g...](https://blog.exploratory.io/clustering-r-packages-based-on-github- data-in-google-bigquery-1cadba62eb8d)

Or, it might be interesting to try producing a vector representation per repo by taking the description (and readme?), and doing something like: produce word vectors for each word, and sum the word vectors. [https://spacy.io/](https://spacy.io/) is a nice-to-use library that could help here.

Once you have a vector representation for each repo, using a distance metric cosine similarity could find related repos. Or (depending on the dataset size / performance) an approximation like spill trees or LSH forest.

Looking forward to seeing where this goes next!

<comment><AUTHOR> Some really good suggestions, can you please raise an issue on the repo so that we can keep track of the same.

</comment></comment><comment><USER15> That is one really cool application of LDA!

I am so curious about your implementation, for instance, what sort of preprocessing did you have to carry out? I had written a script sometime back to analyze Paul Graham's essays (link: [https://github.com/futureUnsure/pg- essay-lda](https://github.com/futureUnsure/pg-essay-lda)), and had to remove date and times because they appeared a lot and distorted the top topics. I'm wondering if you had to do something similar for text that described code?

Also, did you write an LDA library yourself or did you leverage an existing library?

I apologize in advance if my questions sound naive/stupid, am just a noob...

<comment><AUTHOR> Thanks, I am using gensim package for LDA. In a nutshell:

1\. Get descriptions of repos user is interested in 2\. Cleanup/Filtering/Tokenization 3\. Use LDA to generate Topics 3\. Use the topics to search for repositories github can provide.

</comment></comment><comment><USER16> given that stars, afaik, are public -- why do I have to login? is there some 'hide my stars' option you're trying to get around?

<comment><AUTHOR> [https://developer.github.com/v3/search/#rate- limit](https://developer.github.com/v3/search/#rate-limit)

</comment></comment><comment><USER17> Got an error :( Going to assume it's the HN effect. Look forward to trying it out later!

<comment><AUTHOR> Did you eventually get to try it out?

<comment><USER17> Unfortunately not. I tried again several times over the course of multiple days (including today) with no success.

</comment></comment></comment><comment><USER3> looks like the code for this is here: [https://github.com/csurfer/gitsuggest](https://github.com/csurfer/gitsuggest)

<comment><AUTHOR> There are fork and star buttons which directly link to this repo on the website.

<comment><USER3> sorry, I missed that

</comment></comment></comment><comment><USER18> I never know if people mean NLP LDA or gaussian classifier LDA....

</comment><comment><USER19> Didn't work for me, I have about ~2700 stars though.

<comment><AUTHOR> That is sad :(. Please raise an issue with more details and I will try to fine tune it to work better.

</comment></comment><comment><USER20> Just a heads up, the layout is pretty broken on mobile.

<comment><AUTHOR> Please raise it as an issue. My UI knowledge is pretty limited but will try to make it a bit cleaner.

</comment></comment><comment><USER21> Did not work for me, I have about ~130 starred repos.

<comment><AUTHOR> That is sad :(. Please raise an issue with more details and I will try to fine tune it to work better.</comment></comment>


I joined a startup and it's been a month they haven't paid me, what can i do? - <AUTHOR> I joined a startup and it's been a month they haven't paid me, what can i do?
I have a full-time contract. I was told I'd be paid on the 30th of March, and the co-founder called me saying they're having "financial delays".
Prior to getting hired, I did asked them what was their financial runway and the co-founder told me a year and a half.
What would you do in my situation?
I'd need your opinion,
thank you!
EDIT #1: I am a full-time employee, not a contractor. The thing is, I never asked when would be my first paycheck, so I assumed it would be every 14/15 days like it mostly is everywhere. So I contacted the "HR" lady, which is a new hire as well, and she told me I'd get paid on the 30th since my direct deposit isn't setup. I told her i could set it up right now, and she said they are waiting to move to a new HR system, then they'll get in touch with me (it did not contact me) Also, I had to contact them otherwise I wouldn't have heard from anyone, it could have kept on going forever.
I'm not sure, but it seems that other new hires have been in this situations for months... Do you think i was duped into getting hired and work for free? <comment><USER2> IANAL, but a couple things:

1\. Are you a contractor or employee? Big difference in how this is handled.

2\. If you are an employee, it's against the law to not pay you for your time/work. There are state/federal legal remedies for this.

3\. If you are a contractor, there are legal remedies as well, but more on side of civil lawsuits to collect payment.

4\. I am a little confused. You say you haven't been paid in month, and while technically that may be true, if your first check was scheduled for the 30th, they aren't technically a month late on paying you. Yes they are late, and yes it is wrong, but I would be clear when communicating that.

With that in mind, I would talk to the founders to find out what the delays are, when they are going to be remedied, and start looking for a new job regardless. It's easier to part ways now, then to let the situation get worse over time or occur again in the future.

In the meantime, keep your communications professional and don't let your emotions take over.

<comment><AUTHOR> hi,

Thanks for your feedback Jeff. I am an employee, not a contractor. The thing is, I never asked when would be my first paycheck, so I assumed it would be every 14/15 days like it mostly is everywhere. So I contacted the "HR" lady, which is a new hire as well, and she told me I'd get paid on the 30th since my direct deposit isn't setup. I told her i could set it up right now, and she said they are waiting to move to a new HR system, then they'll get in touch with me (it did not contact me) Also, I had to contact them otherwise I wouldn't have heard from anyone, it could have kept on going forever.

I'm not sure, but it seems that other new hires have been in this situations for months... Do you think i was duped into getting hired and work for free?

<comment><USER3> Both of the explanations offered by HR are plausible. But since a founder has told you the company is broke, it's probably broke.

I would tend to read the situation as the company leadership being desperately over-optimistic and trying to hold on to sunk costs at any cost.

Lastly, trusting people and expecting them to be honest and decent and of reasonable character is not a failing on your part. It is probably the best behavior anyone has exhibited in the situation.

</comment></comment></comment><comment><USER4> I've been in that situation before. Are you a contractor or employee (w-2 vs 1099)? I've had people skip paying invoices. Also, once as an employee, the founders told me they were having financial troubles and wouldn't be able to pay me anymore. They asked me if I would work for free and I said no. They magically raised more money over the weekend to keep me on, but I left a couple weeks after that.

Try to get a clear picture from the co-founder what those "delays" are and what you can expect. Professional, non-emotional communication is important. If you don't like the answer, or don't receive one, mention that you will start looking elsewhere because you have bills to pay and working for free wasn't part of your hiring agreement.

Look through any documents you've signed to see what legal rights you have. It may need to end up in a small-claims court.

Good luck!

<comment><USER5> The "magically raised" funds could be from the founder's personal savings, which he was reluctant to use, and he was trying to see if he could get away without using.

</comment></comment><comment><USER6> I sometimes grant leniency when this happens -- but only about a week's worth, and even this this really shouldn't happen more than once, period in a working relationship with someone. And even then, I only grant leniency when there's good vibe all around and I feel like I basically like/trust them.

Either way, about the best thing you can is tell the guy, "I'm sorry you're having difficulties, but this wasn't what I was expecting when I signed on to work here, and in any case I won't be able to stay on in the presence of significant delays in compensation. The most I can give you is $N days. If you're not able to work with that, then I'm sorry, but I'll have to put my work on hold", where N should be ideally be 3-5 days, and no more than 7-10 (and that, only if you really like the guy).

And then hold firm. Making reference to your previous discussion about runway would be an excellent assist to your case, as it helps depersonalize the situation, and focus the founder's attention on keeping his word as to what he's said previously.

</comment><comment><USER7> I would be inclined to say leave immediately, find a new job and rate them negatively on glassdoor. It seems like it's a bit too early for them to not have the financial foresight to be able to pay you. Maybe after a year, but not after just being hired.

If you really care about the company, your role, and have over a year's worth of expendable savings, you could try to convince them that a partnership with an equity stake is a better form of payment for both parties. Good luck though; sounds like they're scheisters.

</comment><comment><USER8> You need to look up the appropriate labor laws for your country/state in order to determine what options are available to you

</comment><comment><USER9> > the co-founder called me saying they're having "financial delays".

First, seek to understand. Go see the Co-Founder in person if you can, at least have a live phone conversation.

Ask what's the nature of the delay? When can you expect to be paid-in-full?

Can they give you at least a partial payment today? After all, you've got bills to pay too.

Those answers should help inform next steps. There may be an entirely reasonable explanation and a plan to make good. Be extra-alert for patterns & other inconsistencies.

<comment><USER6> Exactly. One should never allow oneself to be a doormat. But it also doesn't cost (all that) much to be human, and give people the benefit of the doubt, in situations like these.

</comment></comment><comment><USER10> Been there before there is basically 0 enforcement of labor law in California I've been an engineer since 1998, its basically anything goes. I've been fired for doing 40 hours of unpaid overtime when they wanted another 60 for 140 hours a week for 40 hours pay. Its perfectly legal to fire you for "underperformance" for getting 6 hours of sleep instead of 3. I've had employers stop paying me and beg me to work for free but its usually temporary, happens a lot in the industry, its even worse for contractors but being "full time" is not much better, even though we have labor laws they just don't get enforced at all. In a couple of decades I've never seen labor laws followed or enforced in California.

<comment><USER11> Have you ever filed a legal complaint?

</comment></comment><comment><USER12> Sometimes companies you'll get your first paycheck on the second pay period that you've been there . . . or maybe you get paid a week after the end of the pay period.

I'd reach out to HR again to express your concern and see how it's supposed to work, maybe ask a co-worker hey what are the pay periods and when should I expect my first check.

After that if things don't see proper, reach out to the founder and express your concern on the pay periods/delay of your first one, is this going to be resolved and back on a normal schedule.

Good luck getting back on track.

</comment><comment><USER13> In the US? Call the founder back and say you want your paycheck today. His financial delays are not your problem.

If he says he "can't" then quit, go to the unemployment office and tell them. I don't know if you can collect unemployment after working for such a short period, but they will investigate and you will eventually get paid.

<comment><USER6> _If he says he "can't" then quit, go to the unemployment office and tell them._

This is generally bad advice in many states -- and can put his unemployment claim at risk (if he's a full-time employee, which is usually what most states require before allowing you to tap unemployment benefits).

Typically the states will have specific requirements about what constitutes a "no-fault" loss of employment. He should definitely look into what those are (and think carefully about whether what he intends to to meet those criteria) before simply resigning.

<comment><USER13> I don't think there's a single state in the Union where not getting paid is not a valid reason for quitting.

I had a friend who quit because his guaranteed bonus was not paid (he still received his salary), and the Unemployment insurance considered it a valid reason to quit. UI was paid even though the employer fought it.

<comment><USER6> You're welcome to speculate all you want as to whether one needs to wait 3 days, 7 days, or 15 days after an employer has failed to provide compensation before resigning, and have it still be classified as an involuntary separation, in the state's view -- and act accordingly -- if that's how you roll.

My advice to the poster is that he simply check explicitly as to what the regulations say, before taking the plunge -- rather than simply guess, and hope for the best after the fact.</comment></comment></comment></comment>


Beam for Reddit - <AUTHOR> http://beamreddit.com

<comment><AUTHOR> Hey hackers, I'm David from Awkward, the company that created Beam. Happy to answer any questions and please post any feedback you have.

Happy redditting ;-)</comment>


The Scope of Unsafe - <AUTHOR> https://www.ralfj.de/blog/2016/01/09/the-scope-of-unsafe.html <comment><USER3> Oh, that's interesting. I follow rust development with interest but have only built a few toy projects in myself and was definitely under the impression that these sorts of issues resided solely in `unsafe { ... }` blocks. But, yeah, with this example it makes sense.

I'm relieved to hear that at least it doesn't pollute beyond module boundaries.

But now I'm questioning what the difference is between `unsafe {...}` code and within-module code that accesses it, if the latter also has to deal with memory safety issues? Should `unsafe` only be declared at the module level then?

<comment><USER4> "I'm relieved to hear that at least it doesn't pollute beyond module boundaries."

This isn't true, it is easy to come up with an example where lack of safety spreads past module boundaries.

        impl Vec<T> {
            pub fn evil(&mut self, len: i32, cap: i32) {
                self.len = len;
                self.cap = cap;
            }
        }

If we want to know our program is broken now, we need to look across all of the source code to see if evil is called in breaking ways.

The point was that Rust provides abstraction facilities which allow us to contain these invariants. If we are careful.

<comment><USER5> `len` and `cap` are private fields and can't be accessed outside the module boundary, even by an impl.

<comment><USER6> I've been wondering if it would make sense to encapsulate internal fields that are part of the unsafe machinery in a type forcing you to use unsafe blocks, even inside the type impl. [edit: Removed note about UnsafeCell since it's not really like the thing described above]

I haven't really played with it though, most of my unsafe use is FFI.

<comment><USER5> You can, but IMO it's not so necessary. The module boundary thing doesn't cause many issues in practice is straightforward to reason about if you're aware of it.

(And if you weren't aware of it you would probably not use `UnsafeField` either, since the compiler can't force you to do that)

<comment><USER6> I'm more thinking about the documentation effect of such a wrapper type. Both in the data structure and in the parts of the code that are foced to use unsafe.

<comment><USER7> I suggested something kind-of-similar at <[https://internals.rust- lang.org/t/pre-rfc-unsafe-types/3073>](https://internals.rust-lang.org/t/pre- rfc-unsafe-types/3073>)

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> So, one question might be whether it's possible to encode some of these implicit invariants into the type so that the "evil" function would actually fail to compile.

<comment><USER9> That's quite possible, and most proof of correctness systems can do it, but there's no syntax in Rust for talking about the necessary object invariants.

Object invariants are assertions which must be true whenever control is not within the object. The object invariants must be true when control leaves the object by exiting any public function. Nothing outside the object must be able to alter the variables involved in the object invariant. Only one execution thread can be in the object at a time. If you can demonstrate all of those conditions, assuming the invariant is true at entry to the object, you have proved the object invariant.

This is a useful and well-understood concept in the proof world, but isn't seen much in programming languages.

<comment><USER7> Since Rust supports concurrency, it is worth mentioning that these techniques have been scaled to handle objects that can be accessed from multiple threads at once - while maintaining the modularity of the approach. See, for example, <[http://plv.mpi-sws.org/iris/>](http://plv.mpi-sws.org/iris/>) and <[http://software.imdea.org/fcsl/>](http://software.imdea.org/fcsl/>).

</comment></comment></comment><comment><USER10> >

        pub fn evil(&mut self) {
            self.len += 2;
        }

Does it makes sense to think if it takes a mutable instance of the "unsafe" structure, then whatever it does to it could be "usafe".

So it seems to fix it by hand, one could wrap all the calls which touch instances of this Vec with safe validation code -- basically guard code that runs at runtime to prevent corruptions from spreading. Can it be easily done during compile time?

<comment><USER11> That's called "Design By Contract". You formally specify pre/post-conditions of functions and invariants of classes (such as "cap >= len" in this case), and have the compiler enforce that automatically, e.g. by inserting runtime checks.

<comment><USER12> Runtime checks don't constitute "compile-time enforcement".

<comment><USER10> Yeah I think it would be compile-time addition of runtime-enforcement checks.

</comment></comment></comment></comment><comment><USER13> I don't think this is very surprising; if you do something unsafe hapharzardly within an unsafe block you can put the program in a state a safe program would not be able to reach, so further computation is in an unsafe state.

In fact isn't this why we have unsafe in the first place; so that such code can be more easily verified? I disagree with the notion the author suggests that the problem isn't in the unsafe code.

<comment><USER7> To reach a conclusion here, we will have to agree on what it means to be the "cause of the problem". It is true that if a program crashes, then there has to be some unsafe code in that program. This statement is however not very helpful, because pretty much all programs use libstd which contains unsafe code.

So, I'd define the "cause" of a bug to be the piece of code that you fix to get rid of the bug. If `evil` was in libstd, the fix would be to remove `evil` (or somehow make it take a default value, grow the `Vec` to be large enough and fill the two new slots with that default value). In that sense, the problem here clearly was in the safe code `evil`, since it's that code which had to be changed to get rid of the problem.

<comment><USER14> The guarantee I prefer is "If there's a segfault and you didn't write `unsafe`, it's not your fault". This is not necessarily referring to a single change, but rather the application as a whole. Dependencies like libstd are ignored here .

As soon as there's any `unsafe` in your code, you've unlocked hard mode and everything is probably your fault.

</comment></comment></comment><comment><USER15> Perhaps a quick fix would be to allow variables themselves to be tagged as unsafe, so they could only be changed from unsafe blocks.

<comment><USER15> I tried suggesting this directly on GitHub. Here was the response:

> There's an old idea of unsafe fields that would come up for datatypes. It > can be emulated with a Unsafe<T> wrapper that has unsafe methods to get > references to its interior, or to read/write. It's not widely used, or used > at all afaik, since the gains aren't that great. People writing unsafe code > generally know the issues, and that privacy is the #1 way the abstraction > boundary is maintained.

[https://github.com/rust- lang/rust/issues/9883#issuecomment-1...](https://github.com/rust- lang/rust/issues/9883#issuecomment-170716254)

Privacy may be the best way to limit unsafety, but C and C++ already have privacy.

</comment></comment><comment><USER12> How exactly is this notion of "semantic types" formalized? Is it something like NuPRL, where the base language's type system isn't sufficiently precise to rule out all misbehaviors, and on top of that a more precise type system is added, whose typing rules might be defined in terms of the base language's evaluation/execution rules?

</comment><comment><USER16>
        The scope of unsafe ends at the next abstraction boundary. This means that
        everything outside of the std::vec module does not have to worry about Vec.
        ...
        Of course, this also means that everything inside std::vec is potentially
        dangerous and needs to be proven to respect the semantics of Vec.

So wait, in a nutshell, a module is 'safe' if and only if you formally prove that every public interface into the module and every way that public interface can be invoked... is error free.

How is that any improvement on any other language?

If the burden of 'safety' is formal proof of _the entire module_ , then you're (surely) no better off than using C++ and doing exactly the same thing.

I mean, obviously the borrow checker can help to some extent, but what you're basically saying is that it's not enough; you can't trust the borrow checker for safety; you _must_ formally verify a module in order to know it's safe, if it contains any unsafe code.

In other words, if your rust program has _any module_ in _any dependency_ that has unsafe code (ie. every rust program), it is potentially unsafe, regardless of the borrow checker (because some code path may invoke a 'safe' function that has not be formally verified to be safe, and results in undefined behaviour despite being safe).

That's quite a troubling conclusion.

<comment><USER17> I'm not really sure what the problem is here: having to formally verify a module doesn't seem fundamentally different to formally verify a single function. I mean, sure, it's some more code, but there's still well-defined containment. And, being "allowed" to reason about a whole module (well, usually one just cares about a whole type, but these often match, especially for unsafe code) seems far more useful: one can build far more interesting abstractions. If one was forced to reason about a single function at a time, Vec couldn't exist in a useful way, as every function would have to assume the incoming Vec value could be arbitrarily invalid.

In any case, there are many many modules with no `unsafe` code, e.g. std::option has none [1], iron::response has none [2], image::jpeg has none [3] (just some random examples). These are automatically safe, if you assume that that the code they call is safe, which seems to me like the only assumption that can make sense: if the safe modules call unsafe ones that aren't safe... well, the problem is in the unsafe ones, not the safe ones.

What I'm trying to say is this paragraph doesn't seem to change anything fundamental about the objections to safe vs. unsafe you sometimes write about; it is not introducing anything new, and so the refutations you often receive still apply.

[1]: [https://github.com/rust- lang/rust/blob/dfaddb732ced1da9d3109...](https://github.com/rust- lang/rust/blob/dfaddb732ced1da9d310990df095ca36f43fbc3d/src/libcore/option.rs)

[2]: [https://github.com/iron/iron/blob/d3942d72e3178e7b34ebf1ea0e...](https://github.com/iron/iron/blob/d3942d72e3178e7b34ebf1ea0e07b2dc3f9749ee/src/response.rs)

[3]: [https://github.com/PistonDevelopers/image/tree/f2b86c1ec6d3c...](https://github.com/PistonDevelopers/image/tree/f2b86c1ec6d3c02b827190671ea9302716e86028/src/jpeg)

<comment><USER16> Well, given the most common refute of my concerns is 'you just have to make sure your unsafe blocks are verified to be correct', and the _point_ of this article, is _explicitly_ that this isnt the case...

Now its that you have to just make sure all your code is correct, not just the unsafe blocks.

/me shrugs

I think thats lame, and breaks the promises rust is trying to make about writing safe secure software.

If safe code may not be safe, whats the point of it at all.

You, are of course welcome to your own oppinion.

<comment><USER7> No, it doesn't break the promises in any way. If _all your code_ does potentially dangerous memory manipulation, then there's very little hope that there will ever be an automatic checker for the safety of your program.

The promise of Rust rests on the assumption that _most code is not like that_. There are a few fundamental data structures that do crazy stuff, and okay, we have to use `unsafe` there - and if we want to have any formal guarantees, we have to do a formal proof. If are happy with less, we just manually audit that data structure extra carefully. We also put every such data structure in its own module, which carefully limits the amount of code that is exposed to this unsafety.

However, most of the code will just _use_ those data structures, and that's where Rust gives you a safety guarantee. Combing `Vec` and `HashMap` and all the other types from the standard library in any way you want, hammer them from multiple threads, send stuff across channels, whatever - you can do all of that safely, and if your code crashes, you don't have to look at all this code because you did not write `unsafe`, only the standard library did - <USER2> you are in a separate module.

> Now its that you have to just make sure all your code is correct, not just > the unsafe blocks.

This is not correct. As I wrote in the post, you have to check _all code within a module that contains `unsafe`_. Most of the modules people write do not contain `unsafe`, and hence are not checked.

I'd be curious to learn why you think this is the case.

<comment><USER16> The point I'm making is that, and this surprised me, the onus on soneone writing a module with unsafe code, to ensure it does not violate memory safety is _much higher_ than I realized.

It is not 'all rust' you must verify; just all rust that touches unsafe code.

You might argue this is nothing new, and indeed if you read this comment thread you'll see the suggestion that the difference between verifying an entire module and verifying only the unsafe blocks in it is insignificant.

My point is that there is at least an order of magnitude more safe code than unsafe code in an unsafe module, and I suspect it is not scrutinized nearly as much as the unsafe code.

There are _a lot_ of crates that use unsafe code in one form or another; and it troubles me (although no one else cares) that they are probably more dangerous than I realized.

'Just verify the unsafe blocks' is something I've literally heard people say.

<comment><USER17> A lot of people care: e.g. the Rustonomicon[1] spends a lot of time caring about unsafe code (that is one of the main reasons for it to exist), and the massive RustBelt project[2], which Ralf (author of the blog post) is part of, is because people care. Even the lowest level developers (working on OSes) care about being very careful about how they use `unsafe`, e.g. [3]. One thing that some of us are hopeful will come out of RustBelt are more advanced `unsafe` checkers (i.e. some sort of proof assistant, possibly with lints built into the compiler).

In any case, talking about "order of magnitude" misses the point somewhat: there might be a large amount more code, but a lot of it is trivial to verify, e.g. the declaration of a struct doesn't need any verification, nor do comments, and if T, the type with invariants, has no internal mutability (which is fairly typical for unsafe code outside std, IME), then any safe function that takes &T is automatically safe.

[1]: [http://doc.rust-lang.org/doc/stable/nomicon/](http://doc.rust- lang.org/doc/stable/nomicon/) [2]: [http://plv.mpi- sws.org/rustbelt/](http://plv.mpi-sws.org/rustbelt/) [3]: [http://os.phil- opp.com/printing-to-screen.html](http://os.phil-opp.com/printing-to- screen.html)

<comment><USER16> linked_list.rs once you strip the comments, struct defs, and whatnot out has 415 lines, of which 64 reside in unsafe blocks, 6x as much code to check.

That's one trivial module. The piston modules and other c bindings have much worse ratios.

When the amount of code that you have to verify manually jumps by 6x (or worse), that's surprising. I was surprised and troubled by that.</comment></comment></comment></comment></comment></comment></comment>


Study: Low-dose HCQ and mortality rate in 8075 hospitalized Covid19 patients - <AUTHOR> https://www.sciencedirect.com/science/article/pii/S0924857920303423 <comment><AUTHOR> I'm a bit sorry to resurrect this highly controversial HCQ debate but this retrospective observational study could be quite significant and shouldn't be dismissed as easily as others were.

These results seem well randomized with a sufficiently large sample. They come from a reputable European Belgian University (UGent) with nationwide data from 109 hospitals.

TLDR: "Of 8075 patients with complete discharge data on 24th of May and diagnosed before the 1st of May, 4542 received HCQ in monotherapy and 3533 were in the no-HCQ group. Death was reported in 804/4542 (17.7%) and 957/3533 (27.1%), respectively. In the multivariable analysis, the mortality was lower in the HCQ group compared to the no-HCQ group (adjusted hazard ratio [HR] 0.684, 95% confidence interval [CI] 0.617–0.758). Compared to the no-HCQ group, mortality in the HCQ group was reduced both in patients diagnosed ≤ 5 days (n=3975) and > 5 days (n=3487) after symptom onset (adjusted HR 0.701, 95% CI 0.617–0.796 and adjusted HR 0.647, 95% CI 0.525–0.797, respectively)."

<comment><USER2> Very promising results.

Hydroxychloroquine's been shown effective repeatedly when it's started early. No reason not to try in patients for whom it's safe as a malaria prophylactic.</comment></comment>


Twitter has barred hundreds of accounts for posing as liberal activists - <AUTHOR> http://www.nytimes.com/2018/10/16/us/politics/npc-twitter-ban.html <comment><USER2> One thing I really like about Twitter is that you can choose to follow who you want. If you don't want to see memes making fun of you, just don't follow accounts that post/retweet these memes.

It's sad that Twitter is banning satire accounts. I'm against all censorship of lawful speech, and condemn Twitter and any social media platform that participates in this kind of censorship.

<comment><USER3> For the 1,000,000th time: you can't shout "fire" in a crowded theater and call it "satire" either.

<comment><USER4> Do you think pointing out someone else appears to have stock opinions and doesn't actually think about the world around them is "shouting fire in a crowded theatre"?

<comment><USER5> Spreading the wrong voting day is. The mockery is fine, but I don't see anything ridiculous about Twitter not tolerating voter suppression campaigns on their platform.

<comment><USER4> Do you think: [https://static01.nyt.com/images/2018/10/17/business/17NPC/17...](https://static01.nyt.com/images/2018/10/17/business/17NPC/17NPC- superJumbo.jpg) looks like a source of trustworthy information?

<comment><USER5> I guess Twitter took a zero-tolerance stance against voter suppression campaigns, whether the accounts involved are clearly satirical or not. They just flat out don't want people using their platform to spread the wrong election date, even if spreading the wrong election date is just 'trolling' or 'satire' or 'expressing my opinion on the liberals' to some. Again, I don't find that stance ridiculous.

<comment><USER6> Equating joke accounts spreading the wrong election date with voter suppression is just laughable. How could anyone possibly believe an NPC Twitter account? How stupid would they have to be?

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> This meme is originally based on the idea that not all people have an inner voice, and the supposition that people without an inner voice may be less likely to introspect and think critically.

I think the ban is a little ridiculous and likely has more to do with it's origin on a so called "far right" website than anything else.

<comment><USER8> But with that said, what isn't 'far right' these days ...

I'm just counting down the days until Bernie is called far right because he's not throwing bricks through Starbucks' windows.

<comment><USER9> Bernie is anti open borders, calling it basic globalist shilling. _" It would make everybody in America poorer—you're doing away with the concept of a nation state"_

I bet if you repeated his opinion but didn't use his name on Facebook, some, uh, [leftward people with very reflexive opinions] would show up to argue with you.

<comment><USER10> To be fair, immigration has been a mainstay of American hegemony. I don't think anyone supports doing away with borders, just that our immigration laws shouldn't be so draconian as to have things like children in detention camps and people spending days in deserts to seek economic opportunity.

</comment></comment></comment></comment><comment><USER11> A long time ago, I was told "don't feed the trolls". It's hard to see how this publicity (e.g. the NYT) is not feeding the trolls. There is no doubt that this campaign, whatever motivations, was successful. At the same time, social media platforms are more at the ready to ban pranksters, bots, etc. That might be the only approach that works when the majority of society participates.

(1) don't feed the troll, but it grows despite most people trying to ignore it. (2) ban the troll, and give them the NYT press they wanted in the first place

Not a lot of good options here.

<comment><USER12> That approach only works for people who are "acting out" and trying to get attention online. The meaning of "troll" has changed. It doesn't work for people who are conducting harassment campaigns or spreading misinformation. It kinda doesn't work for anyone you're interacting with on a personal, non- anonymous basis anyway. If someone is behaving badly in a company or even in a casual group, you don't just ignore them.

<comment><USER11> "If someone is behaving badly in a company or even in a casual group, you don't just ignore them."

I think I agree, but it goes against the grain of what people previously thought you should do on the internet.

>harassment campaigns or spreading misinformation

I am genuinely curious about the flora of the NPC movement. I mean, this territory between meme and organized campaign is really interesting and it's sad it comes at the cost of society.

</comment></comment></comment><comment> jf- This may be an unpopular opinion, but I'd prefer if this culture war crap were kept off HN. There are plenty of other places to discuss this, just because Twitter is involved doesn't mean it's related to tech.

<comment><USER13> Yeah, this thread has degraded extremely rapidly in terms of comments. And luckily it just disappeared off the front page :)

<comment><USER8> > this thread has degraded extremely rapidly

The internet in a nutshell.

</comment></comment></comment><comment><USER14> The Right used to abhor postmodernism, and were properly mocked by the Left whenever they whinged about it.

Now the Right have embraced postmodernism, and the Left have no idea how to respond.

<comment><USER15> That happened back with George W. Bush ironically and really ended it for the postmodernist side. There was one interesting article about it.

[http://clubtroppo.com.au/2012/02/22/george-bush-bruno- latour...](http://clubtroppo.com.au/2012/02/22/george-bush-bruno-latour-and- the-end-of-postmodernism/)

Being disengaged with reality because it doesn't say what you want it to isn't a good thing but some delusions are more harmful than others.

<comment><USER14> Great link, with great links! I'll be avidly reading those over the next few days. "...Latour can actually write well when he wants to." Golden!

The PoMo "side" is not exactly the Leftist side, however. If reformed PoMo enthusiasts expect all this to go away now that they've seen the error of their ways, they will be disappointed. The discourse from 4chan etc is not only a reaction to a particular political circumstance, but also to the experience of real people in economic, advertising, media, social, etc arenas. The channers have found something that empowers them to speak back to dominant narratives that exclude them, and they're not going to give it up just because e.g. Latour has changed his mind.

</comment></comment></comment><comment><USER16> I confess this campaign is a puzzlement to me. There are a bunch of people all repeating the same idea as a way of critiquing people they believe are... all repeating the same ideas?

<comment><USER8> Originally yes, that was the joke, people just repeating the same buzzwords and catch phrases in response to anything as game NPCs do.

However as with all the memes over the last few days, it quickly turns from that into 'well those people are reacting exactly how we thought they would, just keep posting it if it triggers them'.

e.g. take Pepe - the only reason it caught on was because the left took the bait and lost their shit over it. The only reason this NPC thing took off was because the same people took the bait and are loosing their shit over it. It doesn't matter what the meme is, what it's about, or what it represents. The right keeps making jokes, the left keeps taking the bait, the right sees that and keeps feeding them more and more.

<comment><USER17> > "well those people are reacting exactly how we thought they would"

Almost like NPCs...

<comment><USER8> Exactly that.

Right: Hey you guys just keep repeating the same thing.

Left: You're a racist

Left: You're a racist

Left: You're a racist nazi

Left: You're a nazi racist

Left: You're dehumanising us you racist

Right: Well hell, make 5000 more of these if they're getting such a great engagement rate.

</comment></comment></comment></comment><comment><USER18> > Evidence suggests that these are mostly just attention-starved gamers > looking to impress one another

What is the link with gaming I'm missing here? Is 4chan simply associated by gaming defacto? I don't see anything else about video games or any evidence of these people being gamers in the article...

<comment><USER2> "Gamers" and "Gamergate" is a generic boogeyman that media outlets can use to direct their anger at. See "Why Young Men of Color Are Joining White- Supremacist Groups" [1] for another example.

The obvious answer to "Why are non-whites joining white supremacist groups" might be "They're not white supremacist groups, they're just mislabeled by people who call everyone they disagree with nazis."

The article explains that it is, however, Gamergate and Ayn Rand that are turning non-white people towards white supremacy, even though Gamergate and Ayn Rand don't have an opinion on racial superiority as far as I know.

edit: It looks like I triggered the NPC downvote algorithm. I hope the next patch gives them dialogue choices.

[1] [http://archive.is/P0X3D](http://archive.is/P0X3D)

<comment><USER19> To me, the real explanation for a lot of this bizarre nonsense is because journalists are spending all day on Twitter which in reality isn't the real world it's technically just a very popular internet forum with a few famous users and they've begun to not understand that what happens on the internet forum Twitter does not represent what's actually happening in the real world.

This is how internet forum drama gets mistaken as actually something people in the real world actually think about.

Once you start to see this it becomes so strange that you can even tell when a journalist is a Twitter addict just from some of the terms and thinking they start to include in their articles.

There is very much a Twitter hivemind heavy users start to tap into, and unlike say Reddit users or even 4chan users they mistake Twitter as being the real world and the hivemind as reality.

<comment><USER2> Indeed. When ~journalists~ spend their whole day on Twitter, it means their resolution of the world is incredibly minute.

Think about the most significant events from 2005. If you're looking back at that resolution, the small day-to-day stuff gets filtered out. The signal to noise ratio of what's actually significant is pretty good.

These journalists are literally involved in the _minute to minute_. They wouldn't even notice the signal if it kicked them in the head, because they live in the noise.

<comment><USER6> >They wouldn't even notice the signal if it kicked them in the head, because they live in the noise.

This is a pretty apt description for that entire group, really. Many people live exclusively in the consumer world and have largely abandoned foundations of society like building a family or participating in local community, and I think it manifests in the internet tribalism we see.

<comment><USER2> Indeed; it's unfortunate, really.

I step in and out of engaging in political discourse online, but spend most of my time outside of it. I only come back to test my (hopefully) improved perspective to see how my worldview holds up against the critiques that the internet throws at me.

I'm about due to another half year or more recess away from social media, though. It definitely wears on you.

</comment></comment></comment></comment></comment></comment><comment><USER20> A few observations.

1\. Why did NYT get a special scoop on who's been banned, and why? That makes it more likely to be perceived as an act of signaling more than one of genuine enforcement.

2\. Streisand Effect, in several ways. The reaction by Twitter also serves to put blood in the water, letting those trolls know that the tactic hit a soft spot, and encouraging them to hit it more aggressively.

3\. Where's the line between this and satire? I'm seeing: a. Blatant hyperbole b. Obvious markers that the account is a part of the satire: hyperbolic or downright silly account names, and a distinctive avatar

</comment><comment><USER21> How about they proceed to ban bots instead?

That would IMO make twitter much more useful, but of course it would kill 95% of their "user base" and traffic.

<comment><USER22> Well, part of the basis of this "campaign" is that the people they are satirizing are indistinguishable from "bots"...

<comment><USER23> 4chan is too stupid to tell the difference between a bot and a liberal

</comment></comment></comment><comment><USER24> The fact that NYT even asks the question "Are these Russian bots?" kind of fuels this meme, imo.

Their answer is "probably not".

<comment><USER25> You might know that internet trolls from reddit/4chan aren't likely to be russian (at least for this meme in particular), but most (especially older) people are not familiar with the various internet cultures. It's a question I can definitely see my parents asking.

</comment></comment><comment><USER26> Something that caught my eye there is serious discussion about whether jokes about November 7 voting (that I hear every election I've witnesses in US, bar none) is interfering with election and "giving false voting information" and whether it justifies removing the account. Which got me thinking - do I really want people that don't know which day is the voting day and trusting random twitter account with crudely drawn meme as an avatar with this information - do I really want them voting _that much_? It looks to me that if such people show up on November 7, it would only be for the best for everybody.

</comment><comment><USER27> ...as someone who is oblivious to these things (only knew it was a "thing" last night)...can someone explain why this is harmful and not just people wasting time?

<comment><USER23> It's basically propaganda. Propaganda is generally agreed to be a bad thing for a true democracy.

<comment><USER28> Actually, propaganda is agreed to be a good thing for a democracy. It's why we have free press and free speech laws.

Many of the founders ran printing presses or newspapers to push their own propaganda. The most prominent being alexander hamilton and the NY Post.

What is bad for democracy is censorship ( aka one sided propaganda ).

</comment></comment></comment><comment><USER29> >Aren't you giving these trolls the attention they're seeking by writing about them in The New York Times? Yes, probably. But understanding how these things happen, and how easily joke memes can escape the internet's seedy underbelly and morph into actual tools of influence, is part of understanding the mechanics of modern politics.

Laudable goal. Yet they shot themselves in the foot. Instead of focusing on "everyone falls into the trap of substituting popular rhetoric in the place of critical thinking" they had too much of what could be dismissed as "orange man supporter bad."

</comment><comment><USER30> I have a hard time believing these troll accounts had a significant impact on anyone's voting decions. Dumb meme, but seems like an over reaction.

</comment><comment><USER17> The speed at which the media have rounded against this meme is breathtaking. Are some memes inherently powerful and just need to be controlled? Why are they powerful? How much longer can 30 year old boomers be let sip Monsters outdoors? It's not right.

<comment><USER31> Memes are propaganda on steroids.

<comment><USER32> Could say the same about most journalism today as well.

</comment></comment></comment><comment><USER33> These should be treated as similar to political cartoons.

</comment><comment><USER34> "Pro-trump" What the f? Don't we have professionals anymore? Why is this news? Why is this so innacurate i thought the NY Times was a decent source of information. These people know nothing.

</comment><comment><USER35> Banning all those accounts based on a tiny minority of tweets promoting fake election dates seems like totally bs reasoning. If their reasoning for the bans was actually a policy against "dehumanizing speech" as some have said, then why not ban everyone who tries to dehumanize a Trump supporter with an accusation of them being a "Russian bot?" Or what about dehumanizing language against opponents like racist/sexist/Nazi/homophobic/transophobic etc?

Also.. I think this meme has a grain of truth to it - I don't know about the political aspect, but as to people's minds generating the same content and repeating the same phrases over and over: it seems as if our popular media is pretty limited in the things journalists and TV hosts are "allowed" to cover and say. Late night hosts all seem the same. That's one reason I enjoy 4chan, because the content is so diverse.

</comment><comment><USER14> It's _interesting_ that this Twitter ban gets all this attention, while a far more civically damaging coordinated mass-ban by Twitter and Facebook has largely escaped notice. [0] If one were a cynic, one might suggest that there is only enough space in the news cycle for one group of unsympathetic ban victims.

[0] [https://caitlinjohnstone.com/2018/10/13/internet- censorship-...](https://caitlinjohnstone.com/2018/10/13/internet-censorship- just-took-an-unprecedented-leap-forward-and-hardly-anyone-noticed/)

</comment><comment><USER36> The appropriate title should have included:

 _" The accounts violated Twitter's rules against "intentionally misleading election-related content."_

</comment><comment><USER37> Banned for "voter suppression"? Really?

As if a bunch of people are going to get disenfranchised because a stupid joke tweet? Come on. If you don't vote because of that one tweet maybe you aren't educated enough to be voting in the first place.

Furthermore, why not just ban that one tweet? Banning the entire meme because one tweet only goes to further the narrative that anything right wing is being systematically suppressed on the internet.

Congrats on throwing the trolls a giant hunk of red meat, Twitter.

</comment><comment><USER38> Evan James has a good writeup on the sort of anxieties around society that sprung up the NPC meme [0]. There's a portion which I think has a kernel of truth, although it is definitely generous to the kind of people that immaturely lashed out and made very low-effort twitter accounts which wound up propagating the meme:

>The far right can be profoundly intuitive creatures, who feel more deeply than cursory glances suggest. The NPC meme is a response to something real, something that snarky liberals, and even leftists, increasingly fail to notice. In short, it is a tragicomic acknowledgment that things are not OK, that we are all NPCs (to one degree or another) because we are all in bondage.

I think the idea that people repeat samey platitudes they hear on TV or read online without much further thought is certainly a legitimate concern. The meme brought up a good point about mass consumer culture, but from there, it attained its own populism: a thousand voices telling a thousand other voices that they're following a script.

As someone who admittedly spends a lot of time on 4chan (an online addiction I have sustained for ten years), I was present to witness its snowballing on the imageboard. What I found interesting then was that the crux of the discussion around the meme focused on the idea that few people have an inner monologue [1].

[0] [https://jacobitemag.com/2018/10/02/empty- realm/](https://jacobitemag.com/2018/10/02/empty-realm/) [1] [https://www.psychologytoday.com/ca/blog/pristine-inner- exper...](https://www.psychologytoday.com/ca/blog/pristine-inner- experience/201110/not-everyone-conducts-inner-speech)

<comment><USER39> It confuses me, because "don't take things at face value" and "don't just follow a script" is, well, postmodernism. It's also anticapitalism. It's also a commentary about peoples reverence of traditional gender roles and religions. Actually, I totally fail to see why it's a conservative meme at all, unless it's being repeated without any attempt to consider broader implications.

<comment><USER40> > I totally fail to see why it's a conservative meme at all

It's not a conservative meme. 4chan trolls != conservatives != The Right != Republicans != ... Almost nothing fits neatly into a bipolar spectrum of "us vs them" and 4chan culture is mostly about being where the normal people don't want to go.

On /b/ you can find posts complaining about Jews controlling the economy, trans people swapping pictures, memes about niggers cucking white bois, incest fantasies, celebrations of school shootings, people claiming their favorite anime characters as waifu/husbando, complaints about how this is all cancer and needs to stop ...

There is no unified message that would fit into mainstream politics.

<comment><USER6> And yet people here and the NYT are labeling this "far right" and even alt- right. It's laughable.

</comment></comment></comment></comment><comment><USER31> Cmon the meme is kinda funny.

<comment><USER23> It's also kind of stupid. As in, very tiny amounts the things that the "joke" tries to attack are based in reality. Its as if they cannot accept that large numbers of progressive or liberal minded people exist.

<comment><USER41> if Twitter were to ban stupid content from its website, not much would remain ; the stupidity of this can't be used as a reason to explain the bans.

</comment></comment></comment><comment><USER42> "let's show how unthinking this other group is with a snowclone meme"

</comment><comment><USER43> Not sure how to feel about this one. Waiting for John Oliver's take.

<comment><USER44> I'm with you on that. Eagerly waiting to be fed my opinion and then post about it on FB and Twitter. My friends are going to love it and I will feel appreciated.

</comment></comment><comment><USER45> > _Last week, a trolling campaign organized by right-wing internet users > spilled over onto Twitter._

So Twitter bans a bunch of satire accounts for political reasons and the New York Times applauds the decision. This makes me incredibly sad but I guess it's to be expected.

If your political position is so weak that some jokes can damage it, maybe it's time to take a deep inward look. I don't see anyone calling on SNL to ban Trump impersonations.

<comment><USER46> For spreading incorrect election information.

Plenty of far right twitter accounts, these where designed to get banned for publicity.

<comment><USER45> > _these where designed to get banned for publicity._

I don't think they were. I think they were designed to be funny and characterize a particular ideology.

As I said in the other comment, this article gives one extremely mild example of incorrect election information and says "a few" of the accounts were participating in that. Why would you ban all of them, including the accounts not spreading misinformation?

<comment><USER46> Not all of these accounts where banned. But, it's likely they where banning multiple sock puppets from the same users.

</comment></comment></comment></comment><comment><USER47> NY times characterizing these protesters as far/right or as "attention starved gamers" is also odd.

</comment><comment><USER48> ROFL

</comment><comment><USER49> I love the last question 'Aren't you giving these trolls the attention they're seeking by writing about them in The New York Times?'

I thought the same thing. Interesting to see right-wing business coming out of *chan-land. I'd always seen it as more of a left-wing place.

<comment><USER50> Y'all went so far left *chan-land is now considered right.

<comment><USER51> *chan land is chaotic neutral and always has been. Authoritarians just can't handle chaotic. A projection of a high dimensional vector (politics) onto a line (left - right) is always going to be a goof.

</comment></comment></comment><comment><USER52> This is HN so you might appreciate this version: (SFW)

[https://i.imgur.com/aPaBYCt.png](https://i.imgur.com/aPaBYCt.png)

</comment><comment><USER53> Great honest accurate article. NPC meme is the funniest thing since Ugandan knuckles

</comment><comment><USER54> I must admit, it has been entertaining watching how the meme's proponents have acted as if they have uncovered some great Truth of the human experience, when in fact it's nothing more than the tired old "I am a critical thinking individual while those who disagree with me are not." wrapped in video game nomenclature.

I suspect that deep down this was an attempt at coining a "new" SJW after the term had gone mainstream.

<comment><USER53> It's a joke</comment></comment>


You can't beat a good compiler…. right? - <AUTHOR> http://lbrandy.com/blog/2010/06/you-cant-beat-a-good-compile/ <comment><USER4> You can easily beat a good compiler for many kinds of code. It just takes time, effort and a good deal of knowledge. If you're doing it outside of the hottest kernels of your code, you're probably wasting your time.

<comment><USER5> And it also requires that you pay attention to your evolving toolset. I've worked on x86 code that was hand-optimized back in 1995. Once I reverse- engineered it and handed it to Visual C++ the code gen'ned by VC killed it, by like a factor of 2x.

I emailed the code to the guy who originally wrote it and his response was brief, "The compiler wasn't that smart before". But yet the code sat there for like 10 years, untouched -- largely because people don't like to touch x86 assembly code that is working.

The moral, you may get a benefit today, but you don't get any future benefits of the investment at MS, Intel, the Gcc folks, etc..., who are improving the compilers. Sometimes it is the right call to hand optimize. But when you do, I suggest having a C/C++ version alongside of it that one can test aganist it whenever the compiler revs.

<comment><USER6> An anecdote in a similar vein:

I was involved in writing (Fortran) code for Crays in the 90s. For the T3D, we speeded up the code with the usual set of tricks -- loop unrolling, array padding and so on. With the later T3E, it turned out that not only could the compiler now do all that, but that code hand-optimised in this way performed worse.

<comment><USER5> Heh, we may know each other. I also developed code on the T3D and T3E. I figure can't be too many people in the world that developed for both. I still have the big gray Cray binders with the documentation laying around somewhere.

</comment></comment></comment></comment><comment><USER7> This is really a matter of scale and reality. Let's think in survival terms. Some applications, oh, say High Frequency Trading depend on getting the calculation done first. We are talking milliseconds or less to do a calculation that leads to placing, cancelling, or modifying an order. Do they use assembler? No. Problems of scale requiring massive hardware or clusters, do they use assembler? Not generally. Often they use Lisp, C++ or C.

So in the context of real-world problems, compilers win, because none of us has the energy or attention span to write it in assembler, something the size of a real-world problem like, for example, a compiler.

We optimize small problems by hand, but problems of useful size we don't because the compiler does a better job on problems of true interest than we have the patience or time to do.

To put it another way, it is better to put energy into improving compilers than getting into a John Henry type of competition.

<comment><USER6> Your point is well made, but if the large, relevant problem can be broken into small sub-problems, and if one of those consumes a significant amount of compute time, then that might (just might!) be worth optimising in assembler.

My experience of problems requiring massive hardware or clusters (limited, I admit, to certain classes of scientific computing) is that such assembler coding of speed-critical components is actually often done.

</comment></comment><comment><USER8> John Henry won the race against the steam-hammer too, before he died. The point is not that it's impossible to beat a good compiler at micro- optimization, the point is that it's rarely worth the effort. More important than being able to beat the compiler at optimizing any given piece of code is building the tooling (and having the discipline and experience) to know when and where to best leverage your development efforts in optimization.

Rather than trying to carpet-bomb everywhere with micro-optimization hand- grenades, use laser guided precision to hit the targets that count. So instead of wasting your time manually unrolling loops in code that's just going to be refactored away before release anyway, find out exactly where your code is bogging down and concentrate on fixing that.

</comment><comment><USER9> Wouldn't something like

        float temp_out = 0.0f;
        for (j = 0;j<5;j++)
             temp_out += filter[j] * in[i+j];
        out[i] = temp_out;

solve the performance issue, and allow for out = in? (which I would think would be desirable, in cases where you don't need the original input).

Also, this is way outside my area of expertise, but when I hear convolution I think FFT. I would be curious if anyone knows whether there is an algorithmic improvement to be made here.

<comment><USER10> I think that your solution is better in that it's simpler, but I'm not sure what the compiler will do in this case. Theoretically, in[i+j] could point to temp_out, but it could only be through very tricky means, since temp_out is on the stack, and the caller presumably doesn't know where it will be allocated.

An FFT wouldn't be faster in this case since the filter only has five taps. Generally there has to be a decent sized kernel for the FFT to be worth it -- the FFT is O(N log N), and this algorithm is only 5*N operations.

<comment><USER11> The compiler is free to optimize in this case, because there's no _requirement_ that in[i + j] point to temp_out, even if you manage to make the stars align.

</comment></comment></comment><comment><USER12> Better examples of good compiler optimization would be other than math loops. Math is kind of shooting fish-in-a-barrell. Where the compiler shines, is when it optimizes thru necessary abstraction. Sure you can hand-code a flat struct, but you rather have objects with ctors etc. (insert favorite abstraction here).

</comment><comment><USER13> Starts by saying how it's a huge myth that compilers generate better code than hand-made assembly... and ends with compiler-generated code, the author basically saying "I think I could do better".

It was interesting to see what the compiler generated, though it won't be a big surprise to experienced C coders.

<comment><USER14> > Starts by saying how it's a huge myth that compilers generate better code > than hand-made assembly...

It's important to note that I never said this.

I was simply trying to separate two versions of the same rule of thumb... I said that using a compiler, a smart low-level programmer can generate the assembly code he wants. This is not "hand-made" assembly, but this is not just the magic of an optimizing compiler, either.

<comment><USER13> I do see your point and I found it interesting (I've had to optimize filters in the past and used the same process of coding C and looking at the assembly), but how can "beating the compiler" be interpreted as anything but writing better code than the compiler?

<comment><USER15> Writing optimized code generally involves looking at larger sections of the problem / code base and picking a different approach based on global conditions.

So, when you and the compiler are booth looking at the same code base, but you find a better local approach based on a global condition you have beaten the compiler. Even if all you did was tell it about that condition.

</comment></comment></comment></comment><comment><USER16> I think the Euro-demo coders of the 80s made it clear that handwritten assembly can be optimized to a ridiculous point of efficiency.

<comment><USER17> Very true. But these were specifically intended to test the limits of coding. In other situations, you have to ask yourself, is this really adding value?

</comment></comment><comment><USER18> Good post.

I'm a big fan of looking at the assembler code generated from programs - <USER2> if you are not optimising - it helps give a depth of understanding which is simply not possible without doing it.

Not to mention that the "smart" compiler is a myth - I've seen some downright stupid asm come out when the compiler is configured wrong - and it gets missed, even with profiling based optimisation targetting the area - <USER3> looking at assembler is actively discouraged.

We are spoiled with IDEs and high level languages...

</comment><comment><USER11> This has some caveats that I pointed out at [http://lbrandy.com/blog/2010/06/you-cant-beat-a-good- compile...](http://lbrandy.com/blog/2010/06/you-cant-beat-a-good- compile/comment-page-1/#comment-26448); still, a nice enough article.

EDIT: note that the off-by-one error is MY mistake - it simply isn't there. My point about "restrict" is valid, though.

<comment><USER14> This is a terrifying post for me to make because I feel like I'm about to make an ass of myself... but...

I'm not seeing an off-by-one error. 'i' will be LENGTH-5 on the last iteration and we will add 'j==4' for in[LENGTH-1] not in[LENGTH].

<comment><USER11> You are actually right. Sorry! I shouldn't be trying to do N things at the same time - I somehow misread that as i <= LENGTH - 4.

</comment></comment></comment><comment><USER19> I agree that checking assembly output is very good practice and even more important on not-so-common architectures. x86 and ARM compilers are very good now but if you're working on a different processor the compiler might not be so good.

Especially on DSPs and microcontrollers you may end up changing instruction order to avoid pipeline stalls or use on-chip RAM buffers for your often used data.

Also, if you start writing a routine in assembly from scratch it's often surprising how many different ways you can implement an algorithm since you're not as bound by the calling conventions and runtime assumptions made by the compiler.

Not that I would recommend that for anything other than the innermost loops.

By the way, are we talking about anything other than C or maybe Fortran here? I'm guessing Java or C# coders don't spend too much time looking at the IL, I know I've only done it for educational purposes.

</comment><comment><USER20> Speaking of this, can anyone recommend any good resources for learning assembler code, targetted at noobs who know some C but nothing more low level?

I need to plug some holes in my skills, and this is one of them.

<comment><USER21> I wouldn't necessarily recommend this approach, but the way I learned to read x86 assembly (I've never needed to write it, but I do write other assembly languages) was by reading Michael Abrash's Graphics Programming Black Book and disassembling a Windows driver for a piece of hardware in order to create a Linux driver. Having a practical motivation other than just "learning assembly language" can be beneficial.

You could also try getting an embedded development kit, like the USB Bitwhacker, PICKit, or an AVR-based kit, and programming a microcontroller in assembly language.

</comment></comment><comment><USER22> In certain cases, this level of optimization makes perfect sense. In other cases, arguably more common when writing C++, it makes more sense to invest that time in understanding the object model, i.e. what actually happens when you pass a struct by value, return an object (NRV), where invisible object copying occurs (STL, I'm looking at you) or similar issues. Lippman's "C++ Object Model" is a good reference for that.</comment>


Some Android apps caught covertly sending GPS data to advertisers - <AUTHOR> http://arstechnica.com/security/news/2010/09/some-android-apps-found-to-covertly-send-gps-data-to-advertisers.ars <comment><USER2> I don't understand technology behind app approval, code review, etc. But, would this happen in the iOS app store? Given their more stringent approval process?

<comment><USER3> An application in the Apple app store purported to be a flashlight app but was actually a tethering application: There was no secret binary obfuscation or amazing hacking, it just simply said "I am A" while actually being B. That should give insight into the depth of analysis that occurs with Apple's curation: they are concerned about functionality overlap and other high level things, and there are zero guarantees that the application does what it says it does.

On Android there are very granular permissions, and an application cannot do anything -- like getting your coarse or fine position -- that it wasn't specifically granted rights to, however like the article mentions it's hardly difficult to social engineer an explanation for why the right should exist. And of course, sometimes benign apps do need far reaching rights in a way that causes user security fatigue. Barcode Scanner, for instance, scans barcodes and looks up products, yet on install it demands -- all or nothing -- that it have access to your contacts. That concerned me greatly, but I later learned that it can also generate barcodes for your contacts.

Android security can be improved. For instance apps should have _optional_ right requests. I would say no to contacts on Barcode Scanner, for instance, and it should live without that right, just as I would say "no" to a game where I don't use geolocation matching for if it wants positional data. There should also be the option for an "on use" right setting, where, for instance, whenever it asks for my fine position I have to individually grant that right, which is the one thing that iOS does right.

This is ultimately simply an installer issue -- the reality is that apps already can probe to see if a given right is available, and can enable/disable functionality based upon it. All that is needed is for the installer to provide the boolean.

Overall, though, I feel far more secure with the granular permissions model of Android than with the all-or-nothing (aside from fine position) iOS model.

<comment><USER4> I don't have an Android device, but what you describe is half-way to a fantastic OS. If each application could specify some text for a permission, the installer could then display it to the user ("This application wants to access your contacts for the following reason: Generating barcodes for contacts") and the user could check/uncheck what he wanted.

Obviously, almost everyone would just press "accept" all the time, but users could become more and more educated about security (it's not that hard to grasp that an app needs access to contacts), and that security model would possibly be the best of both worlds.

</comment></comment></comment><comment><USER5> Here is the actual research paper that this news story is based on: <http://appanalysis.org/tdroid10.pdf>

Also addressing the point by ergo98 <http://news.ycombinator.com/item?id=1744151>, a single anecdote does not a convincing argument make. iOS's approval process has a number of explicitly stated goals, one of which is preventing what is happening in this case. So mentioning one app that happened to sneak by the approval process for a short amount of time is meaningless for drawing any real conclusions.

In general, having all the permissions of an app determined at install time seems very flawed to me (whether or not those permissions are optional). Why not ask for permission, when necessary, during the app use, so the user knows exactly what is requiring those permissions? That model is used by desktop apps, and it is the way I would implement it. The up-front permissions model is like sites that ask for your email first before they allow you to read their content- generally scams.

<comment><USER3> >Also addressing the point by ergo98

The reply button is available for your convenience.

>a single anecdote does not a convincing argument make

It isn't an anecdote.

People submit binaries to Apple, and they either do static and dynamic code analysis, or they don't. I have _never_ heard about them rejecting an application based upon such analysis, and in this case we know that it was an incredible deviation from the stated purpose.

But let's assume they do start doing such analysis -- because they have such a limited runtime security check, to circumvent it is trivial obfuscation. Of course developers needn't even bother with that.

The reality is that we have no frigging clue what apps in the App Store are doing -- Android is an open enough, transparent enough ecosystem that it is an easy, obvious target for researchers.

No one, to my knowledge, is doing similar analysis of the iOS market.

<comment><USER5> If I understand your point correctly, it can be summarized as "Applications are probably doing whatever the heck they want on iOS too, we just don't know about it." If that's not your general idea, please correct me. There are at least two problems with this statement:

1) You are contending that Apple is in an equally powerless position to prevent apps from deviating from stated purposes. Yet even the app in the anecdote you brought as an illustrative example has been removed by Apple. If any other iOS app was found to be in violation by anyone, and Apple found out about it, it could be removed immediately. In contrast, the apps tested in this research paper will likely still be in the Android marketplace one year from now, and because people don't read the news, they will likely be as popular.

2) I don't think it's really that difficult to do similar analysis on the iOS market at all. Just connect to the internet via a router with some kind of packet sniffing. Obviously, until someone actually does it, we're just guessing- you're guessing that apps on iOS are just as bad, and I'm guessing otherwise- but to blame the lack of information on iOS not being transparent enough for researchers doesn't seem accurate.

<comment><USER3> "If I understand your point correctly"

You don't.

"You are contending that Apple is in an equally powerless position"

No, I'm not.

"Yet even the app in the anecdote"

It isn't an anecdote.

</comment></comment></comment></comment><comment><USER6> And what about the web sites which essentially do the same? Geo IP....

</comment><comment><USER7> This is exactly the reason I'm loving the Privacy Advisor feature in the beta of Lookout's premium product.</comment>