HTTP API Design Guide - <AUTHOR> https://www.gitbook.com/book/geemus/http-api-design/details <comment><USER2> While this is a nice small collection of things that could be helpful when designing and API, it would be infinitely more helpful if it gave any info on why it's suggesting what it's suggesting.

[https://geemus.gitbooks.io/http-api- design/content/en/founda...](https://geemus.gitbooks.io/http-api- design/content/en/foundations/require-versioning-in-the-accepts-header.html)

Okay versioning is important, sure, but why put it in an accept header?

[https://geemus.gitbooks.io/http-api- design/content/en/respon...](https://geemus.gitbooks.io/http-api- design/content/en/responses/use-utc-times-formatted-in-iso8601.html)

Yep, UTC is the best (well except maybe TAI, but that's a much harder battle), but why ISO8601, is it better than the other options for some reason?

<comment><USER3> Some explanation of rationale would help the guide immensely, especially on short stub pages.

 _> but why ISO8601_

The guide's recommendation should be tightened to RFC 3339 instead [1], to exclude less common formats like week-day and day-of-year that are defined in ISO 8601.

The two biggest advantages of the advocated format are:

\- no redundant information, like day-of-week, which may cause trouble if the redundant fields are in conflict

\- big endian throughout, therefore ASCIIbetically sortable for chronologic ordering

[1] [https://tools.ietf.org/html/rfc3339](https://tools.ietf.org/html/rfc3339)</comment></comment>


Ask HN: How to improve problem solving and reasoning skills - <AUTHOR> As a CS student in my final year, I still have difficulties solving what I would characterise as relatively easy problems, I usually just start writing code as soon as I read the problem and just keep modifying it and adding stuff to it, I have tried writing algorithms on paper a few times but I haven't noticed any difference really since I don't really "think/reason" about what I'm writing, I don't know if my description is relatable but that's how it feels, it's more like me writing whatever pops in my mind rather than logically trying to solve the problem.<p>So to circle back to my question, how would you go about dealing with this? <comment><USER2> Solving a problem by experimenting is rarely useful. I'd call it accidental solution. You can improve by doing it the hard way. Do not write down anything unless you understand why you do it. As a test, try to answer the following question: "Why will it work?" It is also useful to think about other solutions before committing to one. Try to come up with pros and cons.

You can improve your reasoning skills by fixing bugs. First observe the bug, try to make a hypothesis. Try to support it by reading the code (do not run it, don't use a debugger at this point). Once you have a plan, find evidence that support your theory. Once your theory is right, find a solution, and answer the question "why".

It will take time, but you will improve over time. For me, the key is patience.

<comment><AUTHOR> Thanks for your advice, I'll experiment with this method.

And yeah that's actually how I used to find solutions: by accident. I just keep tweaking the code and running it until it gives the solution I want.

I never really considered this a problem, but I'm glad I'm aware of it now, it's better late than never.

</comment></comment><comment><USER3> Have you thought about what sort of response your question might produce?

As an exercise, give your best shot at answering your own question.

<comment><AUTHOR> Yeah, I thought it might produce some good suggestions that worked for other people and that I could try.

Hopefully people who actually have something constructive to share will see this question too.</comment></comment>


Viewsflow: financial news/social media mashup (invite code in comments) - <AUTHOR> http://www.viewsflow.com/

<comment><AUTHOR> Beta invite code (good for 150 logins): 8c6ac5d79</comment>


People Are Stacking Too Many Stones - <AUTHOR> https://www.newyorker.com/culture/rabbit-holes/people-are-stacking-too-many-stones <comment><USER2>
      can cause erosion and damage ecosystems

Oh please. This is _so_ far from an actual concern that I struggle to summon the energy to even shrug about it.

If anything, it's an argument for the sake of arguing. It's almost perfectly illustrative of the perils of trying to get humans to cooperate and agree at all.

First of all, you have brick buildings. Second of all, you have open pit mining. Third, you have mountaintop removal. Fourth, highways. All of which are literally millions, if not billions or perhaps even trillions of times worse.

For reference:

[https://en.wikipedia.org/wiki/Open- pit_mining](https://en.wikipedia.org/wiki/Open-pit_mining)

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

I mean, hey, maybe we shouldn't throw pennies in wishing wells, or Old Faithful for that matter, but seriously, if you're worried about this, I have another anxiety: shoes. The durable rubber soles of shoes actually leave imprints in sand, when people wear them while walking. Don't believe me? Try it yourself!

And what's worse? Astronauts used these appliances on the surface of the moon itself, forever contaminating the lunar landscape, previously pristine, and unfettered by human influence. A tragedy of the commons.

<comment><USER3> >>can cause erosion and damage ecosystems

>Oh please. This is so far from an actual concern that I struggle to summon the energy to even shrug about it.

It _is_ causing noticeable impact though. I recently went to Iceland which has had rapid tourism growth since about 2008. There is a place along Ring Road (the road around the whole island) where long ago, a rock was placed on a stack for good luck in their travels. [1] There's essentially one place where it's "tolerated" on the island for a reason that goes back hundreds of years. Even driving 20+ miles beyond the location, there were stacks of rocks off ~100 feet off the road. It really ruined the natural look.

Iceland has moss covering large chunks of the island. It takes something like 30 years for the moss to grow back. Simply stepping on moss can kill it, justifying the MANY messages about staying on the paths. Someone walked over 100+ feet of mossy rocks to stack rocks.

The rocks slow down the water flow rate and prevent the dirt from getting scooped up.

I don't know how else to say it, but it is a big deal.

[1] [https://www.atlasobscura.com/places/laufskalavarda](https://www.atlasobscura.com/places/laufskalavarda)

<comment><USER4> Iceland has a population of 300k and brought in more than 2m visitors last year. 10% of its GDP and 30% of export revenue. The vast majority of tourists in Iceland are very respectful, but Iceland's hasty decision to bootstrap its economy after 2008 with tourism despite a lack of infrastructure has its costs. The way I see it, Iceland is lucky to have attracted so many higher quality guests.

<comment><USER5> I was in Iceland this past June and the mismatch between the number of tourists and the infrastructure at the national parks and scenic overlooks/stops was enormous.

I have no idea what the right number of tourists for Iceland is but at several locations the facilities (restrooms, food services, shop) were small and completely overwhelmed by the number of busses that were stopping in quick succession.

I was on a cruise and unfortunately the logistics of port calls tends to create very bursty traffic patterns with large number of tour busses disgorging visitors in quick succession at these under-sized locations.

For example the facilities at Goðafoss were undersized: [https://email@example.com,-17.5395264,3a,37.5y...](https://email@example.com,-17.5395264,3a,37.5y,150.84h,89.92t/data=!3m6!1e1!3m4!1sSls2fKKZeRsDJi5I6Qs4mw!2e0!7i13312!8i6656)

On the other hand the facilities at Geysir were much better: [https://firstname.lastname@example.com,-20.3013397,3a,75y,1...](https://firstname.lastname@example.com,-20.3013397,3a,75y,186.95h,89.53t/data=!3m7!1e1!3m5!1sXCe6dEQcwyt7nVsO9i2Yjw!2e0!6s%2F%2Fgeo1.ggpht.com%2Fcbk%3Fpanoid%3DXCe6dEQcwyt7nVsO9i2Yjw%26output%3Dthumbnail%26cb_client%3Dmaps_sv.tactile.gps%26thumb%3D2%26w%3D203%26h%3D100%26yaw%3D120.409164%26pitch%3D0%26thumbfov%3D100!7i13312!8i6656)

</comment></comment></comment></comment><comment><USER6> My "rule" for these kinds of activities is to ask myself, if every visitor to the area did this would it cause a problem? If so, for the most part, I refrain from doing whatever the thing is. I think this applies well to the rock stacking.

Unless you are marking an off trail route or a faint trail please don't stack rocks, its confusing or just vandalism.

<comment><USER4> You can easily take that to ad absurdum levels and every activity you do is destroying the world. There's a balance, and stone stacking happens to balance the line between posturing one's virtue and respecting an ecosystem.

</comment></comment><comment><USER7> This is somewhat of a problem on mountain routes, where stack stones are sometimes used as navigational markers (cairns). The ethics of Leave No Trace say not to leave these cairns. Many times, people will put these up to aid others, but their route deviates from what could be a better/safe alternative. Or at least a different opinion on what one is. Then, you have two sets of cairns, each going off in its own way.

Until you get three sets.

This goes on, until no one can realistically understand what the cairns are trying to communicate.

<comment><USER8> This is an excellent point that a lot of people overlook. In some parks the cairns are so far apart that creating a new "pseudo cairn" can cause some serious navigational inconvenience. There's nothing more annoying than having to constantly double back and recheck against a trail map because some individual has decided to exercise a best neglected artistic flair. They should save it for their own garden.

</comment></comment><comment><USER9> A notable feature of stacks of stones is that they're easy to knock over. So if you don't like them, knock them over. It'll make you feel good, to the extent that you don't like them. So it's a way for stackers to help topplers feel good about themselves. Toppling stones is actually strangely satisfying, like stomping a sand castle, starting a domino avalanche or exploding a death star. Cumulatively the number of stacks will reflect the balance between stackers and topplers, so it's democratic.

Myself, I don't care, but I have other pet peeves that I do care about for very little reason. Stickers that are hard to remove from products, for one. Now that requires urgent action.

<comment><USER10> Yes! Stickers! I bought a cheap cell phone and it had a sticker I couldn't see when it was in the package, that covered the battery compartment so I couldn't even open it. And it wouldn't come off. Picking at it produced a gummy hopeless wad. I resorted to a pocket knive, carved away plastic and paper until it was gone.

</comment></comment><comment><USER11> This may be a stupid question, but what exactly is the concern with erosion in mountainous terrain? I just don't understand what's at stake. Mountains erode. Why should we worry if human activity hastens the process a little? I'm asking in earnest. What am I missing?

</comment><comment><USER12> On a spectrum of: private land, public land, national park; stones stacking seems: reasonable, regrettable, deeply thoughtless. If one cannot visit a park without visibly changing the landscape, one should simply not enter a park.

Examining this activity without considering the location is simply false equivalence. Any vandalism in a national park, or any nearly untrammeled area of similar protectable value is not defendable. Also, get off our lawn.

</comment><comment><USER13> With so many real problems in National Parks (including the ASTOUNDING number of mysterious disappearances of park visitors) I find this article a generic case of pearl-clutching stupidity. Humans have been stacking stones atop one another since at least 12,000 BC as in Gobekli Tepe in Turkey. We stack stones for our shelters, our fireplaces, and our workplaces. We stack stones for monuments. So now we are stacking stones for sheer aesthetic beauty. Good. Stack away with the knowledge that you are continuing a human tradition that has been going on for millennia.

</comment><comment><USER14> It's surely unconscionable to write about stone stacking with nary a mention of Andy Goldsworthy!

</comment><comment><USER15> I was in WY to summit Gannett peak during the eclipse a couple summers ago. It was windy. Our tent was starting to deteriorate and rip apart. We moved stones. Built a wall. For shelter. I respect nature and it's beauty but never once did "I shouldn't be stacking these stones" cross my mind. There were plenty of stones left!

My only issue with stone stacking would be if people intentionally did this to throw people off a trail route. Even with a good map and compass a rock cairn can be a godsend. Especially when you're in a boulder field.

Anyone doing this for Instagram likes is an idiot.

</comment><comment><USER16> The article states:

"The calamity of the stone stack, in our anxious times, seems admittedly minor. But it's a prominent example of how social media can generate scale, transforming an activity that would be mostly harmless in isolation into something with planetary impact."

Does this mean, if I do not see any other rock stacks in a national park, I can create my own, since there is no real harm unless it is done at scale? Or would that also be wrong, since even if I am doing only one, it might contribute to the next visitor also making one, and so on?

<comment><USER17> [https://en.m.wikipedia.org/wiki/Sorites_paradox](https://en.m.wikipedia.org/wiki/Sorites_paradox)

Example of the sorites paradox.

One isn't a problem. Two isn't a problem. You can keep saying oh one more won't be a problem until at some point it is.

</comment></comment><comment><USER18> Initially I thought this was some metaphor, like trying to string too many components together, or something, heh.

</comment><comment><USER10> Making a mountain out of a mole hill?</comment>


The American Education System is Outdated. It's Time for Change. - <AUTHOR> http://www.youtube.com/watch?v=tcADhMYOelw

<comment><USER2> This video provides many strong and true points in regards to the education system in America. I agree with you 100%.

</comment><comment><USER3> very powerful piece!</comment>


Physically settled Bakkt Bitcoin futures [pdf] - <AUTHOR> https://www.theice.com/publicdocs/regulatory_filings/19-160_Listing_Bitcoin_Daily_Futures_Contract.pdf <comment><AUTHOR> \- daily and monthly contracts of 1 bitcoin each

\- daily contracts require full collateral (no margin)

\- 100k position limit

\- $35 million safe deposit in addition to fully collaterized positions of participants.

cme bitcoin futures trading volume currently 1% of gold futures, 3% of bitmex. Lets see if ICE btc futures can take the lead in the trading volume.</comment>


GitLab Serverless - <AUTHOR> https://about.gitlab.com/2018/12/11/introducing-gitlab-serverless/ <comment><USER2> Can someone explain me what that hype about serverless is? As I understand it, serverless is just good old webhosting, but in the cloud. With webhosting I mean providers offering a LAMP-environment and customer just upload their code and don't manage anything else. Is this correct? Then how is serverless different to this?

<comment><USER3> To me, it's about the abstraction layer that you interact with when bringing up your stack. That abstraction layer has gradually moved higher over time as providers try and deliver more for their customers:

1) Hardware) 'I want to run Linux + Stack + App'. You get an empty rack, a network port and a power socket. You have to buy iron, install and maintain OS/platform, runtime environment and your service. Scaling requires more work and buying more stuff.

2) VMs) 'I want to run Stack + App'. Machine and OS is provided for you and maintained. You still have to build runtime environment and your app. Scaling doesn't require capex like (1), but still slow - you have to decide how much capacity you want.

3) Containers) Still 'I want to run Stack + App' but faster scaling so can be responsive rather than in advance. A halfway step to:

4) Serverless) 'I want to run App'. Runtime environment, hosting etc is all taken care of. You just write the app and everything else works at the capacity you need.

We've been aiming at this last level of abstraction for a while. As you pointed out, the classic VPS with LAMP got you some of the way there, but without the scaling advantages. Google App Engine got closer but was its own special world. Containers are an important technical enabler to doing it more portably.

<comment><USER4> let me guess, you don't have any experience in ops?

1) Scaling doesn't really require more work. It needs a bigger investment because a hardware hypervisor costs significantly more than a vm... after all, that hard metal can host tens of VMs

2) you still need to manage your linux system and OS if you're buying a VM... the only thing you don't need to worry about is hardware. So, a faulty hard drive, hypervisor failover and similar stuff is taken care of. That doesn't mean that it works, however. It just means that somebody else will take care of it... though it might not work and you're entirely on their mercy to fix it

3) containers don't inherently give you better scaling either. creating images from VMs has been done for ages before docker was a thing, and provisioning a new Node from a VM Image is pretty easy if you're already using Terraform or similar.

you're just able to utilize a higher percentage of your hardware with containers, as you don't need to virtualize the kernel... so its a cost- cutting issue, not scaling

<comment><USER5> I would dissent from #3 in that containers also have the inherent advantage of being able to scale and start quickly. A full VM takes time to boot and run through whatever setup/initialization needs to happen at the OS level, where a container just needs to copy/deploy and start.

In many cases it's an additional abstraction, but there are advantages beyond just better hardware utilization.

<comment><USER4> An optimized vm boots in < 2 seconds...

Heck, a hardware server can boot in seconds if you skip POST entirely

<comment><USER5> My experience with Azure and AWS is that it takes quite a bit longer than 2 seconds before a new server is up.

</comment></comment></comment></comment></comment></comment><comment><USER6> I'm a huge Gitlab fan but this seems a little parallel to their core service if not orthogonal... I've been pretty pleased with the feature progress of Gitlab overall though, for example support for merge request-only CI steps just landed[0]

I see this as a play to start leveraging all the machines they have hanging around for running jobs and gitlab instances, and I'm not against it as long as the Gitlab itself doesn't suffer. Are they planning to pivot to becoming a cloud provider like digital ocean? It feels like if they can manage orchestrating serverless functions they can manage orchestrating containers or VMs...

[0]: [https://www.reddit.com/r/gitlab/comments/a54mc3/support_for_...](https://www.reddit.com/r/gitlab/comments/a54mc3/support_for_mergerequest_only_ci_builds_has_landed/)

<comment><USER7> > start leveraging all the machines they have hanging around for running jobs > and gitlab instances

If anyone ever figures out the isolation problem I'd host an instance and/or ci servers in exchange for licence credit. Unfortunately the current gitlab- runner doesn't run on arm [1] but I wanted ci/cd to make containers for the project, 98% of the time it's idle.

1: [https://gitlab.com/gitlab-org/gitlab- runner/merge_requests/7...](https://gitlab.com/gitlab-org/gitlab- runner/merge_requests/725)

<comment><USER6> I'm actually working on a system to do exactly this I wanted to sell dedicated 1C 2GB RAM runners for $8/month (which is less than a t2.micro), maybe I should architect it so people can contribute runners and make it a marketplace...

Would love to hear some feedback if anyone has some.

</comment></comment></comment><comment><USER8> Serverless has been on the roadmap for a little while: [https://gitlab.com/groups/gitlab- org/-/epics/155](https://gitlab.com/groups/gitlab-org/-/epics/155) \- I saw a demo of using OpenFaaS ([https://www.openfaas.com](https://www.openfaas.com)) as a serverless endpoint for GitLab around 3 months ago. I think that the effort here is to control software, the deployment to Kubernetes is just an additional thing that is tied to the overall software development life cycle. I don't think that GitLab is looking at running against AWS as a cloud provider, but more at being a control plane for managing software. And for that, for me, it is far ahead of the competition.

</comment><comment><USER9> I've read the announcement now twice but I can't make out what this is actually good for.

I know what they mean with serverless, so that's not it.

\- is this tied to CI in any way so stuff can get tested via knative?

\- is this CI for functions to be deployed (via OpenFaaS or Lambda)?

\- is this just a frontend for serverless backends?

I'm totally lost, I use GitLab as a hosted amount of git repos, with inclusion of CI runners, so maybe that's the wrong angle of approach? Which _problem_ does it solve? Is it to make using serverless easier? If I wanted to use 'functions' would I first have to install GitLab? Why would I use a code hosting platform for that?

<comment><USER8> Overall, this is trying to give more support for pushing functions to Kubernetes using Knative as the method. I believe that there will be some support built in to GitLab for supporting Knative functions. I also know that this already works with OpenFaaS and OpenFaaS cloud, whereas Lambda normally is not deployed directly to Kubernetes, although you can use GitLab CI to do this.

<comment><USER9> Thank you, that makes it a bit clearer.

</comment></comment></comment><comment><USER10> I would appreciate it if they first focused on getting their Kubernetes integration working with anything other than Google cloud. Or maybe add support for RBAC, or a variety of other things that make some of these amazing features like auto devops workable for the common man without having to spend weeks setting it up.

If I try to install gitlab on Kubernetes I have no less than 4 ways to do it, and none of them work perfectly.

<comment><USER11> Support for RBAC for GitLab Managed Apps was added in 11.4 [1]. You can also connect any Kubernetes cluster hosted anywhere - see the docs on that [2].

What problems are you hitting when installing GitLab on Kubernetes? You can always open an issue about it so it can be prioritized for fixing.

[1] - [https://gitlab.com/gitlab-org/gitlab- ce/issues/29398](https://gitlab.com/gitlab-org/gitlab-ce/issues/29398)

[2] - [https://docs.gitlab.com/ee/user/project/clusters/#adding- an-...](https://docs.gitlab.com/ee/user/project/clusters/#adding-an-existing- kubernetes-cluster)

<comment><USER12> Please also note that you don't have to install GitLab itself on Kubernetes in order to add a Kubernetes cluster to your projects or groups. We updated the docs yesterday to prevent confusion about this [https://gitlab.com/charts/gitlab/merge_requests/599/diffs](https://gitlab.com/charts/gitlab/merge_requests/599/diffs)

We had multiple ways of installing on Kubernetes before but we reduced it to one canonical helm chart [https://docs.gitlab.com/ee/install/kubernetes/gitlab_chart.h...](https://docs.gitlab.com/ee/install/kubernetes/gitlab_chart.html#introduction)

</comment></comment></comment><comment><USER13> This seems to be the first product to run actual workloads on instead of out- of-band management?

I'm a bit lost when it comes to GitLab because they are trying to do so much, so I'm confused if this is a change in strategy or natural next step for them.

Edit: Clarifying question.

<comment><USER14> I don't think they are trying to do more than they can handle. Every feature I have used on gitlab has worked amazing so it doesn't seem like they are spread thin.

<comment><USER15> everything works great on gitlab, until the moment you had to migrate.

Landmine experience in issue lists

<comment><USER16> Hi, Community Advocate from GitLab here. Could you please reference what issues you are experiencing? We'd love to follow up on it.

Also, if you want to write the details, it would be great to open an issue [https://gitlab.com/gitlab-org/gitlab-ce/issues](https://gitlab.com/gitlab- org/gitlab-ce/issues). Thanks in advance.

<comment><USER10> One, having to come from the same version.

Two, having to connect to the same block storage in exactly the same way to make everything work.

I just want to upload a backup that gitlab makes, and upload that somewhere (anywhere) to restore from that one tarball, regardless of where I've decided to host my current instance or data (or indeed, if I've decided to use block storage again or not).

<comment><USER12> Thanks for the feedback.

1\. Yes, you have to restore a backup on exactly the same version of GitLab and then upgrade that version. If you restore it to a different version the database scheme isn't correct.

2\. You can restore a GitLab backup anywhere [https://docs.gitlab.com/ee/raketasks/backup_restore.html](https://docs.gitlab.com/ee/raketasks/backup_restore.html) as long as it is the same version. I think the output is a single file.

<comment><USER10> Thanks for the response.

1\. Gitlab is able to migrate up to a new version, so is there anything preventing it from getting up to a certain (older) version before running the last few migrations after restore?

If I set up a new instance it's generally one or two minor versions higher than the old instance.

2\. I swear I restored from my omnibus installation to Helm based gitlab and lose all my uploads and registry images. Cannot see from the docs why that would happen any more though.

Maybe it was the opposite, with me restoring the backup to the same block storage devices, and gitlab hiccuping on the fact that all the files it wanted to restore were already there.

<comment><USER17> We've opened [https://gitlab.com/charts/gitlab/issues/1015](https://gitlab.com/charts/gitlab/issues/1015) to discuss this comment. I don't believe the db migrations are what are holding us back, as much as the other parts of the backup/restore.

For number 2, that sounds unexpected, and we would love for you to give us more details. [https://gitlab.com/charts/gitlab/issues](https://gitlab.com/charts/gitlab/issues)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER18> Where does Google AppEngine sit in the 'serverless' realm? That one started in 2008 and to me defines the concept of serverless. Auto scaling, support for executing multiple languages, hosted database backend (datastore), infinitely scalable transactional task queue, logging, etc...

</comment><comment><USER19> For sometime now GitLab could be made aware of Kubernetes deployments. That is you added the integration of through your build. This allowed you to see your build through to the "deploy" phase.

All this new Serverless functionality does is now provide a window to see the Serverless workload rather than just your traditional pods.

All brought to you by knative.

</comment><comment><USER20> Correct me if I'm wrong, but this is very different from Jenkins-X serverless.

Jenkins-X serverless: Jenkins only runs when it has work to do and shuts down while idle.

Gitlab serverless: tooling to support FaaS creation

Serverless is such a silly word to begin with, now it's even more confusing.

<comment><USER21> Yes, you've touched on a key difference between Jenkins and GitLab in general:

Jenkins: only does CI/CD, needs to be integrated with a suite of other tools.

GitLab: end-to-end DevOps in one application that has native project planning, source code management, CI/CD, artifact repository, configuration management, and observability built-in.

So Jenkins-X Serverless is about the Jenkins service itself running in a serverless paradigm. Or "using Knative to run Jenkins"

GitLab Serverless is a configuration management feature that allows you to build, deploy, and manage your own serverless functions from the same place where your issues, code, artifacts, etc. are. Or "Using GitLab (which uses Knative) to run your functions."

<comment><USER20> Jenkins-X adds a bunch of stuff to Jenkins including an artifact repository, a helm chart repository, release management, et cetera. It's pretty cool.

</comment></comment></comment><comment><USER22> Is the only difference between Heroku and Serverless is that I pay for Heroku while the app is idle and that I have great debugging tools on heroku?

Please help me understand why I would choose Serverless over heroku

<comment><USER23> \- on-demand pricing

\- no capacity planning

\- simple programming model

There are monitoring/observability tools for serverless (CloudWatch/Epsagon/Thundra/IOPipe)

</comment></comment><comment><USER24> Is this addressing any of the cold start problems?

One of the things that attracts me to Serverless is not paying anything (or vey little) until a project is properly off the ground.

But with things like Heroku there's a ridiculous delay to start up if here hasn't been a request for a while.

Does Serverless / this implementation of Serverless address that at all?

<comment><USER25> > One of the things that attracts me to Serverless is not paying anything (or > vey little) until a project is properly off the ground.

I guess it's not quite nothing, but can't you just buy a cheap $5 (or even $2.50) VM, and run all of your small projects off of the same one.

The cost is pretty small, and you don't have to worry about how your going to migrate your code off the serverless platform later.

<comment><USER24> Yeah that's basically what I do now. Amazon's Lightsail is really good for this.

What I'd really like though is one place I can just put the code, test it and know I can leave it there when it gets bigger. That's the dream anyway, but I guess nothing's perfect!

</comment></comment></comment><comment><USER26> > to zero and backup

I assume this should be "back up." Otherwise I'm missing what this has to do with backups.

<comment><USER16> Good catch Michael, that's right. We meant the "back up" and we are fixing this typo [https://gitlab.com/gitlab-com/www-gitlab- com/merge_requests/...](https://gitlab.com/gitlab-com/www-gitlab- com/merge_requests/17295).

Thank you for pointing this out and sorry for the confusion.

<comment><USER27> It's quite fascinating to follow your link and see the amount of "work" required to fix a simple typo. The fix consists of 1 commit with a change of 1 character. It then takes 1 merge request, 1 pipeline, 13 jobs and a grand total of 23 minutes and 41 seconds to process this change and deploy it.

Since one of the big pros of serverless computing is only paying for the resources that you use, I am wondering if we will hit a point where preparing a trivial release is not worth the effort because it's simply too expensive. Paying 23 minutes of cloud computing for a simple typo adds up easily.

</comment></comment></comment><comment><USER28> If you're already deploying stuff on Kubernetes then why this over just packaging up the code into a container and running that? It's also probably using more resources to run the Knative stuff which would offset any scale-to- zero savings.

Is there really a big demand for this?

</comment><comment><USER29> I didn't read the article but something tells me that "serverless" involves a server of some kind ...

<comment><USER30> From tfa: "...serverless computing is an execution model in which the cloud provider acts as the server, dynamically managing the allocation of machine resources."

The name "serverless" is so unfortunate... On-demand would have been better.

<comment><USER31> Hehe, I agree. Sadly, IMO the term has taken over and so we're stuck with it because of the quick recognition people have to serverless ...

</comment></comment></comment><comment><USER32> Article does a very good job of burying the lede.

tl;dr; GitLab have have a FaaS offering in alpha.

</comment><comment><USER33> Serverless functions are a terrible idea. Way too restrictive and proprietary. Kubernetes is the future. Amazon throwing money behind the Serverless trend is only delaying the inevitable universal success of a standardized, open source container orchestration platform.

<comment><USER34> Your argument against serverless functions holds for AWS Lambda, but this Gitlab feature is based on Knative. That's an open source serverless platform based on Kubernetes.

I think all money Amazon is throwing at serverless is to build a foundation to ultimately transform all their "managed" services into a serverless form. They already released serverless RDS ([https://aws.amazon.com/rds/aurora/serverless/](https://aws.amazon.com/rds/aurora/serverless/)).

<comment><USER33> Good to know that it's open source. I should have looked it up first.

My understanding of Serverless was that it was synonymous with 'Functions as a Service'. What Knative seems to be doing is more like 'Backend as a Service'. I guess it's good to know that these two very different approaches are now both labeling themselves as 'Serverless'. I guess Knative is just hitchhiking on top of Amazon's marketing success around the 'Serverless' term.</comment></comment></comment>


Amazon announces persistent storage for EC2 - <AUTHOR> http://aws.typepad.com/aws/2008/08/amazon-elastic.html <comment><USER2> Great news. A little concerned with: "Amazon EBS also charges $0.10 per 1 million I/O requests you make to your volume." How many I/O requests does your system make a day?

<comment><USER3> This was discussed earlier. Turns out, it can and does wildly vary based on usage scenarios. <http://news.ycombinator.com/item?id=282528>

</comment></comment><comment><USER4> Is there any good articles on using EC2? I've read about it, but haven't had the chance to get a firm grasp on it.</comment>


Learn Relay – A comprehensive introduction to Relay and GraphQL - <AUTHOR> https://learnrelay.org/ <comment><USER2> Disclaimer: I'm a contributor to Apollo [0], an alternative client to Relay.

This is a great initiative! I remember struggling to learn Relay, I love it though, used it in some toy apps and will use it in some upcoming projects that I have. However I have a few issues with Relay: the main one is that it overall discourages people from starting with GraphQL. From creating a Relay- compliant GraphQL server to adding it to your app, Relay forces you to _good_ conventions that, unfortunately, requires you to learn about its concepts and makes it super difficult to ramp up fast.

For anyone interested in working with Relay and GraphQL in general, I would advise you to start first with just learning GraphQL, without Relay and its constraints. You'll see that much of the issues you may have with GraphQL may come from actually trying to comply to Relay. Once you are okay with GraphQL, then, you can move to learning Relay.

Finally, I want to insist on the fact that GraphQL is just a specified language that can be consumed by any client you need/want. Relay is made by Facebook, for Facebook, which is a cool thing but may be a bit too much for your simple app or may not be adapted if you are migrating a legacy app to GraphQL (which was my case). That's why you should take a look to alternative clients as well (Apollo [0] for instance ;-) )!

[0] [http://dev.apollodata.com/](http://dev.apollodata.com/)

<comment><AUTHOR> Thanks Robin! I've love what you guys are doing at Apollo! I've just answered a similar question below, so I'll just copy the most important bits here as well:

One important thing to note here, is that Relay and Apollo are taking different approaches. Relay provides a great framework which works excellent for a lot of use cases and provides the most convenient and robust solution for that. In some cases you want to "break out" of that framework and be more in control how data is fetched or mutated. In that case Apollo is a fantastic choice as well. Especially in combination with Redux. Fun fact: We're actually using both - Relay AND Apollo - in our dashboard at Graphcool. Feel free to take a look at the source here: [https://github.com/graphcool/dashboard](https://github.com/graphcool/dashboard)

On a side note: We're already working on a similar project but focussed on Apollo. If you're interested in getting involved, we're still looking for collaborators: [https://github.com/learnapollo](https://github.com/learnapollo)

<comment><USER2> Your dashboard seems like an interesting approach for taking the best of both worlds!

learnapollo seems awesome too! I think that Apollo would benefit from this kind of documentation. You should definitely come and send a link on the Apollo's slack!

In general Graphcool is a great idea if you want to start fast with GraphQL (with any client).

</comment></comment></comment><comment><USER3> Hey!

We found it to be very difficult to get started with Relay. At Graphcool we are building the dashboard, a core component of our product with Relay, so we had to become experts. Now we have turned this into (what we hope to be) a compelling getting started tutorial.

We would love to get some feedback, and if you have any questions about Relay or GraphQL in general I'm happy to answer. :)

</comment><comment><USER4> Looks like a really well made introduction. I have been considering Relay for a while now. Will try it out. I especially like that I get a real GraphQL server to play around with. Thanks!

<comment><USER5> You might also want to consider Apollo. [0] It's a really well-made GraphQL client that I found easier to use than Relay.

[0] [http://dev.apollodata.com/react/](http://dev.apollodata.com/react/)

<comment><AUTHOR> Very good point, morgante! One important thing to note here, is that Relay and Apollo are taking different approaches. Relay provides a great framework which works excellent for a lot of use cases and provides the most convenient and robust solution for that. In some cases you want to "break out" of that framework and be more in control how data is fetched or mutated. In that case Apollo is a fantastic choice as well. Especially in combination with Redux. Fun fact: We're actually using both - Relay AND Apollo - in our dashboard at Graphcool. Feel free to take a look at the source here: [https://github.com/graphcool/dashboard](https://github.com/graphcool/dashboard)

On a side note: We're already working on a similar project but focussed on Apollo. If you're interested in getting involved, we're still looking for collaborators: [https://github.com/learnapollo](https://github.com/learnapollo)

</comment></comment></comment><comment><USER6> I'll read this when I get the chance. Perhaps I'll give Relay another chance.

I also found Relay a nightmare to understand. Everything is overcomplicated and messy, which is probably why they're talking about Relay 2.0 already. I was a bit frustrated when I found that this blog post was the most helpful piece of information I could find on Relay, and it tells you to just use FIELDS_CHANGE everywhere and ignore the rest of the mutation config features: [http://blog.pathgather.com/blog/a-beginners-guide-to- relay-m...](http://blog.pathgather.com/blog/a-beginners-guide-to-relay- mutations) .

Some things that make Relay frustrating:

* Pointless restrictions on what you're allowed to do at the "root" require you to do everything under a "viewer" subnode instead.

* Relay "Routers" are completely pointless and should be removed.

* Mutation configs are totally confusing, and they're tightly coupled to the server-side implementation of the mutation. We have a compile step where the client inspects the schema that was generated by the server. Why can't we generate the mutation configs as well? I know there's probably not enough declarative information readily available, but there should be.

* Relay mutations are only allowed to have one input field and one output field in the GraphQL definition. This is a pointless incompatibility between Relay and non-Relay GraphQL endpoints.

Falcor also exists, and is much simpler, though it has its upsides and downsides:

* You're not allowed to pass any arguments other than the standard from/to pagination arguments. Want to implement faceted search? Too bad. It's "Not a querying language", for some reason.

* It has something called "calls" which are basically the same thing as Relay's mutations but you have a little less control over how cache invalidation is handled than you do with mutation configs. There's no RANGE_ADD, for example. To add/remove items in a list you have to invalidate the entire list. Maybe that's OK though? But it sure is annoying if you're trying to move an item from one list to another on the client side and don't need to wait for the server to catch up.

* No built-in support for optimistic updates yet.

One thing I see in common between React and Falcor is they are both rather complex ways to collaborate with yourself while ignoring events from the outside world. In other words, it's a lot of work to not have pubsub. I guess this is because pubsub doesn't scale? But in the mean time, I'm tempted to play around with Horizon instead.

<comment><USER7> Have you checked out Apollo Client? It's an alternative to Relay that works with all GraphQL servers and brings in a lot of the simplicity of Falcor: [http://dev.apollodata.com/](http://dev.apollodata.com/)

It includes features like optimistic UI, easy ways to invalidate cache after mutations, arbitrary pagination models, and more.

(Disclaimer: I work on Apollo)

<comment><USER6> I haven't. Maybe I will some time. My conclusion after struggling with Relay, though, was that there's a lot of complexity in GraphQL that I don't understand as well.

Fortunately, this guide links to a tutorial on that too: [https://learngraphql.com/basics/introduction](https://learngraphql.com/basics/introduction)

<comment><USER5> I'm 100% with you on Relay being overcomplicated. My first project with it involved a lot of set up and the other frontend developer completely gave up on learning Relay entirely.

In contrast, for a newer project I used Apollo and was up and running in no time at all. It's very easy to reason about, but also gives you great React integrations.

</comment></comment></comment></comment><comment><USER8> Awesome. Do you have anything regarding server implementation?

<comment><AUTHOR> Thanks for your feedback scottmf! We're mostly working with frontend developers and trying to simplify their workflows as much as possible. One of the first and most important steps are great learning resources. That's why we're focussing for now on frontend technologies such as Relay, Apollo, ...

We'd be more than happy to share some insights on what we've learned while building Graphcool. The best way going forward will be following our blog: [https://blog.graph.cool/](https://blog.graph.cool/)

Also, feel free to join our Slack in case you have any questions: [https://slack.graph.cool/](https://slack.graph.cool/)</comment></comment>


Show HN: Web pages stored entirely in the URL - <AUTHOR> https://github.com/jstrieb/urlpages <comment><USER2> I think a few folks are missing the point.

How are web pages shared? By distributing links.

How are pages censored? By deplatforming. This usually happens by activists targeting the host right in their cashflow.

If you remove the need to host, you remove a point of failure from publishing. Now the link is the content.

It's an interesting concept whether or not you agree with this implementation.

<comment><USER3> But somehow you need to share the link itself, right?

So instead of sharing the link couldn't you just... Share whatever the message or content is?

Edit: what I'm saying is that "activists" (which is an interesting concern btw) will pressure the platform that the link is being shared on because the link IS the content.

<comment><USER4> Which also means rhat everybody with the link can change it's content which means you cannot trust this content more than the person who sent it to you.

Why not just copy and paste the content directly?

<comment><USER5> For the same reason your not sending html-files via email when you want to share a website I suppose.

</comment></comment></comment></comment><comment><AUTHOR> Hello, creator here!

I originally conceived this as a simple, static CodePen clone, but I felt the "publishing" of pages as URLs was an interesting idea. So I decided to present that aspect of it front and center, even though it wasn't really the point of the project at the beginning.

About a year ago, I had a proof of concept version that I ended up using fairly frequently for sharing quick HTML/CSS/JavaScript experiments (never as a means of seriously publishing and sharing censorship-proof content). I found that if its use is limited to that case, it is actually very handy and robust!

Lots of interesting feedback in the comments, largely more positive than I expected. I was expecting criticism of code quality since I have minimal web development experience, but instead the (valid) criticism is coming from people who are taking the project's applications and use cases seriously, which I appreciate.

<comment><USER2> It's a very interesting concept in the current climate. The idea of sharing content as atomic and self-sufficient units of data, much like you would share the raw idea itself, but with the ability to have layout, rich content and possibly even interactivity. A web of ideas rather than ideas on pages with servers. The disintermediation of the web.

I suspect that's why this item is so popular.

<comment><AUTHOR> That's why I let that part of the project be the focus!

I also hope the interest it has generated will inspire others with more knowledge and experience to make better versions or variations that are more practical.

<comment><USER2> A deeper implementation would be a browser designed for this.

Some hard problems. E.g. URLs provide a consistent place to go to find varying content. If the URL is the content, then it cant vary. How does one solve content discovery without resorting to hosting?

PS: The first person who says blockchain buys the beers.

<comment><USER6> Blockchain would be silly, there's no need for a globally-consistent view just to have search.

Distributed search has been around for some time, e.g. eMule uses Kad[1], Tribler[2] has a solution based on Tor, but the most appropriate here is probably YaCy[3]. Of course, all of those are technically "hosted", insofar as p2p involves peers acting as servers. But I bet someone has made a f2f[4] version, meaning you'd only serve to a few, hopefully trusted peers.

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

[2] [https://www.tribler.org/](https://www.tribler.org/)

[3] [https://yacy.net/](https://yacy.net/)

[4] [https://en.wikipedia.org/wiki/Friend-to- friend](https://en.wikipedia.org/wiki/Friend-to-friend)

</comment></comment></comment></comment></comment><comment><USER7> I fail to see how this isn't ripe for abuse. I can execute javascript in a person's browser using _your_ domain.

[http://tinyurl.com/y5m7o4j8](http://tinyurl.com/y5m7o4j8)

<comment><USER8> How is this bad? If the domain is only used to host the decoder, what bad stuff can a bad guy do by executing JS? I get how this would be a vulnerability on Facebook, but why is it bad here?

<comment><USER7> Have someone who controls the domain and is logged in to their website admin area in another tab click a link you've crafted to steal and send you their delicious cookies.

Or, any time this sort of thing comes up in a thread on a news website like this one, an opportunistic attacker could post a malicious payload in a link and watch as all the excited people blindly click away.

</comment></comment></comment><comment><USER9> >cannot be taken down

But all you did is shift the burden of hosting it to wherever you post the link, which can still take down your link.

<comment><USER10> Worse, it's very easy now to repost the link with modified data.

<comment><USER11> Why is that a bad thing and not a feature?

<comment><USER12> How do you know what the original message was supposed to be?

</comment></comment></comment></comment><comment><USER8> One idea I've thought about in this same area is 'compressing' the URLs via Unicode. Suppose you limit the page contents to just [a-zA-Z0-9] and about 15 special characters, and space/newline. Documents would be rendered without any formatting aside from what you can do with a monospace font (all caps, white space, tables, etc.).

This allows about 80 unique characters - about 6.5 bits per character. There are dozens of thousands of visible Unicode characters, at least 8 bits each. Using modern compression techniques you can probably get around 4 or maybe even 5 characters of the real text into one visible Unicode character. This would compress the messages so that you can share them over SMS/Twitter (split into a few parts perhaps) or Facebook without posting giant pages of text.

The data could start with a 'normal' not-rare-Unicode character indicating the language, and the same character at the end of the stream to make it easy to copy paste:

        a<unintelligible Unicode garbage>a

Multiple translation tables could exist for different languages. Japanese and Indic languages have ~50 alphabet characters but no capitals, so I think you would be able to get similar compression regardless of input language.

Users would go to a website that does decompression with JS and just paste in the compressed text to view the plaintext. And vice versa. If the compression format is open then anyone can make and host a [de]compressor.

Version codes may be useful to add, so that more efficient compression techniques don't break backwards compatibility. The first release of the English compression algorithm would start and end with 'aa', a better algorithm released a few years later would use 'ab', etc. Similarly the version code could be used to indicate a more restricted set of characters to allow for better compression - [a-z0-9] and . , space newline is 30 characters which is only 5 bits per character before any further compression.

<comment><USER13> One of my toy projects: [https://github.com/thanatos/baseunicode](https://github.com/thanatos/baseunicode) ; there's probably a lot that could be done better, and the alphabet it uses needs to be greatly expanded.

There are few other implementations of the same idea out there, too. Here's another one: [https://github.com/qntm/base65536](https://github.com/qntm/base65536) ; since it uses a power-of-two sized alphabet, it avoids some of the work mine has to do around partial output bytes. That link also links to some other ideas & implementations

The exact metric I cared about at the time was compressing for screen-space, not for actual byte-for-byte space. I wrote it after spending some time in a situation where doing a proper scp was just a PITA, unfortunately, but copy/pasting into a terminal is almost always a thing that works. But I was also dealing with screen/tmux, which makes scrolling difficult, so I wanted the output to fit in a screen. From that, you can implement a very poor man's scp with tar -cz FILES | base64 ; the base-unicode bit replaces the base64.

Mine doesn't use Huffman coding as it wants to stream data / it leans on gzip for doing that.

</comment></comment><comment><USER14> Shameless self promotion, but if you're interested in this sort of thing and know a little about DNS, you can similarly host a website purely through DNS records; no hosting, no cost, etc. [https://serv.from.zone](https://serv.from.zone)

</comment><comment><USER15> what about data urls? No need for hosting page:

data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E

<comment><USER16> That's what I thought he would aim for. This is _actually_ safe from being taken down whereas op's solution needs op's website to decode the url.

<comment><AUTHOR> While I agree that this is technically correct, I feel it ignores the spirit of the project.

Since I released it open-source, my expectation is that anyone who cares about safety from takedowns will clone and host one or more of their own. Or, for that matter, use the files offline with shared base-64 encoded URLs

<comment><USER16> If your site goes down, all the links go broken. To use a clone I'd need to manually copy a part of a dead link and append it on the clone url. The links are actually just data stores in need of a renderer. Why not use an html file instead?

</comment></comment></comment></comment><comment><USER17> Cool! I like projects like this, which contain their state in the URL so you can share it.

Another such tool is [1] This gradient generator, which encodes the gradient parameters into the url so you can come back and use the tool to edit it!

Anyway good job on creating this!

[1] [https://www.colorzilla.com/gradient- editor/](https://www.colorzilla.com/gradient-editor/)

</comment><comment><USER18> Similar to this [0] from a few years ago. That one also had some basic encryption included. Some previous discussions[1,2] of that tool highlights that this can easily be abused for xss or distribution of illegal materials which you may not want to find yourself the focus of.

[0] [https://davidpartson024.github.io/no_host/encryptedPageMaker...](https://davidpartson024.github.io/no_host/encryptedPageMaker.html)

[1] [https://www.reddit.com/r/programming/comments/47gjbv/experim...](https://www.reddit.com/r/programming/comments/47gjbv/experimental_url_abuse/)

[2] [https://www.reddit.com/r/InternetIsBeautiful/comments/4o76gn...](https://www.reddit.com/r/InternetIsBeautiful/comments/4o76gn/make_your_own_encrypted_web_pages_without_needing/)

<comment><USER19> Unsure I really understand the XSS risk that's discussed in the links you provided. Nobody cares about that origin because it has nothing of value hosted on it and it's not like you'd be able to access cookies from a different origin.

The worst you could do is exploit a browser zero-day, but you can do that on any static hosting site already!

<comment><USER20> You are abusing trust - now it's going to be the jstrieb.github.io who is serving malware, and since his system serves whatever JS I provide by design it becomes a very effective XSS host.

<comment><USER21> It's not really jstrieb.github.io that's serving it, because since the content is in the url fragment, it is never sent to or from the server, it's handled entirely clientside.

>a very effective XSS host.

It can only do XSS against jstrieb.github.io which has nothing valuable. So it's not useful for anything. It can't be used in a <script> tag to obfuscate XSS attacks against other websites either, because the response isn't formatted as javascript. I guess it could be used in <iframes> on other websites in order to add obfuscation, but I think the use to attackers would be quite low.

<comment><USER20> You still need something to serve you the initial document.write js, unless you are going to convince people to open your links with locally saved "index.html". I called it "XSS" because you can execute arbitrary javascript, and I was trying to avoid bluntly calling it "malware".

Though I probably should have. Here is an example of a HackerNews login page served with jstrieb.github.com [https://tinyurl.com/yypvh3by](https://tinyurl.com/yypvh3by), you can login to news.ycombinator.com with it, but it easily could have been a phishing site.

My point is, this is a very good idea for offensive operations.

<comment><USER21> But someone could register the github account newsycombinator and then serve an identical phishing page at newsycombinator.github.io .

I guess you're right that it's useful for takedown resistance in phishing attacks. It's useless for small, sophisticated, targeted phishing attacks, but for large blunt untargeted phishing attacks it could be useful to have a site that would be difficult to take down and censor.

But I do consider phishing different than XSS.

</comment></comment></comment></comment></comment></comment><comment><USER22> This reminds me of [https://itty.bitty.site/edit](https://itty.bitty.site/edit), which does the exact same thing but with a size limit, no in browser editor, and if I'm not mistaken, a compression algorithm.

<comment><USER23> So with both of these cases, the site itself (github pages or bitty.site) need to be up in order to decode the content? It's not like the way images can be stored in a data URL, right?

</comment></comment><comment><USER24>
      data:text/html,%3Ch1%3EReinventing%20the%20Wheel%3C%2Fh1%3E%0A%3Cp%3EThis%20page%20is%20in%20the%20url.%3Cp%3E%0A%3Cp%3EHow%20strange.%3C%2Fp%3E

<comment><USER25> Is there a way to make this clickable? At least in FF Android it isn't.

<comment><USER15> Also you can use a iframe in page with link.

</comment></comment></comment><comment><USER26> I don't see any effective difference between putting the data in a URL and putting the data in a local HTML file and opening the file in a browser. (And if you're going to put the data in a URL, you should probably be using a data: URL.)

<comment><USER27> One difference is that when you visit/bookmark some normal webpage, you save on your computer only its title and address. With this, you are saving the page content as well, just by visiting the page.

<comment><USER26> With the data in a file you are also saving the page content (in a file). I don't see what difference it makes whether you're saving that content in a file or in a bookmark. (At the risk of stating the obvious, bookmarks are stored in a file.)

<comment><USER28> Its different because sharing a link is much easier than sharing a file

<comment><USER26> Not if the link and the file are the same size.

<comment><USER29> Take discord for example: you can only post a file of certain size, but you can post unlimited text

<comment><USER30> Discord messages aren't actually unlimited; they are limited to 2,000 characters, unless this restriction was recently removed. I have personally encountered this, mainly when using code blocks.

</comment></comment></comment></comment></comment></comment></comment><comment><USER31> Makes me think of [https://privatebin.info](https://privatebin.info) and [https://flems.io](https://flems.io) which also entirely store the content of the webpage in the URL. (Flems is like a codepen)

</comment><comment><USER32> I see some potential for using this for content distribution via QR codes. Create a page, make a QR code sticker and you're now hosting a website on a wall.

<comment><USER33> Couple notes: I tested doing this on a fork, QR codes have a 3k upper limit (which is fine for some pages), and when using large amounts of data like this they switch to a large-payload format, which seems to be blocked by the iPhone camera.

Either they're blocking large-payload qr codes or by url length.

</comment></comment><comment><USER34> Wait until they find out about browser URL length limits :)

<comment><USER35> I was wondering the same thing. Most browsers limit URLs to 2083 characters.

Edit: IE is 2083, Chrome is 1032

<comment><USER36> Name one modern browser (let alone "most") that does that. I'll wait.

PS: IE6-9 don't count as modern browsers, and haven't for a long time. To my knowledge, they were the _only_ browsers to limit to exactly 2083 characters.

<comment><USER37> if you wait long enough, someone will submit patches to firefox and chrome to fix this ridiculous 100k bytes url limit to something smaller

<comment><USER36> Patches have been proposed before, but not accepted. That said, great point. ;)

</comment></comment></comment></comment></comment><comment><USER37> Saying that this "cannot be taken down" is quite stupid. It's all fine and dandy if you live in a place without strong censorship, but in a situation where information that cannot be taken down would be really necessary, how long do you think it will take for the interested parties to find out that the content is in the message?

<comment><USER38> The content can be hidden in a short url, so it is potentially a new thing that censors would have to deal with, unless they want to block all short URL services.

<comment><USER39> You still need a URL though.

Might as well just use DNS txt fields.

</comment></comment></comment><comment><USER40> I wondered about this use-case in the context if data URIs.

In theory, an alternative way to serve page content (instead via HTTP 200) should be to return a 3xx redirect and set the location header to a data URI.

This would indeed allow you to use URL shorteners or any kind of open redirect as a de-facto web host.

("In theory", in the sense that HTTP allow redirects to point to any kind of URL, so there is nothing saying it couldn't be a data uri)

I imagine this kind of situation is something that browser developers explicitly want to avoid, because the security implications would be a nightmare. So practically browsers _do not_ follow redirects to data uris.

</comment><comment><USER41> Example: [https://jstrieb.github.io/urlpages/editor/#eyJjc3MiOiJib2R5I...](https://jstrieb.github.io/urlpages/editor/#eyJjc3MiOiJib2R5IHtcbiAgYmFja2dyb3VuZDogYmxhY2s7XG4gIGNvbG9yOiBsaW1lZ3JlZW47XG4gIHBhZGRpbmc6IDI1cHg7XG4gIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xufVxuXG5zZWN0aW9uIHtcbiAgcGFkZGluZzogMzVweDtcbiAgbWF4LXdpZHRoOiAxMDIwcHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IGF1dG87XG4gIG1hcmdpbi10b3A6IDI1cHg7XG4gIG1hcmdpbi1ib3R0b206IDI1cHg7XG4gIGJvcmRlcjogM3B4IHNvbGlkIGxpbWVncmVlbjtcbn1cblxuLmZpcnN0IHtcbiAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTM1cHgpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBib3JkZXI6IG5vbmU7XG59XG5cbi5hc2NpaS1hcnQge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICBmb250LXNpemU6IGNhbGMoMS4xdncpO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3aWR0aDogNzBjaDtcbn1cblxuLmNlbnRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IGF1dG87XG59XG5cbi5kZXNjIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ubWlkZGxlIHtcbiAgbWFyZ2luLXRvcDogY2FsYygxNXZoKTtcbn1cblxuYSB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6IGxpbWVncmVlbjtcbn0iLCJqcyI6IiIsImh0bWwiOiI8c2VjdGlvbiBjbGFzcz1cImZpcnN0XCI+XG48ZGl2IGNsYXNzPVwibWlkZGxlXCI+XG48ZGl2IGNsYXNzPVwiYXNjaWktYXJ0IGNlbnRlclwiPlxuPCEtLSBZZXMsIEkgZGlkIGhhbmQtY29kZSB0aGlzIEFTQ0lJIGFydC4gSSBtYWRlIGl0IG9uIGEgcGxhbmUgcmlkZSBmcm9tIE5ldyBZb3JrIHRvIFBpdHRzYnVyZ2ggd2hlbiBJIHByb2JhYmx5IHNob3VsZCBoYXZlIGJlZW4gZG9pbmcgYWN0dWFsIGhvbWV3b3JrLiAtLT5cbjxwPlxuICBfX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fICAgXG4gL19fICAgXy8gICAgICAgICAgICAgICAgIF8gICAgICAvICBfX19fXy8gICBfICAgICAgICAgXyAgICAgICAgX1xuICAgIHwgfCAgICAgICAgICAgICAgICAgIC8gfCAgICAgXFwgIFxcX19fXyAgX3wgfF8gIF8gICAoXykgX19fXyAvIHxcbiAgICB8IHxfX19fXyBfX19fXyAgX19fX198IHxfX18gICBcXF9fX18gIHwvXyAgIF8vfCBcXF9fIF8gLyBfXyBcXHwgfF9fX1xuICAgIHwgfCAgXyAgfCAgX19fXFx8ICBfICB8ICBfICBcXCAgICAgICB8IHwgIHwgfCAgfCAgX198IHwgIF9fXy98ICBfICBcXFxuX19fX3wgfCB8X3wgfCB8X19fX3wgfF98IHwgfF98IHwgIF9fX19ffCB8ICB8IHwgIHwgfCAgfCB8IHxfX18gfCB8X3wgfFxuXFxfX19fX3xfX18gIHxfX19fXy98X19fX198X19fX198IC9fX19fX19fLyAgfF98ICB8X3wgIHxffFxcX19fXy98X19fX198XG4gICAgICAgICAgXFxffFxuPC9wPlxuPC9kaXY+XG48cCBjbGFzcz1cImRlc2NcIj5cblByb2dyYW1tZXIgJm5ic3A7JmJ1bGw7Jm5ic3A7IEhhY2tlciAmbmJzcDsmYnVsbDsmbmJzcDsgU3R1ZGVudCAmbmJzcDsmYnVsbDsmbmJzcDsgUmVzZWFyY2hlclxuPC9wPlxuPC9kaXY+XG48L3NlY3Rpb24+In0=)

</comment><comment><USER42> This principle of storing content in a URL is also used at Falstad CircuitJS, where you can draw an electronic circuit diagram and export a link. Links get quite big for complex circuits, but it's very easy to store them. My project notes are full of links to the simulated circuits, example: [http://www.falstad.com/circuit/circuitjs.html?cct=$+1+0.0000...](http://www.falstad.com/circuit/circuitjs.html?cct=$+1+0.000005+10.20027730826997+54+5+50%0AR+48+160+0+160+0+1+40+5+0+0+0.5%0Aa+192+144+272+144+0+15+-15+1000000+-0.00004986625727894353+0%0Aa+192+272+272+272+0+15+-15+1000000+-4.986675593652975+-4.986725460408912%0Ag+192+160+192+192+0%0Ar+192+128+128+128+0+47000%0Ar+208+80+272+80+0+47000%0Aw+272+80+272+144+0%0Aw+208+80+192+80+0%0Aw+192+80+192+128+0%0Aw+128+128+48+128+0%0Aw+48+128+48+160+0%0Aw+192+256+176+256+0%0Aw+176+256+176+224+0%0Aw+176+224+272+224+0%0Aw+272+224+272+272+0%0Aw+192+288+48+288+0%0Aw+48+288+48+160+0%0A174+336+160+336+224+0+1000+0.2525+Resistance%0Aw+336+224+272+224+0%0Aw+336+160+336+144+0%0Aw+336+144+272+144+0%0Aw+352+192+416+192+0%0Aw+576+208+624+208+0%0A174+416+192+416+256+0+1000+0.005+Resistance%0Ag+416+256+416+272+0%0Aa+496+208+576+208+0+15+-15+1000000+2.066047243970914+2.066067904443354%0Aw+496+224+432+224+0%0Aw+496+192+496+160+0%0Aw+496+160+576+160+0%0Aw+576+160+576+208+0%0Ao+0+64+0+4098+5+0.00078125+0+2+0+3%0Ao+22+64+0+4099+5+0.00009765625+0+2+22+3%0A)

</comment><comment><USER25> so instead of adressing the content you are sending the content directly. brilliant. who could come up with such an amazing idea...

seriously, though: this has some marginal advantages compared to just sending the sites such as being supported as clickable in almost every program and being allowed in size restricted posts which allow arbitrarily long links

</comment><comment><USER43> This is really interesting. It strikes me as a modern encrypted communications method, except as designed currently everyone already has the key. I wonder how much could be shared this way, and whether it could be sufficiently secured to become a "private" means of distribution.

<comment><USER44> It seems like the main content bottleneck is the fact that they store it all in straight-up base64. Trying to, say, share binaries across the net would become very unwieldy very quickly.

Now, if they were to implement some compression before URL encoding, it might then be feasible to break up large files into a series of links or something...

</comment></comment><comment><USER45> I use this technique for sharing new tree programming language grammars.

As you modify or create a language, I generate a deep link that contains all the grammar code and sample code for your language in the url:

[http://treenotation.org/sandbox/build/#standard%20stump](http://treenotation.org/sandbox/build/#standard%20stump)

</comment><comment><USER46> Shameless self plug - I cleaned up my take on a very similar idea a bit today after seeing this post: [https://github.com/allanlw/hgscn2](https://github.com/allanlw/hgscn2)

Basically, it uses a data URI and Webtorrent for a similar concept.

<comment><USER33> Really neat, thanks for sharing!

</comment></comment><comment><USER47> [https://itty.bitty.sites](https://itty.bitty.sites) ??

</comment><comment><USER48> This is the webdev version of "if x==true then return true else return false"

</comment><comment><USER49> Interesting! It's like as if we'd had the same intent. Great minds think alike ;) I created writer.gorilla.moe and editor.gorilla.moe a while ago, exactly with the same intent :)

</comment><comment><USER50> >See the "published" version here

Doesn't work in Safari (Mojave)

<comment><AUTHOR> Will try and find a way to test this. Feel free to open an issue on GitHub

<comment><AUTHOR> I have opened an issue on GitHub.

[https://github.com/jstrieb/urlpages/issues/9](https://github.com/jstrieb/urlpages/issues/9)

</comment></comment></comment><comment><USER51> This is neat but lacking the obvious data-uri format which similar services implement:

        data:text/html;base64,...

</comment><comment><USER52> Makes me wonder how caching and other stuff are handled by browsers, or the impact of it on load times. Anyway, cool concept.

</comment><comment><USER53> All content included in "pen register data" (headers). Thumbs up from the LE/intelligence community! /s

</comment><comment><USER54> Wouldn't it be a better idea to have the URL-stored webpage use WebTorrent to host the actual content through P2P?

</comment><comment><USER55> Perhaps I'm misreading / misunderstanding some of the comments but long to short this is effectively a .url file format (so to speak). Yes, it looks like a URL but it's not uniform'ing, it's not resource'ing, and it's not locator'ing - in the traditional sense of those three letters.

</comment><comment><USER56> You could just use data URLs. For example:

      data:text/html,<p>Hello%20World</p>

<comment><USER57> Yes, that is what I thought, too.

And furthermore, no internet connection is needed to access data: URIs.

</comment></comment><comment><USER58> Reminds me of [https://flems.io/](https://flems.io/)

</comment><comment><USER59> It's a bit weird that all the example websites are "hosted" on tinyurl.

</comment><comment><USER60> Very cool project. It would be nice to provide an example of such a link on the page.

<comment><USER61> Isn't there an example to his personal page in the GitHub README?

[https://github.com/jstrieb/urlpages#examples](https://github.com/jstrieb/urlpages#examples)

<comment><USER60> You're right, I expected to see a huge link so I didn't notice it.

Here is how the link looks like :

[https://jstrieb.github.io/urlpages/#JTBBJTNDIURPQ1RZUEUlMjBo...](https://jstrieb.github.io/urlpages/#JTBBJTNDIURPQ1RZUEUlMjBodG1sJTNFJTBBJTNDaGVhZCUzRSUwQSUzQ3N0eWxlJTNFJTBBYm9keSUyMCU3QiUwQSUyMCUyMGJhY2tncm91bmQlM0ElMjBibGFjayUzQiUwQSUyMCUyMGNvbG9yJTNBJTIwbGltZWdyZWVuJTNCJTBBJTIwJTIwcGFkZGluZyUzQSUyMDI1cHglM0IlMEElMjAlMjBmb250LWZhbWlseSUzQSUyMHNhbnMtc2VyaWYlM0IlMEElN0QlMEElMEFzZWN0aW9uJTIwJTdCJTBBJTIwJTIwcGFkZGluZyUzQSUyMDM1cHglM0IlMEElMjAlMjBtYXgtd2lkdGglM0ElMjAxMDIwcHglM0IlMEElMjAlMjBkaXNwbGF5JTNBJTIwYmxvY2slM0IlMEElMjAlMjBtYXJnaW4lM0ElMjBhdXRvJTNCJTBBJTIwJTIwbWFyZ2luLXRvcCUzQSUyMDI1cHglM0IlMEElMjAlMjBtYXJnaW4tYm90dG9tJTNBJTIwMjVweCUzQiUwQSUyMCUyMGJvcmRlciUzQSUyMDNweCUyMHNvbGlkJTIwbGltZWdyZWVuJTNCJTBBJTdEJTBBJTBBLmZpcnN0JTIwJTdCJTBBJTIwJTIwaGVpZ2h0JTNBJTIwY2FsYygxMDB2aCUyMC0lMjAxMzVweCklM0IlMEElMjAlMjBkaXNwbGF5JTNBJTIwZmxleCUzQiUwQSUyMCUyMGZsZXgtZGlyZWN0aW9uJTNBJTIwY29sdW1uJTNCJTBBJTIwJTIwYWxpZ24taXRlbXMlM0ElMjBjZW50ZXIlM0IlMEElMjAlMjBib3JkZXIlM0ElMjBub25lJTNCJTBBJTdEJTBBJTBBLmFzY2lpLWFydCUyMCU3QiUwQSUyMCUyMGZvbnQtZmFtaWx5JTNBJTIwbW9ub3NwYWNlJTNCJTBBJTIwJTIwZm9udC1zaXplJTNBJTIwY2FsYygxLjF2dyklM0IlMEElMjAlMjBmb250LXdlaWdodCUzQSUyMGJvbGQlM0IlMEElMjAlMjB3aGl0ZS1zcGFjZSUzQSUyMHByZS13cmFwJTNCJTBBJTIwJTIwd2lkdGglM0ElMjA3MGNoJTNCJTBBJTdEJTBBJTBBLmNlbnRlciUyMCU3QiUwQSUyMCUyMGRpc3BsYXklM0ElMjBibG9jayUzQiUwQSUyMCUyMG1hcmdpbiUzQSUyMGF1dG8lM0IlMEElN0QlMEElMEEuZGVzYyUyMCU3QiUwQSUyMCUyMHRleHQtYWxpZ24lM0ElMjBjZW50ZXIlM0IlMEElN0QlMEElMEEubWlkZGxlJTIwJTdCJTBBJTIwJTIwbWFyZ2luLXRvcCUzQSUyMGNhbGMoMTV2aCklM0IlMEElN0QlMEElMEFhJTIwJTdCJTBBJTIwJTIwdGV4dC1kZWNvcmF0aW9uJTNBJTIwbm9uZSUzQiUwQSUyMCUyMGNvbG9yJTNBJTIwbGltZWdyZWVuJTNCJTBBJTdEJTBBJTNDJTJGc3R5bGUlM0UlMEElM0NzY3JpcHQlMjB0eXBlJTNEJTIydGV4dCUyRmphdmFzY3JpcHQlMjIlM0UlMEElMEElM0MlMkZzY3JpcHQlM0UlMEElM0MlMkZoZWFkJTNFJTBBJTNDYm9keSUzRSUwQSUzQ3NlY3Rpb24lMjBjbGFzcyUzRCUyMmZpcnN0JTIyJTNFJTBBJTNDZGl2JTIwY2xhc3MlM0QlMjJtaWRkbGUlMjIlM0UlMEElM0NkaXYlMjBjbGFzcyUzRCUyMmFzY2lpLWFydCUyMGNlbnRlciUyMiUzRSUwQSUzQyEtLSUyMFllcyUyQyUyMEklMjBkaWQlMjBoYW5kLWNvZGUlMjB0aGlzJTIwQVNDSUklMjBhcnQuJTIwSSUyMG1hZGUlMjBpdCUyMG9uJTIwYSUyMHBsYW5lJTIwcmlkZSUyMGZyb20lMjBOZXclMjBZb3JrJTIwdG8lMjBQaXR0c2J1cmdoJTIwd2hlbiUyMEklMjBwcm9iYWJseSUyMHNob3VsZCUyMGhhdmUlMjBiZWVuJTIwZG9pbmclMjBhY3R1YWwlMjBob21ld29yay4lMjAtLSUzRSUwQSUzQ3AlM0UlMEElMjAlMjBfX19fX19fJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwX19fX19fX18lMjAlMjAlMjAlMEElMjAlMkZfXyUyMCUyMCUyMF8lMkYlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBfJTIwJTIwJTIwJTIwJTIwJTIwJTJGJTIwJTIwX19fX18lMkYlMjAlMjAlMjBfJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwXyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMF8lMEElMjAlMjAlMjAlMjAlN0MlMjAlN0MlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkYlMjAlN0MlMjAlMjAlMjAlMjAlMjAlNUMlMjAlMjAlNUNfX19fJTIwJTIwXyU3QyUyMCU3Q18lMjAlMjBfJTIwJTIwJTIwKF8pJTIwX19fXyUyMCUyRiUyMCU3QyUwQSUyMCUyMCUyMCUyMCU3QyUyMCU3Q19fX19fJTIwX19fX18lMjAlMjBfX19fXyU3QyUyMCU3Q19fXyUyMCUyMCUyMCU1Q19fX18lMjAlMjAlN0MlMkZfJTIwJTIwJTIwXyUyRiU3QyUyMCU1Q19fJTIwXyUyMCUyRiUyMF9fJTIwJTVDJTdDJTIwJTdDX19fJTBBJTIwJTIwJTIwJTIwJTdDJTIwJTdDJTIwJTIwXyUyMCUyMCU3QyUyMCUyMF9fXyU1QyU3QyUyMCUyMF8lMjAlMjAlN0MlMjAlMjBfJTIwJTIwJTVDJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdDJTIwJTdDJTIwJTIwJTdDJTIwJTdDJTIwJTIwJTdDJTIwJTIwX18lN0MlMjAlN0MlMjAlMjBfX18lMkYlN0MlMjAlMjBfJTIwJTIwJTVDJTBBX19fXyU3QyUyMCU3QyUyMCU3Q18lN0MlMjAlN0MlMjAlN0NfX19fJTdDJTIwJTdDXyU3QyUyMCU3QyUyMCU3Q18lN0MlMjAlN0MlMjAlMjBfX19fXyU3QyUyMCU3QyUyMCUyMCU3QyUyMCU3QyUyMCUyMCU3QyUyMCU3QyUyMCUyMCU3QyUyMCU3QyUyMCU3Q19fXyUyMCU3QyUyMCU3Q18lN0MlMjAlN0MlMEElNUNfX19fXyU3Q19fXyUyMCUyMCU3Q19fX19fJTJGJTdDX19fX18lN0NfX19fXyU3QyUyMCUyRl9fX19fX18lMkYlMjAlMjAlN0NfJTdDJTIwJTIwJTdDXyU3QyUyMCUyMCU3Q18lN0MlNUNfX19fJTJGJTdDX19fX18lN0MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUNfJTdDJTBBJTNDJTJGcCUzRSUwQSUzQyUyRmRpdiUzRSUwQSUzQ3AlMjBjbGFzcyUzRCUyMmRlc2MlMjIlM0UlMEFQcm9ncmFtbWVyJTIwJTI2bmJzcCUzQiUyNmJ1bGwlM0IlMjZuYnNwJTNCJTIwSGFja2VyJTIwJTI2bmJzcCUzQiUyNmJ1bGwlM0IlMjZuYnNwJTNCJTIwU3R1ZGVudCUyMCUyNm5ic3AlM0IlMjZidWxsJTNCJTI2bmJzcCUzQiUyMFJlc2VhcmNoZXIlMEElM0MlMkZwJTNFJTBBJTNDJTJGZGl2JTNFJTBBJTNDJTJGc2VjdGlvbiUzRSUwQSUzQyUyRmJvZHklM0UlMEE=)

</comment></comment></comment><comment><USER62> I don't get anything other than a page with three text areas on iOS's Safari.

</comment><comment><USER63> There is also a hack to put mini-games in the URL line using emojis.

</comment><comment><USER64> Awesome. It could be used in email signature I guess.

</comment><comment><USER65> Ayyyy, finally a use for my ultrawide monitor!

</comment><comment><USER66> How do you add recursive links?

<comment><USER67> indirection! you could make the website text

      link to self:
      http://url.shortener/some-vanity-url

and then get the vanity url and point it at your site's link.

<comment><USER66> But if you use an url shortener, then the website is not stored entirely in the url anymore.

<comment><USER67> it doesn't have to be an url shortener, but i believe that you need some external link to get self-reference here. as a rough handwavy analogy, linked lists use a pointer to the tail, not a value of the tail (here the value being the site-stored-in-a-url, and the pointer being the shortened url)

</comment></comment></comment></comment><comment><USER68> When you use "Short link to publish" in the editor, you are basically hosting it in tinyurl???

</comment><comment><USER69> Sorry don't get this. The basic premise of REST is to access information stored on the network elsewhere. You are asking people to store information in their bookmarks.

<comment><USER70> Who said anything about REST?</comment></comment>


There is a prime number which contains Super Mario (2017) - <AUTHOR> http://akiyah.hatenablog.com/entry/2017/12/06/204024 <comment><AUTHOR> The article is written in Japanese, but I thought the idea would be obvious enough from the picture (and the linked source code) even if you don't read Japanese. In case you are wondering, here is a translation.

\----

11111111111122211111111111122622111111999992266211119999999222221119999999966666111999999999996611166622622266661162262262222266116226622222222611622662226222261662222266666661166662222666626111166222222226611111999966966661166666699696661166666666966966116666666699696111662266669966911162222669999621112222269992999111222229999999911121229999999991161229999999999166111999999999666611169999999966666669669999996666666999669999666666699999119966666669999911111111666999911111111166111111111111116111111111111111

is a 512-digit prime number. When fit in a 16 x 32 rectangle, it will be:

        1111111111112221
        1111111111122622
        1111119999922662
        1111999999922222
        1119999999966666
        1119999999999966
        1116662262226666
        1162262262222266
        1162266222222226
        1162266222622226
        1662222266666661
        1666622226666261
        1116622222222661
        1111999966966661
        1666666996966611
        6666666696696611
        6666666699696111
        6622666699669111
        6222266999962111
        2222269992999111
        2222299999999111
        2122999999999116
        1229999999999166
        1119999999996666
        1116999999996666
        6669669999996666
        6669996699996666
        6669999911996666
        6669999911111111
        6669999111111111
        6611111111111111
        6111111111111111

which can be colored: (Super Mario appears)</comment>


Amazon Said to Plan Premium Alexa Speaker with Large Screen - <AUTHOR> https://www.bloomberg.com/news/articles/2016-11-29/amazon-said-to-plan-premium-alexa-speaker-with-large-screen <comment><USER2> I wonder how they are going to adapt the API for screens ? Maybe expand the card API ?

<comment><USER3> That's my guess. If you check out the Alexa that's built into the current gen Fire TV stick, you can see how they are already offering visual responses to go with the audio.

</comment></comment><comment><USER4> I am super excited about this, but I'd be very cautious about expectations. I've already gotten torn up in social media for trying to explain how an ambient information display is a Good Thing (think a clock or a calendar or a thermometer), without being something you necessarily interact with.

The second someone asks, "Why don't I just get a tablet, then?" you know they've missed it. They need to build a Chumby, not an iPad... but if the market is expecting an iPad, they're going to be sorely disappointed.

...and if the market is disappointed, then I'm going to miss out on a great replacement for my long-in-the-tooth Chumby8.</comment>


Ask HN: Is there something like Codecademy for C++? - <AUTHOR>

A friend of mine just started using Codecademy for Python and loves it. I vaguely remember seeing one or two similar sites for C++ either in the wild or here on HN. Do they exist? If so, could you please link me to them? <comment><USER2> I don't know about anything like Codecademy for C++, but based on my personal experience learning C++, I'd recommend starting with a solid foundation in C. C is, for beginner intents and purposes, a subset of C++, and understand the concepts of C will make it a lot easier to pick up C++. I'd highly recommend Learn C The Hard Way ( [http://c.learncodethehardway.org/book/](http://c.learncodethehardway.org/book/) ). For C++, like Watabou, I really liked C++ Primer Plus, by Prata.

</comment><comment><USER3> Not the same thing, but I'm the creator of EngineHere. We're a teaching platform for coding that connects groups of students with instructors in for real-time virtual classes.

We'll definitely offer C++ in the near future (plus Haskell, Erlang, and other esoteric languages).

</comment><comment><USER4> I don't know if there's such a site, but for C++, I had an awesome time with C++ Primer Plus by Stephen Prata. I love coding books with lots of exercises to do at the end of each chapter and this book has tons of them. Try it out!

It's moderately easy for beginners to dive right in but I recommend already knowing some amount of C beforehand.

</comment><comment><USER5> I think the 3Dbuzz classes are the closest you're going to get to a 'modern' MOOC. They've been around for years.

[http://www.3dbuzz.com/training/topic/c-plus- plus](http://www.3dbuzz.com/training/topic/c-plus-plus)

edit: "Building 2D games in C++ - A Beginners Introduction" is free for the most part. For the other classes you have to pay.</comment>


Good Samaritan Backfire - <AUTHOR> https://medium.com/human-parts/good-samaritan-backfire-9f53ef6a1c10

<comment><USER2> We're lucky to (generally) be white and affluent. Here's what can happen to people who aren't so lucky:

* [https://www.youtube.com/watch?v=g6lX4-XKSOE](https://www.youtube.com/watch?v=g6lX4-XKSOE)

* [http://www.ktvu.com/news/news/crime-law/san-francisco-police...](http://www.ktvu.com/news/news/crime-law/san-francisco-police-officers-indicted-federal-cha/nd2kZ/)

* [http://www.nydailynews.com/new-york/staten-island-man-dies-p...](http://www.nydailynews.com/new-york/staten-island-man-dies-puts-choke-hold-article-1.1871486)

* [http://slog.thestranger.com/slog/archives/2014/08/01/police-...](http://slog.thestranger.com/slog/archives/2014/08/01/police-union-prez-on-officer-who-wrote-80-percent-of-pot-tickets-hes-just-that-proactive)</comment>


How to use TextMate - <AUTHOR> http://www.zeldman.com/2010/08/13/how-to-use-textmate/

<comment><USER2> I like textmate, I still use it for some tasks, but it have all sorts of spinning beach ball of nothing happens when working with large files or projects that have a large number of files.

<comment><AUTHOR> Hmm that's interesting. I've never had an issue with a big project, but if I'm looking at a 250mb SQL dump it chokes up quite a bit. Fortunately I don't do that too often :) There will always be a need for vim!</comment></comment>


Racklog: Prolog Style Logic Programming [pdf] - <AUTHOR> https://plt.eecs.northwestern.edu/snapshots/current/pdf-doc/racklog.pdf <comment><USER2> See also Racket Datalog: [https://docs.racket- lang.org/datalog/index.html](https://docs.racket-lang.org/datalog/index.html)

I dig logic programming, but I wish Racklog had better (or any?) constructs for storage. Racket Datalog can serialize a theory[0], but that still means you'll have to write it in its entirety to the disk after any accumulation of facts.

In my opinion the SQL language is inferior to Prolog, but in most SQL systems incremental update isn't a problem.

Here's a comparison of SQLite with xml-files-in-a-zip-file[1] (and the zip- based file format has similar problems as serializing a Datalog theory):

> It is difficult to update individual entries in a ZIP archive. It is > especially difficult to update individual entries in a ZIP archive in a way > that does not destroy the entire document if the computer loses power and/or > crashes in the middle of the update. It is not impossible to do this, but it > is sufficiently difficult that nobody actually does it. Instead, whenever > the user selects "File/Save", the entire ZIP archive is rewritten. Hence, > "File/Save" takes longer than it ought, especially on older hardware. Newer > machines are faster, but it is still bothersome that changing a single > character in a 50 megabyte presentation causes one to burn through 50 > megabytes of the finite write life on the SSD.

[0]: [https://docs.racket- lang.org/datalog/interop.html#%28def._%2...](https://docs.racket- lang.org/datalog/interop.html#%28def._%28%28lib._datalog%2Fmain..rkt%29._write- theory%29%29)

[1]: [https://sqlite.org/affcase1.html](https://sqlite.org/affcase1.html)

<comment><USER3> Hmm I'm fine with prolog, I love it, but I'm not sure how it can be used in practice. There are really efficient SQL implementationa like postgres that we already spent millions of dollars and man-decades developing. My guts would tell me whatever prolog implementation I'll use, they will not be as reliable as one of these battle tested technologies. Maybe there is an opportunity here, if there is a demand for prolog. Having seen companies where SQL was used very extensively for analytics, data storage etc I can't see how prolog wouldn't help. Of course there are cultural problems too, people know SQL, but only a tiny minority know prolog.

<comment><USER2> > Hmm I'm fine with prolog, I love it, but I'm not sure how it can be used in > practice.

Well, that rings similar to what is said about Lisp sometimes, and I think it can easily be refuted by pointing to instances where it _is_ being used in practice[0].

There are some problems that are fairly easy to solve in Prolog, but would be very difficult to express in SQL[1]. And recursive relations, which are at the core of Prolog, only made their way into SQLite 4 years ago[2].

My comment was specifically about those Prolog/Datalog implementations _in Racket_. Other Prolog implementations might be dealing sensibly with incremental updates (but I don't know).

> Having seen companies where SQL was used very extensively for analytics, > data storage etc I can't see how prolog wouldn't help.

You can't see how Prolog _wouldn 't_ help, as in Prolog can only be an improvement over SQL?

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

[1]: [https://xmonader.github.io/prolog/2018/12/21/solving- murder-...](https://xmonader.github.io/prolog/2018/12/21/solving-murder- prolog.html)

[2]: [https://en.wikipedia.org/wiki/Hierarchical_and_recursive_que...](https://en.wikipedia.org/wiki/Hierarchical_and_recursive_queries_in_SQL)

<comment><USER3> I think you misread my comment. I am pro-prolog but I'm skeptical of some of the details such as ACID complaint, being battle-tested, getting predictable performance etc.

> Well, that rings similar to what is said about Lisp sometimes, and I think > it can easily be refuted by pointing to instances where it is being used in > practice[0].

I don't think this is relevant. (I'm also a very strong fan of lisp). Most criticism of lisp is to the language itself. People acknowledge that lisp is theoretically possible to solve complex problems easily but they claim this slows us down in practice. This is not my claim against prolog. I think the language is pretty powerful, but I'm not sure if we can find something as rock solid as postgres.

> Prolog can only be an improvement over SQL?

Yes, precisely.

<comment><USER2> > I think you misread my comment.

Yea, I did misread a bit of it.

> I think the language is pretty powerful, but I'm not sure if we can find > something as rock solid as postgres.

While PostgreSQL may be better for most projects, SWI Prolog is also usable for practical problems, although (if I'm not mistaken) SWI Prolog requires all facts to be loaded into memory, so there's a limitation in scale. And yes, I could't find any resources indicating whether the SWI Prolog database is ACID compliant.

But with Racklog and Racket Datalog it doesn't make sense to talk about whether they're ACID compliant as there's not yet any storage mechanisms, so they are not yet usable in any context involving persistent data. The limitations of those implementations are very different from limitations with Prolog/Datalog as such.</comment></comment></comment></comment></comment>


Ask HN: How to sell iOS app names and dev account? - <AUTHOR>

The company I helped co-found in 2007, Mango LLC, made several apps that hit the AppStore the day it opened:  Homework and iShopping. Both are horribly dated now (from high school days), and my partners and I have agreed to dissolve our LLC. Are the app names worth selling anymore? I know the AppStore search used to weigh the app name very heavily, but I've been out of the development loop for awhile. If we can sell them, what's the best way to do it?<p>Thanks! <comment><USER2> Unlikely the names are worth anything unless the apps have good search rankings for important keywords. If they are still making sales they are worth something though.

</comment><comment><USER3> It may have some value, as App name strings must be absolutely unique (or was it always like that?)

You could try posting on flippa or apptopia.</comment>


Show HN: GameLisp, a scripting language for Rust game development - <AUTHOR> https://gamelisp.rs/ <comment><AUTHOR> Hi folks!

I very recently released GameLisp, a game scripting language for Rust, after working on it on-and-off for several years. The language has some innovations in its garbage collector, its object system and its Rust API which I hope you might find interesting.

Happy to answer any questions!

<comment><USER2> Great job! I'm really impressed with the simplicity. But more than that, congratulations on writing proper the documentation at a so earlier version! That's really awesome. I hope you the best for you and your projects.

I played the online game versions (minesweeper & tetris), I enjoyed a lot. In general, using GameLisp, how much work do you need to export a game to work in the browser?

<comment><AUTHOR> Because the glsp crate and all of its dependencies are pure Rust code, a game engine which uses GameLisp can be compiled directly into WebAssembly. The playground is implemented in about 300 lines of Rust and about 900 lines of vanilla JavaScript.

Making a full-fledged WebAssembly game engine would be a little more difficult, but none of that difficulty would come from GameLisp :)

</comment></comment></comment><comment><USER3> As a Lisp fan this is very cool! I'm not really a game developer, but I like to play around with small games in Godot. I'm definitely going to give this a try for my next experiment.</comment>


ReMail gives email a big boost on the iPhone - <AUTHOR> http://www.xconomy.com/national/2009/08/14/startups-give-e-mail-a-big-boost-on-the-iphone-with-remail-and-gpush/#

<comment><USER2> This app sounds cool. But lately I'm concerned about having tons of data on my phone and losing it. I dig that w apple mail I only have to worry about 50 messages, not my whole life.

<comment><USER3> iPhone 3.0 supports remote wipe. Also you should always put a passcode on your mobile devices. Even though there's only 50 msgs on the device, you can always download more using the Mail App. Also, think about all the phone numbers, etc. on there.

<comment><USER2> Typing in a password every time I pick up a phone is a non-starter for most users including me. Remote wipe is outstanding but I think you need a business account. I was thinking that at least I could change my passwords so mail.app couldn't retrieve more messages.

</comment></comment></comment><comment><USER4> Meh. Does it even come with a Mail app? And it doesn't work with exchange. I know, I know, YC; release early and often.

<comment><USER3> Yeah, you can reply, forward, compose, etc. Most Exchange servers support IMAP: <http://www.remail.com/faq.html#exchange_support></comment></comment>


Ask HN: Simple alternative to Google Analytics - <AUTHOR>

I'm looking for an alternative to Google Analytics. The reasons:
- Referral SPAM has become huge, and I'm playing catch up trying to filter them out.
- It's way too complicated now, and I'm looking for simple measurements.
What I'm looking for:
- Accurate, no ref SPAM analytics SaaS
- Visits, Visitors, Geo, Page Views, Duration, Bounce Rate and Traffic Sources.
- Simple and easy to use interface.
Any suggestions? <comment><USER2> I recently launched Pleasant.io ([http://pleasant.io/](http://pleasant.io/)) for this exact problem. I wanted a simple, easy to use alternative to Google Analytics (and one that respected the privacy of me and my users). Please feel free to give it a try - any money you spend over the first 3 months is given to Watsi :-)

<comment><USER3> Great looking service.

I think your pricing is off though. I was about to sign up right before i saw the variable pricing. I'm not sure why but I'd much rather know exactly how much I'd be spending every month. Even if that means I'll be logically paying more over the long term.

<comment><USER2> Thanks, appreciate it. That's a very good point, I hadn't considered that. I'm going to have a think about changing it - thanks for bringing that up.

<comment><USER4> If it's not too complex I would recommend an AWS,EC2 model - let customers pay as you go or opt in to pre buy for predictable and possiblely reduced pricing.

<comment><USER2> That's the current model I'm using, thinking it'd be cheaper for most users. I'm not doing any pre-buying yet but was planning to, however now I'm considering a subscription model.

</comment></comment></comment></comment></comment><comment><USER5> Host your own analytics using Piwik - [http://piwik.org/](http://piwik.org/)

<comment><USER6> Piwik is the obvious choice, and it blocks referrer spam by default and hosting can be subcontracted out of you don't want to deal with setting it up.

[http://piwik.org/blog/2015/05/stopping-referrer- spam/](http://piwik.org/blog/2015/05/stopping-referrer-spam/)

[http://piwik.org/hosting/](http://piwik.org/hosting/)

</comment></comment><comment><USER7> [http://get.gaug.es/](http://get.gaug.es/) was built to do exactly this with unlimited sites.

</comment><comment><USER8> There is also Snowplow. [http://snowplowanalytics.com/](http://snowplowanalytics.com/) It's more of a toolbox, so it fails on the simple-to-use part. But it does lots of high- end/sophisticated things that other tools can't.

<comment><USER9> For anyone else (at a _very_ high level):

\- written in Scala

\- $1250 or $5k("real-time") per month

\- [https://github.com/snowplow/snowplow](https://github.com/snowplow/snowplow)

</comment></comment><comment><USER10> I've been using [https://clicky.com/](https://clicky.com/) for several years and on some high traffic sites, thoroughly recommend.

</comment><comment><USER11> I think you might block some identified spam sources URLs! But it's not all the time very efficient! Will also be happy to have some recommendations on that point!

</comment><comment><USER12> check out [http://kilometer.io/](http://kilometer.io/) \- simple way to track key events

</comment><comment><USER13> clicky.com is pretty good</comment>


Can you write interactive websites with HTML only? – fuck yeah - <AUTHOR> https://www.glue.codes/ide.html <comment><USER2> This is not the way to present your thing to HN. Users will flag the baity title and complain that it isn't clear what this is.

Instead, make the title say in a neutral and direct way what this product/project is. Then add a comment to the thread giving the backstory of how you came to work on this, and explaining what's different about it. If it's your own work, you can put "Show HN" at the head of the title, as long as there's a way for users to try out the product. See [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html).

More tips here: [https://news.ycombinator.com/item?id=22336638](https://news.ycombinator.com/item?id=22336638)</comment>


Why Citus Data is donating 1% equity to PostgreSQL organizations - <AUTHOR> https://www.citusdata.com/blog/2018/10/24/why-citus-data-is-donating-1-percent-equity/ <comment><USER2> Well done Citus, comendable and inspiring. I'm betting most of my wealth and my new company on Postgres, if it succeeds, I hope to emulate you. Postgres is an incredible data platform, that just gets better and better every year with more functionality AND better performance (unlike most software where more features = slower) AND consistent rock solid reliability AND the best documentation of any product I have seen.

</comment><comment><USER3> I love this type of support from the community, and those who build their company around, and contribute to Postgres.

Great to see.</comment>