Ask HN: What is one Vim trick most people don't know? - <AUTHOR> <comment><USER2> If you forgot to sudo vi, you've already edited the file, saving the file as root without first saving it as your own and then having to move it:

<ESC>:w !sudo tee %

Pipes the content of the file to a tee process as root and lets tee save it under the current file name. Vim will tell you the file has changed on disk and ask if it should reload it afterwards.

<comment><USER3> > If you forgot to sudo vi

IMO, it's better not to do that in the first place (which, of course, only makes your tip all the more useful!)

<comment><USER4> Make sure you are 100% confident that you know the proper syntax for this when you use it. I once blanked by mistake an important file, lucky for me I had a backup.

<comment><USER3> Generally a good idea, before you sudo anything. That's one of the reasons to prefer this approach to `sudo vim`, actually - that's essentially "sudo of anything vim does", and that's a lot of very different things just a couple keystrokes away.

</comment></comment></comment></comment><comment><USER5> Not really a trick of Vim itself, but when using Vim from the terminal I find ctrl-z very useful to background Vim, type in a few shell commands for git or whatever and then use "fg" to hop back into Vim.

<comment><USER6> vim 8 and neovim have pretty functional in-built terminals (:term). You can try that if you're using one of these.

<comment><USER5> That's more keystrokes. ;)

<comment><USER7> Not if you bind it to ^Z. ;)

<comment><USER8> Well, you can't. The terminal translates Ctrl-Z into SIGTSTP before it even reaches vim. Alternative suggestion:

      nmap gz :term zsh<CR>

Same number of keystrokes, and does not override any existing normal-mode command from what I can see.

<comment><USER9>
        :nnoremap <C-z> :term<Return>

works for me (tmux in urxvt).

Ctrl-Z only gets converted to SIGTSTP if the terminal has ISIG set. For example, try `stty -isig; sleep 5` and try to suspend or interrupt the sleep command.

</comment></comment></comment></comment></comment></comment><comment><USER10> Many of the things here, as of writing, are quite elementary Vim tips. A lesser known trick that I learnt quite recently and have found very useful is `gn`, which visually selects the next search hit (similarly `gN` for the previous hit). That's not so useful in itself, but it can be combined with an operation, such as `c` or `y`, etc., which can then be repeated using the `.`.

</comment><comment><USER11> Macros, Macros, Macros. These are a game changer when editing large files. Use the `q` key and followed by any letter you like, I default to `a`. Perform some action, like deleting a line, appending to the start of a line, or searching for a word then deleting it. Press `esc`, then type in the number of times you want to repeat the action, followed by `@` and the letter you chose. I.E `10@a` and it will perform that action 10 times.

<comment><USER9> Also fun: macros can call themselves. So if you want to repeat something across a whole file, it's sometimes easiest to write an infinitely recursive macro and let it error when it bumps up against the bottom of the file.

</comment></comment><comment><USER12> `Ctrl + v` to visually select one character at a time (instead of say `Shift + v` that selects a whole line) and then use the movement keys to select a block of characters horizontally as well as vertically. Imagine several well indented HTML
 elements, you could for instance delete/modify all the class attributes on all lines visually in one go (to insert text use `Shift + i`, type, then Esc).

<comment><AUTHOR> I think I don't quite get you. Doesn't "v" do the same thing?

<comment><USER8> What robotvert means is rectangular selection across multiple lines. For example, suppose you have the following text:

first

second

third

You want to change all the instances of "wrong" to "right". So you put the cursor on the first "w", then `Ctrl-V` to enter blockwise visual mode, then `e2j` to select the "wrong" words, then `c` to remove all of them and enter insert mode to type a replacement. The replacement text is then applied to each line separately. Full series of keystrokes (starting with the cursor on the "w" in the first line) if you want to follow along:

      <Ctrl-V>e2jcright<ESC>

</comment></comment></comment><comment><USER13> :norm(al) command Allows you to do some of the vim magic also on remote systems where you don't have all your plugins.

Example:

(1) Select block with `C-v`

(2) Hit colon `:`

(3) Write norm and enter any sequence as you would be in normal mode: `norm I# ` (prepend selection with a comment sign)

(4) Admire the result.

<comment><USER14> yes, awesome!!!

</comment></comment><comment><USER15> Quick renaming of variables: what to type"explanation

        gd" go to definition of variable
        :%s/" beginning of a replace...
        Ctrl-r /" inserts the last word searched into the command, so what "gd" found
        /newname/gc" finish the replace command, g=global replace, c=confirm each replace

Save a character going to a line: instead of using :42<enter> to go to line 42, can use 42G

Auto-indent: =

Go to last file: Ctrl-^

Abbreviations: put this in your ~/.vimrc

        iab cmain int main() {
        \<CR>    return 0;
        \<CR>}

Insert the contents of a file: :r <filename>

I like to have a ~/gitmessage.txt which has a template I like, then when I do git commit all I have to do is:

        :r ~/gitmessage.txt

Vim + Ctags:

Ctags link usages and definitions so you can navigate through code like in an IDE without the bloat of an IDE. Works best with C, but works pretty well with any language with C-like syntax (and more).

Goto tag (definition) of what's under cursor: Ctrl-]

Go back: Ctrl-t

Open tag in a preview: Ctrl-w

:tag <tag> " go to tag, like:

        :tag someFunction
        :tag SOME_CONSTANT

<comment><USER16> > Insert the contents of a file: :r <filename>

The file name can be a pipe instead.

Let's say you have a Makefile based project and the dependencies aren't as complete as they ought to be. With your cursor on this line in the Makefile:

        SOURCES = \

You can say

        :r !ls src/*.c

That will put the complete list of extant C source files into the file at that position, complete with the "src/" path prefix. Then to format the list properly for "make" syntax, use Shift-V to select the list, hit the right angle bracket (">") once to indent it a level, then say:

         :s/$/ \/

This trick of replacing the start ("^") or end ("$") of a line is very often helpful. Here I've used it to ask Vim to put a space and backslash after every line to allow the SOURCES variable definition to continue from one line to the next.

(This will look like ":'<,'>s..." in your editor, with the bit between the colon and s being inserted by Vim; it means "front the start of the selection to the end.")

Remove the final backslash and it's done.

The advantage of working this way is that you aren't manually transcribing things the computer already knows and can report on command.

The possibilities here are vast. For instance, if your C source files are buried under subdirectories of `src`, say this instead:

        :r !find src -name \*.c

</comment></comment><comment><USER17> `Shift+v` to select a block of text and do a single operation to the same portion of text on several lines (regexp, aligning, etc.)

There's also `vt` + some character to select text from the cursor to the next occurrence of that character.

<comment><USER18> I've been looking for something like `Shift+v`! Thanks for that. +1 for `vt` as well.

<comment><USER19> Also ctrl-v allows you to manipulate a block of text, or insert text on multiple lines at once using I or A for before or after the block.

</comment></comment></comment><comment><USER19> A couple of nice ones: `gq` for re-wrapping a visually selected block of text (<shift>-v is simplest) to your text width.

`=` for re-indenting a selection to your current shift-width settings etc. (or `gg=G` to just do the whole file)

<comment><USER10> `gq` will work with a text object, so you don't need to go to the trouble of visually selecting a block. Say, for example, you have a mis-wrapped paragraph in a text file, providing your cursor is anywhere within that paragraph, `gqip` will rewrap the whole paragraph.

<comment><USER16> The nice thing about using `=` instead of `gq` is that you can "set equalprg" to something smarter than the internal Vim formatter, such as `fmt` or `par`:

        https://www.gnu.org/software/coreutils/manual/coreutils.html#fmt-invocation

        http://www.nicemice.net/par/

These formatters will do nice things like choose line breaks intelligently to reduce the raggedness of the right edge. I just tested `gqip` on a paragraph in a Markdown document here that was formatted with `fmt`: the `fmt` output put breaks in such that all but the last line was within one character of equal, whereas `gqip` had line lengths varying as much as 5 characters on a 72 character line length.

A quicker alternative to Shift-V, arrows, then `=` to reformat a paragraph with `fmt` is this:

        :map <F2> !}fmt -w72<CR>

That works anywhere inside the paragraph like with your `gqip`, but it uses the smarter `fmt` paragraph formatter.

Select your keystroke to taste. I chose F2 so long ago that I forget why that was a good idea at the time.

</comment></comment></comment><comment><AUTHOR> You can use `Ctrl + C` instead of `ESC`

I figured this out today. And I submitted this Ask HN to find out more such things.

<comment><USER20> It's not recommended to use <C-C> in place of Esc because it doesn't trigger an InsertLeave event

<comment><USER21> Guy who uses <C-c> here. Is that bad?

<comment><USER8> It is if one of your plugins uses the InsertLeave event to do its work. If in doubt, `grep -R InsertLeave ~/.vim`.

</comment></comment></comment></comment><comment><USER22> I use a lit this ed ([http://man.openbsd.org/4.4BSD- Lite2/ed.1](http://man.openbsd.org/4.4BSD-Lite2/ed.1)) commands from vi (not just vim).

For instance:

Delele first 20 lines:

<ESC>:0,20d

Delete lines from current location to end of file:

<ESC>:,$d

Search and replace from regrex:

<ESC>:0,$s/regex/replacement/g

<comment><USER23> Easier way to delete (or cut):

(from cursor next 20 lines) <ESC> d20d

When deleted is on your copy buffer, just prest p tu paste it from cursor.

<comment><USER24> Or if you don't like counting lines: d15gg

Delete from the current line to a line with a particular line number you already see on the left if you have line numbering enabled.

<comment><USER25> Line number display can be relative or absolute.

<comment><USER24> Ha! Good to know.

</comment></comment></comment></comment></comment><comment><USER26> I have two favourites : alt+* (search for the word I currently standing on) and ciw (delete the word you standing on and enter insert mode).

<comment><USER27> > I have two favourites : alt+* (search for the word I currently standing on)

Just '*' does this, no need for alt.

<comment><USER26> Whops that's true. I use non us keyboard layout where you have to press alt to get the * char. I pulled out this shortcut from muscle memory.

</comment></comment></comment><comment><USER28> 'Esc :q' to quit vim seems to be the one trick most people don't know.

<comment><USER29> Better/Other ways to exit VI/vim:

      * ctrl+z; kill %1
      * Open a new terminal and ignore the one with vim running.
      * ZZ
      * Pull the power cord, erasing any sign of it running.
      * ESC :q!
      * ESC :wq
      * ESC :exit
      * ESC :quit

Of course ESC and :q usually works too ;)

<comment><USER30> ZQ is another one. Like ZZ, but doesn't save. I mainly use ZZ and ZQ to quit.

</comment></comment></comment><comment><USER27> Mine is playing with errorformat (personal blogspam: [http://flukus.github.io/vim-errorformat- demystified.html](http://flukus.github.io/vim-errorformat-demystified.html)) and combining this with :cf (read errors from file) or :cb (read errors from buffer) to parse a file/buffer into the quicklist. Great for dealing with log files.

</comment><comment><USER31> Not sure if most people don't know it, but this is useful (in Windows vim):

In Unix vi(m), you use Ctrl-V to quote a special character to actually insert it into the text (or into a last line mode command; see example below).

So in Unix if you want to insert a carriage return (Ctrl-M) into a file or a command, you do Ctrl-V Ctrl-M. That does not work in Windows with gVim because Ctrl-V means paste from clipboard. So you use Ctrl-Q instead of Ctrl-V, like in this example, where you want to use vim to remove all the carriage returns (CRs) from the file (say if you were going to use the file on Unix later [1]):

        :%s/Ctrl-QEnter//g

where instead of typing the letters Enter, you hit the Enter key.

The %s means do the command for all lines in the file (% for all lines, s for substitute), the command is search-and-replace (old pattern with new pattern, here Ctrl-M with nothing), and the g(lobal) at the end means do it for all occurrences in the line (otherwise it does it only for the first occurrence on the line).

This will show on your screen as:

        :%s/^M//g (the Ctrl-Q does not show on screen)

where the ^M represents the CR or Enter.

The same command on Unix would be:

        :%s/Ctrl-VEnter//g

This will show on your screen as:

        :%s/^M//g (the Ctrl-V does not show on screen)

[1] Of course there are other ways to remove the CRs from the file, like a) using a dos2unix utility, a) many modern editors will do it for you (via a setting or a menu option), c) push it to Git from Windows and then pull it from Unix (with appropriate Git settings for line-ending handling), etc.

<comment><USER32> There's a command for that.

        " Use Unix line feeds.
        :set fileformat=unix

        " Use Windows line feeds.
        :set fileformat=dos

        " Shortcut
        :set ff=unix

        " See the current format
        :set ff

<comment><USER31> Yes, I was aware of that (but thanks), and that's why I had written above:

>a) many modern editors will do it for you

although I tend not to use those particular vim options much.

And for anyone else who does not know, many other vim set commands also have shortcuts, like:

:se ai (for :set autoindent)

and ts for tabstop, sw for shiftwidth, ic for ignorecase, wm for wrapmargin and many others, probably.

I tend to do this in my .vimrc or .exrc as soon as I start using any new instance (on a new machine) of vi/vim:

:se ai ts=4 sw=4 showmode showmatch ignorecase expandtab report=0

Also, like:

>" See the current format

> :set ff

you can do this for any boolean setting, like readonly, ignorecase, etc.:

:se readonly?

:se ic?

to query their values.

</comment></comment></comment><comment><USER33> A slightly longer trick but..

:tabe newfile to open a new file.

Then, add the following to your ~/.vimrc (on MacOS)

map <Esc>f <Esc>:tabn<cr> map <Esc>b <Esc>:tabp<cr>

Now you can switch between tabs using option + arrow keys

<comment><USER34> Also, there are standard gt and gT that are same amount of keystrokes and very mnemonic too.

</comment></comment><comment><USER35> you can find most on this thread [https://stackoverflow.com/questions/726894/what-are-the- dark...](https://stackoverflow.com/questions/726894/what-are-the-dark-corners- of-vim-your-mom-never-told-you-about)

</comment><comment><USER36> `gv` for reselecting the last selection

Assigning different functions to the arrow keys helps when learning vim navigation

<comment><USER37> Yes! Took me (embarrassingly) long to discover since I could not figure out how to google it

</comment></comment><comment><USER38> If you're in Insert Mode, and you want to paste the thing you last yanked, without leaving insert mode, you can do the following:<C-r>0

That pastes the contents of the 0 register into the buffer. Very useful. That'll work for all registers too.

<comment><USER39> Can also do <C-r>" (double quote instead of 0) to paste from the default yank register while in Insert Mode.

</comment></comment><comment><USER40> Better keyboard scrolling with this simple mapping:

nmap <C-j> 3j3<C-e>

nmap <C-k> 3k3<C-y>

This maps the <C-j> and <C-k> keys to a scroll action similar to mouse scrolling: the cursors stays in a fixed position while the whole screen moves up or down 3 rows.

<comment><USER41> I similarly map <C-j> 5j and <C-k> 5k and find it to be one of the most useful bindings I use, can't VIM without it these days

</comment></comment><comment><USER42> Diff mode, delicious! Just edit the 2 files with vim -O file1 file2, and in vim do <ESC>:diffthis<enter>C-w<right>:diffthis<enter>, and voila!

Vimgrep and the quickfix window are also pretty cool.

<comment><USER3> :diffoff is another great thing to know, particularly when using vimdiff to merge things (e.g. in git). I find that turning diffing off and on for various windows can more quickly give a clear picture of what changed where.

</comment></comment><comment><USER43> Turning off the ability to enter recording mode. I still occasionally type :Q instead of :q and I'd like that to also quit...or even to just no-op.

Any tips on how to just rip recoding mode completely out of my vim?

<comment><USER44> nnoremap Q <nop>

removes the recording mode and throws a simple error when you use :Q instead of :q

</comment></comment><comment><USER9> If you like these, it's worth skimming `:help index` and `:help option- summary` occasionally. You're likely to find at least one interesting new keybinding or setting.

</comment><comment><USER45> 'ct' followed by a character later in the line. Erases all text from the cursor up to that character, and enters insert mode.

</comment><comment><USER24> Writing some vimscript is actually not that bad and opens plenty of possibilities for advanced, context aware code editing.

</comment><comment><USER46> How to quit is probably what most people don't know, when it's been invoked by something looking for $EDITOR

</comment><comment><USER20> `:compiler` for parsing lines in the quickfix window - great for jumping directly to unit test failures

</comment><comment><USER47> :vsplit filename

to open file called "filename" in a vertical split of the console window. Also

:split filename

will open it in a horizontal split

</comment><comment><USER48> 'Shift+zz' to save and exit

<comment><USER49> Vim has at least three ways of doing this.

You can do _:wq return_ , or the abbreviated form of _:x return_ , or as you say, _ZZ_

</comment></comment><comment><USER50> A lot of people seem to be unaware of switching files within vim instead of exiting and reinvoking.

<comment><USER51> I think that's probably more to people not wanting to learn how to do it right. For the longest time, I only taught myself just enough vim to be able to use it for basic editing, because it's convenient and it's better than nano.

</comment></comment><comment><USER52> zz - scroll the line with the cursor to the center of the screen

zt - scroll the line with the cursor to the top

zb - scroll the line with the cursor to the bottom

also:

Ctrl-O - jump to last (think "o"lder) cursor positions

Ctrl-I - jump to next cursor positions (after using Ctrl-O)

</comment><comment><USER53> Ctrl-e and Ctrl-y to scroll with the cursor on the same line.

</comment><comment><USER3>
        git grep -n foo | vim - -c 'cbuf!'

</comment><comment><USER54> Ctrl+V for making and operating on block selections.

</comment><comment><USER55> I know i am going to get downvoted for this but :q!

</comment><comment><USER56> Ctrl-a increases a number in visual model

</comment><comment><USER57> copy a line using <Esc>1 yy and past simply <Esc> p

<comment><USER10> You don't need the 1; `yy` or `Y` in normal mode is enough to copy the whole current line.

</comment></comment><comment><USER58> How to quit it

<comment><USER8>
      killall vim

There you go. :)

</comment></comment><comment><USER31> One of my favorite Vim tricks (which also works in vi) is the general technique of piping a specified range of text through a command (a Unix-style filter that reads from standard input and writes to standard output), with the output of that command then replacing that range of text.

The text can be anything from a single line, some arbitrary range of lines (defined via vim marks like a and b or other letters, some paragraphs (see example below), to the entire file - and the filter command can be anything at all, too. The Cartesian product of those two things makes it a very powerful technique.

An example is this key mapping of the character v to a command that format paragraphs of text using the fmt command [1]:

map v !}fmt -w 64<CR>

This says: map the letter v to the command following it (after the space), which is:

        !}fmt -w 64<CR>

which runs/pipes (!) the current paragraph (when at top of a para, the cursor movement } defines a para) through the fmt -w 64 command, which formats its input text into lines of not more than 64 characters each.

(I just used v because it was one of the characters that Vim does not already assign a command to - any other available character will work.)

I have the mapping in my _vimrc on Windows and .vimrc on Unix.

With that mapping, I can reformat any paragraph (where paragraphs in vim are defined by a blank line either above and below them or both), just by going to the top of the paragraph (with { ) and typing v (no Enter needed).

For example, if I have this (single) line in a file in vim:

      the quick brown fox jumped the quick brown fox jumped the quick brown fox jumped the quick brown fox jumped the quick brown fox jumped

and I press v when at the start of that line, it gets reformatted into this para:

      the quick brown fox jumped the quick
      brown fox jumped the quick brown fox
      jumped the quick brown fox jumped the
      quick brown fox jumped

I typically use this technique when writing text content (non-programming content, such as documentation, tech articles, blog posts, etc.) or sometimes even for block comments of text in programs.

You can also create a different version of that formatting command to filter the entire text file through fmt in one shot (that would be "!Gfmt -w 64" when at top of file, where G moves to the last line), but I tend not to use that approach much, because it sometimes messes up some paragraphs which should not be reformatted. So I do it a para at a time.

If you use the sort command instead of fmt, that will sort the range of lines you select, and the sorted lines replace the original lines. This is of course useful in text files and (text format) data files, but is also sometimes useful in source code, e.g. to sort lines of import statements (say in Python or Go - although Go has commands for that), ranges of variable declarations into alphabetical order, array literals, etc.).

[1] (Fmt is a Unix command, but you can probably get it in many of the Unix subsystems that run on Windows too, like Cygwin, UWin, Windows Subsystem for Linux too). c The command that you run the selected text through, can also be a Unix or Windows pipeline, which makes the technique even more powerful.

</comment><comment><USER59> ZZ

<comment><USER49> I agree it's a good command to know, but you might explain what it does: save and exit.</comment></comment>


A pragmatist's startup spin-down - <AUTHOR> http://chrishateswriting.com/post/108080554943/a-pragmatists-startup-spin-down

<comment><USER2> > We gave them 30 days to access the archive and download a ZIP file of their > artwork, and also provided Archive.org with a copy of the data.

This was extremely classy Chris. Sorry it didn't work out. It was still a valuable contribution.

</comment><comment><USER3> I think you sound like a friendly and mindful human being, but not as a business person should sound like.

I find your relationship to your investors money very strange. This whole thing is not a game. For me at least it is not about making a nice drawing app and building a community of people, who like to create pretty drawings. There is nothing wrong about that, but it is not the goal of a company. The goal of a company is to make money. Nothing more nothing less.

If i were to invest in somebody's company I would want that person to be focused on spending my money as reasonable as possible and give me back as much as possible or at least lose as less as possible by making as little stupid errors as possible. I would walk away instantly if he mentions giving my money to charity if he fails. I can do this myself if I would have wanted to.

<comment><USER4> I think the goal of a business should be to create a product o a service that people want and can use. To employ people and to have happy customers.

This money-money-money-andnothingbutmoney ideology just doesn't benefit anyone

<comment><USER3> Would you agree with me, when I say, that all these things are nice, but secondary for a business? I am with Adam Smith, who said, that these things follow naturally.

<comment><USER2> > Would you agree with me, when I say, that all these things are nice, but > secondary for a business?

No. Money is like oxygen: Essential for survival, but not the point of existence.</comment></comment></comment></comment>


JavaScript: The Winning Style - <AUTHOR> https://github.com/Seravo/js-winning-style

<comment><USER2> Interesting breakdown. I was hoping instead of comparing a few highly referenced style guides point by point, they would be analyzing code in the wild to see which style is winning by popularity. It seems like this could be done without too much magic (just tedious) by cloning many popular modules, running jshint with each style guide's preferences, and log which results in the fewest warnings.</comment>


What other sites do you enjoy - <AUTHOR>

What other sites similar to: HN or Tech Crunch do you guys enjoy?
My top 5 #1 HN #2 Tech Crunch #3 Slash Dot #4 Life hacker #5 Tech wire <comment><USER2> Quora

</comment><comment><USER3> Maybe I am getting old and boring, but I feel like I am stuck on HN + Reddit.</comment>


In praise of Boise - <AUTHOR> http://www.economist.com/world/united-states/displaystory.cfm?story_id=16112080

<comment><USER2> Anyone here actually live in Boise? They make it sound nice, but it really wasn't on my list...</comment>


The upside to being let go by Nokia - <AUTHOR> http://www.bbc.co.uk/news/magazine-25965140 <comment><USER2> A great difference between Nokia and, say, Zynga:

When Nokia killed MeeGo, they let Jolla take the technology and make a new company out of it when they could have easily thwarted it with any number of legal/IP/HR chokeholds. But Nokia looked the other way and let Jolla continue.

When Zynga killed OMGpop (of "Draw Something" fame), the original people wanted to keep OMGpop going, and even offered to buy it back from Zynga. Zynga refused and insisted OMGpop's remains be destroyed.

Good Guy Nokia

<comment><USER3> See also Valve, Jeri Ellsworth and Rick Johnson, who were let go but allowed to take the tech they were working on to start CastAR:

[https://www.kickstarter.com/projects/technicalillusions/cast...](https://www.kickstarter.com/projects/technicalillusions/castar- the-most-versatile-ar-and-vr-system)

It's a pity that these situations are notable and not the default.

</comment></comment><comment><USER4> While I am not sure how well Nokia ran its technology strategy, I completely respect their views on their employees and the society. I think they were one of the earliest companies to think of how to recycle electronic waste created by disused mobile phones.

Also, this article makes me think of the IP stockpile within a company in general. While most companies tries to cash in from their research work, what Nokia has done is to enable the creation of hundreds of startups. I hope more companies emulate such models to help advance the state of the art rather than gather dust in vaults.

</comment><comment><USER5> It's very difficult to imagine an American company doing this, especially in the face of declining revenue. American corporations have a ways to go when it comes to treating employees like human beings rather than resources.

<comment><USER6> There are multiple ways to look at this. In one respect, you could say that this generous "easing redundant employes out the door" policy hurts the company and the employees still in place as it diverts money that could be spent keeping the company in business by refining existing products and developing new ones. If the company goes under, everybody is hurt. And if you're not careful, your employees that can help the company the most may try to get laid off in order to fund their side projects.

On the other-hand, morale must be terrible at places like Nokia and Blackberry right now. Programs like this help the company as it creates loyalty and helps keep good employees in place as they know that there will be assistance if they do get laid off. But once again, it could create or hasten a death- spiral. Employees can see that these layoff programs are expensive so they may bail out to get theirs before the money runs out. Tough times. Touch choices.

<comment><USER7> Well, one of the costs of hiring and having employees is you have to ringfence some money for redundancy payments.

This is a completely predictable expense - a company shouldn't be put out of business by paying redundancy money any more than they should go out of business when the electricity bill comes in or the printer needs a new toner cartridge.

</comment></comment></comment><comment><USER8> I've seen corporations in the U.S. change the locks on doors and not tell employees. The next morning, they'd have security officers escort workers back to their former offices so they could get personal pictures and things. Employees were 'watched' by security to ensure they didn't take anything or turn on a computer. America is a different place. It can be very hostile here.

<comment><USER6> Terminating an employee can be tough on both sides. I was involved in a situation where we should have had security escort the terminated employee back to his office to get his belongings. This employee was basically let go after multiple warnings about not showing up for work and not calling in. When he was told, he returned to his office and proceeded to smash up some equipment. Lesson learned. I obviously wouldn't want him back in the building and wish security would have been at his office. Tense situation.

<comment><USER9> But it is tougher when one side expects to be able to get away with anything, and so often sees no downside in acting like total dicks.

I'm from Norway, and I was shocked when I moved to the UK where typical notice periods is only one month. In Norway it is extremely hard to write a contract that will hold up that limits notice periods for full time non-seasonal workers to less than 3 months.

Most of the time people work out a 3 month notice period. And in fact, except in special circumstances, we generally have the right (and duty, if we want to continue to get paid through our notice period) to keep showing up for work and doing our job.

In practice, most people who are offered/asked nicely to stop coming in to work earlier will come to a suitable arrangement, but it is not very common.

<comment><USER6> Yes, as an employee it would be nice to have a three-month notice. But the downside is that it makes employers hesitant to hire someone in the first place if they know they will be stuck with them for three months. In the situation I described above, the employee in question failed to show up or call in for his very first day of work and gave some poor excuse the next day. And this behavior continued in the following weeks. We had obviously made a mistake in hiring him and I was grateful that our team wasn't stuck with him for three months.

<comment><USER10> What percentage of employees are total deadbeats like you describe? And what percentage are honest folks who would never do such a thing or even consider destroying their employer's property after being told they will be let go?

When you have a generous policy like this, you have to take the good with the bad. Personally, I feel that there are many, many good, decent folks who will benefit without screwing their employer for every deadbeat who will take gross advantage of the policy. In the case of the guy who smashed up the employer's equipment - what was the loss? $2,000? $5,000? Now what's that compared to the retained goodwill of hundreds or thousands of employees who are laid off over the lifetime of the company but leave with a positive impression because they weren't escorted around like a criminal?

It's a matter of your outlook on society. Do you have trust in the public, or do you target the worst-case scenario? This is the same thing as onerous requirements for getting welfare or unemployment payments. They are focused on the 1% or less who are trying to the game the system. In the process, they are hurting the 99% who just need a hand getting through a tough time. Why optimize for a 1% case?

<comment><USER11> This completely depends upon the industry, but from my experience in retail, I'd say the percentage of deadbeats / honest folks (when it comes to work ethic) is higher than you might think. At least here in the US.

<comment><USER12> Well, it's retail. Retail jobs are a dime a dozen. Employees and employers both treat each other as completely expendable. That's why Costco swears by their approach of paying above market rate - it makes sure that their staff actually _value_ their job, because it's not instantly replaceable by walking to the next high-turnover purgatory up the street.

<comment><USER11> Yeah, there is an establishment north of Houston that is a very common stop on the way from Houston to Dallas. They pay pretty high above market, and from what I can tell, it seems to work. Kinda sad that, by definition, everyone can't do that, although I do wonder if the above market pay just lets you find those who are stuck working retail but are willing to value the job.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER2> Nokia has been a special place to work. I have loved working here and learned so much as the company invested so much in me and in others.

But the market doesn't reward companies for doing the right thing for its employees. It rewards companies for making products that people wanted to buy. And we failed to do that (mainly because we made catastrophically wrong choices in which operating systems to get behind).

It is a shame. As someone staying behind in what is now "New Nokia" I can only hope the company remains a special place to work.

EDIT: by "we" I mean "our leadership". I don't think many of the Nokia rank- and-file would have supported the 2011 decision to do Windows Phone and _only_ Windows Phone (if anyone would have asked them).

</comment><comment><USER13> Good PR for Nokia, it was a lovely company but I don't see how they are still relevant in this time of Android and iOS.

The Windows phone, while not terrible, is completely eclipsed by the forerunners which have cornered the smartphone and tablet markets, using experience to guide them.

Windows mobile seems to still operate under the illusion that they can dictate how you use your phone, which would work, if they'd been as ubiquitous as iOS has become.

<comment><USER14> With the sale of the phone business to MS, Nokia is pivoting to mapping and connected cars: [http://conversations.nokia.com/2012/09/28/top-auto-brands- tu...](http://conversations.nokia.com/2012/09/28/top-auto-brands-turn-to- nokia-for-location-content/)

Nokia bought Navteq for ~$8 billion a few years back. They're the only source for mapping data that is comparable to Google.

<comment><USER15> A recruiter from Nokia contacted me about a Android developer job. I'm not sure if this was the Microsoft Nokia or the other Nokia.

</comment></comment></comment><comment><USER16> Nokia was on the decline even as early as 2005. The iPhone just exacerbated things. The enterprise division, primarily based in the US was not treated as well as the programs in this article. Many in the enterprise division based in Finland were folded into other groups, which was good.

Also the reorganization under Elop wasn't all warm and fuzzy either, from what friends in Finland told me. Recall the protest over the Windows Phone decision.

I liked Nokia, left on my own, but this warm fuzzy, not always the case. The fact that many started their own companies, etc, is a great thing to learn though.

</comment><comment><USER17> Things could have been so different for Nokia if it had gone with Android instead of WP. There would also be a lot better designed Android phones.

</comment><comment><USER15> One question I have for European companies with branches in America: do the US arm of these companies have similarly good benefits for their US employees or do they revert to the norm for American companies?

</comment><comment><USER18> to read this article right after reading [http://i.imgur.com/huUv09m.png](http://i.imgur.com/huUv09m.png) (the Zynga today's articles on HN) was intriguing.

</comment><comment><USER19> One benefit of this is Nokia could potentially acquire the successful ventures - once Microsoft is out of the picture and they're allowed to return to the smartphone business.

</comment><comment><USER20> I like the Lumias, I would buy one with Android.

</comment><comment><USER21> The upside to being let go by Nokia is not having to work for Nokia any longer.</comment>


Ask HN: What's a fair/common hourly rate for Android Development? - <AUTHOR>

Hi,
I've been developing and designing Software, Web-Apps and Add-Ons for customers for 5 years now. I usually charged 50EUR/h for non time-critical stuff and raised that to 70EUR/h for critical requests and Sysadmin work.
a) What should I charge for developing and designing native Android Apps?
b) Do you charge differently for Cross-Mobile Development using Frameworks like Qt/PhoneGap/Sencha/Titanium and similar?
PS: Do you know some free/opensource software for running your business?
I currently use Dolibarr [1] and it's awesome, but it's code is unmaintainable and it's not customer friendly. Contract/customer/invoice management is all I need.
--
[1] http://www.dolibarr.org/ <comment><USER2> Have you gone to any local Meetups to just ask other developers?

<comment><AUTHOR> I have just signed up to meetup.com, but the next meetup is 100km (~1h by train) away. Will try to visit it, but I'm glad if people can share their experiences.</comment></comment>


Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8s - <AUTHOR> https://pingcap.com/blog/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s/ <comment><USER2> The first bug hits close to home. I spent a good 2-3 months in 2018 researching this and providing mitigations to our ops teams. We also had another bug with older k8s versions - cgroup leakage where pods in a crash loop would leave cgroups hanging around.

We came around to the doing exactly what the team here did. Disable kmem accounting, but we had to rebuild kubelet/runc after making code changes to disable it.

I created some very basic tests to verify which kernel would not give the kmem accounting error. I randomly tested a few kernels (RHEL, CenOs - 3.10.x, Ubuntu - 4.4, 4.15). The 4.15 kernel is where my test didn't show the issue recurring. But I've still seen some sporadic occurrences in the 4.15 kernels as well.

I think you can get a no-kmem stack of k8s/runc, etc. for RHEL/CentOS kernels though. It's what we started to use earlier this year and have been happy with it so far.</comment>


Nice to meet you, I'm the guy who hacked your site - <AUTHOR> http://www.inc.com/christine-lagorio/hired-hacking-and-serendipity.html

<comment><USER2> Screen scraping is now considering hacking? Well, I guess Andrew Auernheimer "Weev" did get convicted for something similar.

<comment><USER3> More of a "business hack" than a technology hack. He utilized tech to manipulate an existing market to his benefit (getting top designers to participate) and then used it to help promote his own product.

<comment><USER4> hacking is getting access to something you shouldn't have, which is not what he's done. It's definitely clever, don't get me wrong, but the use of word 'hack' here was solely for PR

</comment></comment></comment><comment><USER5> Urgh. The value of the word hacking has been undergoing so much inflation in the last couple of years that you're now considered a master hacker if you can write a simple web spider.

We need new words.

</comment><comment><USER4> Scraping isn't hacking</comment>


Google's not-so-secret new OS - <AUTHOR> https://techspecs.blog/blog/2017/2/14/googles-not-so-secret-new-os <comment><USER2> It was unfortunately obvious that the writer had insufficient tech chops when use the phrase

"a post-API programming model"

But pressing on how somehow manages to blame the lack of updates to android phones on the modularity of the Linux kernel. The joke of course being that linux is monolithic and googles new OS is a microkernel ergo more modular.

The quote is "...however. I also have to imagine the Android update problem (a symptom of Linux's modularity) will at last be solved by Andromeda"

Its hilarious that he can somehow defying all sanity ascribe androids update issue to an imagined defect in Linux. Android phones don't get updated because for the manufacturers ensuring their pile of hacks works with a newer version of android would represent a non trivial amount of work for the oem whom already has your money. The only way they can get more of your money is to sell you a new phone which they hope to do between 1-2 years from now.

In short offering an update for your current hardware would simultaneously annoy some users who fear change, add little to those who plan to upgrade to a new model anyway, decrease the chance that a minority would upgrade, and cost them money to implement.

Its not merely not a flaw in the underlying linux kernel its not a technical issue at all.

<comment><USER3> > The only way they can get more of your money is to sell you a new phone > which they hope to do between 1-2 years from now.

The thing is, this only works on countries similar to US where most people are on contracts.

In the rest of the world, where people are on pre-paid, we use our phones until they either die or get stolen, which is way more than just 1-2 years.

<comment><USER4> Bump it to 3-4 years then. Bloated manufacturer updates combine with bloat in most popular applications and the regular web bloat to make the phone unusably slow after few years.

Between that and fragility of smartphones (mechanical damage, water damage), most people are bound to replace theirs every few years anyway.

<comment><USER3> > Bump it to 3-4 years then. Bloated manufacturer updates combine with bloat > in most popular applications and the regular web bloat to make the phone > unusably slow after few years.

My S3 is 4 years old now, and it is works perfectly fine.

When it dies, I will most likely adopt one of my Lumia devices as main one, or will buy a 2nd hand Android device, instead of giving money to support bad OEMs

<comment><USER4> My SO's S3 is of more-less the same age and it's so slow that it's barely usable now. Still can't track down why - she is not a power user, she wasn't installing apps beyond the few things I installed her and the OS updates. My old S4, currently used by my brother, suffered the same fate, being slow even after a factory reset. I wonder where this comes from?

<comment><USER3> I had some performance issues, but they got sorted out when swapped the battery for a new one.

<comment><USER4> A _battery_? How would that help? Not doubting you, just honest question. I feel like I'm missing something very important about how smartphones work.

<comment><USER5> Mmm... it also happened to me with my (now defunct) Galaxy S1. I can't explain it, but at some point its battery developed the "bloated, about to explode" look and the phone worked but it was very slow and crashed frequently. I changed the battery and everything was ok. Later it died of unrelated causes.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> It bothers me that Google does not seem particularly interested in doing the one thing that would make their Android platform absolutely dominant: Allow Chrome to run Android apps on Mac and Windows.

Google has already done 90% of the necessary work by adding Android apps to ChromeOS. _Two and a half years ago_ it created "App Runtime for Chrome" which demonstrated that Android apps could run on Windows and Mac in a limited, buggy way [1]. If Google had put meaningful effort into developing such a strategy we would by now have a relatively simple way to develop software which runs on 99% of laptops and 85% of smartphones and tablets. Developers would now be targeting 'Android first' instead of 'web app first then iOS then maybe Android'.

Sundar, if you're reading this - do it!

[1] [https://arstechnica.com/gadgets/2014/09/hack-runs-android- ap...](https://arstechnica.com/gadgets/2014/09/hack-runs-android-apps-on- windows-mac-and-linux-computers/)

<comment><USER7> Sun tried that, back in the day. Maybe you heard about Java applets, maybe you didn't. They were the slowest thing about the web, insecure even with a sandbox, and just an overall pain. Short of having a jvm always running on your machine, the performance of Android-via-Chrome will completely turn people off the Android ecosystem.

<comment><USER8> I remember two issues with Java Applets:

* Java itself was slow for a long time

* The Browser would hang while loading an Applet

The first is no longer an issue. They can just use a modern just in time compiler and it wont run slower than Java on Android. Chrome already has one to deal with JavaScript powered Web 2.0 applications.

The second was as far as I can tell an API issue. Applets would block everything by default until they were loaded. A really bad idea in a single threaded environment when you had to send several MB over low bandwidth and the JVM itself took long to start. Just making the load async with a completion callback could have solved this issue and I remember a few Applets that actually used an async download to reduce the hang.

<comment><USER9> You missed the biggest issue: "write once, mediocre everywhere." Windows, Mac, and X were all different, and Java Applets were necessarily bad at emulating all of them. While there are fewer Unices today, there are more GUIs, and cross-platform apps suck at least as much.

<comment><USER6> "Write once, mediocre everywhere" was a problem with Sun's implementation, not with the concept of cross platform code. There are tons of webapps which are very successful, despite being written 'once'.

In any case, Google doesn't need to be as strict as Sun was. It is free to implement "write 90% of your code once and 10% customised for each platform".

<comment><USER10> > There are tons of webapps which are very successful, despite being written > 'once'.

Actually they suffer from most of the same problems, only computers have gotten faster (masking performance issues) and our expectations have lowered. How many of these web apps obey the native OS themeing for instance?

<comment><USER11> 1) The fact that webapps _can_ run relatively well strikes me as hopeful, considering how much more inefficient using HTML/CSS/JS is compared to Java applets. Or is the latter not the case (honest question)? 2) I'm not sure if our expectations have lowered much. Perhaps it's more that _mobile_ interfaces are generally simpler and thus easier to make 'native enough'?

Although I think there's more going on in regards to 2. I was never bothered so much by the UI of a java applet looking different. What bothered me was that even very fundamental stuff like input fields and scrolling felt both alien and shittier than native. And while it's certainly possible to make a web app just as shitty, if you rely on 'stock' html elements, a lot of the subtle native behavior carries over.

Just a few weeks ago, for example, I built a web-app for mobile devices. It felt off immediately because the scrolling didn't feel right. All I had to do was turn on the momentum scrolling (with a line of ios-specific css), and the scrolling suddenly felt native. Had I used a hypothetical Java applet equivalent, I might've had to either go for a non-native-feeling scroll or build it myself.

While I of course can't prove any of this, I think what people care about is that things _feel_ native, not the 'skin' used to display it.

<comment><USER10> > considering how much more inefficient using HTML/CSS/JS is compared to Java > applets. Or is the latter not the case (honest question)?

It's a really interesting question actually because it's so hard to compare the two. On any objective measure, today's web apps are much better than applets in terms of responsiveness, etc. But then again, an applet could run on machines with 16MB of RAM total. I think you'd be hard pressed to get plain html page in a modern browser to run on a machine like that. Either way, in both cases we had a much better solution in native apps.

> 2\. I was never bothered so much by the UI of a java applet looking > different. What bothered me was that even very fundamental stuff like input > fields and scrolling felt both alien and shittier than native.

Modern web apps can score better here, but quite often they don't. The more complex the become the less native they get, scrolling, text input, etc are generally OK (unless your an arshole that overrides scroll behaviour), but html still doesn't have an equivalent for native table views and the goodies (navigation, resizing, performance) that comes with them.

For me the skinning does matter though, I have a beautiful, consistent desktop that browsers (not even electron apps) shit all over. When something doesn't look quite right from the second you open it it magnifies all the other differences.

<comment><USER11> > Modern web apps can score better here, but quite often they don't. The more > complex the become the less native they get, scrolling, text input, etc are > generally OK (unless your an arshole that overrides scroll behaviour), but > html still doesn't have an equivalent for native table views and the goodies > (navigation, resizing, performance) that comes with them.

Oh yeah, complex UI stuff is definitely a good reason to avoid web apps.

But for many, probably even most apps it's precisely scrolling, text input, and other 'basic' stuff that matters, and in those cases a web app's 'default' will be more native.

> For me the skinning does matter though, I have a beautiful, consistent > desktop that browsers (not even electron apps) shit all over. When something > doesn't look quite right from the second you open it it magnifies all the > other differences.

I agree on a personal level, but I suspect we're outliers. Can't substantiate that at the moment though, so I might be wrong.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> It's awesome that Google is doing this and in public too [https://fuchsia.googlesource.com/](https://fuchsia.googlesource.com/)

Unfortunately, the hard part of an operating system isn't in a cool API and a rendering demo. It's in integrating the fickle whims of myriad hardware devices with amazingly high expectations of reliability and performance consistency under diverse workloads. People don't like dropped frames when they plug in USB :) Writing device drivers for demanding hardware is much harder than saving registers and switching process context. The Linux kernel has an incredible agglomeration of years of effort and experience behind it - and the social ability to scale to support diverse contributors with different agendas.

Microsoft, with its dominant position on the desktop, famously changed the 'preferred' APIs for UI development on a regular cadence. Only Microsoft applications kept up and looked up to date. Now Google has such a commanding share of the phone market - Android is over 80% and growing [http://www.idc.com/promo/smartphone-market- share/os](http://www.idc.com/promo/smartphone-market-share/os) \- they have a huge temptation to follow suit. Each time that Microsoft introduced a new technology (e.g. [https://en.wikipedia.org/wiki/Windows_Presentation_Foundatio...](https://en.wikipedia.org/wiki/Windows_Presentation_Foundation) WPF) they had to skirt a fine line between making it simple and making sure that it would be hard for competitors to produce emulation layers for. Otherwise, you could run those apps on your Mac :)

There are many things to improve (and simplify) in the Android APIs. It would be delightful to add first class support for C++ and Python, etc. A project this large will be a monster to ship so hopefully we'll soon (a few years) see the main bits integrated into more mainstream platforms like Android/Linux - hopefully without too much ecosystem churn

<comment><USER13> > It's in integrating the fickle whims of myriad hardware devices with > amazingly high expectations of reliability and performance consistency under > diverse workloads.

So much this; Linux Plumbers conference years ago was bitching about how every gorram vendor wanted to be a special snowflake, so even though the architecture was ARM, you basically had to port the kernel all over again to every new phone. I haven't kept up with it, but I can't imagine it's gotten better. The problems they're listing as reasons to move to a new kernel aren't caused by Linux and they won't go away until you slap the vendors and slap them _hard_ for the bullshit they pull, both on developers and users.

As for kernel ABI, this has been rehashed to death: just release your fucking driver as open source code, and it will be integrated and updated in mainline _forever_ : [http://www.kroah.com/log/linux/free_drivers.html](http://www.kroah.com/log/linux/free_drivers.html)

<comment><USER14> Overall I agree with your sentiment but it's not just a case of "releasing your drivers" but also of getting it accepted by maintainers. If you don't have an awareness of this process from the beginning of your development cycle then it can be a massive amount of work.

</comment></comment></comment><comment><USER15> The drivers-wifi repository contains a stub for a Qualcomm QCA6174 driver[1] which is found in the Nexus 5X[2], OnePlus 2[3] and meant for smartphones[4]. The drivers-gpu-msd-intel-gen repository contains drivers for Intel 8th and 9th gen integrated graphics[5]. I think it's fair to propose that Google plans on running Fuchsia on both smartphones and laptops…

[1] [https://github.com/fuchsia-mirror/drivers- wifi/blob/master/q...](https://github.com/fuchsia-mirror/drivers- wifi/blob/master/qualcomm/driver.cc)

[2] [https://www.ifixit.com/Teardown/Nexus+5X+Teardown/51318#s112...](https://www.ifixit.com/Teardown/Nexus+5X+Teardown/51318#s112148)

[3] [https://www.ifixit.com/Teardown/OnePlus+2+Teardown/45352#s10...](https://www.ifixit.com/Teardown/OnePlus+2+Teardown/45352#s100455)

[4] [http://www.anandtech.com/show/7921/qualcomm-announces- mumimo...](http://www.anandtech.com/show/7921/qualcomm-announces- mumimo-80211ac-family-increasing-the-efficiency-of-80211ac-networks)

[5] [https://github.com/fuchsia-mirror/drivers-gpu-msd-intel- gen/...](https://github.com/fuchsia-mirror/drivers-gpu-msd-intel- gen/blob/master/src/device_id.h)

</comment><comment><USER16> Is this an actual plan of Google as a company, or is this some sort of Microsoft-style war between divisions where the Chrome team has just decided on its own that the future is based on Chrome and Dart?

Also, considering the way that the ARC runtime for Chromebooks was a failure and had to be replaced by a system that apparently essentially runs Android in a container, will it really be possible for a completely different OS to provide reasonable backward compatibility?

<comment><USER17> I would say that Google is trying to replace JavaScript with dart in any way they possibly can. The reason is simple, JavaScript is an open standard, dart is owned by google.

Their reasons that "dart is better" is the typical google koolaid before they attempt a market takeover. As we've seen over and over with Android, chrome, and AMP especially. Google loves to make glass house open source projects you can't touch. You're free to look at how great it is, feel it's well refined curves and admire the finish, but God help you if you don't like how the project is going and want to fork it for yourself.

Don't bother trying to commit a new feature to any of Google's software that they don't agree with. It will languish forever. Don't bother forking either, because they'll build a small proprietary bit into it that grows like a tumor until it's impossible to run the "open source" code without it.

Fuck dart, I don't care how great it is. Microsoft is being the good one in this case by extending js with typescript, google is trying to upend it into something that they control

<comment><USER18> Looks like alternative facts have reached the tech world too?

You can take as hard look at Google as you would like, but choosing Microsoft over Google (one for-profit company over another), while not caring how the technology, the licensing or the workflow compares is a bit hypocrite. (e.g.they are both open, and they both have rules of commits).

I'm wondering, why do you need a throwaway for such heavily invested FUD? Your other comments here are in similar tone, and I'm surprised to see such hatred without any obvious trigger. Maybe if you would come forward with your story, it would be easier to discuss it?

disclaimer: ex-Googler, worked with Dart for 4+ years, I think it is way ahead of the JS/TS stack in many regards.

<comment><USER19> >I think it is way ahead of the JS/TS stack in many regards.

In what ways do you consider it ahead of Typescript? Personally as someone who's particularly fond of static type systems (Haskell and the like), Typescript's type system seems way more advanced and powerful than Dart's (union and intersection types, in particular, and non-nullable types). Map types (introduced in Typescript 2.1) also seem pretty interesting.

<comment><USER18> Some of my earlier notes are in this thread (it is more about the day-to-day feature I actually use and like, and less about the fine details of the type system) [https://news.ycombinator.com/item?id=13371009](https://news.ycombinator.com/item?id=13371009)

Personally I don't get the hype around union types: at the point where you need to check which type you are working with, you may as well use a generic object (and maybe an assert if you are pedantic).

Intersection types may be a nice subtlety in an API, but I haven't encountered any need for it yet. Definitely not a game-changer.

I longed for non-nullable types, but as soon as Dart had the Elvis-operator (e.g. a?.b?.c evaluates null if any of them is null), it is easy to work with nulls. Also, there is a lot of talk about them (either as an annotation for the dart analyzer or as a language feature), so it may happen.

Mapped types are interesting indeed. In certain cases it really helps if you are operating with immutable objects, and mapping helps with that (although does not entirely solves it, because the underlying runtimes does allow changes to the object).

<comment><USER17> I agree about union types. They can quickly result in insane variable declaration statements that are hard to understand.

I dislike nulls though, I always wish people would just use a flag or error handling when objects are undefined, instead of "hey this object is the flag and sometimes it's not actually an object!"

You'd think language designers would learn after dealing with null pointers :)

</comment></comment></comment></comment></comment></comment><comment><USER20> How credible is this source?

I don't understand half the decisions outlined in the article.

> I also have to imagine the Android update problem (a symptom of Linux's > modularity)

I seriously doubt the Linux kernel is anything but a minor contributor to Android's update problem. Handset developers make their money by selling physical phones. In two years, your average consumer probably doesn't care if their device is still receiving software updates. They'll jump onto a new phone plan, with a fresh, cool new mobile, with a better screen, newer software (features!), and a refreshed battery.

Maintaining existing software for customers costs handset manufacturers $$$, and disincentives consumers purchasing new phones (their cash cow). The money is probably better spent (from their POV) on new features, and a marketing budget.

<comment><USER21> > In two years, your average consumer probably doesn't care if their device is > still receiving software updates. They'll jump onto a new phone plan, with a > fresh, cool new mobile, with a better screen, newer software (features!), > and a refreshed battery.

This might be true for the US, where 75% of subscribers are on post-paid (contracts). It's not true for the rest of the world.

* Europe: < 50% post-paid

* Rest of the world: < 22% post-paid

I'd also argue that Android users will be more likely to be pre-paid than post-paid customers (compared to iPhone users) in all of these regions, but I have no data to back it up.

Anyway, I agree that it's probably not very profitable, if at all, for android handset makers to support their devices for > 2 years. But I think many customers would benefit from it ...

[1] [http://www.globalrewardsolutions.com/wp- content/uploads/GRS-...](http://www.globalrewardsolutions.com/wp- content/uploads/GRS-Mobile-Top-up_Wireless-Market-Statistics-2015.pdf)

<comment><USER22> I think the "post paid" connection leading to a 2 year lifecycle is suspect. There's a big after market repair industry in the US. Many people have a singular cell phone as their internet device - and it's often ancient by IT terms. 2+ year old hardware needs to be getting software/OS upgrades.

<comment><USER23> I favor the proposal of requiring a prominent "Best Before" date for new devices, indicating how long the manufacturer will guarantee the availability of security updates.

<comment><USER22> That's an SLA and we should all b getting them.

</comment></comment></comment></comment></comment><comment><USER24> If nothing else comes out of this, I hope we end up with an Android OS that works better than the current one.

I've been running Android since the Nexus One so I'm no newbie to the platform, but the ease with which iOS manages to get all UI interactions at ~unnoticable FPS and outstanding battery life is staggering when you're used to Android. It feels like some really fundamental choices were made badly on the platform that make it incredibly inconsistent and unreliable. A fresh start would be fantastic.

<comment><USER25> As a fellow Nexus user, I've owned the Nexus One, 5, and currently use a 6P, how much of this is due to the OS versus hardware? Will Google ever be able to achieve Apple level battery life or overall UI smoothness, not to mention update support, without having their own custom SoC?

I was very happy with the 5, even with the intermittent lags, especially considering it's price at release. I suppose I'm not a very heavy phone user, and I never play mobile games, but I've been very happy with the 6P on Android 6.0-7.1. Battery life could definitely be better, and it does get fairly warm at times, but overall it's been a very good experience for me considering the Snapdragon 810 it's using is generally poorly regarded.

<comment><USER26> Apple has had fluid UIs since the start, despite off-the-shelf, low resource Samsung SoCs. They only started making custom ones after with the 4S, as I recall.

<comment><USER27> Yep. Out of the starting gate, Apple forced tight constraints on background and multi-threaded processing---so tight that the first versions of the iPhone OS couldn't support some types of application that the Android OSs could unless Apple wrote the program and could take advantage of the private APIs in the OS. But the advantage to that B&D approach was responsiveness and battery life, relative to an Android OS where any developer could write an app that would spawn an ill-behaved background thread and suck your battery.

</comment></comment></comment></comment><comment><USER28> > I don't see the average garbage-collected language using a virtual machine > allowing for a target higher than 60fps realistically.

But... " _average_ garbage-collected language using a virtual machine" doesn't describe _any_ of C/C++, Dart, Go, Java, Python, or Rust. Nor Javascript.

I get greater than 60 fps with my existing Vive three.js WebVR-ish electron/chromium linux stack. Even on an old laptop with integrated graphics (for very simple scenes). Recent chromium claims 90 fps WebVR, and I've no reason to doubt it. So 60 fps "up to 120fps" seems completely plausible, even on mobile.

<comment><USER29> > But... "average garbage-collected language using a virtual machine" doesn't > describe any of C/C++, Dart, Go, Java, Python, or Rust.

I'm curious; what would be an example of something you would describe as an "average garbage collected language using a virtual machine"? Java would certainly be the first language I'd think of for that description.

<comment><USER30> > I'm curious; what would be an example of something you would describe as an > "average garbage collected language using a virtual machine"?

Ruby 1.8, Lua, or CPython.

<comment><USER29> Python was included in the list of things considered not to be in this category; I probably agree with you on that one, but the idea behind my question was that the languages listed as not "average garbage-collected language using a virtual machine" included several that I'd include in that category.

What do you think makes Ruby and Lua more "average" than Java?

</comment></comment></comment></comment><comment><USER31> Since Fuscia is a new kernel, that means it will probably only support Google hardware.

The status quo right now among android hardware vendors is to violate the GPL, and they have faced few if any repercussions for doing so. I wonder if Fuscia is sort of viewed as the way forward to addressing that.

Anyone care to speculate why there isn't a community version of chromium os? I'd donate to it for sure. It sounds like getting android apps working on it would be pretty easy: [https://groups.google.com/a/chromium.org/forum/?hl=en#!topic...](https://groups.google.com/a/chromium.org/forum/?hl=en#!topic/chromium- os-discuss/OfBln-hl7ug)

<comment><USER32> >The status quo right now among android hardware vendors is to violate the GPL

No it's not the status quo. The major OEM's do release their code. Yes, there are some Chinese OEM violators, but that's typical of China.

<comment><USER31> You can release code and still violate the GPL in other ways. For example, there are binary blobs out there and the GPL is pretty unequivocal on this point: "The source code for a work means the preferred form of the work for making modifications to it."

<comment><USER33> It depends whether the binary blob is a derived work or not.

[http://yarchive.net/comp/linux/gpl_modules.html](http://yarchive.net/comp/linux/gpl_modules.html)

</comment></comment></comment></comment><comment><USER34> Seems like Free Software that propelled early Internet pioneers served its purpose and those companies are turning their backs on it - first with Apple, GCC->LLVM, now with Google, Linux->Fuchsia :( I am getting afraid of another dark age on the horizon... I guess it's going to be inevitable as 90% of SW developers will find themselves redundant when inferring AI capable of composing code blocks and listening to/reading speech/specifications arrives in upcoming decade, making creation of typical web/mobile apps trivial.

<comment><USER35> I think Google is probably the most Free Software friendly of the the new big three (Amazon, Google, Microsoft). They haven't disappointed with Fuschia which appears to be entirely copyleft:

[https://fuchsia.googlesource.com/magenta/+/master/LICENSE](https://fuchsia.googlesource.com/magenta/+/master/LICENSE) [https://fuchsia.googlesource.com/fonts/+/master/LICENSE](https://fuchsia.googlesource.com/fonts/+/master/LICENSE)

<comment><USER36> That's BSD-license though, which doesn't force companies to respect your freedoms. Parent was talking exactly about GPL being dropped in favour of licenses that allow vendor lock-in. It means a philosophical departure from user-first towards corporation-first and the Free Software world the FSF envisioned getting trampled.

The zeitgeist is moving towards conservatism in general, so it doesn't surprise me, but it's still sad.

</comment></comment></comment><comment><AUTHOR> Article author here. Posted this in the notes, but possibly too buried:

For anyone interested, I intend to write quite often about consumer technology on this blog. Topics will include hardware, software, design, and more. You can follow via RSS or Twitter, and possibly through other platforms soon. Sorry for the self promotion!

Thanks for reading. Please do send any corrections or explanations.

<comment><USER37> Hiroshi Lockheimer has publicly stated several times that there is no merger of Chrome OS and Android.

[https://chromeunboxed.com/some-andromeda-perspective- hiroshi...](https://chromeunboxed.com/some-andromeda-perspective-hiroshi- lockheimer-emphatic-on-separate-oss-moving-forward/)

I think you alluded to this, "cue endless debates over the semantics of that, and what it all entails," but it might be worthwhile to add the official statement.

<comment><USER38> But there are frequent commits to multiple repositories on the fuchsia code base[1]. I don't really see where Google is going with this, if it's neither meant to replace chrome OS or Android.

Maybe a long term project? I think Google is at a position where they can write a great OS from scratch, learning from the mistakes of others, and it has a chance of becoming the greatest OS that ever was.

With the talent of it's engineers, they can bring new ideas that can be better implemented, from scratch on a new OS. They already have a bunch of languages, web frameworks, and so many more technologies from Google that can be well integrated in this.

And looks like the project is mostly BSD licensed, which is great! I'm excited for just that alone.

[1]:[https://github.com/fuchsia-mirror](https://github.com/fuchsia-mirror)

</comment></comment></comment><comment><USER39> Why can't the pure web replace apps and programs? All the pieces are almost there: hardware acceleration, service workers, notifications, responsive design...

I currently "add to home screen" for most things. I edit my images online, and develop code using cloud9 ide, etc. There are few things I need apps/programs for right now, and that's improving day by day.

iPhone is dropping heavily in world wide market share, but they still have a lot of the wealthy users. There is a non-zero chance they get niched out of prominence by Android (aka every other manufacturer in the world), at which point network effects start encouraging Android-first or Android-only development. There might be a point where Apple needs to double down on the web, and/or maybe kill off apps, like they did flash, to still have the latest "apps".

<comment><USER40> I take photos miles from where there's cell signal. I write code on the bus while heading to doctors appointments. The web is about as far from a panacea as you can get. It's slow, it's bloated, falls apart when you don't have a connection, useful applications die when the company dies. Were some of the midi devices I use for music "web-based" they'd have probably become doorstops decades ago. A web-based IDE would be horrible for trying to develop code with an intermittent connection. The web is not a good time.

<comment><USER41> The intermittency issues can be fixed but I agree that the dependency on web app providers and their fickle business models is scary.

The way it works is to funnel all the profits into a few huge conglomerates that benefit from exclusive access to all personal data and train users to never depend on anything that isn't a core product of one of these conglomerates.

Using their 80% margins they can afford to at least give us some time before scrapping software that doesn't look it's ever going to reach 4bn consumers.

The result is stability. Until they all get toppled by the next technology revolution. Years later, regulators will crack down hard on some of the side issues of their former dominance and once again miss the currently relevant issues :)

</comment></comment></comment><comment><USER42> This blogpost has waaaay too much assumptions. When reading about this it seems easy to rip out Kernels, OS & Software and put it like a layer on a cake on top of a new OS. Even for Google this is crazy complicated. It will not be that easy. For sure not... and I also see no clear strategy WHY somebody should do that. It's like baking the cake with too much ingredients. ;)

<comment><USER43> I can see the kernel thing happening. Just the licensing and breaking ABI is one of the biggest factors in not being able to have an easily upgradable android.

I only see this as a good thing if this ensures an easier upgrade path than in Android; and if vendor ROMs can easily be replaced by a stock OS (like on Windows).

<comment><USER42> I definitely can not see the Kernel thing happen. Ever thought of power management and keeping the whole system fluent? This are all not easy problems which you solve in 1 or 2 years. It may only work for very specialized hardware... speaking of hardware. Hardware driver support is also something most other Kernels suffer from in comparison to e.g. Linux.

<comment><USER44> > Hardware driver support is also something most other Kernels suffer from in > comparison to e.g. Linux.

So?

Google doesn't have to support all hardware, they can pick to support only the hardware they want. That's what they already do with ChromeOS. Installing ChromiumOS on unsupported hardware can have its issues. The reverse is true too, installing not-ChromeOS Linux or another OS on Chromebook does not always work well, although it's fine on some specific models.

Android is like that too, and in a much worse way than for Chromebooks. We're not talking about stellar linux kernel support for all the custom ARM SOC that are out there. All manufacturers write their own closed source hardware support for android and this is how android ends up having issues with updating, since whenever Google updates the linux kernel it breaks the ABI and all the support manufacturers wrote for the previous version, and manufacturers do not want to spend so much time on needless busywork such as keeping up with kernel API churn that exists just to satisfy the dev team sense of perfection.

</comment></comment></comment></comment><comment><USER45> > IDEs written in Java are wildly slow…

My favourite IDE to use today is IntelliJ, and I prefer it over my experience with Visual Studio (though to be fair, I did not use VS intensively in the past 3-4 years).

I don't experience IntelliJ as "slow". It launches faster than VS did when I used it, and once it is running I keep it open pretty much the entire work- week without any issues.

<comment><USER3> Other than Netbeans and Eclipse being faster and don't turn my dual core into airplane mode like Android Studio does, which forced me to enable laptop mode on it.

<comment><USER45> I don't really understand what you are trying to say, sorry :/

</comment></comment></comment><comment><USER46> "Fuchsia" and "magenta" are pretty gutsy names to choose, given how similar it sound to Apple's vaporware "Pink" OS from the 90s (AKA Taligent, AKA Copland). Somebody has a sense of humor!

It's really hard to tell if this is actually something that will ship, or yet another Google boondoggle to be swiftly discarded (like the first attempt at ChromeOS for tablets). Google under Larry Page built and discarded a lot of stuff; I wonder if it's the same under Sundar Pichai.

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

<comment><USER47> Sounds like a stretch having to go all the way back to the 90's to get a similar color code name.

<comment><USER46> It was the first thing those unusual names made me think of. But I'm a long- time Mac developer, so probably pink and purple colors as OS names won't have the same connotations for other people.

</comment></comment></comment><comment><USER48> This could be the first time Apple needs to truly worry about Google. The one massive lead Apple still has over Google (and the other major players) is the incredible OS they inherited back in 1997 and continue to extend and maintain today.

Neither Android nor Windows nor Chrome OS nor your favorite Linux distro have ever been able to truly compete with the NeXT legacy as it lives on in Apple.

Google is smart enough as a whole to see this, and so it's not surprising that they're attempting to shore up their platform's competence in this particular area. What IS surprising is that it has taken them this long.

Perhaps what's truly surprising is just how much mileage Apple has gotten out of NeXT. It's astounding, and I know Apple realizes this, but I question whether or not they know how to take the next step, whatever that may be. And if Google manages to finally catch up...

<comment><USER49> > Neither Android nor Windows nor Chrome OS nor your favorite Linux distro > have ever been able to truly compete with the NeXT legacy as it lives on in > Apple.

I find this a funny statement. Apple has not seen runaway success in terms of market share, not on desktop platforms (where the top OSes are various versions of Windows), not on mobile platforms (where it is a distant second to Android in the worldwide market), not on server or supercomputer platforms (where it's effectively nonexistent).

Nor is it influential in terms of operating system paradigms. The only thing I can see people citing as a Darwin innovation is libdispatch. Solaris, for example, introduced ZFS and DTrace, as well as adopting containers well before most other OSes did (although FreeBSD is I think the first OS to create the concept with BSD jails)--note that Darwin still lacks an analogue.

<comment><USER50> it's not about market share. it's about profit share. android/ios may be 80/20 on market. but they are 20/80 on profit.

market share won't feed nobody. that's all apple needs to care about. just look at their market cap and p/e ratio.

</comment></comment></comment><comment><USER51> I'm a minority I know but I don't like material design because it's terrible at "scaling." It looks great, it's beautiful, but you lose too much damn functionality. When I had to redo apps to material design we had to completely remove multiple buttons due to them not fitting material design standards. I really hope they have some way to alleviate this problem without using 50px icons for all the extra buttons.

<comment><USER52> Why not bend the rules a bit before omitting vital components?

<comment><USER51> They weren't _vital_ components but useful for the user. We moved most of the "excess" buttons to the top bar and overflow menu but still had to remove a button here and there completely (we still had the functionality in a different part of the app it was just more tedious to use from our testing).

</comment></comment></comment><comment><USER53> So Google is going with a DartVM on this one. Dart is cool and all, but why DartVM? It's the same restrictive model we have with Android (dalvikVM) where you can only develop with languages that can compile down to Java bytecode. In this case, however, we will be using languages that can transpile to Dart source instead! Why not JavaScript engine? With the current movement with WebAssembly, I see a lot potential use cases. The biggest point being the ability to code in any language that compiles to wasm. The engine could be exposed to communicate with the OS directly or sth. If they are going to consider V8 alongside DartVM, then that would be cool. I truly hope they don't repeat old mistakes.

<comment><USER54> Dart can compile to JS, so that edge is covered. Dart bytecode is arguably an easier target for other language compilers than, say, assembly. The DartVM's byte code is fully specified, there is some adoption, it's openly accessible, and there's a bold, production-ready reference implementation. For wasm, only half of that is true.

<comment><USER55> Compiling Dart to JS is a very different problem than compiling JS or other languages to Dart.

<comment><USER54> I understand what you mean and agree. But then, you don't need to compile JS into Dart. Rather, JS into DartVM byte code.

</comment></comment></comment></comment><comment><USER56> Conjecture is fun, but the linked piece takes some enormous liberties with crossing massive chasms effortlessly. Not only is Fushia _not_ Andromeda (a project), the needs of IoT is massively different from the needs of Android. And the net investment in Android is absolutely colossal, and making some new APIs or a microkernel does not a replacement make.

</comment><comment><USER57> Google could have taken firefox and improve it to make it better, but they created something new.

Now instead of improving the linux stack and the gnu stack (the kernel, wayland, the buses, the drivers), they rewrite everything.

They put millions into this. Imagine what could have been done with it on existing software.

They say they are good citizen in the FOSS world, but eventually they just use the label to promote their product. They don't want free software, they want their software, that they control, and let you freely work on it.

<comment><USER58> Isn't Google paying to Mozilla for Google searches from inside search bar in Firefox ? Isn't like main money flow for Mozilla? More people use Chrome, more money Google saves. It's all about the data, making Firefox better didn't benefit Google as good as creating new browser. Now they do not have to pay so much for all their users searches to other companies and they have so much more data that they can use internally for other products.

<comment><USER59> No, that ended in 2014. Google no longer gives Mozilla anything.

</comment></comment></comment><comment><USER60> " _The pitch will clearly be that developers can write a Flutter app once and have it run on Andromeda, Android, and iOS with minimal extra work, in theory._ "

How's that going to work? iOS, specifically? Is Dart a supported language?

<comment><USER61> This may answer your question:

[https://flutter.io/faq/#how-does-flutter-run-my-code-on- ios](https://flutter.io/faq/#how-does-flutter-run-my-code-on-ios)

and

[https://flutter.io/faq/#can-i-interop-with-my-mobile- platfor...](https://flutter.io/faq/#can-i-interop-with-my-mobile-platforms- default-programming-language)

<comment><USER60> From the first link:

" _The engine's C /C++ code is compiled with LLVM, and any Dart code is AOT- compiled into native code. The app runs using the native instruction set (no interpreter is involved)._"

Thanks!

</comment></comment></comment><comment><USER62> Google is just afraid of GPL I think.

<comment><USER63> So their strategy is to go full-blown closed source?

<comment><USER64> Open sourcing the product will help the competition to catch up quickly, all they have to do is take googles product and change its look. The next half is infrastructure, which companies like Microsoft, facebook, amazon, alibaba all have. Plus services like AWS will help future version of dropbox & netflix.

A good example of that is Visual code. I am sure some at github (atom's paprent) is pissed.

<comment><USER65> Wikipedia says it's not a fork of atom but based on electron. Does that make a difference?

</comment></comment></comment></comment><comment><USER66> So in the near future billions of devices will no longer be running Linux anymore? That would be quite a blow to the OS in terms of chances of dominating operating systems that are being used by end users. Or will they simply fork it and strip it down until only the parts they really like will remain?

<comment><USER67> This is also a concern of mine. What will this mean for rooting devices? Will it still be root, or will it be "root" as it an iOS jailbreak?

</comment></comment><comment><USER68> Rust as a first-class language?

<comment><USER69> I believe the article over-sells Fuchsia's use of Rust. Raph Levien wrote some bindings to the OS runtime, and he does work at Google, but his Rust work is not-official.

(or that's the story as I remember it)

<comment><USER57> Which is a shame, they are missing an opportunity to ditch C/C++ in favor of a safer language and set a precedent in OS history.

Imagine how easier contribution would be if you could write the OS parts with less lines, guarantied to no introduce most security and concurrency bugs we know about.

</comment></comment></comment><comment><USER70> ANDROid + chROME + DArt = ANDROMEDA?

</comment><comment><USER71> re: "Flutter was [...]"

A bit weird to use the past tense here since it's not reached 1.0 yet. You can try it out today (tech preview) to create apps in Dart that run on Android and iOS:

[https://flutter.io/](https://flutter.io/)

(Googler, not on the Flutter team itself, but working on related developer tools.)

<comment><AUTHOR> Fair point! Just fixed that, thanks. I had only meant that Flutter was not originally intended for Andromeda, as far as I can tell :)

</comment></comment><comment><USER72> Trying to see the other side of the coin : what economical reason is there for this project ?

A company the side of Google, with all its internal politics, doesn't work as a startup. Starting a third operating system project and hoping it to replace two major ones means convincing people inside the company to loose part of their influence. Now it may happen if chrome or android were failing, but they're clearly not.

</comment><comment><AUTHOR> I updated the article with the following clarification at the top:

I use Andromeda equivalently with Fuchsia in this article. Andromeda could refer to combining Android and Chrome OS in general, but it's all the same OS for phones, laptops, etc. - Fuchsia. I make no claims about what the final marketing names will be. Andromeda could simply be the first version of Fuchsia, and conveniently starts with "A." Google could also market the PC OS with a different name than for the mobile OS, or any number of alternatives. I have no idea. We'll see.

</comment><comment><USER73> I hope the userland is POSIX/Linux compliant. There's a TON of useful software reliant on this compliance that will go to waste if it isn't compliant out-of- the-box.

<comment><USER3> It doesn't seem to affect ChromeOS, iOS or Android.

</comment></comment><comment><USER74> As a sound/music app person the inclusion of ASIO for audio is exciting, Google's new is should be on par with iOS for sound with ASIO audio drivers at the core.

</comment><comment><USER75> AFAIK the flutter UI framework is a react-like framework written in Dart (with C++ as OS glue) including the UI -> graphics rendering layer. It builds upon Skia and Blink. I am not sure how that will allow compatibility with other languages. The only language for UI apps looks to be Dart. Which isn't bad - its a pretty well designed language, but I don't see how apps can be written in a wide variety of language as the author suggests.

</comment><comment><USER76> >the main UI API is based on, yes, Dart

Won't the Dart's single thread nature be bad to take advantage of Murli core processors? Or they are embracing web workers?

<comment><USER32> Dart, in the context of Fuchsia, isn't really a web based language. So yes, it'll take advantage of multi-core processors.

</comment></comment><comment><USER32> The author calls it Andromeda OS, but is this really the Andromeda OS we've been hearing about? I'm not so sure about that. What we do know right now is that the OS is currently code named Fuchsia.

Fuchsia repository: [https://fuchsia.googlesource.com/?format=HTML](https://fuchsia.googlesource.com/?format=HTML)

<comment><AUTHOR> There has been other reporting about this going back to last fall. I don't think Fuchsia is the marketing name.

</comment></comment><comment><USER77> Link to the source code:

[https://fuchsia.googlesource.com/](https://fuchsia.googlesource.com/)

</comment><comment><USER78> The article says it's a microkernel, I wonder if it will be a more secure general purpose OS, well windows NT started as microkernel but they changed that wit NT 4,let's see if it will be different. I also wonder about driver support and battery consumption. Good luck to Google.

</comment><comment><USER79> > The pitch will clearly be that developers can write a Flutter app once and > have it run on Andromeda, Android, and iOS with minimal extra work, in > theory.

This is worrying for Apple. I can see the following playing out

\- Apple continues releasing machines like the TB MBP, much to exasperated developer dismay.

\- Other x86 laptop industrial design and build quality continue to improve.

\- Fuchsia/Andromeda itself becomes a compelling development environment

\- Developers begin switching away from Mac OS to Fuchsia, Linux and Windows

\- Google delivers on the promise of a WORA runtime and the biggest objective reason not to abandon Mac OS, i.e. writing apps for iOS, disappears.

\- Apps start to look the same on iOS and Android. iOS becomes less compelling.

\- iOS devices sales begin to hurt.

Granted that the App Store submission requires Mac OS (Application Loader) and the license agreement requires you only use Apple software to submit apps to the App Store and not write your own, but it seems flimsy to rely on that.

</comment><comment><USER15> Here is a link to the documentation:

[https://fuchsia.googlesource.com/magenta/+/master/docs](https://fuchsia.googlesource.com/magenta/+/master/docs)

</comment><comment><USER80> I didn't see in the article explanations why those decisions were taken and not others. On the surface it feels like this is an OS insufficiently different from others to justify switching to.

</comment><comment><USER81> We definitely need a universal OS for all our devices and I really believe Google is in a great position to get us there.

It would really surprise me if Apple got there first. Tim lacks vision and will keep on milking iOS even if the iPad Pro is a failure as a laptop replacement.

Windows is still king in the desktop space, at least as far a user base goes, but it's terrible on tablets and phones. MS has all the tech in place with UWP, but it's still pretty far in the race in terms of simplicity and usability.

Chrome OS ticks all the right boxes, and is experiencing a huge growth, but it's not universal. If Andromeda is real, and it's able to become a universal OS that merges Chrome OS and Android it might be the best thing since sliced bread.

<comment><USER82> Yes, we do. I want my phone and my laptop to be in total sync, I want to be able to write code on my mobile which I can just continue on my laptop without any hindrance, currently I have a mac and an android phone, I do have Go and Python installed on my mobile, but it isn't that great to code on my mobile, I have to host the repo on an internal version of gogs to get the code synced up and I still have to manually push the code around.

All hail Universal OS!!

<comment><USER83> You could always develop remotely, use your phone to ssh into a more powerful machine. Use tmux or screen and pick up right where you were on a laptop or desktop. This is far more compelling IMHO.

<comment><USER60> Tmux or screen? Wouldn't it be nice if there were a graphics-over-the-network system?

<comment><USER84> I remember the glee of the first time I got an X-Window application to run over the network. I was so confused though because the "x-server" is the software you run on your client machine.

<comment><USER60> You and the _Unix Hater 's Handbook_ authors.

There is a small terminology issue here: a "server" is a program that offers services to remote "client" programs. The clients make requests and the server responds to them. A client program will make a request like "allocate me a chunk of the screen and put these here bits in it", or "let me know about any of these events that happen". The server manages the screen and notifies the clients about things they're interested in.

 _IT MAKES PERFECT SENSE, DAMMIT!_

<comment><USER84> This made me laugh (in a good way).

I agree, it actually does make total sense - but that doesn't mean I won't get confused :).

My only prior exposure to "GUIs over the network" were web applications, where the roles are essentially reversed. That is, the part responsible for accepting user input and rendering the UI is the client (the browser), and the part that performs the application logic is the server.

I naively assumed that X would work the same way, but it wasn't too hard to unlearn that misconception.

</comment></comment></comment></comment></comment></comment></comment><comment><USER85> guys i hate to tell you this, but it's Feb 15 here in New Zealand, and Google has cancelled Andromeda.

<comment><USER86> [http://platypusplatypus.com/news/google-andromeda-isnt- happe...](http://platypusplatypus.com/news/google-andromeda-isnt-happening/)

</comment></comment><comment><USER87> I think it's intended for entertainment and content consumption just like Android and Chrome OS. And Apple is trying the same with merging iOS and desktop. How long it will take until all computers will be set-top boxes where you can only netflix and chill and if you want, for example, to draw something, you have to buy Professional Grade Computer for $50000?

</comment><comment><USER88> wow! it supports Golang, since it has glsl, this will have nice UI.

[https://fuchsia- review.googlesource.com/#/q/project:third_pa...](https://fuchsia- review.googlesource.com/#/q/project:third_party/go)

</comment><comment><USER89> Does anyone have a more detailed explanation of the component called "modular"?

</comment><comment><USER90> Honestly I'd rather keep the linux and ditch the JVM

</comment><comment><USER91> NIH syndrome plus large organization people looking for job security, and rough, fat FLOSS full of maintenance and security vulns hell equals "Emperor's new clothes."

</comment><comment><USER92> The comment about Java based IDEs being slow is not entirely objective and fact based. I'd say it's more of an emotional argument.

</comment><comment><USER93> [https://imgs.xkcd.com/comics/standards.png](https://imgs.xkcd.com/comics/standards.png)

</comment><comment><USER94> Quote: "I am not a programmer, so if anything stated above is incorrect, please, please send me corrections. I would also greatly appreciate any clarifying comments, which were one of my primary motivations for writing this piece." Essentially a bunch of nonsense, in other words.

</comment><comment><USER95> Microsoft is opening up more and more, and Google is closing down more and more.

</comment><comment><USER96> It would be a real shame if Google wasted this once in a decade or perhaps once in multiple decades opportunity to not have an OS written in a language other than C++.

Also, it would be mind-boggling if they didn't actually fix the update problem this time, and if it wasn't a top 3 priority for the new OS.

<comment><USER97> It's written in C.

There is little beyond syntax that a different language can offer because a modern OS cannot afford features like garbage collection. Indeed, this was one of the research aims of MS's Singularity project.

<comment><USER57> They could have written it in Rust. No garbage collection, more security guaranties. Easier to contribute to the code properly.

<comment><USER97> Rust performed 3x slower and hacking around the language made it somewhat of a mess [1]. Much like Singularity, this is hardly a success story. Although Singularity was interesting from a research perspective nobody doubted that an OS could be written in Rust.

[https://scialex.github.io/reenix.pdf](https://scialex.github.io/reenix.pdf)

<comment><USER98> That paper is very old, before Rust 1.0. There was also a lot of discussions about ways that they could have used Rust better at the time, IIRC.

Today, there is no reason Rust should ever be 3x slower, especially in an OSdev context, where you currently have to use nightly.</comment></comment></comment></comment></comment>


How Far-Right Media Is Weaponizing Coronavirus - <AUTHOR> https://www.thecut.com/2020/03/how-far-right-media-is-weaponizing-coronavirus.html <comment><USER2> > _see the man who died after heeding Trump's assurances that chloroquine was > a possible answer to coronavirus

>Who are these conservative bad actors you're referring to? Obviously there's Fox News..._

This article strikes me as partisan, divisive flamebait.

<comment><USER3> This forum is littered with a sea of such articles.

There is a high risk of riots in Europe and the USA - everybody being advised to wear masks - articles like these are a tone deaf response and we are living in much more dangerous times than most of our leaders realize.

Not for nothing the Horsemen come in a variety pack of 4.

I would like an ecology of rightists, leftists and liberals because to me that is what brings out the best in the West - but if we have a monoculture of any faction we are lost - and China knows that. There are even Straussian books like The Three Body Problem written about it.</comment></comment>


Two guys walk into a bar to talk about debugging - <AUTHOR> https://blog.liw.fi/posts/2019/06/23/two_guys_walk_into_a_bar_to_talk_about_debugging/ <comment><USER2> The answer is usually in the error. Many languages (compilers whatever) are really good at telling you exactly what is wrong. When things go wrong without an error is where the detective work really gets going.

I was surprised to learn that some beginning devs don't know how to interpret an error message or use it for finding a solution. Errors are your best friend when it comes to the unforgiving nature of software development.</comment>