Ask HN: How to graph total tweets about "bitcoin" in given timeframe?  - <AUTHOR>

I'm not a coder (undergrad economics) but can learn fast.
What I want to do is find a way of tracking tweets about bitcoin on an hourly basis.
The idea is to compare this with a graph of the price of bitcoin over time and see if there is any relationship between the two.
Why am I doing this? Mainly curiousity and improving my technical skills.
Any points appreciated. So far I have started learning about APIs and JSON and am trying to figure out how to use JSON feeds in a program that is good at manipulating data (i.e not my browser). <comment><USER2> Use the Twitter Search API. Yes, yes I know people say it's not as complete as the hose, but it's actually quite close to complete if you query it constantly without sleeping between requests. Just keep track of the MAX Tweet ID, and get tweets > this ID for every request.

Especially for queries where there aren't more than XXX results per minute (yes, even for terms like Bitcoin as u can see here: [https://twitter.com/search?q=bitcoin&src=typd&f=realtime](https://twitter.com/search?q=bitcoin&src=typd&f=realtime))

Then map those tweets to the specific hour (in epoch time for something), or even specific minute, or second if you want more granular detail. Index them to a search index like ElasticSearch or SOLR, and then do a faceted search, which will return the # of results for each time period. You can then graph this fairly easily.

The flaw I see in your experiment is that there's a TON of noise in Twitter. Maybe filter out tweets by obvious spam bots (ie looking at follower/following ratio, ignoring users who only tweet hashtags, or URLs, etc).

</comment><comment><USER3> You'll want to use the Twitter public timeline firehose - [https://dev.twitter.com/docs/api/1.1/get/statuses/firehose](https://dev.twitter.com/docs/api/1.1/get/statuses/firehose)

Insert any matching bitcoin into your database with the associated time. Then you can sum/avg/aggregate it by time (within [epoch seconds] - [epoch seconds + 3600])

<comment><USER4> I think its hard/expensive to access the firehose no?

<comment><USER3> Wasn't much of an issue for me but since he is somewhat new I imagine reading a stream and basically doing an infinite foreach would be a tad easier than adding queuing, API ratelimits (per hour? forget which), timed polling, etc.

</comment></comment></comment><comment><USER4> There is no mechanism for search "completeness" without access to the fire hose.

[http://blog.cloudera.com/blog/2012/09/analyzing-twitter- data...](http://blog.cloudera.com/blog/2012/09/analyzing-twitter-data-with- hadoop/)

^ that is a good resource if you ever get access to the firehose.

Shoot me an email firstname.lastname@example.com, and when I get home I can shoot you an email with some example code that Ive written in the past.</comment>


Making the invisible visible in video - <AUTHOR> http://www.youtube.com/watch?v=Fpv0CWLouzc

<comment><USER2> I am not going to make it to SIGGRAPH 2012, but looking forward to reading their paper.</comment>


Why Microsoft Overpaid for Facebook - <AUTHOR> http://www.time.com/time/business/article/0,8599,1675658,00.html <comment><USER2> It's schizophrenic to say that Microsoft "overpaid" for Facebook because they'll be getting indirect benefits. It seems to me that their overpayment should be judged on whether they'd be better off with a) the stake in FB, or b) the cash.

<comment><USER3> yup... $240M is nothing to MS... they'd probably pay that much just to -

keep google out

make the Live search the only integrated search engine of FB

make Office Live the official "share your doc/work with your friend/co-worker" app on FB... (think of how much marketing $ they'd save)

That 1.6% is probably just something they throw in to make the deal sound more reasonable... instead of just calling it kickbacks..

</comment></comment><comment><USER4> From the article: "once Facebook goes public sometime in the next year or so." That seems amazing to me but I guess with a $15B valuation it's not absurd. news.YCers, do you think Facebook will IPO anytime soon?

</comment><comment><USER5> I think that they paid too much also</comment>


This Man Could Rule The World - <AUTHOR> http://www.popsci.com/science/article/2011-10/man-could-rule-world

<comment><USER2> Interesting to see such an alarmist title attached to an article about graph theory and data mining.</comment>


Coronavirus: Thailand, monkeys go crazy due to lack of food given by tourists - <AUTHOR> https://imgur.com/gallery/LoEHpTa <comment><USER2> Soon, these clever monkeys will find that tourists are quite edible...</comment>


Previewing Android P - <AUTHOR> http://android-developers.googleblog.com/2018/03/previewing-android-p.html <comment><USER2> > _To better ensure privacy, Android P restricts access to mic, camera, and > all SensorManager sensors from apps that are idle._

Good. Now, if only permissions could be granted temporarily (e.g. "allow for this session", which auto-revokes after 5-60 minutes of not using the application), it'll be perfect.

> _We will also enable encryption of Android backups with a client-side > secret._

Is this about BackupManager? Awesome if so. (BTW, have anyone ever heard of any alternative BackupTransports, besides Google Drive?)

> _Android P also gives the user control over access to the platform 's > build.serial identifier by putting it behind the READ_PHONE_STATE > permission._

IMHO, they should've really split that in two different permissions and deprecate READ_PHONE_STATE. Device identifiers (including SIM card identities) and phone state ("someone's calling") are two different things.

<comment><USER3> I'm curious, does anyone have a list of apps that would have legitimate use of sensor data in the background?

<comment><USER4> 1\. Apps that track sensor data to determine sleep quality or other nonstandard movement calculation (and thus can't use alternative step counting API's)

2\. I'm working on an app that constantly records audio in the background and later allows me to search for things I might have said throughout the day

3\. Apps that track location long-term, like the defunct Moves app. Sure it kills the battery and is a major privacy concern so it should be opt-in, but I personally love this functionality and I'm sad there doesn't seem to be a modern equivalent (Google Maps location history is less accurate and there's no good API). Apps that record location short-term like MapMyRun do not solve the same problem.

... I'm sure there's other use cases. I kind of feel like the only developers allowed to really innovate on mobile anymore are Google (and Apple) themselves. Bad developers abusing privacy/battery/data have made it so Google/Apple have to lock down anything interesting. It's frustrating, because the current state of affairs is definitely better than the free-for-all it used to be, but I wish I had more control to override what my own device is able to do.

<comment><USER5> Sounds like all these apps can use a foreground service to do that.

Am I missing something ?

The only case I see this change not covering is apps like Cerberus. They would need to ask their users to go to settings and hide their notification. Not the nicest UX, but that's a pretty rare use case.

<comment><USER6> Define foreground/background.

If I'm using Strava and Spotify I don't want either to stop working when I switch to the user interface of the other one.

<comment><USER5> A foreground service needs to display a notification.

Not really an issue for Spotify since media apps want to display the media notification anyway.

For other apps, the idea is that foreground services should be visible to the user. One of the reasons would be this very capability to access sensors.

Another difference between foreground and background is that a background service is eligible to be killed on low memory events.

</comment></comment></comment></comment></comment></comment><comment><USER7> One thing I'd really like to see Google try and fix is upstream kernel support for the phone platforms. Right now there's no chance for an open-source project like LineageOS to be able to support all devices properly when each and every single device is stuck on an old kernel often with a bunch of important CVEs unpatched. It's as if Ubuntu needed to do independent development for each and every laptop. Without something like that buying an Android phone is a mine field of various states of broken software provided by phone manufacturers. It's like trying to buy a consumer wifi router without the knowledge that if it's supported by OpenWRT you can just ignore whatever broken software the particular manufacturer put into it and will never support going forward. The first rule of hardware is that hardware makers can't do software and Google seems to have mostly given up.

<comment><USER8> [https://source.android.com/devices/architecture/treble](https://source.android.com/devices/architecture/treble)

This is Google's attempt to do this, in a sense, but as the sibling post points out, vendors are so resistant to adoption that it's just slowing Oreo uptake. And yes, Treble just abstracts the framework from the kernel - but it requires a much more modern baseline and the common HAL interface should make kernel front-porting much easier and therefore allow manufacturers to ship less broken kernels.

<comment><USER9> Not really, it would a real attempt if it was actually enforced, but given that Nougat updates to Oreo don't require Treble certification, and the OEMs are the ones expected to deliver any kind of updates, it is pretty useless to change the current state of affairs.

<comment><USER10> I mean, Google are requiring it for all Oreo launch devices, which they all must be after the P release (you can't get certification for Nougat after P releases).

It's at least something that'll work long term.

<comment><USER9> Still if the updates aren't enforced, all we will get are Oreo devices without updates, Treble or not.

<comment><USER11> Once you have Treble you can get third-party updates (e.g. LineageOS).

<comment><USER9> That doesn't work for regular phone users.

<comment><USER12> Regular phone users don't care, which is why we're in this situation at all.

<comment><USER9> They do care on iOS.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> _Optimized Kotlin

Kotlin is a first-class language on Android, and if you haven't tried it yet, you should! We've made an enduring commitment to Kotlin in Android and continue to expand support including optimizing the performance of Kotlin code. In P you'll see the first results of this work -- we've improved several compiler optimizations, especially those that target loops, to extract better performance. We're also continuing to work in partnership with JetBrains to optimize Kotlin's generated code. You can get all of the latest Kotlin performance improvements just by keeping Android Studio's Kotlin plugin up-to- date. _

How is Google looking at Java vs Kotlin vs Dart. If Flutter is indeed a long term strategic investment by Google, then why not Kotlin ?

<comment><USER14> Flutter guys explained why Dart: at the time they were making decision they looked at bunch of languages and Dart came at the top. At the time Kotlin either didn't exist or was at extremely early stages.

Regardless of history, Kotlin is, in the end, a JVM language. If you want to ship a Kotlin app, you need to ship JVM. Getting JVM to a reasonable size is a great technical challenge not to mention Oracle made it clear what they think about other companies reimplementing "their" APIs.

(I do know about Kotlin Native but that's far, far future).

Also, Google is not a Borg or centrally planned economy with 5 year plan.

Flutter happened because a bunch of Chrome devs wanted to experiment with a better way to write mobile apps, not because Larry dictated that "Flutter is now long term strategic investment, so go and do it".

Flutter happened to be a promising technology so it's getting increased attention and funding. But it could just as well fail, like AtScript did.

<comment><USER15> Hu?

I thought the JVM isn't an issue on Android, becaue it's ingrained in the OS itself. (Dalvik/ART)

<comment><USER16> Its not but Flutter is meant to be a cross platform solution.

</comment></comment></comment></comment><comment><USER17> One of the largest issues of Android P is that the Nexus devices will never get it.

So if you as developer want to get the developer preview, the cost for that just went from 270€ (Nexus 5X) to over 759€ (Pixel 1), and the Pixel 1 isn't even available in major markets such as France.

So now a huge number of developers has no ability to test their apps on the latest version of Android.

For me, personally, this means I won't be able to support Android P, I won't be able to replicate bugs, and in worse case (as happened before once) I'll have significant bugs in my app, no way to replicate them, and no way to fix them, because the bug doesn't show in the emulator, and I have no device to test on.

Google's really shooting themselves in the foot by offering no way for developers to get an affordable testing device anymore.

<comment><USER18> What about the Android One devices like the Moto X4 or any one of the ones from Nokia that will end up getting P?

<comment><USER17> None of those devices get the developer preview. All Android One devices get updates from the manufacturer, usually several weeks after release.

A developer with a Pixel can test their app on P in spring. A developer on a Moto X4 or a Nokia can test their device in late autumn.

That's 6 months extra time to fix bugs and adjust to new APIs.

<comment><USER18> Oh ok - that sucks from a developer standpoint. Google should think of selling previous gen Pixels at lower price point.

</comment></comment></comment></comment><comment><USER19> > _As part of a larger effort to move all network traffic away from cleartext > (unencrypted HTTP) to TLS, we 're also changing the defaults for Network > Security Configuration to block all cleartext traffic._

Finally! I know Apple originally promised this for iOS9, but I believe it eventually went back on its word? Is HTTPS mandatory for all iOS apps now?

> _We will also enable encryption of Android backups with a client-side > secret._

Did they just one-up iOS11 here? This one almost seems like a shot at Apple's recent security degradation for iOS.

> _In Android P we continue to refine Doze, App Standby, and Background Limits > to further improve battery life; please be sure to try your apps with these > and send feedback._

How about you start showing me the apps that are actually draining my phone's battery, and stop allowing them to hide behind Android OS and System. Battery stats are virtually useless these days because they don't even tell you half the story.

<comment><USER20> > How about you start showing me the apps that are actually draining my > phone's battery, and stop allowing them to hide behind Android OS and > System.

Nobody is "allowed" to hide. It's simply an estimate based on a crude model. Power tracking is not an exact thing, it's guesses by the system on observed patterns with attempts to weight the blame for certain actions.

One of those categories is also the "we have no idea where the power went, there's just this big gap between our estimate and what the battery says is left, so... put it there"

<comment><USER21> To expand on this a bit, look at location services on a phone.

A "fine" location access event is a "high power" event, it takes a lot of battery and should be done as infrequently as possible.

Apps on android have the ability to say "i want to get location at least once every 30 minutes". A naive implementation would give every app that asks for this a timer, and when that timer ticks off, that app gets location information. For 5 apps, that could mean 5 times every 30 minutes!

But android is a bit "smarter", it will do it once in the 30 minute period, then give that same info to all 5 apps.

But then the question is, who caused that battery usage? None of them? All of them? Should adding a 6th app into the mix cause all of the battery usage of the other 5 to go down proportionally? Technically that 6th app is pretty much "free" in terms of actual power usage...

What about if an app says "I want location whenever you get it, but I never want to trigger it on my own", where do you allocate it's usage?

And that's just one API. Now imagine that with wakelocks, radio usage, accelerometer/gyroscope usage, etc...

<comment><USER20> Or even CPUs & GPUs also power-gate chunks of their internal features. A CPU's power draw at a given voltage & frequency is not fixed. It depends on the actual instructions being executed. Taken to the extreme you end up with things like Intel's AVX512. So how do you calculate the app's CPU power draw? If they are using highly optimized SIMD power draw is going to be much higher than that of a CPU that's constantly stalled out waiting on dependent memory loads (aka, typical Java code)

</comment></comment></comment></comment><comment><USER22> "Indoor positioning with Wi-Fi RTT" a hacker group I've worked with was working on this same problem! Glad to hear there will be an official api for it all, their work was some fascinating albeit somewhat jank stuff with building maps and marker beacons.

<comment><USER23> I've also been working on this for a couple of years. I am just about to release a new version too! [1] Glad to see Android is putting their own out there, I am excited to try it.

[1] [https://github.com/schollz/find3](https://github.com/schollz/find3)

</comment></comment><comment><USER24> Is Tensorflow Lite compatible with the Neural networks API? I don't see that it is. EDIT thanks child comment it is :)

[https://www.tensorflow.org/mobile/tflite/](https://www.tensorflow.org/mobile/tflite/)

[https://developer.android.com/ndk/guides/neuralnetworks/inde...](https://developer.android.com/ndk/guides/neuralnetworks/index.html)

<comment><USER25> Citing from [https://www.tensorflow.org/mobile/tflite/](https://www.tensorflow.org/mobile/tflite/):

"On select Android devices, the Interpreter will use the Android Neural Networks API for hardware acceleration, or default to CPU execution if none are available."

</comment></comment><comment><USER26> To me, the privacy stuff stands out the most:

"To better ensure privacy, Android P restricts access to mic, camera, and all SensorManager sensors from apps that are idle."

"Longer term we're working to bring support for per-network randomization of associated MAC addresses to the platform."

</comment><comment><USER27> > As we announced recently, Google Play will require all app updates to target > Android Oreo (targetSdkVersion 26 or higher) by November 2018

Android Oreo is only running on 1.1% of devices [1]. Will targeting the newest API prevent the app from being available for in the market for devices running Nougat or earlier or does it just limit the functionality?

[1] [https://www.androidauthority.com/android-version- distributio...](https://www.androidauthority.com/android-version- distribution-748439/)

<comment><USER28> There are two API levels for Android Apps: The minimal API level and the target API level. Perhaps it makes sense to see the target API level as the "maximum" API level the App fully understands.

For instance, Android can't enforce dynamic permissions on older Apps not designed for this, and people have been exploiting this by keeping the target API level low.

</comment></comment><comment><USER29> _Neural Networks API 1.1

We introduced the Neural Networks API in Android 8.1 to accelerate on-device machine learning on Android. In Android P we're expanding and improving this API, adding support for nine new ops -- Pad, BatchToSpaceND, SpaceToBatchND, Transpose, Strided Slice, Mean, Div, Sub, and Squeeze. If you have a Pixel 2 device, the DP1 build now includes an Qualcomm Hexagon HVX driver with acceleration for quantized models._

Can someone tell me what this will most likely be used for? I'm not familiar with the field.

<comment><USER30> Very briefly: operations like Transpose, Strided Slice, Padding, and batching are standard operations used to build Convolutional Neural Networks, which is in turn is a standard building block for a vast array of machine learning applications (eg, image recognition)

<comment><USER29> Ah, cool. So is the goal with having this tech on the phone that the phone won't need to communicate with servers to do this sort of processing? I'm struggling to think of a use case for this.

<comment><USER31> > the goal with having this tech on the phone that the phone won't need to > communicate with servers to do this sort of processing?

Yeah, that's basically it. In short, the operations listed are pretty computationally intensive on a CPU, but pretty easy to parallelize for the data structures that are commonly used in machine learning (matrices and tensors). I presume that, by creating an API, Google can abstract out these common ML operations to work on the most efficient hardware on the device, whether a GPU or custom ML hardware such as Apple's Neural Engine. In theory, this should make on-device machine learning and inference more power- efficient, and could reduce reliance on server communication, improving privacy and probably making lightweight ML applications feel faster.

<comment><USER32> > custom ML hardware

I think it's speculation still, but it seems likely that the Pixel Visual Core chip included in Pixel 2s could be a target for the API.

[https://arstechnica.com/gadgets/2017/10/google-launches- the-...](https://arstechnica.com/gadgets/2017/10/google-launches-the- android-8-1-developer-preview/)

The chip is already a target for some ML APIs.

[https://blog.google/products/pixel/pixel-visual-core- image-p...](https://blog.google/products/pixel/pixel-visual-core-image- processing-and-machine-learning-pixel-2/)

</comment></comment></comment></comment></comment><comment><USER33> Any chance the original Pixel's kernel version (3.18) got updated ? All android devices get frozen in time with the kernel they ship with due to blobs. Nothing new. Just checking if that is ever going to change.

</comment><comment><USER34> No support for 6p or 5x. WTF my phone is <2 years old.

<comment><USER35> 2 years and 5-6 Months to be fair and it will probably be exactly three years old when Android P gets released. In my opinion this is ok because they have been very upfront about the updates from the beginning (two years system updates and three years full security updates). Also backward compatibility for new apps will be there for a really long time. I would also add that it s preferable to the slow iOS situation: "No update" is better than "broken update".

<comment><USER36> If they said that in advance, the only thing that it bought them is no legal action. (Though no-one would bother getting a lwyer over something this small...)

Such a period is quite short, and maybe too short for a resourceful company like Google. They should be able to do better; I'm sure the "old" hardware can manage. (Else you've got a problem with your software.)

</comment></comment></comment><comment><USER37> Does Google release bugs that were fixed in each release? Im still waiting to hear if they fixed the MS Exchange syncing using Gmail that was broken in Android O. It's near impossible to tell what is working or broken between releases.

<comment><USER38> I've heard good things about nine [0] if you are working with MS Exchange. Haven't used it personally though.

[0] [https://play.google.com/store/apps/details?id=com.ninefolder...](https://play.google.com/store/apps/details?id=com.ninefolders.hd3)

</comment></comment><comment><USER39> > [W]ith Android P we're starting a gradual process to restrict access to > selected non-SDK interfaces, asking developers -- including app teams inside > Google -- to use the public equivalents instead. In cases where there is no > public equivalent for your use-case, please let us know -- we want to make > sure that this process is as smooth as possible for developers, so we'll use > your feedback to ensure the initial rollout only affects APIs where > developers can easily migrate to public alternatives.

What's the situation with private API use on Android? What can you do with private API? Will you be rejected from the Play Store if you use it?

<comment><USER40> Acording to [https://android- developers.googleblog.com/2018/02/improving-...](https://android- developers.googleblog.com/2018/02/improving-stability-by-reducing-usage.html) it will simply not be possible to access API you are not supposed to touch. Trying it will result in NoSuchFieldException/NoSuchMethodException.

<comment><USER39> > Starting in the next release of Android, some non-SDK methods and fields > will be restricted so that you cannot access them -- either directly, via > reflection, or JNI. If you try, you can see errors such as > NoSuchFieldException or NoSuchMethodException.

Yes, how is this done? Using SecurityManager or something similar?

<comment><USER20> In the runtime itself: [https://android- review.googlesource.com/c/platform/art/+/580...](https://android- review.googlesource.com/c/platform/art/+/580003/10)

CL is abandoned but it appears to have just be split up into smaller changes, so that should still give a good idea of the approach being used.

</comment></comment></comment></comment><comment><USER41> clicking through the neural networks api:

ANEURALNETWORKS_RELU6 The output is calculated using this formula: output = min(6, max(0, input))

is that a joke/easter-egg?

also: is there an official java wrapper for the neural networks ndk api?

<comment><USER42> It's in TensorFlow: [https://www.tensorflow.org/api_docs/python/tf/nn/relu6](https://www.tensorflow.org/api_docs/python/tf/nn/relu6)

And even points to a paper: [http://www.cs.utoronto.ca/~kriz/conv- cifar10-aug2010.pdf](http://www.cs.utoronto.ca/~kriz/conv-cifar10-aug2010.pdf)

I'm not sure why they didn't make it a variable maximum though, or what the advantage is over multiplying a sigmoid by 6.

<comment><USER43> There's an explanation here:

[https://stackoverflow.com/questions/47220595/why-the-6-in- re...](https://stackoverflow.com/questions/47220595/why-the-6-in-relu6)

It's an arbitrary value, but 6 fits best into 8 bits.

</comment></comment></comment><comment><USER44> What I want to know is what they plan to call this version of Android. Android Pez, Android Peeps, Android Peppermint, Android Pudding, Android Pie, Android ummm im out.

<comment><USER45> Android Popcorn?

<comment><USER46> It has to be sugar-based. Probably Pumpkin Pie or Popsicle.

</comment></comment></comment><comment><USER47> Wait, the clock will be in the top left? That spot is for temporary items like notifications, not something permanent like the clock!

</comment><comment><USER48> I still see the lack of security features as in iOS a penalty.

I would prefer less eye-candy over a better security. And I hope that more middle-high end phones might profit from the Go edition of Android.

I still find surprising that a few vendors (Maybe only Nokia and Lenovo?) are selling bare-version of Android.

</comment><comment><USER49> Progressive Web Apps still have Chrome icon on them, and nowhere to be seen in Installed Apps list. Is Google backing up on PWAs?

<comment><USER50> This sounds like a bookmark, not a PWA. I have several PWAs on my Pixel 2, all of which appear without the Chrome icon in my app drawer.

<comment><USER17> Android has two ways of PWAs currently, either as a more complicated bookmark (with the icon) or with Chrome generating an APK on the fly, Google signing it on the fly, and it then being installed.

Obviously, this is only available to Chrome, and not to any third-party browser (the EU antitrust commission is gonna love this).

</comment></comment></comment><comment><USER51> Seems that with every release, Android falls further and further behind iOS. Every iOS release is jam-packed with huge new features. One of the "top" features of this release is... a notch?

Do we still have to deal with 4+ messaging apps?

And to throw salt in the wound, 90% of users won't see this until 2020. :/

<comment><USER39> Behind in what way? Android still leads in many areas, such as how it handles notifications.

<comment><USER52> Yup. Notifications in Android - actually useful. Notifications in iPhone - good luck. You'd better not be using your phone, and you better not have two notifications you want to receive. Otherwise they just disappear. But iPhone's notification dots >>> Oreo's.

The Android keyboard (Gboard) is generally better, and emoji specifically. I never have problems finding the emoji I want on Android (because I can search for it), but on my iPhone I would sometimes if I'm lucky get a suggestion that if I'm lucky I would be able to see (or else it might just be ...). Otherwise it's just search through a giant list and hope my idea of where it belongs is the same as the developers'.

</comment></comment></comment><comment><USER53> I think the writing is on the wall for Google's Android. There is some analysis that Android, from a business perspective, did not work out all that well for Google. My best guess as to the future state of things:

1) Pixels move to Fuchsia, native apps are in Dart/Flutter, compatibility layer for Android. Fuchsia becomes a distinguishing feature of Googles hardware, and allows Google to differentiate vs Android competitors.

2) Google continues to support Android, but only as it affects their business interests (as a funnel for search).

3) Google migrates some service level functionality away from Android and Pixels become a first-class citizen in Google's ecosystem.

If you look at Google's moves over the past 5 or so years, you can seem them try to mitigate the fact that Samsung was basically the biggest winner of Google opening up Android (Motorola Mobility acquisition, Pixels, Project Fi).

Google sees that voice is unable to be monetized (from an advertising perspective), and is attempting to replicate Apple's strategy by creating a new revenue stream from hardware. This has the added benefit of capturing the most profitable users from Apple. It is a very big bet, and I would not want to be going up against Apple in a mature market. It will be interesting to see how it plays out!

Ben Thompson has a pretty great take on these large shifts within Google [0].

[0] - [https://stratechery.com/2016/google-and-the-limits-of- strate...](https://stratechery.com/2016/google-and-the-limits-of-strategy/)

<comment><USER54> For one thing, Google's inability to monetize Android better is it's own bad execution. There's nothing inherently bad about the Android platform, from a monetization standpoint.

Google's pixel & nexus phones have never dominated the market - and for good reason - they're not the best. If Google can get their hardware act together, they can see a windfall in revenues/profit.

<comment><USER55> I think with the Pixels, Google is at least making an effort at having the best hardware. They still have some things to figure out regarding marketing, logistics, keeping design language consistent, etc, but at least for now, they seem to be working on it.</comment></comment></comment>


Ask YC: Pitching your ideas here on YC news a good idea? - <AUTHOR>

I hope to get some feedback on an idea that's keeping me awake at night but it's just an idea now, no code, no prototype nothing but just an url and name.<p>So my question is - would it be ok to pitch my idea here and get some feedback and just to know that I'm not alone. I'm sure you have heard that pitching your idea to family and friends but this idea of mine needs feedback from hackers <comment><USER2> You'd be better off turning the idea into a prototype and asking for advice then. The community here seems pretty good every time a new site is reviewed.

<comment><AUTHOR> Just to give more context, this idea is a social community site, think YC news but its not the same. I know that I would love that such a site exists but I want to know that I'm not alone without having to spend time knocking out a prototype.

<comment><USER2> Ah, I get it. You want someone here to build it for you don't you?

Well, I think you're going to be disappointed.

</comment></comment></comment><comment><USER3> I'm going to go with find some hacker friends, and you solve the problem.

Ok, that was facetious. :) But still, I'm sure if you look you can find some hacker friends you trust, not only to not rip off your idea, but also to give you some pretty good feedback. Maybe some other entrepreneurs you know, a college professor, etc.

</comment><comment><AUTHOR> but again the fear of someone copying my idea by posting on a public forum creeps in.. ;(

<comment><USER4> I'm reading a good book at the moment - _Growing a Business_ by Paul Hawken. He has this to say about ideas:

"The idea itself is just the tip of the iceberg. The iceberg is your life. Don't worry about anyone stealing your idea, because they can't steal your life."

That's resonated a lot with my experience so far. I've had to make literally _hundreds_ of decisions, from tiny software architecture ones to big ones like who are we serving and what will our product let people do. I suspect that in mature businesses, that'll grow into thousands or tens of thousands. Each one is an expression of who you are as a founder. Even if you wrote down everything you know about your business and handed it to a competitor, they wouldn't be able to replicate what you're doing, because of all the unspoken assumptions behind your decision-making.

This is perhaps why it's so hard to manage employees before you've achieved product-market fit. (I worked as an employee in two other startups, both before product-market fit, before starting my own.) If your competitors don't get it, there's no reason your employees will be able to either, unless you can _show_ them what your doing and how it impacts people's lives.</comment></comment>


Nim 1.2 - <AUTHOR> https://nim-lang.org/blog/2020/04/03/version-120-released.html <comment><USER2> I've been doing the nim track on exercism.io (no affiliation, just a user) for the last two weeks. The mentors on the track have been fantastic. If you're looking for a "solve a problem and get some external feedback" approach to learning the language it's pretty good.

<comment><USER3> Personally I stopped using exercism, when it started to require me to work for Google for free and would not let me log in, if I did not. It's not an ethical platform, unfortunately.

<comment><USER4> What do you mean by 'work for Google for free?' I don't see that being required anywhere on the site.

<comment><USER5> Probably it is a reference to the reCapcha hell Google may drop you into if you are deemed "suspicious"

<comment><USER4> ah ok. I never saw those captcha things as work per say, but yeah I guess they are. Free work for some model data somewhere.

</comment></comment></comment></comment></comment><comment><USER6> Dup is very interesting to me. Does that mean that in Nim all functions will be impure by default, and that it's considered idiomatic to modify the input? I guess it's nice that they're trying to make behavior consistent. It just seems like the opposite of the recent directions I've seen other languages take.

<comment><USER7> Mutating in place is often times faster and is more straightforward.

I do feel Nim embraces mutation more than other recent languages.

<comment><USER8> Yeah, the 'discard' keyword is a pretty cool way to note that you're using a procedure only for its side effects.

</comment></comment></comment><comment><USER9> If you would like to see some simple to parse Nim code and get a feel for what a "1 month of experience during weekends" Nim looks like, check out my project:

[https://github.com/sergiotapia/torrentinim](https://github.com/sergiotapia/torrentinim)

Nim is a very interesting language, with a lot of upsides. It just needs that killer framework to get the ball rolling and allow devs to solve business needs quickly. Once that's done I think Nim will grow a lot! Tiny binaries, static binaries, fast, low memory usage, macros, compiles to C.

<comment><USER10> It uses a rather primitive garbage-collector though, right?

<comment><USER11> It really doesn't! It's GC story is pretty great, because you can choose out of several GC's, one of them being good for real-time systems: [https://nim- lang.org/docs/gc.html](https://nim-lang.org/docs/gc.html)

Recent versions also use this fancy thing: [http://www.gii.upv.es/tlsf/](http://www.gii.upv.es/tlsf/)

<comment><USER10> 'TLSF' sounds very interesting, I'll have to keep an eye on that project. What are the reference-counting options for though, given the absence of weak references? Under what circumstances is it acceptable to permit memory-leaks in case of cycles? Short-lived processes (i.e. arena-based memory management)?

When I say 'primitive GC', I mean Boehm, which is obviously decades behind the state of the art, but easy to get off the ground. GNU Guile uses it, for instance. Serious garbage collectors are tremendously complex, and are something less popular languages unfortunately tend to lack. I believe even D is miles behind Java.

Can't say I know much about Go's GC.

 _Edit_ Oops I misread, TLSF isn't a GC, it's an allocator. It sounds then like Nim doesn't have a proper real-time solution, does it? _useRealtimeGC_ is actually a leaky reference-counting system?

<comment><USER12> Did you see the parent comments about the new -gc:arc? It's suitable for hard real time. [https://www.youtube.com/watch?v=yA32Wxl59wo](https://www.youtube.com/watch?v=yA32Wxl59wo)

<comment><USER10> > Reference cycles cause memory leaks, beware.

It isn't acceptable to just permit memory-leaks in case of cycles. There's no way we'd ever see something like that in a serious JVM.

Unless there's some serious machinery to provide assurances against reference cycles, of course. Which sounds like an interesting research project, come to think of it.

<comment><USER13> > It isn't acceptable to just permit memory-leaks in case of cycles.

That's only in the new --gc:arc which is still somewhat experimental. The old gc, --gc:markandsweep IIRC, does detect cycles, and has a deadline schedule (i.e. you can tell it "I now have 5ms, collect as much as you can"); But it has per-thread heaps, which means passing data between threads often entails a copy. You also have --gc:boehm (no cycles, shared heap), and --gc:none (no gc, you should take care of freeing memory yourself).

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> The collect macro is awesome, and way more idiomatic Nim than list comprehensions. Nim continues to hit the sweet spot between performance and developer ergonomics.

</comment><comment><USER15> Nim might be great. But how can a great language get traction if nobody big is behind it?

Java and Python are being pushed by Silicon Valley and universities, Go is being pushed by Google, Kotlin is being pushed by Google, C# is backed by Microsoft and some big companies.

Who can help Nim, or Crystal, or Rust or other new language?

I look at many of them from time to time, see interesting developments, see exciting things but I refuse to learn the languages, their ecosystem and frameworks from the fear I have I will lose lots of valuable time since I might not be able to earn my living using them.

<comment><USER16> Surprisingly, a lot of large companies use Rust in-house. I work at Nando's, one of our biggest systems is in Rust, and we're a chicken restaurant business, so it's not just limited to bleeding-edge SV companies.

Hoping we can open-source some of this stuff in the near future too to kind of show the world that Rust is ready.

<comment><USER17> Please tell us more - I'd be really interested to hear what system it is and to learn about your experiences.

</comment></comment></comment><comment><USER18> By far my favourite feature of this release, dark mode in docs: [https://nim- lang.org/docs/lib.html](https://nim-lang.org/docs/lib.html)

<comment><USER7> I feel like dark mode is a sign that people care. I think it's a user feature that is easy to do, but not done often. Mostly done by people who care. It brings so much polish to the experience.

<comment><USER19> What if I care specficially not to add a dark mode?

<comment> yjftsjthsd-h Why exactly would caring about users lead you to omit something that makes things nicer for them?

<comment><USER20> Maybe the same reason why others choose to omit light modes, despite that being my preference.

</comment></comment></comment></comment></comment><comment><USER21> I really with more people used NIM for web development. It really seems like the best of all worlds (e.g. perf, developer ergonomics, productivity, etc).

<comment><USER22> How would the dynamism and expressivity of something like Django port to Nim? I love the whole declarative paradigm of the Django forms and models API. Is Nim good at this kind of DSL-ish plasticity?

<comment><USER23> Extremely well I'd say. Nim has a very powerful macro system, and DSLs are very common across various modules. Haven't used Django myself, but something like Jester ([https://github.com/dom96/jester](https://github.com/dom96/jester)) or Karax ([https://github.com/pragmagic/karax](https://github.com/pragmagic/karax)) is a good place to start if you want to do web development in Nim.

</comment></comment></comment><comment><USER24> > If you were relying on some edge case and/or buggy behaviour which is now > fixed, try if --useVersion:1.0 gives you back the results you expect to see. > If that doesn't work and you need the old behaviour, please open an issue in > our bug tracker and we will try to make it work in future bugfix releases

So useVersion doesn't simply checkout the old codebase, but they still promise to maintain all prior version's bugs? Seems like a losing battle to me... why not just tell people relying on version 1.0 behaviour to use version 1.0 and create tooling to make sure switching between versions is easy (a. la. nvm)?

<comment><USER25> My impression was that using "choosenim" switching between versions is easy already, but I might be missing something.

<comment><USER12> choosenim is still supported :-)

The idea is more like the gcc -std flag (gcc -std=gnu++11 for example). to emulate certain versions to ease upgrading.

<comment><USER24> Do you think the gcc -std flag would exist if every distribution of gcc included a command to easily download alternate versions and swap them out depending on project configuration? -std seems more like a bandaid around a difficult install/config than a feature, in my opinion.

Obviously nim is free to make implement whatever options they want, but it seems to me like every second spent triaging/fixing/etc bugs about not properly maintaining broken things (not to mention the end user time spent experiencing them and debugging them!) is time that could be better spent improving the language.

<comment><USER26> Yes, the -std flag would definitely still exist: the thing being changed by that flag is a lot of stuff in the parser, some stuff in the standard library, and some semantics bits further towards the backend, but at some point the versions converge and go through the same optimisation pipeline. A pipeline that definitely has seen improvements in more recent versions, so it's totally worth it to use a new compiler with an old language standard on old code: it might very well produce a faster executable. Just using an older compiler would also revert back to the old performance.

Additionally, a C/C++ compiler in an older standard mode would disable certain features, of course, but not completely: it's still able to give diagnistics in the vein of "this thing isn't valid with the current version setting, but it _would_ be valid in C++17", for example. That's useful to a programmer.

<comment><USER27> Also useful in the other direction: your code works now, but in C++17 that's a keyword so you'll have to rename it.

</comment></comment></comment></comment></comment></comment><comment><USER28> Very bullish on Nim. It's Python with C-level performance.

</comment><comment><USER29> I am currently working on a tiny game in nim using Raylib. I had some initial friction with Nim, but i like using the language now. You'll do well to stop trying to use Nim as an oops language and just use it as a better C. The language syntax is clean, and the std lib has all that I need.

One bit which I still hate is simply how imports work in Nim. My project pretty much has a header like file containing function and variable signatures which can be called from other files.

For someone used to modern languages, it just feels so archaic.

But overall it is still a fantastic language and I am excited to try the ARC gc

<comment><USER18> > One bit which I still hate is simply how imports work in Nim. My project > pretty much has a header like file containing function and variable > signatures which can be called from other files.

You mean how `import` works or are you using `include`? If the latter then I would strongly discourage you from using it.

As for the former, you can use `from module import nil` everywhere if you really want.

</comment></comment><comment><USER30> As someone who's heard of Nim, can someone who's used it tell me a little bit more about its benefits and how it compares to other common languages like JavaScript, Python, etc?

<comment><USER12> The major features are: Python like syntax, Lisp like macro system, potential for C like performance (YMMV of course).

This is my person opinion here: Nim is part of the "new generation of system programming languages" from the last decade or so. Some other examples in this category include Zig, D lang, Go lang, Swift, Rust, etc...

The whole idea is to provide "modern high level" language features and ergonomics while still producing efficient low level code.

For Pythonistas, The familiar syntax is attractive to Python programmers looking for a more performant language (data science is a prime example.)

Nim is also attractive to lispers looking to move to a more traditional Algol or C like language while still keeping much of power and flexibility that they are used to from macros.

</comment></comment><comment><USER31> Among other great additions, I like the addition of compilesettings [1], which will give programs more visibility into how they were compiled.

[1] [https://nim-lang.org/docs/compilesettings.html](https://nim- lang.org/docs/compilesettings.html)

</comment><comment><USER32> hope they nim developers, port a lot of python data science tools e.g pandas, numpy etc so they can increase adoption in the language. Julia is supposed to fill that space, but feel strongly nim is better positioned

<comment><USER33> Out of curiosity, what do you feel makes Nim better positioned in this space?

<comment><USER12> As I said in another comment, the familiar python like syntax, while having the potential for much better performance.

Many data scientists are familiar with Python. They can write similar code and will run much faster by default (or with very little tweaking).

Then, if that's not fast enough, The language is positioned such that you can optimize the code to a much higher degree than you can with Python.

I'm not saying that Python code can't be optimized, but there is a limit to the speed of python code even with optimization. At some point you have to drop down to a C extension (what Numpy, Pandas, etc... does) and then you are just writing glue code in Python to drive the C. You could also use one of the Python optimized compilers, but that has limits and edge cases as well. There is "developer friction" there.

In Nim you can just have the whole program in one language. The program can be optimized to the same level as optimized C code with no special tools. This is much less friction.

What's missing is the libraries. But that will come with time.

<comment><USER33> I guess I'm asking what you think Nim offers that julia doesn't here. Is it just syntax?

</comment></comment></comment></comment><comment><USER34> Very excited to see gc:arc make it into stable.

<comment><USER9> For the layman Nim dev, would you say "always use gc:arc" is a safe bet?

<comment><USER18> Definitely not. --gc:arc is still experimental.

<comment><USER7> I would still try out --gc:arc on your programs. For mine it just runs without issue. But keep in mind if you do have issues you might have to create a bug report and wait for a fix. You would not reply on --gc:arc working. But it's fun to play around with. It's real now.

</comment></comment></comment></comment><comment><USER35> Irrelevant, but I spent the entire day reading this headline as NVim, i.e. Neovim.

These comments make a lot more sense now.

</comment><comment><USER36> Oooo, wow collect looks so much cleaner. I can't wait to get home and play with it!

<comment><USER37> > I can't wait to get home and play with it

A. Where are you that you are not already at home??

And B. I wonder how many people are using nim at work, and what sort of workplaces that might be?

<comment><USER38> B.

[https://github.com/nim-lang/Nim/wiki/Companies-using- Nim](https://github.com/nim-lang/Nim/wiki/Companies-using-Nim)

</comment></comment></comment><comment><USER39> Does Nim have an ORM or querybuilder as good as SQLAlchemy yet?

<comment><USER40> There is [Norm]([https://github.com/moigagoo/norm](https://github.com/moigagoo/norm)) that goes in that direction. [ormin]([https://github.com/araq/ormin](https://github.com/araq/ormin)) takes a different twist

</comment></comment><comment><USER41> Nice!</comment>


Leaked screenshots of native Google Maps (Alpha) for iOS 6 - <AUTHOR> http://benguild.com/post/33553036078/leaked-screenshots-of-native-google-maps-alpha-for <comment><USER2> Maybe I'm dumb, but I can't tell if this is a joke or not. These blurry, zoomed-in photos look like they could be anything. This is either really lame or proof that I'm an idiot.

<comment><USER3> Pretty sure it's some guy fucking with the world to advertise his own app. He doesn't even HINT at where the photos came from!

<comment><USER4> I threw a link up to get some extra feedback/downloads on the App. — This isn't a hoax.

</comment></comment></comment><comment><USER5> I feel that "two-finger rotation to any angle" is bad idea, if it can't be turned off.

The Google Earth iOS app has this feature and I hate the fact that every time I zoom in or out, I move slightly away from the up=north orientation. After a few minutes, my map view is upside down and I can't orient myself anymore.

I hope they make it optional and turn it off by default.

<comment><USER6> If it's anything like Google Maps on Android, there's a small threshold before it snaps out of North/up alignment. And even then, you can tap the compass and it'll reset the rotation.

<comment><USER7> Actually iOS 6's Maps app behaves exactly like that. The threshold is even larger than Android's (at least that's how it behaves on iPad, I haven't upgraded my iPhone 4 yet).

</comment></comment></comment><comment><USER8> Yet again today Apple Maps was a horrible experience for me (Chiswick Park Tube station does not exist!); every time something like this happens to me the amount I'm willing to pay Google for an iOS maps app increases. Would happily pay £10.

</comment><comment><USER9> Why is this at the top of hacker news?

It makes me sad that some more useful story was knocked off the front page for this pointless, unsubstantiated post.

</comment><comment><USER10> Will Apple accept it? As I remember (not being an app store developer I don't really know), apps that duplicate built-in functionality are not allowed.

<comment><USER11> This rule has been removed quite a while ago. How else would you think that we would see Google Chrome on iOS. Or Sparrow (duplicates Mail.app)

In fact, in their apology for the maps disaster, apple specifically recommended downloading map apps from other vendors (and they even feature a alternative maps category on the AppStore ATM).

As such I would believe it's highly likely that they would accept a Google Maps app.

<comment><USER12> There is still a rule in the guidelines that mentions "Apps that duplicate Apps already in the App Store" though it doesn't specify whether those apps are Apple's own, or any other developer (in fact, comically, the rule lists "fart apps" as an example). They don't really say how many apps of a certain type will be accepted into the app store before this rule goes into affect.

They also have rules against "Apps that look similar to Apps bundled on the iPhone", "user interfaces that mimic any iPod interface" and "Apps which appear confusingly similar to an existing Apple product"

I think basically the guidelines are written to allow Apple to reject apps with it's own discretion when it doesn't want them in the store. Whether that be for business reasons or otherwise. In the case of map apps, they seem to be rather lenient. I wonder if that's more of a grandfather type situation because they didn't have their own map app before iOS6.

</comment></comment></comment><comment><USER13> not much to go on there. i am holding off on iPhone5 until I can see google maps on the device. If I can't get turn-by-turn directions while I'm driving, then I will not get an iPhone.

<comment><USER14> The iPhone 5 does have turn by turn navigation.

<comment><USER15> As does the iPhone 4... It's a feature of iOS 6.

<comment><USER16> iPhone 4 doesn't have turn by turn, only iPhone 4S and iPhone 5 has that feature

<comment><USER17> iPhone 4 is missing the 3D flyover, but it most definitely has turn-by-turn.

<comment><USER18> No. Source: <http://www.apple.com/ios/maps/> (also, the iPhone 4 sitting two feet from me).

Maps has had driving directions since 1.0, but only the latest and greatest maps app on the 4S and 5 (and the latest two iPads) do turn by turn.

</comment></comment></comment></comment></comment></comment><comment><USER19> Wow this is uh, sure exciting.</comment>


JPEG Committee releases a call for evidence for image compression based on AI - <AUTHOR> https://jpeg.org/items/20200217_press.html <comment><USER2> _JPEG XL

The JPEG XL Image Coding System (ISO/IEC 18181) has produced an open source reference implementation available on the JPEG XL Gitlab repository. The software is available under Apache 2, which includes a royalty-free patent grant. Speed tests indicate the multithreaded encoder and decoder outperforms libjpeg-turbo. Independent subjective and objective evaluation experiments have indicated competitive performance with commonly used image coding solutions while offering new functionalities such as lossless transcoding from legacy JPEG format to JPEG XL. The standardization process has reached the Draft International Standard stage._

That to me is the biggest news. I remember reading a presentation where it had even better quality at medium bitrate than AVIF. Since JPEG does not belong to Google or Apple, hopefully it would be a format easier to swallow from both parties.

<comment><USER3> Half the technology in JPEG XL is from Google but hopefully people won't get petty about that.

A bigger problem is that various companies just did a lot of work to adopt HEIF so they're not going to be eager to churn onto JPEG XL. Generally people wait 5-10 years before they're open to upgrading.

<comment><USER2> >Half the technology in JPEG XL is from Google

Yes but it is submitted as an open standard to an Organisation that doesn't run or belong to Google.

Is HEIF used anywhere other than on Apple devices?

<comment><USER4> Canon, Android.

<comment><USER5> Windows 10 has support as well.

<comment><USER2> Both Android and Windows does not support HEIF by default.

</comment></comment></comment></comment></comment></comment><comment><USER6> I find the idea of AI-based image compression rather fascinating. In theory it seems like a great fit for AI; "perceived quality" is exactly the sort of fuzzy metric AI tends to be good at optimizing for, and a compression algorithm possessing an understanding of high-level visual features like shapes, lighting, etc seems like it would have a lot of potential.

Taken to the extreme, a sufficiently advanced AI compression system could theoretically end up storing representations of high-level features like faces in the compressed data; which could lead to some really _bizarre_ looking compression artifacts when the system breaks down.

<comment><USER7> > Taken to the extreme, a sufficiently advanced AI compression system could > theoretically end up storing representations of high-level features like > faces in the compressed data

Or, you could have a compression system created specifically for photographic images (as opposed to a "general compressor" like LZ77), where these high- level features are part of the (de)compressor itself.

Now, _lossy_ domain-specific compressors are pretty common; one good example is audio "voice codecs" for telecom, in which every snippet of audio is encoded as a phoneme-like symbol, such that noise comes out the other end as a gobbledygook that sounds a lot like words.

But much more interesting to me is a _lossless_ domain-specific compressor, which I'm not aware of any examples of. (Please tell me if about some if you know them!) In such a compressor, the input would be "rebased" against the model, such that the output looks like an instruction stream ala "start with [this synthesized template with these parameters]; and then add point- modifications {A, B, C, ...} to get from there back to the original input." So inputs that were more like something it "understood" would compress well (i.e. just be described by a template) while inputs that were less-well-understood wouldn't get much from the procedural-generation phase, and would end up being specified entirely as point-corrections, and so not really compress at all.

<comment><USER8> It's pretty easy to build a lossless learned encoder. Encode the image with your model, then apply a lossless encoding to the error. You can also include a measure of the entropy of the error in your model's loss function.

The model should make the errors small, and including the entropy measure of the error in the loss function means that the model produces "cheaper to correct" errors.

A nice keyword on this front is "bits back argument".

<comment><USER9> That's a nice theory, but what if your ML encoder uses textures to encode perceptual equivalence efficiently that's actually got very high errors measured by pixel? It seems to me the best ML-driven encoders would work by inferring higher abstraction details from the image in ways which are hard to get back to lossless - that there's an intrinsic tension there.

<comment><USER10> Then choose a different encoder, or add another layer to shift/correct the texture.

</comment></comment></comment></comment></comment><comment><USER11> sure, what can go wrong?

[https://www.zdnet.com/article/xerox-scanners-alter- numbers-i...](https://www.zdnet.com/article/xerox-scanners-alter-numbers-in- scanned-documents/)

<comment><USER12> That still baffles me to this day.

\--Edit-- I think there are differences between the case of using this for compression and how Xerox implemented (which they _claim_ was due to compression).

It can be argued that most advanced codecs of today already handle compression via very complex and advanced heuristics already comparable to what a lot of people would confuse for AI and/or ML today, so I think it's not as spooky as it may sound at first.

The Xerox implementation actually changed values on the page from one to another innocuously. I would hope that the AI being talked about is not "This 6 looks more like it should be an 8, so I'm going to put one there upon decode" and more like, "this block or unit of the image has these characteristics, and theses methods work very well to reproduce these characteristics when next to these other blocks..." etc.

But that's the best way I can phrase it.

</comment></comment><comment><USER13> > Fake news, copyright violations, media forensics, privacy and security are > emerging challenges in digital media. JPEG has determined that blockchain > and distributed ledger technologies (DLT) have great potential as a > technology component to address these challenges in transparent and > trustable media transactions.

You've gotta be kidding me.

</comment><comment><AUTHOR> Highlights:

\- Call for Evidence launched for AI-based image codecs

\- Call for Evidence launched for point cloud codecs

\- Next-gen image codec JPEG XL reaches Draft International Standard stage

\- Light-weight JPEG XS codec is looking at compression of camera raws

</comment><comment><USER14> See also "Hutter Prize" [http://www.hutter1.net/prize/index.htm](http://www.hutter1.net/prize/index.htm) [https://en.wikipedia.org/wiki/Hutter_Prize](https://en.wikipedia.org/wiki/Hutter_Prize)

</comment><comment><USER15> I think we already have the tools to do this, but there might be issues with fidelity.

First: Use AI to generate the text description of an image. [http://homepages.inf.ed.ac.uk/keller/publications/jair16.pdf](http://homepages.inf.ed.ac.uk/keller/publications/jair16.pdf) [https://www.captionbot.ai/](https://www.captionbot.ai/)

Second: Use AI to generate an image from the text description. [https://news.developer.nvidia.com/ai-model-can-generate- imag...](https://news.developer.nvidia.com/ai-model-can-generate-images-from- natural-language-descriptions/)

<comment><USER16> What do you mean by us AI? Do you mean a Neural Network or something else, I find the use of the broad term AI a bit weird, there is lots of stuff that can fit under the AI category.

</comment></comment><comment><USER17> I was instantly reminded of this "pineapple":

[https://twitter.com/cassmarketos/status/1229473344480673792?...](https://twitter.com/cassmarketos/status/1229473344480673792?s=21)

Of course, an actual working compression algorithm is quite likely. I recall that recently someone was upscaling and colorizing ancient movie reels to modern standards, and there is plenty of low-hanging fruit in fine-tuning parameters to suit specific images, so I actually look forward to this.

I just hope they don't name it JPEG2020, JPEG2000 was a bit of a dud.

<comment><USER18> Jpeg2000 was a dud because of licensing and patents, not having a year in the name.

<comment><USER19> ...and performance (or lack thereof) --- AFAIK the baseline J2K was always implementable freely (similar to the situation with JPEG; arithmetic compression was specified but largely unimplemented due to patents, while baseline JPEG was supposed to be free), but the abysmal performance relative to JPEG for a minor increase in compression efficiency, along with the surprising amount of complexity in the spec, made it a poor choice.

There are lots of scanned ebooks on archive.org that use J2K compression, and the sluggishness when turning pages is extremely noticeable compared to others which use normal JPEG.

</comment></comment></comment><comment><USER20> I know this is more relevant for movies, but it would be rather cool to have a movie compressed for a year of computation, and deliverable in about 100MB, then let it decompress for a few hours on your computer back to its original 9GB size.

<comment> 0-_-0 How big is the market for that vs streaming 9 GB on demand?

</comment></comment><comment><USER21> I wouldn't be surprised if you could make an AI that knows something about what scenes look like, and something about what JPEG artifacts look like that and could clean up existing JPEG images.

<comment><USER7> The JPEG artifact "look" comes from the fact that JPEG data is essentially just a matrix of point-samples (like any other raster format) which happen to carry a gradient and angle, rather than a solid color. So, at a low sampling resolution, you see weird discontinuities where one sample gradient (gradel?) sharply transitions to another sample gradient, with a discontinuity in either color or angle.

An AI that "fixes" JPEG artifacts would just be a regular upscaling/supersampling AI—just one trained on JPEG sample-matrices instead of BMP sample-matrices, so that it can take advantage of the extra information each JPEG sample-point carries.

<comment><USER22> My understanding of lossy compression like JPEG may be limited, but wouldn't this ML network be guessing the eigenvectors to put back into a matrix that were removed because they weren't dominant enough?

<comment><USER23> Unless I'm missing a connection you've made, no.

You might have been exposed to the singular-value decomposition to compress a matrix, and representing an image as a matrix e.g. [1].

JPEG encoding is about transforming the signal into a frequency domain (think FFTs) where it is less detrimental to throw away information.

If there is a connection to what you're saying, I expect you should try to make some statement about the eigenvalues of the DCT matrix [2]

[1] [http://www.math.utah.edu/~goller/F15_M2270/BradyMathews_SVDI...](http://www.math.utah.edu/~goller/F15_M2270/BradyMathews_SVDImage.pdf)

[2] [https://math.stackexchange.com/questions/962533/why-does- the...](https://math.stackexchange.com/questions/962533/why-does-the-discrete- cosine-transform-as-matrix-multiplication-work-this-way)

<comment><USER24> I interpreted the GP as saying that the AI could try to infer what the DCT coefficients had been prior to quantization.

I don't know enough about JPEG or about AI to know whether that would be doable.

</comment></comment></comment></comment></comment><comment><USER25> Does anyone have an estimate of how small an AI-compressed image will be compared to an image compressed using traditional compression algorithms? On average of course, and controlling for image quality.

<comment> 0-_-0 As an example from 29 Feb 2016, for lossless compression you can go from 8 to 3 bits per color according to Table 5 here: [https://arxiv.org/abs/1601.06759](https://arxiv.org/abs/1601.06759)

</comment></comment><comment><USER26> I've been in the C#, Java, and Rust world for so long that every time I come across C/C++ library source it _cracks me up_ that an image compressor has to have functions to redefine basic concepts like memory allocation, assertions, and threading.

Reminds me of a "lightweight" zip compression library that I recently used that was literally 98% overhead and 2% actual compression code. It had its own definitions of _everything_ : integers, integer properties, memory allocation, streams (as in sequences of memory blocks, not even real I/O!), error handling, progress notifications, etc... Pages and pages of conditional macros and compiler-specific hacks. Just to call a single a function that took an array and returned an array. Ridiculous.

[https://gitlab.com/wg1/jpeg- xl/-/blob/master/include/jpegxl/...](https://gitlab.com/wg1/jpeg- xl/-/blob/master/include/jpegxl/memory_manager.h)

[https://gitlab.com/wg1/jpeg- xl/-/blob/master/include/jpegxl/...](https://gitlab.com/wg1/jpeg- xl/-/blob/master/include/jpegxl/parallel_runner.h)

[https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/compil...](https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/compiler_specific.h)

[https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/os_spe...](https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/os_specific.h)

[https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/arch_s...](https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/arch_specific.h)

That last one is trying to work out the NUMA topology in a portable way... good luck with that! That's not something I expected from a JPEG library. Like memory management, they'd actually be better off requesting thread-management function pointers from the hosting application. Otherwise, this would not be a "good citizen" in constrained environments such as embedded in a web server or database engine.

Random examples of silliness from just this one file:

They ignore the first 2 cores on 3+ core systems: [https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/os_spe...](https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/os_specific.cc#L266)

They'll be limited max 64 threads ( _Half_ the threads on the larger single- socket AMD EPYC 2 CPUs!): [https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/os_spe...](https://gitlab.com/wg1/jpeg- xl/-/blob/master/jxl/base/os_specific.cc#L211) because they're not using the Processor Group Aware API: [https://docs.microsoft.com/en- us/windows/win32/procthread/pr...](https://docs.microsoft.com/en- us/windows/win32/procthread/processor-groups)

Sure, 64-core monsters are still somewhat rare _today_ , but 16-core/32-thread desktops CPUs are now affordable and the TSMC 5nm process will likely result in 96-128 core monstrosities _this year_. That's 384-512 threads for a dual- socket server or workstation! If you're making an image codec library "for the next decade", a little future-proofing might go a long way. Look at it this way: Image decoding throughput is one of the main performance issues I have right now with Lightroom and I work with "only" 36 Mpx images. There are 80 Mpx cameras just around the corner...

For example, there was a blog article a couple of years ago basically saying that _the_ major Amdahl's law limitation to decoding formats like JPEG is the Huffman bitstream decoding, which is Step #1 in the process. The author pointed out that simply _restarting_ the Huffman bitstream a few times for a typical PNG or JPEG file would increase the size less than 1%, but would allow truly parallel decoding for every step.

For all the apparent effort to make JPEG-XL parallelised by default, it seems odd that there doesn't appear to be any mention of parallelising the ANS bitstream decoding...

<comment><USER27> JXL dev here. Thanks for raising these points. Indeed regrettable we have to have a bunch of boilerplate.

FYI we actually do support hooks for malloc (JpegxlMemoryManagerStruct) and threading (JpegxlParallelRunner) precisely in order to be a good citizen :)

The topology is more about #cores/sockets, used by the benchmark_xl app to decide how many threads to spawn.

I agree adding Processor Groups makes sense, but Windows hasn't been our focus yet.

FYI it is indeed critical to parallelize ANS streams. Each 256x256 "group" can be decoded in parallel.

<comment><USER26> > Indeed regrettable we have to have a bunch of boilerplate.

Just to clarify: I'm not criticising the JPEG XL code, it seems to be quite clean at first glance! I was merely making a general observation that would apply to practically all portable C-interface libraries, such as ZStandard, libpng, etc...

PS: I wonder if it would be possible to make a "portable library header" that all such similar libraries could share to avoid the rework on both ends (library authors and library consumers)...

> Windows hasn't been our focus yet.

That's a real worry. Not just because of the word "Windows", but what else it implies.

To provide some constructive feedback: JPEG XL will be yet another failure thrown on the trash heap of similarly well-intentioned formats. It'll die along with JPEG 2000, JPEG EXR, and all of the others. Don't be so arrogant to think that somehow _your_ format will be special and adopted by the masses. The others were _just_ as technically advanced for their time and they all failed.

Please, please, _please_ learn this lesson, because this history of failure saddens me. The lack of a capable image formats compatible with all client platforms is what stops me as a photographer from sharing my images in full quality. In 2020, still, it is effectively impossible to share images in any other format than 8-bit sRGB JPEG across platforms. You can't _email_ a HDR, 10-bit, or wide gamut picture to anyone and expect them to be able to open it and have it look even vaguely right. You can't post such an image on _any_ website you don't control yourself. Even if you control the website, it will _look wrong_ for 99.9% of users OR they'll just see the 8-bit sRGB version anyway, _even if_ they have 10-bit HDR display.

It is literally only the walled garden of the Apple ecosystem that gets this right. Microsoft and Google most certainly doesn't. As an iPhone user, I can share a wide-gamut HEIF picture and 100% of the time it will look correct for other iPhone users. However, Apple "cheated" a little bit. When you send one of their HEIFs to any non-Apple-controlled app, it's silently converted to... 8-bit sRGB JPEG. It's just sad.

What everyone gets wrong with new image formats is this: They think that the problem that needs solving is the encoder/decoder. That's step one of many problems that _users need solved_. Image format developers assume their format will be "adopted", but there's no _network effect_. Why would anyone use a format they can't email, can't open on Windows 7, and can't edit in Photoshop?

If you stop with the JPEG XL library, with Windows _compilation_ an afterthought, I absolutely guarantee that you will fail to gain traction and the entire effort will be essentially wasted.

To get actual adoption, you would need to:

* Most importantly, develop an image decoder plugin for Windows.

* Help Firefox, Safari, and other less common browsers merge support.

* Ensure that Chromium gets support, but I assume that's a given.

* Send pull requests to add JPEG XL support for all major open source libraries that perform image processing, such as WordPress plugins and server-side image processing utilities for websites.

* Develop a plugin for all major image editing tools such as Photoshop.

* Work with Adobe on Lightroom _export_ support.

* Contact Sony, Nikon, and Canon and _help_ them with in-body encoding support.

But even that's not enough. If you want 10-bit and the wide gamut (let alone HDR), you have to take steps to _force_ support, or it won't magically materialise. You'll end up with _two_ JPEG XL formats: The 8-bit SDR sRGB variety with 99.9999% adoption and the "fancy" JPEG XL that nobody uses and _looks wrong if they try_.

IMHO the only way to do this is to forcibly _break_ applications that aren't processing the ICC profiles properly. Much like Google's Chrome experiment with randomising some TLS header fields to occasionally _break_ middle boxes written by idiots that think version numbers are checked with equality, not inequality operators.

You'd have to do something drastic, like leaving the image planes _unnamed_ and _randomised_ so that literally the only way to decode the image correctly is via a compliant colour space transformation.

It sounds drastic, but other people have tried the easy way and failed. As I said: It's 2020!!! Email me a non-sRGB image that I can view in my mail client...

<comment><USER27> > I'm not criticising the JPEG XL code, it seems to be quite clean at first > glance! Thanks, I understood your point about each project including its own > definitions. At one point there was > [http://www.bookofhook.com/poshlib/](http://www.bookofhook.com/poshlib/), > but I'm not aware of anything similar that's maintained, complete enough but > still small.

> That's a real worry. Not just because of the word "Windows", but what else > it implies. We have put a great deal of thought into an adoption plan. "This > time is different" because we actually provide value to existing > clients/servers with JPEG, rather than giving them yet another bitstream to > store, or lossy transcoding that just adds more artifacts. The lossless JPEG > transcoding is a game-changer, as is the feasibility nowadays of decoding > via WebAssembly - even with SIMD for speed.

> If you stop with the JPEG XL library, with Windows compilation an > afterthought Good news, we are absolutely not stopping there. The project > started in 2015. We're now moving out of the research phase and into > productionizing, with integrations and plugins underway. Investing in such > things too early would have meant less R&D.

> You'd have to do something drastic, like leaving the image planes unnamed > and randomised Interesting idea, thanks for this suggestion.

</comment></comment></comment></comment><comment><USER28> Apparently they're "responsible for the popular JPEG, JPEG 2000, JPEG XR, JPSearch, JPEG XT and more recently, the JPEG XS, JPEG Systems, JPEG Pleno and JPEG XL families of imaging standards".

Some of those may be more popular than others:

[https://xkcd.com/2254/](https://xkcd.com/2254/)

<comment><AUTHOR> JPEG 2000 is actually quite popular, for example any movie you see in a cinema is encoded using JPEG 2000 – they don't use video codecs for digital cinema, but encode each frame separately, to avoid video compression artifacts. Also in medical imaging, nearly everything is using JPEG 2000. Apple products have supported it for a long time.

JPEG XR is also known as "Windows Media Photo" and "HD Photo" and has been supported in the Microsoft ecosystem since Windows Vista and Internet Explorer 9.

JPEG XS, XL and Pleno are of course much newer and will still have to be battle-tested.

But yes, none of the newer JPEG standards have reached the popularity of the first JPEG codec, which is by far the most popular image format ever.

<comment><USER19> _for example any movie you see in a cinema is encoded using JPEG 2000 – they don 't use video codecs for digital cinema, but encode each frame separately, to avoid video compression artifacts._

They also use _very expensive_ dedicated hardware to decode Motion JPEG2000 at movie framerate, because it's far more computationally intensive than regular JPEG or even the newer video codecs like H264/H265.

<comment><USER29> Even on today's hardware? That seems unlikely to me?

<comment><USER27> IIRC J2K is about 40 MPixels/s per core. 4K60p is 498 MPixel/s :)

</comment></comment></comment></comment></comment><comment><USER30> I wonder if this is a reaction to the issue I opened :)

[https://github.com/google/brunsli/issues/60](https://github.com/google/brunsli/issues/60)</comment>


.NET Core 3.1 Preview 1 - <AUTHOR> https://devblogs.microsoft.com/dotnet/announcing-net-core-3-1-preview-1/ <comment><USER2> _Known Issue: The Visual Studio 16.4 installer may uninstall the .NET Core 3.0 Runtime when it installs .NET Core 3.1. We recommend you re-in-install or repair the .NET Core 3.0 SDK in that case._</comment>


Show HN: My all-nighter project to find the best Google Reader alternative - <AUTHOR> http://www.replacereader.com/

<comment><USER2> Am I the only one who just wants a list of updated articles and possibly an unread count? I don't want social in my RSS. I don't want to "discover" feeds. I don't want to be told what to read. I don't want to follow people.

For me, the whole point of RSS is that I find a site I like, I add it to my list, and I'm told when there's a new article.

I've tried several alternatives in the last 24 hours, and most of them ignore my actual feeds and give me a whole lot of machine learned articles I couldn't care less about.

It's not always the topic that's interesting, it's the writing style, or some kind of imaginary connection I've made with the site or author.

If I want to 'discover' articles, I'll browse HN or Reddit. If it's something I think I'll want to keep updated about, that's when I add it to my RSS.

<comment><USER3> \- Use a client that supports RSS.

\- Sync your data with Dropbox and use it on other machines.

Or

FeedHQ.org (Open Source) looks like a fine alternative but I am not sure what it supports yet in terms of your needs. Like they do have list, unread counts, tags(categories). Well, they have support read it later(which you said you don't want, maybe - but it's not that social :P)

Hell, even I do not want a social service or another GR or maybe not another free service that will go kaput anyday.

I guess FeedHQ guys have a real chance here with NewsBlur too cluttered and too slow.

<comment><USER2> FeedHQ seems very close to what I want, unfortunately it's throwing a 500 error when importing my subscriptions. I'll give it a more closer look later, thanks for that.

Edit: and it's open source. This definitely seems like a good base to start from if it doesn't fit my needs.

<comment><USER3> Exactly. I just don't see why dev(s) are not jumping at this opportunity. Though I saw one dev wishing luck to NewsBlur on twitter :-)

<comment><USER2> I'm not interested in making money from such a venture, I'm interested in a service I can use. If I have to write it myself though, I will. I'll be shopping for alternatives this weekend, and starting a github project if I find nothing that suits.

There's got to be some people around here doing their own that would roughly align with what I'm after. And I'm happy to pay for such a thing.

Should be a very interesting couple of months for sure.

<comment><USER3> Well, sounds nice. Do keep us posted in case you start sth. Will see if I can contribute(or use).

My reference to jumping was that I like the ideas of Pinboard and the elk and there's no reason why one for feeds wouldn't work. Work (esp well crafted and made for others to use - many ppl) requires time and effort and I find it natural for this work/job to be a paying one to be able to sustain interest and enthusiasm.

</comment></comment></comment></comment></comment></comment><comment><USER4> This isn't how you go about finding which is the best. This is how you go about finding which is the most popular.

Voting is inherently skewed towards popularity, which is not always correlated with quality.

From the headline, I had assumed you spent all night learning the ins and outs of every option and were going to present your findings. I was disappointed to find this was just a poll.

<comment><AUTHOR> Indeed, this is actually our eventual goal. The idea was to get something out, aggregate the most exhaustive list of RSS readers and then add the comparison details. It takes time!

</comment></comment><comment><USER5> This is a great idea, but I think the rush to find an alternative is premature - there's going to be a huge shift in the RSS reader landscape over the next few months, and the best alternative may not even be announced yet.

<comment><USER6> Switching an RSS reader isn't (or shouldn't be) particularly onerous, so there's really no reason to avoid switching even if a new one comes later.

</comment></comment><comment><USER7> Nice touch with the bobbing ship on the side there.

</comment><comment><USER8> Surprised Feedly is so highly ranked. I tried it out after the last set of Google Reader changes and deleted it after about a week. The mobile app is really awful for skimming lots of content and is too focused on presenting a newspaper like layout. It's all pictures...

<comment><USER9> Also, the Chrome extension is taking some liberties to "personalize suggestions": [https://getsatisfaction.com/feedly/topics/chrome_app_permiss...](https://getsatisfaction.com/feedly/topics/chrome_app_permissions_are_too_broad_why)

</comment></comment><comment><USER10> It's worth separating clients from servers, and noting which clients can sync with which servers.

</comment><comment><USER11> Nitpicking I know but reusing the Google Reader favicon actually caused me confusion for a second. Cool idea though, and way more interesting than what I did last night!

Anyone complaining about "the RSS landscape changingblah blah blah" must really hate fun. Someone did this in a night to address an immediate problem and probably had a blast doing it, let the guy (girl?) enjoy the fruit of their labor.

</comment><comment><USER12> This is great! There is one thing missing though. I tried to subscribe to the site in Reader and it couldn't find a feed. Could you?

</comment><comment><USER13> its nice - but you might want to just mine the twitters mentioning these sites to get a bit more content.

</comment><comment><USER14> Well done. This site was worth the work, even if it will be a short lived project.

I voted for feedly. Those guys also promised a smooth transition once google reader shuts down. Not sure what else you could want.

<comment><USER15> But it's certainly a format which can be expanded upon and applied to the recommending of any number of things.

</comment></comment><comment><USER16> My problem right now is not getting a list of names of popular feed readers - I can already see that by just browsing any of the many comment threads that have popped up on the internet where people bring up their favourite alternative.

What I really need is something to help me make a decision, by comparing what features does each reader support and so on. How much does it cost? Can I see my read in multiple devices? Does it work on smartphones? Can I share links with people? etc...

<comment><AUTHOR> We are most likely going to be adding this. It was in the original plan, but we wanted to get something out first.

</comment></comment><comment><USER17> Really impressed with the aesthetics, especially for such a quick turnaround. Had a peek under the covers and it appears to be well done there too.

Top marks in my book.

<comment><USER18> Thank you! I threw together the backbone action under the hood, all credit goes to Alain for the awesome design. We're pretty sure this post would have about 3 upvotes had it not been for the bobbing ship.

</comment></comment><comment><USER19> I am really surprised in all these Google Reader threads I have not seen mention of the free, self-hosted and perfectly simple RSSLounge. I been using it for three years now and even donated.

Development has stalled on this one though but the developer has a new RSS project with more social stuff. It is called Selfoss and is at <http://selfoss.aditu.de/> .

</comment><comment><USER20> I've been doing the same and adding them to StartHQ: <https://starthq.com/apps/?q=reader>

The web app profile pages include speed & trustworthiness info as well as mentions of the app on Hacker News. I will also add popularity rankings and TLDR versions of the ToS over the next few days.

</comment><comment><USER21> Feedly looks cool and all, but how do I add a feed? I spent 2 minutes and still can't figure it out.

</comment><comment><USER22> Very nice! I'd really like if you could mark which ones are available open source to run yourself.

</comment><comment><USER23> Isn't it strange that Newsblur is not even in top 5, the other poll[1] on HN suggested other wise. It was at top of the list on HN Poll.

[1] <https://news.ycombinator.com/item?id=5373538>

<comment><AUTHOR> Some sites more aggressively got their users to tweet the required hashtags than others.

</comment></comment><comment><USER21> Does anyone know how a good solution to this.

[http://superuser.com/questions/566201/google-reader- export-i...](http://superuser.com/questions/566201/google-reader-export- import-rss-article-history)

</comment><comment><USER24> This looks great. A few animated fish and/or bubbles down towards the bottom of the list could break up the monotony of that long list. (Or even let the ship sink slowly as the ready scrolls down.)

</comment><comment><USER25> Does Feedly have a web-based client? I'm looking for something to recommend to users at www.searchtempest.com. Many of them have never used (or even heard of) RSS before, so simplicity is key.

<comment><USER26> They have an "in-browser" client, but I think you may have to install the correct extension for it to work. Check out www.feedly.com.

<comment><USER25> Ya, I did. Was hoping I'd missed it somehow. Looks like it's just Chrome, Firefox, iOS and Android. Great for you or I, but not for many of my users unfortunately.

</comment></comment></comment><comment><USER27> Chuffed to be included here, thanks! Would you mind switching the tag to #PlayerFM as a lot of Twitter clients will treat the "." incorrectly.

<comment><AUTHOR> Alright, fixed it!

</comment></comment><comment><USER28> Made me learn about <http://www.feedly.com/> which looks really nice.

</comment><comment><USER29> How are you guys processing the tweets to show the results? Would love to know more about that.

<comment><USER18> We're using Ruby, Sinatra, HTTParty, Twitter Search API, Postgres, and Unicorn on a Heroku instance. Basically requesting the page pulls recent tweets from twitter matching the search '#replacereader', those tweets are checked against the DB to prevent dupe counting or multiple votes from one account, and new votes are added accordingly. Vote counts along with our list of replacements are pulled from the database and passed to a haml view, and unicorn caches page requests (including DB lookups and Twitter lookups) for 60 seconds to prevent exceeding APIs or Heroku's Postgres database limits.

<comment><USER29> THANKS!

</comment></comment></comment><comment><USER30> Nice stuff, I voted for Fever, even though it has some usability issues.

<comment><USER31> The results it pulls together aren't stellar, and the DRM (if you could call it that) makes me ridiculously uncomfortable too.

</comment></comment><comment><USER32> very nice, I also suggest [http://alternativeto.net/software/google- reader/?platform=on...](http://alternativeto.net/software/google- reader/?platform=online)

</comment><comment><USER33> I adore the design. Nice touch with the sinking ship.

</comment><comment><USER34> Thanks for the shoutout for BlogRoll! :)

</comment><comment><USER35> I'm getting an Internal Server Error. :(

<comment><AUTHOR> Sorry, lots of traffic. If you refresh a couple times, it usually comes back :)

</comment></comment><comment><USER36> i like flipboard the best, but it still needs google reader for my rss feeds...

</comment><comment><USER37> Love the CSS animation :D

</comment><comment><USER38> i just found out, i can import my feeds to yandex.com's reader.

fast, minimal interface without any bullshit.</comment>


Tower for Windows - <AUTHOR> https://www.git-tower.com/windows/ <comment><USER2> It is sad that Sourcetree, once the go-to git GUI for Windows and Mac is now full of bugs and performance issues, and almost always gets worse with every new version. They updated the UI every major version (e.g. 1.5 to 1.6, or 1.7/1.8/1.9), in most cases for no good reason (in fact they faced so much backlash on the change to flat grey UI that they had to backpedal and reintroduced colored icons). And yet they are still planning on a major UI change again in the next version. At the same time, basic functionalities are broken left and right.

But on the other hand it is a big opportunity for others like Tower

<comment><USER3> TortoiseGit is by far the best Git GUI on Windows or anywhere else. The UI is light, fast and it stays out of your way. It's very tightly integrated with the file browser, which is really the only app I want to be using to look at my files...

SourceTree OTOH is slow and clunky on every platform. But even if it had a light and fast UI - it's not integrated with my file browser, which sucks. With TortoiseGit, every Git command that I need is a single click away when I'm viewing my files.

<comment><USER4> if tortoisegit is the best there is (that's what I use since forever when I'm not actually in msysgit's shell, and usually I am - never tried anything else), then there's quite a lot of room for a better GUI client.

I mean, tortoise gets the job done, but it isn't what I'd consider fast or convenient.

<comment><USER5> It's not the best - there is Tower now.

</comment></comment></comment></comment><comment><USER6> Maybe it's just my inherent bias towards command-line-based Git, but I have to wonder just how useful this is to Git newbies if a lot of their page is dedicated to learning how to use Tower, especially with a _24-part_ video series.

<comment><USER7> I imagine it's because the video series is introducing git itself, through Tower's UI.

git is a bunch of concepts: commits, branches, tags, a staging area, rebasing, pushing, pulling, the reflog, etc. Provided a git client implements these concepts they're a fine way to learn git.

Also note many (not you, just others I've met) 'I only use the command line' git users use git's inbuilt gitk GUI a bunch of the time. Sometimes it just helps to be able to see the branching in a real tree.

<comment><USER8> For those who prefer CLI git: I've used gitk a fair bit, but lately I've been gravitating towards tig, which implements a tree view via ncurses.

<comment><USER9> I usually use git using command line and tig for the tree view and viewing changesets, but I really miss the commit feature of git plugin in JetBrain IDEs: editing while viewing the diff, full code highlight and lint in diff, easy selecting of files to cimmit, etc. Any alternatives for linux/atom?

<comment><USER10> VSCode, maybe? VSCode's git support does fine for most of my needs and I think it covers the list of things you are looking for. Admittedly it is different enough from Atom that there would be a transition, but it runs on Linux.

</comment></comment></comment></comment></comment><comment><USER11> Considering all free options out there, is it worth the price?

[https://www.git-tower.com/buy](https://www.git-tower.com/buy)

<comment><USER12> Absolutely. Compared to other clients –SourceTree, Github, and GitKraken– the UI feels quick, makes me feel more productive –especially with drag-and-drop interactions-, and presents all the appropriate information at the right time, based on the context.

If there ever is a Tower 3 release, I'm immediately purchasing an update license.

<comment><USER11> Do you know if it works well behind a corporate proxy?

I'm behind a NTLM authenticated proxy at work and we have problems passing through it with all major git clients. There are workarounds (like CNTLM) but I would love a git client that have such support out of the box.

<comment><USER12> No idea if it works or not. Sorry I can't help.

</comment></comment></comment></comment><comment><USER13> Downloaded and installed it on my corporate machine, and briefly tried it. Observations:

\- No visible options for setting proxy configuration

\- No interactive rebase

\- Dropdowns for selecting "diff" and "merge" tools would expand, but not let me actually click the checkboxes.

\- Crashed within a couple minutes of having loaded it up. Don't remember what specifically I'd clicked on - might have been the icon in the bottom left.

I'm primarily a SourceTree user, but I'm kinda frustrated at all the Windows Git GUI tools right now.

\- SourceTree 1.6.25 is stable and has interactive rebase, but they progressively ruined the UI after 1.6 . Staging behavior is great, but it doesn't have file blaming or view-tree-at-revision.

\- Git Extensions has file blaming and can sorta correlate with the file tree because it has Explorer integration, but the rest of the UI doesn't suit me.

\- GitKraken actually integrates libgit so that it doesn't need to run external Git processes for operations, which is particularly nice in a corporate environment where process monitoring can slow things down. On the other hand, way too much shiny, no interactive rebase, and the UI again just doesn't feel right. Also, the recent announcement of licensing changes for corporate use.

\- Tower appears to have view-tree-at-revision, but looked too monochrome, obviously an early beta, and once again, no interactive rebase.

I suppose having _one_ application that integrates the best of all of those would be too much to ask.

So, I guess I'm sticking with SourceTree 1.6.25 for the foreseeable future.

<comment><USER14> Tower team member here :-) We are of course working on lots of improvements, especially in the current beta phase. Regarding interactive rebase, by the way, I can say that it's already on the wish list :-)

</comment></comment><comment><USER15> Why no Linux version?

<comment><USER16> I'm almost certain that Linux devs make a very small percentage of their target audience (I see most web devs use Macs). That's a great question to ask them directly, though!

<comment><USER17> I imagine most Linux developers will be comfortable on the command line or using Magit; it's Mac- & Windows-using developers who are more likely to be less comfortable with those tools.

</comment></comment></comment><comment><USER18> Anyone used GitKraken? [https://www.gitkraken.com/](https://www.gitkraken.com/)

The interface looks good but not tested since it's an Electron app and I'm pushing my RAM most of the time anyhow (I'm looking at you, Slack).

Interactive rebase, as another commenter has noted, is a feature I need.

<comment><USER19> Yes. It's excellent. Well worth giving a try. It is a bit annoying to use with anything other than GitHub or Bitbucket, but that's the only issue I have with it.

</comment></comment><comment><USER2> Some feedbacks:

\- Everytime I clicked on the bottom left plus icon, the app crash: [http://imgur.com/a/YI8OO](http://imgur.com/a/YI8OO)

\- Can you add the option to always expand all diffs by default when viewing a commit?

\- Can you add support for Meld merge?

<comment><USER14> Tower team here: thanks for pointing this out! This is already on our todo list - and, in fact, already being worked on! Won't be an issue for very long ;-)

</comment></comment><comment><USER20> I use GitUp[0] which is for macOS only, but is a nice plain and simple Git GUI. Unfortunately it doesn't support GPG signing so I still end up using the command line to commit and tag.

[0]: [http://gitup.co](http://gitup.co)

</comment><comment><USER21> Might be too late, but I couldn't find a "staging area" like in SourceTree.

Does it exist or is it like a lot of other git GUI with no separation between staged and not staged files/hunks ?

</comment><comment><USER22> Good lord! Is the Amazon hosting server running on potato? One hour of download for 40MB!?</comment>