Inside GOV.UK: chaos and nightmare as trendy Cabinet Office wrecked govt web - <AUTHOR> http://www.theregister.co.uk/2015/02/18/the_inside_story_of_govuk/ <comment><USER2> Some stuff is much better and some stuff is much worse, as people have said in other comments.

But what is certainly true is that that's a far better result than the typical government IT project. Give me the gov.uk "debacle" (which it ain't) any day over the DWP or the NHS PfIT...

You can't make things better without making choices. Much like Apple products, that's bound to piss off some people. But once you have something that's actually good at something, instead of just being mediocre all around, it's perhaps possible to over time grow that into something that's good at multiple things.

All other experiences of government websites show sites that are just universally meh or bad. Gov.uk has been the first government website where I thought "wow, that's neat."

<comment><USER3> " _Some stuff is much better and some stuff is much worse, as people have said in other comments._ "

Agreed. And GDS are also very public about what does work and what doesn't work via their service assessments and self certifications [https://gdsdata.blog.gov.uk/all-service-assessments-and- self...](https://gdsdata.blog.gov.uk/all-service-assessments-and-self- certification/)

See, for example, the rather damning report on the VATMOSS service [https://gdsdata.blog.gov.uk/vat-mini-one-stop-shop- service-a...](https://gdsdata.blog.gov.uk/vat-mini-one-stop-shop-service- assessment/)

This is _leagues_ ahead of the previous approaches to developing governmental services. Like you I'd happily take gov.uk over DWP or the NHS PfIT. Even their failures are handled more productively.

</comment></comment><comment><USER4> I've had very little middle ground in my experience with gov.uk. It's either been exceptionally useful in the case of student finance, the electoral roll, contacting local councils and so on - the sections of the site with highly focussed reasons for landing there - or extremely bad in other cases.

For example, earlier this week I was looking for guidance on what responsibilities Unincorporated Associations have to HMRC. The site is pretty much barren, and feels like a link dump with little explanation for what anything is. And because Gov.UK has wedged itself in front of the old HMRC site, half of the URLS plastered around the net redirect to a gov.uk index page instead of letting me view old content.

One specific example that caught me out was a page for finding your local HMRC branch. It existed on the old site, but that URL now redirects to a generic `contact us` page for the entirety of HMRC. (See [http://www.hmrc.gov.uk/local/individuals/index.htm](http://www.hmrc.gov.uk/local/individuals/index.htm))

<comment><USER5> I recently renewed my passport and the process was reasonably impressive. However, I also completed my tax return at the same time and found the same jumbled mess as described above.

<comment><USER6> I applied for a passport online, which all went well at the time, but yesterday I got a letter from them saying that I didn't fill out all the information (on a web form?). Included with the letter was a paper application form which, as far as I can tell, I need to fill out completely, basically starting again. And it's kind of difficult as I've sent all the original documentation with the first application so I don't have all the details at hand.

<comment><USER7> The passport application is really odd, it is still essentially a paper based process, with a fake web frontend that basically just prints out paperwork.

<comment><USER8> Yes. I wonder if there's old legislation somewhere that mandates the form a passport application will take, and they've gone as far as they can without changing the legislation itself?

<comment><USER7> Perhaps. Thats why government digital policy needs to be joined up end to end, ie can make legislation to fix dev issues.

</comment></comment></comment></comment></comment></comment><comment><USER9> Doesn't surprise me. I posted some questions on their self-congratulatory blog post on why they were using tax payers money to write their own front end proxy in golang rather than use nginx/apache.

My post was simply deleted. Obviously don't like public criticism.

The whole thing is an NIH stack of crap from a tech POV. Not only that they've broken the self assessment stuff terribly. It's now a mishmash of two sites that barely work together. I had to dig out a load of tax code notifications recently and it was painful.

Posted as a throwaway account as I've brought this up here before and I was buried.

Edit: This was their third attempt at a front end proxy solution. Even riverbed/f5 appliances are better value by the time you hit your third attempt.

<comment><USER10> NIH syndrome runs deep in GDS. They commissioned their own typeface [1] with tax payer's funds and then refused to make it available to the public.

[1] [https://gds.blog.gov.uk/2012/07/05/a-few-notes-on- typography...](https://gds.blog.gov.uk/2012/07/05/a-few-notes-on-typography/)

<comment><USER3> " _NIH syndrome runs deep in GDS. They commissioned their own typeface [1] with tax payer 's funds and then refused to make it available to the public._"

Erm. Not true. GDS did not commission Transport or New Transport.

Transport is a font from the 50s. New Transport is a refined digital version of that from Calvert and Kubel. GDS didn't commission it or cause it to be created in any way. They were just the first web site to use it.

<comment><USER10> I think they edited the article. I'm pretty sure it was previously worded to imply they funded the created of New Transport (digital variant). It would be nice to get a clear answer on this.

</comment></comment></comment></comment><comment> vertex-four As an individual, I find that gov.uk is _far_ more useful than any of the sites that preceded it - especially DirectGov. It's sad to hear that they haven't paid quite so much attention to corporate users of Government services.

However, much of this article appears to be anecdotes of people in Government complaining after-the-fact. Why were they not involved during the transition, when they could best help with the process? I highly doubt the gov.uk team rewrote entire libraries full of quite technical information on their own - there was _someone_ on the side of the departments who failed to do their job.

<comment><USER11> I think you've hit the nail on the head there. A lot of GDS's mandate revolved around modern agile techniques and just _doing_ it.

This doesn't exactly mesh very well with traditional civil service slow bureaucracy. The civil service tend to like getting every bloody stakeholder involved and bury you in meetings upto your eyeballs. And then have meetings about the meetings. And meetings about meetings about the meetings...

That's how we wasted £10bn on the NHS IT system with little to show for it.

<comment><USER9> The NHS projects are a little more complicated than gov.uk front end implementation.

Have you seen any of the care pathway workflows? We're talking 128 page documents integrating police, social services etc as well, just for a birth. They're also all or nothing and have reliability requirements. You can't just agile this stuff; it's space shuttle up front design from day one.

One fuck up in one workflow instance and someone misses that imaging referral and then that person goes from stage 1 to metastatic cancer. How do you assign an appropriate cost vs risk trade off to that?

That may make it too complicated to complete to be honest but where do you go from there? You shelve it with a shit ton of bad PR and pay up the people who told you it's not happening.

<comment> grey-area In my opinion the only way they could have made it work was to start small and iterate. Start with a health record which was: NHS no, name, dob and make sure everyone is using it first, _then_ start to build APIs which let people add data from the various services to that record and control access etc.

You simply can't design a system from the top down to deal with something as complex and multi-disciplinary as a birth or a lifetime of health records, in fact no one system could probably cope with all those demands, even if it only catered to a few medical specialties - even just between GPs, Surgeons, Anaesthetists and Dentists there are huge gulfs in requirements, let alone bringing in other public services like the police. On top of that people are happy with existing systems and will resist change to some centralised system if you try a big bang approach. So I disagree that it is all or nothing, or even could feasibly be done as an all or nothing project.

</comment></comment></comment></comment><comment><USER12> It doesn't surprise me that people are starting to realise this project was a disaster. My own personal experience is that a lot of useful information that used to exist on various government websites is just gone. You can look through really old HN threads about startups/self employment/contracts/eulas in the uk and often people have posted links to useful information on various government websites, and virtually all of those links are dead now.

Add to that the fact that you can't visit any uk government site now without being hit by google analytics tracking (no I do not want google tracking on my tax returns form!).

For the people who actually read the reports and statements departments put out (e.g. charities, affected businesses, campaigners, pressure groups) it seems to be almost universally hated. Lots of complaints about older reports and press releases being just about impossible to find and a huge reduction in transparency. For example: [http://markavery.info/2014/10/21/awful- gov/](http://markavery.info/2014/10/21/awful-gov/)

>I want to make a serious point here. This one single government website is less informative and less easy to use than its multiple predecessors. If you were the least bit suspicious of this government then you might think it had been done on purpose to obscure government actions and policies from the taxpayers who pay for it and the voters who might well choose another bunch of politicians in future.

>This government has done away with watchdogs and independent commissions who had the time and wit to question what government was doing on the environment and now it has obscured its own actions on its own website.

Also of note, supposedly "arms length" non-departmental government bodies like Natural England have also been subsumed by gov.uk, without anybody seeming to notice.

<comment><USER8> This looks rather similar to the Tories' purge of old speeches from their own party website: [http://www.bbc.co.uk/news/uk- politics-24924185](http://www.bbc.co.uk/news/uk-politics-24924185)

</comment></comment><comment><USER11> Bear in mind the Register enjoy taking contrary opinions just for the sake of it.

I've found that most of the Gov.UK stuff has actually been very good. A welcome redesign of a lot of godawful, confusing old websites that had no consistent interface from department to department. I still have to deal with the old HMRC website and it's such a pain in comparison. In order to file some documents you actually have to fill out a pdf form and submit data from there, rather than just using a simple webform...

</comment><comment><USER13> The new gov.uk site is so much better than the previous collection of mostly appalling sites and applications.

For example, in a recent project I needed a list of bank holidays in the UK. Not only was it easy to find[0] all you need to do to get at the data in a usable format is add a '.json' to the URL. Same goes for the list of Courts and Tribunals[1]. It's a fantastic service and I'm fully behind them replacing ageing government portals and applications with it.

[0] [https://www.gov.uk/bank-holidays](https://www.gov.uk/bank-holidays) [1] [https://courttribunalfinder.service.gov.uk/search/](https://courttribunalfinder.service.gov.uk/search/)

<comment> vertex-four Hell, I was interested in where the military practice in the UK, and it came up with a huge list of places I could visit when the military aren't practising: [https://www.gov.uk/public-access-to-military- areas](https://www.gov.uk/public-access-to-military-areas)

There's a lot of nicely laid out information on all sorts of arbitrary things on there.

</comment></comment><comment><USER14> My experience with .gov.uk has been quite positive: I recently needed to check Companies House: they had a horrible 'XML gateway' service from the mid-2000s. Someone from .gov.uk got in touch and put me on the beta for the official Companies REST API that replaces the XML gateway.

Also regards to The Register's 'trendy' accusation: GDS chooses what works over what's trendy for everything critical: their apps work without AJAX and CSS too.

<comment><USER15> " _GDS chooses what works..._ "

Erm no. One GDS project requires end users to connect to a number of devices over USB from their Windows PCs. The logical choice is to write a .NET app that does it.

GDS chose to write the USB interop code in Java, wrap that up in a Windows Service, install a _web server_ on the PC, write an HTML/CSS/JavaScript app that runs in the web server, which calls the Windows Service and talks to the USB device.

That sort of thing (the above is not an isolated example) happens at GDS for a number of reasons - one is what the Register alluded to: they're good at webs sites, so they try to shoe-horn everything into the browser. Another is that they're despotically obsessive about "user need", so don't understand that user needs need to be balanced with business needs (reduce call centre costs), system needs (we've invested _x_ in Windows, for better or worse), and operational needs (supporting a single, self-configuring .NET .exe on 2,000 desktops through WSUS is a _lot_ cheaper and easier than installing, configuring and maintaining a Windows service, a web server and an HTML application on 2,000 desktops).

<comment><USER16> A little off topic but I wonder if there could be a middle ground for this kind of app. Run the actual UI on a web server and give users a central URL to go to. Then have a service installed on the local machine that has an API exposed with CORS.

<comment><USER15> You certainly can. But when things go wrong you go from one to three places in which you have to look for the problem - the service, the network, and the server. Also, instead of a single package containing a single .exe you're now deploying to all desktops, and to a server.

This in the context of developers finish the system, leave, and ops don't have the skills to fix a Ruby/node/whatever tech issue.

While none of the options that work are technically wrong, it might be worth considering the differences between the best solution design, and a successful one.

</comment></comment></comment></comment><comment><USER17> The article seems to mirror my experience: simple and common tasks are streamlined, but anything less common can be an exercise in frustration.

In particular, looking for information (say, on immigration rules) can be almost impossible: between the seemingly random "see also" links, overuse of pdfs (and pdf landing pages) and lack of coherent indexing, I've wasted a lot of time trying to find what I needed.

</comment><comment><USER18> End user here. In general, I've found GOV.UK to be an improvement on what went before. There are still 'old' sites that I have to use - HMRC, for example - which are diabolical in their usability and function. I love that some stuff is more findable from a search engine than it used to be.

There are certainly aspects of the new sites which need improvement from my perspective. GDS seem to be weak on taxonomies/organising large amounts of information, for example: [https://www.gov.uk/business-finance-support- finder/search](https://www.gov.uk/business-finance-support-finder/search) \- even their drop-down filters can be unwieldy.

Likewise, the users who are unhappy are the wonks, the experts, the niche users etc (certainly including a select few who have the advantage of their own platform to amplify their disdain) and they certainly need catering for. But there's nothing to indicate that their needs won't be satisfied. Are they the highest priority when the 'Digital by Default' policy is also borne in mind? Some of those users will be unnecessary casualties and care should have been taken to recognise their user needs, but it wouldn't be the first time in history that someone screwed up by not doing so.

I'm anticipating continuous improvement of these sites, rather than the "this is going to be the website for the next ten years" approach. There's a realistic chance that things will gradually improve. The piece seems to imply that the job is done on these sites, when the likelihood is that the job will never be 'done'.

Some points to bear in mind about the piece itself. One, it's Andrew Orlowski. I like him and I tend to go to his stuff when I want to read a divergent opinion, but I bear in mind that he's not much of a fan of things that occurred after the turn of the millennium. Two, it's not hard to find people in Whitehall and out in the country who have their own agendas and/or empires, and are well-connected with sympathetic hacks (who might also have their own agenda). Some of them might even live in glass houses.

<comment><USER18> Well if you're going to downvote my contribution, at least offer a half-decent reason for doing so.

</comment></comment><comment><USER19> Generally speaking I'm pretty happy with the new gov.uk; for commonly-used queries it's really much easier to find the right information, although there are some problems where the new bits meet the old bits.

It's telling that HMRC is held up as some paragon of design and user- friendliness. The Self Assessment website has barely changed in several years, and that's a bad thing as it's always been extremely confusing to use - particularly for new users.

</comment><comment><USER20> Orlowski bollocks.

</comment><comment><USER21> I've found a similar picture to that described by others- some stuff is much better, and others much worse.

</comment><comment><USER22> (Posting anonymously for obvious reasons.)

The GDS was created because a Government minister (Maude), who was enthusiastic about digitising the interactions between the government and its citizens (an entirely laudable goal), was sold a pig in a poke by people who saw the opportunity to advance or enrich themselves.

Martha Lane Fox is an ex-consultant, whose sole achievement of note was to have been the co-founder of Lastminute.com, which was lucky enough to IPO right at the very peak of the dot-com bubble. Since then, she's sat on on the boards of various companies and charities. Fortunately for her, everyone seems to have forgotten that Lastminute.com was never profitable and was eventually acquired for less than half its IPO valuation, so she was able to buy enough positive PR to convince the government to make her the "Champion for Digital Inclusion", during which time she commissioned a report from some consultants - [http://www.go-on.co.uk/wp- content/uploads/2014/08/pwc_report...](http://www.go-on.co.uk/wp- content/uploads/2014/08/pwc_report.pdf) \- which claimed that the government could save £900m if the "digitally excluded" got online.

Mike Bracken had zero experience in government or the public sector before being appointed as head of the GDS. His previous role was as "Director of Digital Development" for the Guardian, so his expertise is in running websites (and the infrastructure supporting apps) for a newspaper.

The GDS started off by creating the Alphagov prototype, which was essentially a pretty-looking static-HTML portal with zero functionality (all the links went back to the original websites). They then presented it to the powers that be, saying "Look, we can digitise the whole of government and make it look like this, AND save hundreds of millions of pounds!" (pointing to Martha's report as supporting evidence).

Francis Maude believed them and gave them the budget to recruit hundreds of Nathan Barley types (with more than a little cronyism and jobs-for-mates), with puffed-up CVs and a vocabulary full of buzzwords, and gave them grand titles (and grander salaries - Mike Bracken's base salary is over £150,000). Their few unqualified successes have been very low-hanging fruit. Most of what they've delivered has been worse than what was there previously, and in a few cases (e.g. trying to apply Agile methodology to the Universal Credit project at the DWP), they've screwed up massively and ended up wasting millions.

If there was ever a proper independent review of what GDS has delivered, there would be front page headlines about how much money has been wasted. Unfortunately, the public sector has always been bad at admitting to mistakes or underdelivery, and the GDS, in particular, is one big gravy train. Any suggestion that things aren't going well is hushed up and brushed under the carpet, so that those at the top can hang on to their little empire and their well-paid jobs. Needless to say, any dissension from within the ranks has the potential to be severely "career-limiting", so those further down the foodchain who have any sense have either left or decided to keep the gravy flowing for as long as possible by keeping their mouths shut and their heads down.

Meanwhile, Martha Lane Fox was made a Baroness, and Mike Bracken was given a CBE.</comment>


Open question: What's the point of inbox zero? - <AUTHOR> http://radar.oreilly.com/2011/01/open-question-inbox-zero.html <comment><USER2> I'm at the opposite end of the spectrum of the author-I don't understand those who don't practice inbox zero. My personal view is that if a certain volume of mail starts to become overwhelming, or if I can easily leave it and not suffer any bad effects, I should unsubscribe. I don't act on every single email I get in, and if I'm going to put it off for now but know I need to remember to do it, I will read it and then 'star' it. Occasionally, I will mark the top email as unread because I know I will see it again that way.

</comment><comment><USER3> I practice "unread zero". I leave emails in my inbox in case I need them later. The search function works well. If they are not marked "unread", I don't pay attention to them thus my brain does not see it as clutter.

<comment><USER4> i have 19,452 messages in my inbox right now. I'm mildly OCD but my brain doesn't register this as clutter, either.

I think it's because of search. I know I can find something when I need it because everything is in one place, on one server, regularly backed up to 3 different locations.

</comment></comment><comment><USER5> My inbox (work - personal is full of 'like to read one day stuff') represents how cluttered my mind is. If it's above 30 messages, then I'm not in control of work. I don't aim for zero on a regular basis, but like it to be below 10.

Currently at 82 items ... and I'm dual procrastinating on HN and BBC iPlayer. Hmmm...

<comment><USER6> I hear you. I used to receive > 100 emails a day — some automated, but most thanks to Cc and mailing lists. I'd either read them in batches, or file them for 'later'. As long as that 'later' list was under ~10, I was in control.

For my personal mailbox, keeping it under 5 is usually enough. I typically keep cell phone/web server/etc bills in there until they're paid, and emails about photo-shoots in there until the work is completed.

</comment></comment><comment><USER7> The point of inbox zero is a feeling of getting things done and getting positive reinforcement form it, as well as an information organizing method: what's in your inbox is (part of) your ToDo list. Like joshklein I do not bother with moving messages out of inbox - for me they are just a stream. However I mark with a star (in gmail), flag (in Outlook) or mark as unread all the messages that require follow-up action I did not do immediately. And sometimes I do a wholesale archiving, and only in short moments after that my inbox is zero or near that.

</comment><comment><USER8> It all depends on your mental model. I, for instance, don't archive my messages; once they are marked as read in the inbox, I'm done with them. The point of inbox zero is, I believe, just to separate the place you organize your overall actions from the place you find out about new actions. When you combine the two, as a busy person, you just hold too much information in your head that could easily be taken care of by a system you can abide by.

</comment><comment><USER9> When I started doing inbox zero, I actually spent much, much less time on email. An email you leave in your inbox costs you mental energy every time you see it. An email you deal with immediately costs you only once.

Also learning to use the gmail shortcuts J, K, <enter>, X, Y (or E), C, shift-I, *-A, and G-I was very helpful. You can type ? from the gmail home screen to see the shortcuts. Try it out!

</comment><comment><USER10> 1\. Its not that hard to get to zero if you know the keyboard shortcuts to Gmail: use 'J' and 'K' to move between messages and 'Y' to archive. If you're in list view, 'X' highlights the message so 'XY' will archive things very very quickly.

2\. Liberal use of autoarchive for high volume mailing lists that I don't need to be continuously updated on. I'll clear those folders out every once in a while.

3\. Boomerang is a great tool that lets you temporarily archive a message. It will come back to the Inbox when you tell it to, so you can put stuff you don't have to act on for a while away and stay near zero with it:

<http://www.boomeranggmail.com/>

(I am not affiliated with Boomerang.)

</comment><comment><AUTHOR> Apart from some mailing list, which bypasses the inbox, I always want to get unread messages read. If it's junk I'll delete, if it's something I need to action later, I'll star it (gmail). I just don't want to see "Unread messages"..

</comment><comment><USER11> I try to keep my main (work) inbox down to zero unread messages or as close to as possible. It has anything that's important, that I need to reply to with some urgency. All of the cruft (mailing lists, people I don't explicitly deal with regularly, people I've never received messages from before) goes elsewhere.

I only check email several times a day, at the start of the day I prioritise and schedule tasks based on emails, then later on I respond in batch, then check again in the afternoon and respond in batch before going home. It frustrates some people, but given that I actually get stuff done, the alternative is far worse.

</comment><comment><USER12> My inbox is every email conversation that isn't archived. It is a list of items awaiting action from me. (Just because an email has been read doesn't mean it doesn't require action from me.) If it no longer requires action from me, then I archive it. Thus the inbox is a portion of my global "to do" list and represents, in a very real way, the amount of Stuff that I need to worry about at any given time.

I had no idea that "do all of the Stuff that you need to do" had such a fancy name, or was worth writing a book around.

Aiming for zero is fine. Expecting to achieve it is impractical, of course. We all have Stuff to do.

</comment><comment><USER13> Email for me is something to be processed. If it doesn't _need_ my attention and response, I try to filter it so it doesn't reach my inbox.

In contrast, my facebook stream is a diverse collection of stuff from people I care about that may interest me and which I peruse every once in a while. HN is kind of in the same category, except that HN content tends to be longer and more impersonal.

</comment><comment><USER14> People are different.

Is that really so hard to fathom? You may not get IB0, you may not be capable of "getting" IB0. It's ok.

</comment><comment><USER15> A couple points...

\- An inbox zero usually loads faster

\- An empty inbox allows to concentrate on real work items rather than searching reading material in the inbox

\- It's the electronic equivalent of a clean desk. It makes a clean impression when other people look on it.

\- It's needed when you use your inbox as a todo list.

<comment><USER16> > \- It's the electronic equivalent of a clean desk. It makes a clean > impression when other people look on it.

I don't think they are equivalent. Your desk is just there for people to see it, but email is much more personal. I wouldn't want people messing on my e-mail, as I don't want them messing in my drawers . There is nothing to hide, but they are not an open book.

</comment></comment><comment><USER17> For those of you in favor of a zero inbox, I have a couple of follow-up questions.

(1) are you archiving? (2) if not, how do you search for old emails?

<comment><USER18> Yep. I've taken the Google model to Outlook. I have just one folder called archive. It comes down to these steps:

\- If I haven't looked at it yet, it's unread in the inbox \- If I've read it but still have something to do, it's marked read but still in the inbox \- If I'm done with all of the actions associated with it, it goes into the archive folder

On top of that, I use search folders to quickly look at emails from specific people or groups. I prefer that to real folders as sometimes emails need to exist in multiple folders, plus those folders will catch anything that's in both the archive and inbox folders.

</comment></comment><comment> mike-cardwell Privacy. Data protection. Why store data on the Internet that you don't need to?

<comment><USER15> If that is your issue, then a better way is to have your own server, encrypt your emails and ask your contacts to do also. Once your mails are hosted once on a server, you can't know where you data goes and how long it stays there. One minute is more than enough to archive an email on a warehouse.

</comment></comment><comment><USER19> The answer is pretty obvious to me. If I have 0 unread messages, when I login into my client I know I don't have any new messages without having to actually look at the message list.

<comment><USER17> I have 10,000+ emails in my inbox and I get the same benefit from them all being marked read. I also can search for back emails which you cannot (unless you have archived them).

Edit: Occurred to me you may have meant the same thing (if this is the case, pls ignore my post). I'm pretty sure the OP refers to empty inboxes (all messages deleted, not just marked read).

</comment></comment><comment><USER20> My inbox represents things I need to get done. If it's an email from a Prof, it's a project I need to start and get checkmark-scheduled on my calendar. If it's from a (potential) employer, it stays until I finish the next step in the interview process. I just recently finished up some long lasted loose ends that I'm very happy to have been done with. I just recently got back to 0 unread, and only 4 are still requiring enough attention to continuing living in my Inbox.</comment>


A different view on Functional Programming - <AUTHOR> https://matiasmorant.wordpress.com/2017/12/25/a-different-view-on-functional-programming/ <comment><USER2> I get the idea (doing fp for a living for 15 years) but the article lives in a bubble populated by mathematically pure unicorns: This strength/feature of fp can only weigh in where we have the mathematical formulas, arriving at those is the hard part in most programming jobs - most of the time those who "define" the product/spec cannot even do it in plain English (because they have to make up things as they go, no criticism, just acknowledgement of bizdev-reality).

<comment><AUTHOR> Hi! I appreciate your honesty. Of course arriving at the Mathematical formula is the hard part, that's what it means to actually solve the problem. I consider the fact that you can't code your solution in this style until you have done so as a feature: you can't write code if you haven't really understood and solved the problem. (As opposed to imperative style which let's you implement a half done solution with hidden bugs, not covering all corner cases)

<comment><USER2> Understood. Just to be clear: I am saying that in most scenarios _nobody_ understands the problem; people figure it out on the go.

Overall I really like the article because it spells what is an essential feature of fp for me much better than I could have. It is just that it is too far from reality of most programming jobs (unless you happen to be Peter Norvig, working on the Mars rover).

<comment><USER3> I would be interested in seeing some more examples of that kind of jobs

<comment><USER4> Well, say you're writing code to interface with a mostly undocumented hardware h264 video encoder. Partly through spotty documentation about general use of the video4linux system, partly through that one piece of example code which exists to interface with the particular encoder, you make something which, if given a buffer of a raw I420 video frame, produces a buffer of encoded h264 video frame.

Now, you figure out that the decoder which will decode the video expects the video stream to look different (specifically: the encoder produces only one picture parameter set and sequence parameter set at the beginning of the stream, but the decoder only understands the video if every key frame contains its own copy of the PPS and SPS). After a mix of reading source code and talking to people online, you figure out that there's an (undocumented) way to configure the encoder to include a PPS and SPS with every key frame. You figure that this is really something which must be specified by the h264 specification, so either the decoder is breaking the specification, or the hardware's encoder is; but at the end of the day, it's your fault if the encoded video isn't displayed on the receiver.

Then, you figure out that while you're trying to encode 1920x1080 video, the encoder is only able to encode 16x16 chunks, so the output image is actually 1920x1088. This isn't documented anywhere, but after speaking with the person who wrote the driver for the hardware encoder in IRC, you learn that there's no way to make the driver handle it properly, at least not yet. Therefore, you extract the picture parameter set produced by the encoder, make some changes to have it include information about how the picture should be cropped by the decoder, and splice the modified PPS into the buffer for the encoded frame.

That is what I've been doing at work (with some modifications; the above example is derived from working with two separate hardware video encoders). Even if it was possible to obtain exact documentation on how the encoders worked, sitting down and thinking really hard about how to describe the problem mathematically before writing the code would've been really hard, but because nothing really is documented, I will go so far as to claim it's impossible.

</comment></comment></comment></comment></comment><comment><USER5> Have you considered that many people aren't particularly fond of deciphering complicated math equations?

For them, your argument is in favor of avoiding functional languages. Too math-like! A step-by-step procedure might be simpler to understand.

<comment><AUTHOR> A good analogy would be music notation (pentagram) I could describe a piece of music in English prose, telling you were to put your fingers and for how long. The language itself would be easier to understand, but the efficiency of information transmission would be very low.

Chinese looks complicated, unless you know Chinese.

The ultimate criteria to judge a language should be how efficiently (concisely) it expresses the concepts of the subject matter.

At most, I will concede you: Goodness_of_language = conciseness × parsing_speed_of_an_experienced_user

<comment><USER6> > The ultimate criteria to judge a language should be how efficiently > (concisely) it expresses the concepts of the subject matter.

Some might say that the ultimate criteria to judge a language should be how quickly an inexperienced user starts to be fluent in it.

I studied math (so the syntax isn't really an issue), but I think functional programming is completely inappropriate for general purpose programming tasks (e.g. writing a website, writing an iPhone app, etc.).

<comment><USER7> By that criterion a shovel is always preferable to a backhoe. Powerful tools take longer to learn.

</comment></comment></comment></comment><comment><USER8> > it's usually defined by some of its features, such as: reification of > functions, avoidance or banning of functions with side-effects, use of > higher-order functions and so on. But, doesn't that sound like a collection > of random features? What's the motivation behind them?

It's a bummer to pose that question as though there isn't an answer, when the answer is well known and very important.

The motivation of avoiding side effects is because we humans make more mistakes when there are side effects. Functional programming is about making a piece of code not depend on anything outside itself. When you do that, it's easier to get right, and harder to screw up the code. In a word, it's safer.

> I'll present you a view which, at least to me, makes that set of features > seem coherent; and functional programming, like a deep and beautiful > paradigm: Functional programming attempts to reduce programs to equations.

We also make more mistakes when we make things too abstract, remove specificity. Write code that is too concise, and you lose meaning, context, and readability.

The "functional python" is the best looking code in the article to my eyes. It explains what it does to the reader, semantically. The APL & J examples aren't very enticing to me. I'm curious about them, but I wouldn't want to work in a codebase where if you don't know what the name of the function means, you can't figure out what it does.

Making code mathier is good occasionally, when working on mathy problems, but generally I'd rather have words and const statements in my functional programs than a concise expression with single letter variables.

<comment><USER9> _" The APL & J examples aren't very enticing to me. I'm curious about them, but I wouldn't want to work in a codebase where if you don't know what the name of the function means, you can't figure out what it does."_

Is it possible that APL and J fail this test only because you (and I) don't know how to read APL or J? I think there are some languages that end up being difficult to read due to failings of the language, but I don't know enough to know if APL or J is among them.

Python is, perhaps, more readable than most languages, but I've seen people learning Python have a hard time with many of its choices, so we really have to consider whether we find some version of the code more readable only because we've read a lot more of that kind of code.

Most of the time "easy to use" just means "what I'm used to", and I don't think programming languages are an exception to that.

<comment><USER8> > Is it possible that APL and J fail this test only because you (and I) don't > know how to read APL or J?

Yes and no. :) Its a great point; familiarity and practice is a big part of comfort and productivity, absolutely.

I _love_ playing code golf in Python. You can make Python very concise, and very unreadable. But I don't write professional code that way, and I definitely don't have a goal of making production code as concise as possible. Conciseness is good for very small projects, for the 5 minutes while I'm working in the code. Conciseness is awesome for Project Euler. Too concise, and when I come back to my own code days/weeks/months later, I can't understand it at all. Anyone who's coded for long enough on big projects will know the feeling of coming back to clean, well commented, semantically explicit code years after writing it, only to have no clue what it's doing or how it works.

I also know how to read math, and math (typically... almost always) has this very problem. The conciseness is good for proofs and multi-step algebra, you need it _while_ deriving things and working with the math. Once you codify it into a process, the conciseness is a big obstacle to understanding and code safety. I make lots of mistakes with math because it's too abstract. The mistakes are usually easy to fix because it's only a line or two at a time, but it'd be unworkable and unreadable if I had many thousands of lines of math the same way I have with regular code.

<comment><USER10> A good example of a good approach working with J: [http://archive.vector.org.uk/art10005770](http://archive.vector.org.uk/art10005770)

</comment></comment></comment></comment><comment><USER11> It should be obvious that if a transformation is syntactically trivial, it can only solve trivial problems. If programming is not-math, it's not going to become math just because you change the surface syntax.

A mathematician's definition of a sorted list is different to a programmer's at least in part because a mathematician is interested in a sorted list and a programmer is interested in sorting a list. This difference is intrinsically invariant of the programming paradigm (though not of the context).

This issue isn't so much that this post didn't convince me that there is an underlying, semantically relevant sense in which the APL approach is more mathematical, but that it didn't even seem to notice that this was a thing that needed to be argued.

<comment><USER10> > If programming is not-math

Programming is _always_ math; was it Dijkstra who said "programming is one of the hardest branches of applied mathematics"? It's also engineering - as in "engineers have to do some math occasionally, even if they don't realize that".

I often ask on the interviews to produce an expression returning sorted 3-element list using some simple primitives. I've found that with chosen primitives you still can model different approaches - and even though in all cases the result is an expression ("sorted list is..."), the structure of that expression can model imperative style ("first do this, then this...")

<comment><USER11> On one hand, yes. On the other, classifying whether programming is a math or not doesn't help you decide whether you should use APL, or much else for that matter.

</comment></comment></comment><comment><USER12> I wrote my own functional, Haskell-like, language, and after a couple of years and seeing a couple more code bases in various languages, I am now starting to firmly believe that currying should be strictly avoided (or at least highly discouraged). Obscure symbol operators with operator precedence are also a clear readability problem.

But unlike what this article suggests, these traits are not essential to functional programming. As long as you stick to functions which given values return other values, and your language has support for passing functions to other functions as well, you can reap most of the benefits of functional programming.

<comment><USER13> I'm mixed on currying. It _really_ increases expressiveness, but it does allow obscure point-free composition styles that can look like line noise.

<comment><USER14> And, quick, what's the type of (.) (.) (.) (.) (.)

How about (.) (.) (.) (.) (.) (.)

<comment><USER15> Interestingly, (.) (.) (.) (.) (.) is equivalent to \ f g h -> f . g . h

I probably share your opinion on which is more readable :D

</comment></comment></comment></comment><comment><USER16> _"Well, that's supposedly functional code, and it still doesn't look like an equation" – I can hear you say_

 _It does, we only need to change the syntax (semantics will stay the same), and the underlying mathematical structure will flourish before your eyes._

Hold on. Does this guy think "mathematical" just means "expressed as a string of symbols instead of words"?

</comment><comment><USER17> Most of us spend 90% of our time _reading_ other people's code. So even though writing a concise and elegant formula in J might be a satisfying puzzle, I personally don't want to deal with the cognitive burden of point-free style when sifting through my colleagues' pull requests.

<comment><USER15> When it's appropriate, point free style doesn't increase cognitive burden. It's often inappropriate.

<comment><USER17> Well said.

</comment></comment></comment><comment><AUTHOR> There is a J interpreter Android app which works like a charm. I enjoyed solving the Project Euler problem set in it. You might too: [http://code.jsoftware.com/wiki/System/Installation](http://code.jsoftware.com/wiki/System/Installation)

</comment><comment><USER18> _you might know that it's usually defined by some of its features, such as: reification of functions, avoidance or banning of functions with side-effects, use of higher-order functions and so on_

The "function" in "functional programming" and the "function" in "avoidance or banning of functions with side-effects" are two different words, by the way! FP is named after the math word, not the programming language word, which means different things in different languages but usually means a kind of subroutine. FP means programming in a style that emphasizes composition of mathematical functions, and in an imperative language this generally amounts to writing your subroutines in a certain way. It just so happens that many imperative languages call subroutines "functions."

</comment><comment><USER10> ((+/) % #) &. ^.

is the same as

(+/ % #) &. ^.

because adverb (/ in this case) binds with + before three verbs +/ , % and # are grouped into the fork. So some parentheses aren't necessary. It would be cleaner to show three expressions which share the common part as similar in letters as well.

<comment><USER19> Is this software? What does it do?

</comment></comment><comment><USER20> Say we changed the problem to the geometric mean of non-negative numbers (instead of positive). This allows us to early-out if zero is encountered.

It's obvious how to change the imperative code: `if (x[i] == 0) return 0;` What would this optimization look like in APL or J?

<comment><USER10> Geometric mean is nth root of product of n numbers.

If you replace any of those numbers with 0, it will all collapse to 0 - perhaps not what you want. But it's not hard to write such a program:

          geometric_mean1 =: (+/ % #) &. (^."1) @: (0&>.)
          geometric_mean1 2 4 8
       4
          geometric_mean1 _2 4 8
       0

If you want to replace negative numbers with their positive counterparts, you may first replace a number with its absolute value:

          geometric_mean2 =: (+/ % #) &. (^."1) @: (>. -)
          geometric_mean2 _2 4 8
       4
          geometric_mean2 2 4 8
       4

Original geometric_mean probably meant to be

          geometric_mean =: (+/ % #) &. (^."1)

\- note the copula (assignment symbol) and rank of first verb (^.) .

</comment></comment><comment><USER21> > attempts to reduce programs to equations

Logic programming is close to this. In functional programming, left side of equation always consists of dependent variable and nothing more. Logic programming allows to put any variables on both sides of equation.

</comment><comment><USER22> This is an interesting post, and the code sample from APL got my attention. I have questions.

How do I learn/get/run APL or J? How do I even type the APL code given? What does the J code even mean?

As for the content...

"makes code super concise (less room for bugs)"

Unfortunately, while this sounds great, it does not logically follow. And while geometric mean is well-defined and understood, most functions I'm probably going to write in whichever language are going to be more complicated and less well-defined. So, how does APL/J/pure-functional help/make my non- trivial code more beautiful/concise/bug-free/provable?

<comment><AUTHOR> >How to type APL characters

They are unicode characters. Type them the way you would type any unicode character. If you have not yet found a practical way of doing it, there are plugins for editors to help you type APL characters with no hassle.

>How to learn APL?

There's a Dyalog APL manual which is quite clear, Google it. Also, you can use the GNU APL interpreter. I would recommend learning APL first, only by reading the Dyalog manual and writing programs with pencil an paper, then learn J in detail.

> How do I learn J?

Jsoftware provides a free interpreter. They also have a sleek interpreter app for Android. I would recommend to download this app and go through the project Euler problem set. Jsoftware provides all the documentation you will need in their webpage

[http://code.jsoftware.com/wiki/System/Installation](http://code.jsoftware.com/wiki/System/Installation)

> what good will J do for me?

The best would be to learn it and see it for yourself. Sadly, you find yourself in Paul Graham's Blob Paradox.I can't get you out.

<comment><USER10> >> what good will J do for me?

> The best would be to learn it and see it for yourself.

I've found the statement on the front page of jsoftware.com to be rather accurate:

"If you are interested in programming solutions to challenging data processing problems, then the time you invest in learning J will be well spent."

And "data processing problems" could be understood pretty widely. I've had a case when I first spent about 45 minutes producing a prototype (a program which would generate realistic plans for floor of an office building) using J, then converted that prototype in functionally equivalent (no embellishments) program in C# spending a couple of hours. Certainly working on a prototype took several failed attempts, yet it was still faster than doing the same in C# after the algorithm was already clear.

</comment></comment></comment><comment><USER23> One could also say that functional programming prefers expressions to statements —and treats functions as just another expression. When needed, statement-like things are constructed from expressions.

Equations in lambda calculus do seem to have a "preferred direction" specified by the evaluation rules, though referential transparency lets you go "in the other direction" in your head, when reasoning about your program.

Perhaps the programs ~ equations idea would apply even better to logic programming, or term rewriting?

</comment><comment> d--b Declarative programming is the attempt of reducing programming to equations.

Functional programming is a way of organizing code as chains of functions...

</comment><comment><USER24> I kinda agree with the idea; functional programming turns your program into a series of tubes.

<comment><USER25> This is exactly it. I don't write 100% functional code, but when given a possibility of implementing functionality using state vs pure function, I aim for the pure function whenever possible.

</comment></comment><comment><USER26> I am something like an intermediate programmer and this is useful.

I want to understand how FP replaces OOP in a similarly concise example. I have a sense that it involves a reconsideration of why OOP is useful, and solving that issue with a widely new approach, but I am not there yet myself. I'd love to see something like these Python comparisons but involving the demolition of an OOP implementation.

<comment><USER27> Try this: [https://www.braveclojure.com/multimethods-records- protocols/](https://www.braveclojure.com/multimethods-records-protocols/)

<comment><USER26> Thanks. OK. This gave me a good outline. These ideas were somewhat right under my nose, in some of the Python concepts like closures and decorators. I don't know the languages here quite the same but the possibilities are convincing nonetheless. Hmmm... I could see myself getting carried away with this if I put some time into it.

</comment></comment></comment><comment><USER28> I think the main feature of Functional programming is not avoiding side effects but abstraction. You can compose different kinds of powerful abstractions and programmers are free to choose their "language" of abstractions, compared to "X Oriented" languages that forces programmer to think in certain terms and limits in ways you can create layers of abstractions.

</comment><comment> oh-kumudo The example is so simplistic and toy-like that it is not remotely convincing.

</comment><comment><USER29> Python with numpy has a pretty concise solution

np.exp(np.mean(np.log(a[a>0])))

<comment><AUTHOR> That's what the J sample is doing (minus the filtering)

</comment></comment><comment><USER30> Minor typo

> reduce(lambda b, b: a _b, 1, positives)

Should be

> reduce(lambda a, b: a_b, 1, positives)

<comment><AUTHOR> Thanks, fixing it :)

</comment></comment><comment><USER31> In the author's example of the geometric mean, shouldn't the function return an error if any of the numbers were negative? Because the program shouldn't be sending negative numbers to that function to begin with so he/she should maybe get some hint that one of those functions producing said numbers isn't working properly. And if there are no positives, I sure as hell don't want a divide by zero error bringing the program to a complete stop when I could just simply display "Could not calculate geometric mean, check the inputs" to the user.

<comment><AUTHOR> The functions in the article are not the geometric_mean. They are functions which first filter the list and then take the geometric mean. I only misnamed them that way for the sake of exposition. The only true geometric_mean in there is the J version

</comment></comment><comment><USER32> This quote made me smile.. Thanks OP! Happy holidays!

> Just in case all that wasn't enough to convince you about the superiority of > the functional gospel, take this threat: FP will displace OOP, so start > thinking along our lines our you will eventually lose your job

<comment><USER33> "The fact that the functions are collected into records and called methods is irrelevant. As a result, the typical object-oriented program makes far more use of higher-order values than many func- tional programs" - William Cook, On understanding data abstraction revisited.

OOP, especially with a focus on immutability, is not that far away from FP. It's not like, say physics where two domains can be conceptually quite different. OOP and FP are just two programming tools meaning that their variation is quite limited by the domain they are in.

<comment><USER32> Objects as a higher-order abstraction, as an encapsulation of data and methods, are all fine and dandy. When I think of OOP, however, I think of deep inheritance. I'm not a great fan of the latter.</comment></comment></comment>


Apple: even its most banal features require a proficiency in machine learning - <AUTHOR> https://techcrunch.com/2017/10/19/apple-makes-the-case-that-even-its-most-banal-features-require-a-proficiency-in-machine-learning/ <comment><USER2> PSA: The article is about the "Hey Siri" functionality and not anything relate to Core ML.

The underlying technical content can be found in Apple's Machine Learning Journal article: _Hey Siri: An On-device DNN-powered Voice Trigger for Apple's Personal Assistant_

[https://machinelearning.apple.com/2017/10/01/hey- siri.html](https://machinelearning.apple.com/2017/10/01/hey-siri.html)

I hadn't considered the nuance of distinguishing between "Hey Siri" and "Hey Seriously", so that was pretty neat to learn about.</comment>


Review my startup idea: Re-thinking the inbox - <AUTHOR>

I was talking with my dad about his work when he started complaining about the volume of email he gets. After looking through his email, I started thinking about how people use email and where it fits in the workplace. I'm a fan of GTD, so my concept is a tool that handles your email, tweets, Facebook posts, and Google+ shares as next actions in the GTD system.
Down the road, I'd like to offer a developer API, because there could be uses for this tool beyond what I would imagine. I'd also like to offer four versions of this app, hosted for personal use, hosted for businesses, via AWS marketplace, and a deployable version for business who want to host in-house.
What do you guys think? I'm always open to comments and suggestions. Thank you for your time and consideration. <comment><USER2> It sounds like you didn't listen to your dad. He complained about how much email he gets, and you want to merely present it differently, and on top of that give him more work to do by presenting him with (generally low-signal) social media to process as well.

</comment><comment><USER3> <https://angel.co/minbox>

Not much to see from the screenshots, but a lot of buzz.

</comment><comment><USER4> I'm afraid I don't fully understand your idea. Do you have a mockup or wireframe that you can share?

<comment><AUTHOR> I do not, unfortunately. Development is going well, and I hope to have a prototype within the week.

</comment></comment><comment><USER5> watch trademark/copyright issues. if you're too close to the GTD system you might get sued.</comment>


Ask HN: Why Would I Write Web Apps In Anything Besides PHP? - <AUTHOR> I recently considered moving all my web apps from PHP to something else, mainly because I was bored and it was an excuse to get proficient with another language.  However, the alternatives were not written with web scripting in mind.  Python and Ruby were both designed as stand-alone programming languages with web wrappers added later.  Beyond those two, I couldn't even think of a third language that was even worth considering.  So I stayed with PHP because PHP was designed specifically for web scripting.<p>My question is: What benefits are there to writing web apps in any of those other languages that weren't designed specifically for web apps? <comment><USER3> Eh, I don't really get your question here.

Why would you _rewrite_ all your apps with something other than PHP? You wouldn't, of course.

Why would you consider a language that wasn't "designed specifically for web scripting"? Because that's an irrelevant criteria for choosing a platform. It makes no difference if something was(n't) designed for a single purpose, only that it is effective for the purpose you require.

A third language worth considering -- how about JavaScript w/ Node.JS?

Benefits to writing web apps in a language other than PHP? Well, you get the benefits of that language - whatever those might be. Benefits might include anything from technical superiority (and what 'technical superiority' means is based a lot more on the application than the fact it's web-based) to it being easy to find developers who know a platform in your city when you need to hire, availability of documentation, or even the general progressiveness of the whole ecosystem (is new stuff happening? is there community interest?).

I think that discounting everything but PHP just because they aren't pigeonholed into web apps (of course, PHP can be used for more than just the web, but let's gloss over this fact) is pretty... close minded.

A counter question: if you like PHP and are productive/happy/etc using it, why would you go out looking for new languages to replace it? You will only discover that _they aren't PHP_.

<comment><USER4> "designed specifically for web scripting" is worth a lot.

PHP's standard library has a function called htmlspecialchars() which escapes special characters in HTML. If you don't use a function like this, your HTML forms can be destroyed by ' and " characters and crackers can f- up your web site by putting <script> elements on your pages.

There is no function like this in the Java standard libraries. Nothing like this comes with JSP or JAX-RS. You can get one in the Apache commons lang project, but a Java web developer who doesn't know this (or write his own) is in deep trouble.

PHP is a great tool; it's creators have gotten many details right, and it offers developers the chance to get started without running into gotchas. On the other hand, other languages have things going for them too.

Ruby gems and Java's maven are incredible package managers that put PEAR to shame. There's a lot of junk software written in Java, but some of the best open source projects are there too. People are doing interesting stuff in web frameworks in Python, Ruby, Java, C# and many other languages, even PHP.

<comment><USER5> Who cares if it's in a "standard library", as long as it's available in a library?

<comment><USER4> but you have know about it, and Java programmers have a lot of things clamoring for their attention. Programmers in all languages, including PHP, fail to escape characters correctly. But PHP programmers have no excuse: you can tell them what to do and they don't have to mess with the build system, think about licenses, all that.

In a large Java system, you might find you're using 4 different JSON libraries... because 2 of them are used by other Open Source projects your project uses and 5 of your subteams picked 2 different JSON libraries.. Now you've got to deal with bugs in 4 different libraries and if you're doing cross-functional coding you've got to know the idiosyncratic APIs and you can always get your panties in a knot about which library you should use in who's turf.

PHP programmers use json_encode() and json_decode() and avoid bugs and wasted time.

<comment><USER6> rails 3 makes strings safe by default. PHP doesn't.

<comment><USER7> Rails 3 is a web _framework_. PHP _isn't_. I am always puzzled by the apple to oranges comparison: Rails vs PHP.

<comment><USER3> I normally would agree. But I think this is a unique discussion because the OP is asking why he should use something other than PHP. One might use Ruby _because_ of Rails. So it's not a comparison of PHP and Rails directly, just reinforcing the point that languages/platforms other than PHP (and it's frameworks) are just as useful for web work as PHP is.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Cleaner code, powerful libraries, frameworks with vibrant communities (django/rails), and so you have friends to sit with at lunch. Really, it's a personal preference. If you have existing sites in PHP and you're really comfortable with it, why waste time porting things over? Go create something new in the most efficient way you can!

<comment><USER9> cleaner code is just a matter of coding standars, not a language feature.

<comment><USER10> I agree that for the most part this is correct. But, I also would argue that some aspects of a language can lend itself to more organized code. The include statement is one example where I think PHP doesn't help keep code organized. An actual module system with packages helps a good deal here.

</comment></comment></comment><comment><USER11> One major advantage to using Python especially is the availability of many libraries and apis. I think that the main reason for the growth of PHP (at least in the beginning) was the good interface with SQL (LAMP). Now that there are good alternatives (MongoDB, Riak, Redis, etc.), PHP's SQL support isn't a must. I think that the simple nature of the ruby language is a good thing. The code is easy to understand and the libraries aren't a mess _cough cough_.

All in all, it comes down to personal preference.

Personal Plug for Python: I have used python for some major statistical analysis (over the web) and Django interfaces well with sciPy and numPy. Python also has much better native access so R works well with it.

AFAIK: Node.js was written for webapps. Also javascript is interoperable in most major browsers so you use the same language on client and server side.

Personal Plug for Node.js: I love node. It is really simple to use especially with coffeescript and express. The tools available are constantly growing and there are so many modules available. Also, node.js moves a lot faster with major releases and updates as well as the availability of any existing javascript library available.

<comment><USER12> This is the same advantage as Ruby - the community for both languages has been more vibrant and interesting than PHP for years.

<comment><USER13> Hardly. The PHP Drupal community alone is bigger than Ruby and Python COMBINED. Ruby is in decline and neither community has the innovation coming out of projects like HipHop, Wordpress, etc etc.

PHP is a mature language and isn't trendy, but it is far more vibrant, broad, and interesting than Ruby or Python.

<comment><USER14> Where can I get some of that kool-aid?

<comment><USER15> Get me some as well, installed ubuntu server today...

apt-cache depends a* | grep -c python: 18711

apt-cache depends a* | grep -c php: 1596

apt-cache depends a* | grep -c ruby: 2839

Not that it proves anything but it might be an indicator.

</comment></comment></comment></comment></comment><comment><USER16> There is no benefit.

PHP is great for doing rapid prototyping for web applications, and will suffice even for the final version in most cases.

Most here are concerned with producing something of value, so if it's easier to do in PHP, then do it! Your final product on the web will speak for itself, no matter what framework it was written in.

</comment><comment><USER17> Good luck applying your PHP knowledge outside of the tiny sliver of software engineering domain that is web apps. Learning Python and arguably Ruby (now with JRuby out there) is a wiser long-term investment if you want to be able to use your skills towards solving other types of problems.

<comment><USER18> That's like telling a brain surgeon their skills are useless elsewhere in medicine. True, perhaps, but still a pretty stupid argument. You can make a pretty good living (and be perfectly happy and fulfilled) as a brain surgeon even if your skills won't let you become a radiologist.

I'd love to hear why Python and Ruby are going to prepare you to solve all sorts of problems but PHP isn't. The particular syntax isn't the important bit of coding - the problem solving mentality is.

<comment><USER17> It's a cultural thing and a library thing. I'm not well tapped into the Python community (which seems to have a healthy breadth of work going on), but with JRuby you have full access to the Java ecosystem which (needless to say) puts you in the position to solve all kinds of problems beyond web applications.

Your analogy is flawed since people go to school to become brain surgeons with the expectation of a life-long specialized career. This isn't the case with most web application engineers, who usually have a more general computer science background. You'd be hard pressed to find a PhD, our version of specialization, whose dissertation focused on the types of problems PHP is generally used to solve.

<comment><USER18> > with JRuby you have full access to the Java ecosystem which (needless to > say) puts you in the position to solve all kinds of problems beyond web > applications.

Putting aside for a moment the fact that PHP is Turing-complete, are there any examples of these amazing things you can do in JRuby that you can't do in PHP? Even the JRuby wiki talks mainly about how awesome it is to be able to run Ruby on Rails via a Java interpreter.

To extend the medicine analogy, being a surgeon isn't about how awesome the particular scalpel you're using is. It's about knowing where and how to cut. The same is true with code. Someone who's a really good coder in PHP likely isn't going to have much trouble learning other languages if they so desire.

<comment><USER17> Like I said, it's a cultural and a library thing.

First, the cultural.

PHP's community is largely focused on web applications, and has lots of folks that do not have a background outside of PHP or web applications. The PHP culture is generally one of "I'm not interested in understanding why its broken, just give me the code to fix it." If you browse the PHP documentation, you'll notice the comments are riddled with errors, bad advice, hacks, and so on. It even bleeds into print, I'd argue "PHP: The Good Parts" is the worst software engineering book I've ever read.

The Python and Ruby communities have their problems, for sure, but you're more likely to find good advice and altogether more competent people when asking for help there. There is a focus on constant improvement, elegance, and craftmanship while maintaining pragmatism in the Ruby community that fosters more of a joy for learning and building things than I think you'll find in PHP.

On the library side, I can't speak for Python, but my point with JRuby is that you have access to not only the Ruby ecosystem but the Java ecosystem. For the purposes of arguing the breadth of applications I can simply stop at the Java ecosystem, full stop, since it's arguably the largest set of libraries available on a single platform ever built. To start, just look at the Apache projects, Hadoop, Lucene, Solr, Mahout, and more give you access to state of the art machine learning, IR, and data analysis algorithms that are beyond your wildest dreams in PHP. And this, of course, is just the surface of what is available to you.

<comment><USER7> Putting aside Quercus, a PHP implementation on top on JVM, Zend at least provides a proper Java bridge into their Zend Server line of products, including the Community version: [http://www.zend.com/en/products/platform/product- comparison/...](http://www.zend.com/en/products/platform/product- comparison/java-bridge)

I tried to use Quercus, but besides templating, it pretty much blows at everything else PHP related. <http://www.caucho.com/resin-3.0/quercus/>

Therefore this isn't a sole feature of the J-something language implementation on top of JVM.

</comment></comment></comment></comment></comment></comment><comment><USER19> IMO, a language derives the most of its real-world utility from (good, updated, relevant) supporting libraries. This is a great reason to learn python AND ruby.

(Personally, I have a project where I'm debating the two. I've decided Ruby for now but may move to Python. I hope I never do PHP again.)

<comment><USER20> I realize that this does not have much to do with the topic of this thread, but I wanted to share a quick tip with you from the perspective of someone who spent a fair amount of time debating Python vs Ruby.

I love Ruby because it is really an amazing language (and I knew about and loved Ruby before Rails ever came into the picture). I also love Python - <USER2> was the first language that I ever finished a major project in, and it is an equally amazing language.

They are both similar enough to make favoring one over the other an extremely difficult decision. At the same time, the differences between the two languages are strong enough to make it so that you will miss the features of one language when you choose the other.

I literally spent weeks agonizing over which one to choose for a major project that I was about to begin. Finally, I realized that I would have to make a decision if I ever hoped to get anything done.

In order to make my decision, I simply made a list of the libraries/modules that would be helpful to me in completing my project. Then, for each item on this list, I looked at the status of the pre-made solutions that were available in each language. Where there was no library available in either language I just crossed it off (I'll write it myself).

When I was done, I looked at the list and choose the language that satisfied the most of my 3rd party library needs. For that project it was Python. When I repeated the process for a different project, then it was Ruby.

The important thing was that I was able to overcome paralysis by analysis and finally get some coding done. I don't know the size, scope, or nature of the project that you are working on, but I hope that my experience is able to help you in some way.

</comment></comment><comment> ryan-allen I'd say a good reason to try writing a web app using other tools is because a) you don't know why because you have no experience and b) lots of other people are doing it.

Isn't that enough reason? While languages like Ruby and Python were not designed 'with the web in mind', PHP wasn't designed _at all_. You won't understand this until you've had some reasonable experience with real programming languages. Enjoy!

</comment><comment><USER21> I know PHP pretty well and enjoy it. I just started learning Ruby on Rails and it is VERY fun. It is simple and with rails it is quick to launch apps. I don't think i'm experienced enough yet to see the downside with RoR...but for now I'm happy with what I see.

<comment><USER22> Most of the time, when people have problems with Ruby on Rails it's because they fight with it instead of doing things "the Rails way".

It used to be that a big downside of Rails was deployment, but with things like Passenger, Moonshine, and Heroku, deployment is a snap now.

</comment></comment><comment><USER23> I've been building web applications for almost 10 years. I can build a Rails app about 5 times faster than a similar PHP app. I know there might be some PHP frameworks out there, but even with those in-mind, I would say Rails is probably 2 times as easy to develop and deploy because of things like Heroku.

I know these are rough numbers from my perspective, but the efficiency and effectiveness of the framework really adds up.

<comment><USER24> You can deploy a php app just as easily on dotcloud :) <http://dotcloud.com>

(Disclaimer: I work there)

<comment><USER18> Even without things like dotcloud, setting up a PHP app takes about 15 minutes on Linode/Slicehost. `apt-get install php5 apache2 mysql-server` and you're about 75% of the way there.

</comment></comment></comment><comment><USER25> To really answer your question you pretty much have to write your own Django/Rails app. Why don't you give it a try in a new project?

<comment><USER26> I would echo this advice as well. As a mainly PHP developer I have learned a lot of cool ideas and techniques from Ruby on Rails that I have brought into my PHP code.

For example, the idea of the "flash" and how to properly do MVC.

Just learning another language (programming or not) opens your mind to new ideas and ways of looking at things. If those aren't reasons enough, then what about increasing your work skills and marketability?

</comment></comment><comment><USER27> Because modern web apps are more than just a thin layer over the database.

Here's my recent experience:

1\. An image server cobbled together using RabbitMQ, OpenCV, and Imagemagick. ElasticSearch is used for title/description searches.

Sure this could technically be done in PHP, but 80% of the code has nothign to do with the web in particular so its better to use a general purpose language that was designed from the start to be that rather than PHP which was a domain specific language that evolved to where it is today.

2\. Hedge fund manager using Quantlib and NumPy. There's no equivilent in PHP. There's no easy way to interface with C-code. Cython and Cytpes make it easy. Doing so in PHP means _hand writing_ a C-extension. I've done that before and let me tell you the Zend Engine not a pretty thing to work with.

3\. Any project that has a rich client side interface built in javascript will get gains from using Python over PHP. At that point your server is really just a message backend controlled via REST or JSON-RPC.

</comment><comment><USER28> Productivity with PHP peaks near the time when you start your project (when it is great and beats out a lot of other technologies) and without a lot of work, goes downhill from there. Put simply, it is not designed to scale well in terms of code size and complexity. It is very concrete and doesn't encourage any use of abstraction by default. For some types of apps & sites this is no problem and the simple and flat design of PHP will actually be of benefit.

There are frameworks that alleviate some of these issues (Cake, etc.) but they are really compensating for the language deficiencies that cause the problem rather than solving them. Other languages give you a little more overhead, are a little more generic, but in return they give you far stronger tools to deal with the complexity burden that (inevitably) hits at some point for many projects.

</comment><comment><USER29> If you're going to write a well-designed PHP web application (and that's subjective, but I believe most people would have a similar idea of well- designed,) you're going to end up writing or using a "web wrapper" (or in other words, framework) anyways.

</comment><comment><USER30> For me the issue isn't whether another language or framework is better for the job at hand than the tools you've spent time building up an expertise in. The thing that matters is that you don't develop a closed mind which prevents you from looking at ANYTHING else out there.

Evolving your sklls and constant learning is the hallmark of a good developer, not whether they learn Rails or Python now. Curiosity and a willingness to admit that something new and better might be out there matter more than pseudo religious battles between ardent users of one or the other piece of tech. That's going to keep you in software development for the next 25-50 years.

</comment><comment><USER31> For me, I started using Python because I could write the front end (web- facing) and back end code in the same language.

Meaning I can write back end services like mail server and share models and other code across both.

You could argue that you can write back end services in PHP, however, it was no designed with that intention and in my honest opinion it does not translate very well because the infrastructure in terms of open source libraries just don't exist as PHP is primarily a web language.

<comment><USER32> My experience is diametrically opposite to this.

What infrastructure and open source libraries don't exist for PHP?

<comment><USER33> Full stack web servers like Mongrel or CherryPy.

Server fabrication and automation tools like Chef, Puppet, Fabric.

Process management tools like God.

Parallel worker systems like Resque or Celery.

PHP is great for web apps, but the further I've gone into systems programming, the more I need Python/Perl/Ruby (or C).

<comment><USER32> You are not answering the question that was asked. ianl's post was directly in reference to web application development, not systems programming. Of course you wouldn't do that with PHP. That's like saying "yeah, it's a great knife, but it can't change my oil." Well...sure. Nobody's saying it can. But it does what we're actually talking about just fine, and I am skeptical of ianl's claims that there are missing pieces of the infrastructure _for web development_.

(BTW: Puppet not playing nicely with PHP is new to me as I use it regularly. And I don't think you get much with Mongrel that nginx/FPM don't do well enough.)

<comment><USER34> How about evented frameworks like Tornado (python) or Goliath (ruby)?

<comment><USER32> That's actually a good point, and I'm a big fan of Tornado and Manos (C#) myself.

</comment></comment></comment></comment></comment></comment><comment><USER35> It is interesting to think of a language specifically designed for web apps as _different_ from a general-purpose language. This would of never occurred to me unless I only knew PHP.

I suspect if you tried to make a good web app language it would look like ruby or python, and really good web app language -- one very scalable -- look like haskell or scheme.

But to answer your question directly there are too many benefits to mention and they are language specific. I think transitioning to ruby and rails environment would be rewarding. I myself like Scala much better than ruby even though it's static typing is painful at times, and choose the rails-like framework Play! (<http://scala.playframework.org>). The front page shows you examples of the language expressiveness.

</comment><comment> DanI-S A nice side-effect is that you'll come out of it knowing another language that is useful for more than just web stuff.

</comment><comment><USER36> You can't really say PHP was designed for web scripting... for the most part, PHP wasn't designed at all.

By the time you get to more advanced apps, the advantages of PHP disappear and all you're left with is a somewhat messy language.

</comment><comment><USER37> There's really little reason to _not_ use PHP, except in special usecases, like real-time services, or massively multiplayer, for example.

Facebook is, even today, basically still a monolithic PHP script.

<comment><USER32> This isn't really true. Facebook has some PHP (although a lot of their PHP is actually compiled to C++ - it isn't in a meaningful way "a PHP script," but rather "a PHP program) and a pretty wide variety of technologies in their service layer (and any website that actually _has_ a service layer is difficult to call "just a script").

It is _certainly_ not "monolithic."

<comment><USER37> I got that literally from a recent presentation from a FB engineer. Here it is: [http://www.infoq.com/presentations/Evolution-of-Code- Design-...](http://www.infoq.com/presentations/Evolution-of-Code-Design-at- Facebook)

<comment> brown9-2 That same presentation walks through some OO code patterns they use; that's far from "a giant script".

</comment></comment></comment></comment><comment><USER38> There is nothing related to web development that you can do in other languages that you can't do with PHP. That should suffice for your first question: Do not rewrite any of your apps. If you want to learn another language, there are tons of stuff you can do with Python, from numerical programming to openGL.

There is a widespread opinion that PHP is not as sexy as other scripting languages, and that it is too domain specific. That may be true. There is another opinion that with PHP you can only write spaghetti code. That one is false, it's up to you to organize your code. I 've been maintaining PHP scripts for years and didn't have that problem. Plus achieving good performance is easier with PHP, and that comes handy with high traffic sites.

I like python for non-web projects. If only Android or iOS was written in python.

</comment><comment><USER39> "I recently considered moving all my web apps from PHP to something else, mainly because I was bored and it was an excuse to get proficient with another language."

It's just about the worst excuse going if your apps are of any value whatsoever

</comment><comment><USER40> Because you're not a blathering imbecile with an IQ under 60.</comment>


The Making of a $500M Mansion in L.A. - <AUTHOR> http://www.details.com/story/most-expensive-mansion-500-million-nile-niami <comment><USER2> Was anyone else surprised that a $500mm house is still built with cheap plywood and such? I mean, I get that every penny counts, but surely it would only increase the cost of the building by 0.1% if they used nothing but first grade cabinet plywood everywhere or better still, didn't use any plywood.

<comment><USER3> For 500MM I'd want something that you could nuke from orbit and it would still be standing.

<comment><USER4> I represent a seller with a property in South America that might meet your needs. Are you in the market?

</comment></comment></comment><comment><USER5> [https://runvnc.github.io/tinyvillage/](https://runvnc.github.io/tinyvillage/)

</comment><comment><USER6> just stupid

</comment><comment><USER7> That is the kind of tasteless shit architecture that only LA could produce.

<comment><USER8> Here, cleanse your palette with some architectural masterpieces that only LA could produce:

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

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

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

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

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

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

<comment><USER9> To be fair all of the above were built before 1970s. There are a few modern buildings like "The Broad" that are quite interesting. But overwhelmingly LA architecture is now dominated by tasteless developers like the one described in the article.</comment></comment></comment>


You say Launch Early, but what about browser compatibility? - <AUTHOR>

<comment><USER2> I would fix the FF bugs ASAP. You'll have to do it eventually so put that at the top of your to-do list. The fixes probably aren't that hard. Thanks to firebug you could probably pin-point the bugs really fast.

It's probably better to put off the launch for a few days to avoid making a really bad impression to potential users.

<comment><AUTHOR> Easier said that done. My app relies heavily on AJAX and has lots of Javascript...

<comment><USER2> I feel for you. When I wrote my first AJAX program, there was a lot of javascript controlling the UI. It was almost complete before I looked at it in IE for the first time. Two days and 10,000 alert boxes later I had it working.

It's a necessary evil. No one enjoys it, but if you don't make the fixes you'll prevent a lot of people (including myself, a FF user) from ever even trying your website. If I try it once and it completely breaks, I'm never going to come back.

If there are one or two non-critical features that are creating all of the bugs, then perhaps remove them initially and add them once you've fixed the compatibility bugs.

</comment></comment></comment><comment><AUTHOR> My app is close to ready to be launched, but it only works in IE. Is it ok to launch with it working in IE only? Do you think I should let users know that it only works in IE?

<comment><USER3> As someone who doesn't use IE, I'm more impressed by a site saying "This site is only compatible with IE right now - we're working on it, though!" than with a site that is obviously broken and incompatible. And if you don't intend to ever make it work in the other browsers, say so up front.

And users will figure out very quickly that it only works in IE; better to be up-front about it.

</comment></comment><comment><USER4> One thing to remember is if it works in Firefox, it works on every platform. Windows people can still use your site even if they need to click another icon first...

IE-only means you lose all the Mac people, all the Linux people, and probably turn off the majority of the more clued-in Windows people.

Early adopters -- your target audience I assume -- don't tend to use IE.</comment>


China is angered by Apple's iPhone event mentioning Taiwan - <AUTHOR> https://finance.yahoo.com/news/china-angered-apple-apos-big-135832729.html <comment><USER2> Is there any argument why Taiwan should be treated as anything other than a normal, independent country? I know that China wants to claim sovereignty, but a want is not an argument. I don't mean this as a rhetorical question--I am curious if there is any coherent argument here?

<comment><USER3> Apple did the right thing, why cave to China's political agenda.

<comment><USER4> It wouldn't call it "propaganda." Countries routinely have territorial disputes. I get China is viewed as a competitor to American interests, but the situation in Taiwan is historically complex. It would be like if Texas or California unilaterally seceded from the U.S., various countries would recognize or not recognize their legitimacy as an independent nation.

<comment><USER5> It would be like if the US had a civil war and one side retreated to Cuba

<comment><USER6> Wouldn't it be like if the U.S. first annexed Cuba, and _then_ had a civil war where one side retreated to it?

<comment><USER7> Indeed. Only a few have any thoughts about the native Taiwanese, both Aboriginal and Han.

</comment></comment></comment></comment></comment></comment><comment><USER8> Puerto Rico was listed separately from the United States, and it's clearly not a political statement. I think Apple is safe here. Apple should turn this around and say China is showing its ignorance on US sovereignty over Puerto Rico :p

<comment><USER9> Apple's getting a LOT of business from China. It can't and won't afford to piss them off.

<comment><USER10> Apple's got a market cap of $1 trillion and $285 billion in cash. It can afford to do whatever the hell it wants, frankly.

</comment></comment></comment><comment><USER11> The presenter was even careful to call them "locations" which annoyed me at the time as PR speak-- and then doubled down and said "someone sees their favorite country or location".

Chinese propaganda, nothing to see here.

The exact timestamp in the talk: [https://www.youtube.com/watch?v=wFTmQ27S7OQ&feature=youtu.be...](https://www.youtube.com/watch?v=wFTmQ27S7OQ&feature=youtu.be&t=6056)

</comment><comment><USER12> Sorry, but Taiwan has been totally independent from China for many decades. I guess only China considers Taiwan still a part of China.

<comment><USER13> China and Taiwan have a long standing agreement that they are both part of a single China, they just disagree about who should lead it.

So technically, Taiwan considers itself part of China, in an abstract sense.

<comment><USER14> > China and Taiwan have a long standing agreement that they are both part of a > single China

More info please, this isn't what I know of Taiwan.

<comment><USER15> My understanding is that the Taiwanese government has not renounced claims over mainland China because doing so would piss off China, who would view it as a step towards independence.

Aside from escalation of tensions, pissing off PRC would likely worsen economic relations, which I think would be more damaging to Taiwan than to China (according to Wikipedia, China is Taiwan's largest import/export partner).

Absent the political/economic ramifications, I believe only a very small percentage of Taiwan's population would mind if Taiwan renounced these claims. Even "pro-reunification" KMT has stepped a bit back from its reunification stance, e.g. setting conditions like "democracy, economic development to a level near that of Taiwan, and equitable wealth distribution" for China before reunification can occur ([https://en.wikipedia.org/wiki/Taiwan](https://en.wikipedia.org/wiki/Taiwan)).

So, for many, the only reason to support an "eventual reunification" stance is it'd strengthen the economy, i.e., they don't mind China playing its word games if it means peace and Taiwan prospering.

This doesn't mean "pro-independence" pan-green party ignores the economic effects. They argue for developing economic relations with other countries, to reduce economic dependence on China, and thus make independence more practical.

</comment></comment></comment></comment><comment><USER16> The One China issue has long ago morphed from a rational point of consensus, into an irrational point of oppression.

The attitude has changed drastically, when all the original members of those discussions have been replaced by next generations, and no one can remember the original concilliary tones of those meetings, and all that remains are misunderstandings -- that was how the splits between Catholics and Protestants, Sunnis and Shias, probably happened, and passed down in increasingly dogmatic interpretations.

</comment><comment><USER17> > commentators on Weibo accused Apple of disrespecting China and threatened to > return all their Apple products.

Is this a thing that people will actually do?

<comment><USER18> Yes... But more likely they boycot and stop buying products for extended time. They have forced companies before to 'change' opinions, but these were related to quality issues for instance like Ericsson, or local branches of Japanese supermarkets

</comment></comment><comment><USER19> But the fact is from a consumer perspective, you'd actually want to know the difference between China, HK, and Taiwan. If a company said they offered tech support in China, would you assume that meant HK or Taiwan as well? I'd definitely inquire further. While the situation in HK may be evolving, Taiwan has been de facto independent for a long time, which changes things on the consumer-level.

Assume at your own buyer's risk. For things like the Apple Watch, I would just double-check.

<comment><USER20> The issue isn't that they were listed separately, rather that they weren't explicitly denoted as being part of China; for example, "Taiwan" vs. "Taiwan, China".

</comment></comment><comment><USER21> sometimes China is a dick.

actually, a lot of the time: consider Xinjiang and Tibet. the fact that we can't afford to shun them as they deserve doesn't mean they're not being very, very naughty.

</comment><comment><USER22> The key points to know about the significance of Taiwan:

Geography is still very significant. The potential for others to base aircraft and ships on Taiwan keeps China contained behind the South China Sea.

Taiwan is a hard target for amphibious invasion, and amphibious invasions are hard to begin with. The seas around Taiwan are quite rough, and there are only two potential beaches for such a landing. The time frame friendly to such an operation is also quite limited.

Basically, if China keeps on ramping up its blue water naval capabilities, some kind of confrontation is inevitable between the USA and China over the South China Sea and the US position as distant ally/hegemon to Korea, Japan, and other east Asian countries.

China's Geographic Challenge: [https://www.youtube.com/watch?v=H8uWoBtCkg8](https://www.youtube.com/watch?v=H8uWoBtCkg8)

<comment><USER23> Not while Trump is in power. Has Trump even staffed the open positions in the State dept?

</comment></comment><comment><USER24> I doubt many in the Chinese government could explain rationals for the One China policy any more.

</comment><comment><USER25> Good? China needs to come to terms with reality. What's happening in the South China Sea is scary.

</comment><comment><USER26> I'm fine if Taiwan declares independence but they should stop using the words "Republic of China" to represent themselves and to renounce their claim to mainland China, Taiwan isn't China and should never represent China, if they want to be treated as a separate nation, the first thing they should do is stop using the name of China.

<comment><USER27> It is republic of mostly ethnically Chinese. Why would they need to change the name?

<comment><USER26> So is Singapore and Hong Kong. Taiwan doesn't represent China. Republic of Macedonia recently changed their name because Greeks didn't want them to use Republic of Macedonia. If Taiwan wants to be Taiwan, they should change their name to Republic of Taiwan, just because Canada is majority English or German ethnicity doesn't mean its Republic of England. Also they should renounce their claim to the mainland, thats my biggest concern.

<comment><USER27> Just so I'm clear, given that the PRC doesn't represent Taiwan or exercise any sovereignty over it, do you also believe that it should renounce its claims to Taiwan?

<comment><USER26> Yes I don't care if Taiwan wants independence or not, I have good friends that are Taiwanese</comment></comment></comment></comment></comment>


Google Maps Platform new pricing moves to July 16th - <AUTHOR> https://developers.google.com/maps/billing/important-updates <comment><AUTHOR> Scared of the price hike? There is now a bit more time to search for Google Maps alternatives which will not break your budget...

If you have not seen it yet - you can check also our recently launched MapTiler Cloud ([https://cloud.maptiler.com/](https://cloud.maptiler.com/)) - which is a very affordable map hosting service from the authors of the popular open-source project OpenMapTiles.</comment>