Writing a Wayland Compositor, Part 1: Hello Wlroots - <AUTHOR> https://drewdevault.com/2018/02/17/Writing-a-Wayland-compositor-1.html <comment><USER4> When I'm unfamiliar with the internals of a piece of software, it can seem like black magic; but it's illuminating to see something you didn't know break down into familiar steps. When the rationale behind the steps and the secret sauce -- business logic -- between them is explained incrementally, my understanding of the system grows even more, so I love posts like this.

However, can you say a few words about why one would want to a write an alternate Wayland compositor professionally (i.e. reasons other than learning and exploration) -- as in: does the protocol offer places where meaningful feature differentiation can be achieved, while still achieving full compliance?

The existence of something like 'wlroots' to me is an indicator that prospective Wayland compositors are, by necessity of supporting the Wayland architecture, more similar than different. Is that accurate?

<comment><USER5> wlroots is designed to support many different user interaction paradigms. Many Wayland compositors do share the same nuances, sure, but many do not. In addition to the typical desktop experience, you can use wlroots to make a compositor which arranges windows in 3D space for VR, or make a compositor that runs a phone interface, or a dashboard for a car, or any number of other use-cases.

Even within the desktop paradigm, there's a lot of variance and room for compositors to specialize, but it's more subtle.

<comment><USER6> I'm still waiting for someone to make a wayland compositor that compares to compiz. One super important feature I use every day is being able to invert a SINGLE window and not the entire screen.

For all the "omg it's slow" posts about compiz and x-server, it's fast enough to run on my netbook with a 5-watt processor.

<comment><USER7> > One super important feature I use every day is being able to invert a SINGLE > window and not the entire screen

While it's not per window inversion, for years I've been using the tiny (100KB) and wondrous _xcalib_ package for screen inversion*

Should note that in order to get per screen inversion working I need to use Nvidia's Xinerama extension (without this extension inversion happens across all screens).

* bound to alt-o/alt-i hotkeys with _xbindkeys_. Here's the _.xbindkeysrc_ if anyone's interested.

        # invert screen 0
        "xcalib -i -a -s 0"
          m:0x8 + c:32

        # invert screen 1
        "xcalib -i -a -s 1"
          m:0x8 + c:31

<comment><USER8> With xcalib I never got inversion working on all screens, only the first one (Intel graphics).

However, XRandR Invert Colors [1] has worked flawless with multi-monitor setups.

[1] [https://github.com/zoltanp/xrandr-invert- colors](https://github.com/zoltanp/xrandr-invert-colors)

</comment></comment></comment></comment></comment><comment><USER9> For Wayland-based 3D VR Compositor in the works: [http://GitHub.com/SimulaVR/Simula](http://GitHub.com/SimulaVR/Simula)

Good Wayland tutorials are rare in the wild. A guide like this would have been helpful when starting this projec several months ago. :]

<comment><USER10> When it is useful to point at the future? And when not?

Looking back, did all the discussion of whether PCs had a role in homes actually accomplish anything? Or all the "well, there's only the Vatican archive so far, but the WWW is going to be _big_!" conversations? Or about tablets and phones?

People often don't picture design spaces and their critical constraints; and don't track tech changes and their impact on those constraints; and say so many silly things.

So here we are again, this time with VR/AR.

GNOME, KDE, Qt? Well, I guess Motif still exists. And MUMPS.

It was clear in the early 1990's that tablets would be a thing a decade later (eg, DEC was showing a prototype and nice year-vs-performance/size/cost curves), and that mice wouldn't be sufficient. We ended up writing a lot of Java (from 1995) and Objective-C (1985) and C++ (1985). And fought Microsoft over JavaScript. But a lot of known programming language features, which would have helped us, we didn't get to use.

I really wish our programming languages today, were a little further along towards not sucking. Because we're about to rewrite the world again.

But when/where is it worth taking the time to discuss such?

<comment><USER11> _> So here we are again, this time with VR/AR._

Until OpenXR will be ready, there won't much movement in this regard.

See: [https://www.khronos.org/openxr](https://www.khronos.org/openxr)

<comment><USER10> > Until OpenXR will be ready, there won't much movement in this regard.

Maybe. I can't comment on the market economics. But I've learned to be very careful about attributing XR design space constraints. Because such care is often skipped. And I suspect it matters.

When Varjo says their high-resolution HMD users will need dual Optimuses, there's an implicit assumption that users will be running Autodesk monsters. When Valve says Vive and WMR require 90 fps and low-variance latency and a gtx 1060, they're assuming immersive gaming.

In contrast, I normally run my HMDs at 30 fps on an old laptop with integrated graphics. Using a full-screen web browser as compositor, and a little WebVR- like hack. How? It's remote desktop not gaming; with a ducktaped-on camera for passthrough AR (helps with low-fps tolerance); and no lens correction (also helps); and mixed-resolution 3D rendering; and desktop windows not participating in the 3D rendering. And it's ok.

Different VR/AR "markets" have _very very_ different constraints. Silly example: Vive HMDs have an table of their measured OLED-pixel brightnesses. Because individual pixels vary. And the Valve render compensates for that. Because otherwise, as you turn your head, you would notice the pattern. For Valve, that would be a "horrible" (quote) immersion-breaking visual artifact. Gasp. But for me, meh. I don't pretend the screen on my laptop is my desk, and I see no reason to pretend the screen on my face is my office. Sometimes you want to fix annoyances, but sometimes you simply want to get used to them.

So yes, XR stacks can be crazy hard. But they can also be pretty easy. And people with markets that require the hard, often speak as if the easy didn't exist.

But does that matter? Let's imagine Xmas 2018 gets us inexpensive laptops with discrete GPUs, and an HMD with 2k-pixel-square/eye and rectangular subpixels (for subpixel rendering). And let's say that's still without eye tracking. From the perspective of "hard", that's merely a larger market for low-end VR gaming. But from the perspective of "easy"... that may be tipping point on software dev being better done in XR than on physical monitors.

So I look forward to OpenXR. And it seems likely that movement, in some directions, really does have it as a blocking dependency. But as with so many other suggestions of VR hardware and software blockers, perhaps some transformational disruptive change may be possible without it.

</comment></comment></comment></comment><comment><USER12> Is there any advantage to using OpenGL even if one isn't interested in 3D effects in either the compositor or applications? IIUC, the Weston reference compositor has a back-end that doesn't require OpenGL but just uses the framebuffer device and pixman. Wouldn't that be faster on systems that don't have 3D hardware, or that don't have free drivers for that hardware (e.g. some ARM boards)?

<comment><USER5> We don't just paste pixels on the screen, we composite them. This involves alpha blending, projecting the scene onto an orthographic output projection, and more. Even in two dimensions, OpenGL is very useful here. On systems without suitable hardware, you should be able to use OpenGL in software (via mesa) and it will still be very fast here.

<comment><USER12> Ah, thanks for that clarification; I'm pretty ignorant about graphics. Good to know that Mesa will be fast in this case. I tried running full-blown GNOME on an ARM board (Wandboard) without proper driver support for the GPU, and GNOME Shell used ~40% of a CPU at idle. I'm guessing that something like Sway, even though it uses OpenGL, is less demanding.

<comment><USER13> Even with software rendering, a wlroots compositor should use 0% when idle thanks to damage tracking (ie. only redrawing parts of the screen that changed).

</comment></comment></comment></comment><comment><USER14> I believe that Sway will be the key to mass Linux desktop adoption, once someone wraps it into a modern distro like Arch.

Unfortunately work on kmscon has discontinued. I'm currently using rxvt- unicode. I've been looking at exploring alacritty.

Is there any chance you'll be building your own console emulator? I've had this idea floating around, that in addition to supporting ANSI escape codes, of a terminal that supports a lightweight markup language for UI. I saw your recent activity regarding Vulkan support.

Your WM has just about all the components necessary to build these kickass graphical "console" applications.

<comment><USER15> > I believe that Sway will be the key to mass Linux desktop adoption...

I'm curious what the basis of this thinking is. Sway looks like a nice i3-like tiling window manager for Wayland, but I don't see how such a piece of software would make so much of a difference.

<comment><USER14> I used Windows primarily for over 20 years. I experimented with dwm back in 2006 and really enjoyed the idea. Something clicked in my brain a while back and I tried Arch Linux. It took a lot, and I mean a lot of stubbornness on my part (and on Arch) for me to figure out how to get a minimalist desktop with just about everything working. Now that I do though, it is very easy and simple to understand. I really don't need any bloat and my OS is pretty much portable at this point, and I have great software to do pretty much everything I want.

My computer isn't terrible, but it is much older. I've got external monitors connected to it. Using i3 just feels natural at this point. I definitely feel more efficient. I have everything integrated that on Windows requires compatibility layers.

My passwords are stored using Pass, so I can even use latest encryption. I use browserpass for password integration. I've got integrations in rofi for Chrome tabs. I mean, the simplicity and speed make using a computer exciting and enjoyable for me.

If I were using a VR or AR device, I don't want to manage location of items. I like technology helping me and not getting in the way. This is what I think a properly optimized and configured desktop could be like, and I haven't ran into any issues. I can even watch YouTube and other streaming services natively and with graphics acceleration using mpv and youtube-dl.

With this framework, we won't need Android for mobile and Vulkan integration isn't too far away. I feel like with a little creative thinking, that tiling window managers can be whatever you want them to be.

Take this for example,

[https://i.redd.it/lcz6566yfwsz.png](https://i.redd.it/lcz6566yfwsz.png)

Or this,

[https://imgur.com/a/VBQML#fIjDknv](https://imgur.com/a/VBQML#fIjDknv)

Now take GTK/Gnome or Qt/KDE + X11, which are a strong learning curve for UI development, and bloated upon dependencies galore (some of this is just poor packaging) and evaluate how much of that codebase is actually producing quality applications to win the Desktop space for Linux.

You have 2 (some would argue 3 or more) commercial Linux distros that have been unable to do so, and now partner with Microsoft. I see developers flocking towards JavaScript because that is being pushed as the solution for UI development.

There is a reason that Linux desktop is failing, and I believe that tiling window managers help solve that.

No offense to Mozilla or Chrome teams, but damn your browsers are bloated and unnecessary. I can't wait for chopsui or whatever else the right scripting language is to come along and sweep it all up, because that is what will happen. Sorry Microsoft, but your 4GB OS will be blown away by something that will probably clock in at less than 1GB with Wayland/Vulkan.

Now wrap that into container isolation, and you've got yourself a policy framework.

<comment><USER16> "But it can't proberly open .docx and play PUBG"

<comment><USER14> If you have an integrated and separate card for gaming, then you can do just about anything, including running Mac inside Linux:

[https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVM...](https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF)

<comment><USER16> I doubt that any of that has anything to do with the reasons that there's no "mass Linux desktop adoption".

And I wouldn't count Linux running Windows in a VM most of the time as a "Linux desktop".

<comment><USER14> What do you consider some reasons then?

I really don't recommend running a Windows or Mac VM simply for compatibility, because then you lose out on a bunch of perks, but you can. I mean you can use something that is free and the source code is available for rich and poor people alike, and the web is full of information and communities to help you get started and prosper from your new open source skills and education. Or you can pay for spyware and then pay more to supposedly protect yourself from spyware, while installing more spyware to make you safer, and then you will need adware for that spyware, and then some additional apps to make sure that you only install OS-approved spyware.

<comment><USER16> > What do you consider some reasons then?

Too often users need to use the terminal.

<comment><USER14> Well, you had to admit that with auto-complete, it is pretty cool to just type a couple letters and tab your way to heaven. Have you tried Rofi? There are some descent themes, but in all honesty the terminal is great. It is a text- based dynamic solution which makes it extremely versatile and compatible.

What is more natural than just typing and tabbing to what you want? That is some simple voice navigation stuff as well, or once you get to VR, then tab- complete can be like auto-suggest.

Have you seen Vim with perfect horizontal, vertical windows, and re-scaling? I have, and it is glorious! Once you add proper icon font support and Airline, it is hard to beat... yes, Neovim is probably better.

However, it is a matter of time before chopsui or another UI toolkit comes along that will essentially wrap around all these great terminal applications in a way that will create the layouts and styling that web users are mostly used to. I hope instead though that, it is more general, and that information is decoupled from design. Instead, I hope that sites will be able to request to change layouts, and that we will build better decentralized marketplaces for developers.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> I'm really looking forward to using wlroots with sway! Thanks for all of your great work Drew!

</comment><comment><USER11> Is there something like xinput for Wayland? I tried switching to Wayland session in recent KDE Plasma 5.12.0, but lost the setting that emulated middle click with left + right clicks, that I was setting with xinput.

<comment><USER18> I was just looking at a similar topic yesterday - trying to find a Wayland- compatible replacement to tools such as xdotool or xcape (see e.g. [https://askubuntu.com/questions/956640/equivalent-to- xdotool...](https://askubuntu.com/questions/956640/equivalent-to-xdotool-for- wayland/977801#comment1630814_977801)).

People keep saying this was "decided" for security, but usually with no sources cited. I wasn't able to find a firm decision and discussion/roadmap. Instead it seems more like it was viewed as "handling this in a secure way is hard, let's skip trying to figure it out". Which is pretty sad, since as far as I can tell users didn't really get much in the way of tangible benefits from Wayland aside from security (altho the KWin maintainer points to Wayland being easier to test automatically [https://blog.martin- graesslin.com/blog/2018/01/kwinx11-is-fe...](https://blog.martin- graesslin.com/blog/2018/01/kwinx11-is-feature-frozen/)).

I found a RFC on a mailing list: [RFC] Interface for injection of input events ([https://lists.freedesktop.org/archives/wayland- devel/2017-Ma...](https://lists.freedesktop.org/archives/wayland- devel/2017-March/033514.html)) where the xdotools maintainer chimed in with some thoughts. But it seems to have died quick.

I then scoured the Wayland freedesktop bugs ([https://bugs.freedesktop.org/describecomponents.cgi?product=...](https://bugs.freedesktop.org/describecomponents.cgi?product=Wayland)) and one of the closest things I could find to a discussion of related issues was an open bug "Add an API for taking screenshots and recording screencasts" ([https://bugs.freedesktop.org/show_bug.cgi?id=98894](https://bugs.freedesktop.org/show_bug.cgi?id=98894)) which has to deal with similar security challenges.

Ultimately I, along with other automation-minded folks, will be sticking with x11 until this is figured out. macOS also has a decent automation story, with tools like Hammerspoon, Automator, and so on.

I've got a fair bit of other notes on the topic which I can share with anyone interested - for example I saw "Some way to inject automated libinput events?" ([https://bugs.freedesktop.org/show_bug.cgi?id=99800](https://bugs.freedesktop.org/show_bug.cgi?id=99800)) where the person was actually trying to tune a gamepad.

Also see [https://www.reddit.com/r/linux/comments/7bm9az/what_cant_be_...](https://www.reddit.com/r/linux/comments/7bm9az/what_cant_be_done_on_wayland_still/) where people are saying that Wayland is further fracturing the Linux desktop world.

<comment><USER15> A while back I looked into Wayland and what was missing that I would need to replicate my current setup. Here's the list I came up with...

        openbox - window management
        xinput - trackball/input configuration, disable touchpad
        xbindkeys
        setxkbmap - control/cap-lock manipulation
        redshift
        Xresources/xrdb - urxvt & general X settings
        xdotool - script-able window movement
        xclip/sselp - script-able copy-n-paste
        zenity - scripting gui things
        xset - dpms, screen blank, keyboard auto-repeat, mouse movement rate
        conky - system info
        dunst - <USER2>
        unclutter - no pointer
        xsslock/xtrlock - <USER3>
        xrandr - display config
        urxvt - terminal/shell access

Most of these had no Wayland equivalents that I could find. I have no plans on switching anytime soon.

<comment><USER5> Much of this doesn't have a 1:1 equivalent tool, but is workable anyway. This comment got really long so I moved it into a gist: [https://gist.github.com/SirCmpwn/594040cb476f93c503715d4635b...](https://gist.github.com/SirCmpwn/594040cb476f93c503715d4635ba27f5)

<comment><USER15> Wow. Thanks for the detailed reply. I'll add that to my notes. I'm curious to see how this plays out with wlroots and how people will build on it to bring the something like variety of window manager X has to Wayland.

Using Xwayland for a significant number of things makes me curious about how much overhead it adds. The only article I found was from 2014 and it showed it adding significant overhead. Anyone know of any newer data?

<comment><USER11> I don't think it should add a lot of overhead. Performance wise it shouldn't be any worse than regular X.

<comment><USER15> The article I mentioned in case you were curious.

[https://www.phoronix.com/vr.php?view=20956](https://www.phoronix.com/vr.php?view=20956)

<comment><USER11> Thanks. I should run some Witcher 3 in Wine benchmarks with XWayland.

Though currently TW3 suffers from low performance regression in general, so it won't be very conclusive.

Also, I suspect some of it can be compositor specific.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> What a nice tutorial, thanks for putting the effort in!

</comment><comment><USER20> Somewhat off topic, but still highly relevant:

Sir_Cmpwn, now that your stretch goal in your crowdfunding campaign has been reached, what will you do? Do you have ideas for a new goal?

I expect a fair portion of the traffic came from this post. So if you have ideas for them, comment below?

<comment><USER5> Thanks for asking! We honestly weren't expecting to get this far this fast, so our plans are a bit nebulous. We're trying to figure out how to schedule for an additional dev to come out to Philly as a new stretch goal. More details later, I'm heading to bed.</comment></comment>


Settling Video Game Arguments, Part 1: Game Reviews - <AUTHOR> http://jeff-vogel.blogspot.com/2017/11/i-settle-all-video-game-arguments-part.html <comment><USER2> I found the recent EA Battlefront 2 controversy hugely interesting. Gamers rebelling against micro-transactions, then being attacked for being greedy or selfish by the games media.

It really brought into picture that various interests of major players in that community are not inline creating a huge amount of tension. The journalists are basically a PR arm of the bigger corporations or a specific political agenda.

This article seems to ignore the fact that often groups or tribes often form to protect their own interests by creating various forms of economic and/or social moats. The various groups are all trying to reduce competition by creating monopolies or gatekeepers, which in turn increases the tension or hostility between gamers and the mainstream journalists.

It's pretty interesting seeing this occur in real-time. I'm still not sure how the "gamers" are organizing or whether its just an emergent reaction.

<comment><USER3> The sticker price for games has stayed rock steady for _decades_ now while budgets have only exploded (not to mention inflation). AAA budgets, $60 titles, and no microtransactions or subscriptions is absolutely a 'pick two' scenario, and will continue to be.

<comment><USER4> That completely ignores the fact that audience and number of sold copies had grown as well. Games that have once sold 1 million copoies now sell in 5-10x as much. If anything the profits are now higher than ever.

<comment><USER3> And budgets have exploded 200x from the 1-3M N64 game days. It's utterly disproportionate. If you look at the most profitable games (Blizzard, Valve, Riot) they're moving away from sticker prices altogether.

<comment><USER4> I'm not talking N64 days, e.g. typical EA example is Dead Space - the first one sold 1 million copies and was considered a huge success. Such a success that they bootstrapped a whole franchise. And that's not a N64 type game.

It's third installment, Dead Space 3, was slated to sell minimum of 5 million copies. With less than 5 million, EA decided that it's not going to be profitable enough. It also had microtransactions and DLCs on top of those required 5 million copies sold.

Who's greedy here?

</comment></comment></comment></comment></comment><comment><USER5> Jeff's article is spot-on as always. I'm a bit surprised that any of this still has to be mentioned, but I guess people forget. It's the same reason why I would never go to Roger Ebert for a movie review: he and I like drastically different things.

That said, please allow me to make two suggestions to anyone reading this:

1) Check out more of Jeff's blog. His writing is fun, excellent and educational. Even if you only care about tech it will be interesting for you to read Jeff's frank discussion of his game sales numbers and the challenges he has overcome almost single-handedly coding and writing his many games.

2) Give Jeff some of your money. His games are unapologetically targeted at people who enjoy rpg elements, turn based combat and an interesting story. If that sounds like your cup of tea then buy one of his games if you like the gameplay video.

<comment><USER6> Jeff's blog has been amazing for as long as I can remember. I've been reading his stuff on a regular basis since I was in college and I've been playing his games since I was seven, downloading them off of AOL and getting mad at the Shareware Demon who told me I couldn't go any further.

Exile II remains the only game I ever cracked (I don't mean with-a-keygen, I mean with-a-hex-editor; I never got into games pirating from other people), because I was like nine years old and hex editors were easier to come by than credit cards, but I'm pretty sure I've made up for that by buying everything he's released since. Blades of Exile was the first game I ever bought through the mail, Geneforge was never my jam but I bought them all anyway on principle, and I _still_ want a Nethergate 2.

<comment><USER5> You should send Jeff a quick email explaining how you became a life long customer. I am sure he would get a kick out of it! Jeff wouldn't be writing games after all these years if he was in this strictly for the money.

<comment><USER6> We've corresponded before. ;) I tried to get him on a podcast once, but he's not big on them. Maybe someday!

(This is unrelated, but loads of people find it very difficult/intimidating to reach out to people who do interesting stuff. I love shooting emails to people who've done stuff that I find awesome and just about everyone is responsive and extremely gracious.)

</comment></comment></comment></comment><comment><USER7> Many times I've read a game review by someone who has no interest or experience in the genre. While a different point of view is always interesting, I personally enjoy reviews and writing by someone at least knowledgeable about the subject matter and its context.

An example was a review for the Crash Bandicoot remakes by someone who has never played or been into classic platformers. Therefore, the review was mostly complaining about how you go back to the beginning if you lose all your lives (!?).

\--

Personally, like others have said, I rely on friends and communities devoted to a few specific genres I like (turn based JRPGs make up 80% of my game library).

<comment><USER8> See, that Crash Bandicoot review sounds useful to me. I also did not play the originals, and vaguely wondered if I should play the remakes to see what I missed out on. Knowing that it is a frustrating experience without the nostalgia factor is quite valuable to me.

<comment><USER9> Going back to the beginning isn't necessarily a frustrating experience though. It depends on other factors such as how far back you go and how frequently it happens. I personally don't find Crash frustrating or particularly hard.

If you don't play platformers (I do), then perhaps it would be frustrating for you. But.. yes, games have become more accessible than they were in the 90's when Crash was created.

</comment></comment></comment><comment><USER10> If you really think about it game reviews are outdated. This isn't the 90s anymore.

Go to YouTube and search for the title of the game followed by gameplay. Example: "cold steel gameplay". Now go to page 3 of the search results to make sure you're NOT getting advertising or ecelebs. You're looking for that random guy who is just recording the game. And doesn't talk. Very important detail. You want that video with sub 100k views. And now you can see for yourself exactly what you will get and can make an informed purchase.

But I suppose its just one of those things people want to do that has nothing to do with practicality.

<comment><USER11> There's a lot you don't learn from watching gameplay videos. You don't learn what the controls feel like, how responsive it is. Many games look like a confusing mess if you haven't played through the tutorial stages yourself to understand what the player is doing and what drives the decisions they make. And unless it's a first-time playthrough, you don't learn what it's like for a new player. There's a great big pile of streamers who've been playing Dark Souls for thousands of hours, and you will get a very very wrong impression of the game's difficulty if you just watch them.

A good review gives an accurate impression of a game's strengths and weaknesses in 5 minutes of reading. I've bought games based on overall negative reviews before, because the writer was even-handed enough for me to judge exactly how my tastes differed from his, and see that I could live with the bits he hated and love the bits he thought were just decent.

<comment><USER9> I agree with this. The Dark Souls reference is so true (but applies to every game)

> here's a great big pile of streamers who've been playing Dark Souls for > thousands of hours, and you will get a very very wrong impression of the > game's difficulty if you just watch them.

Hell, when I play dark souls now, I just kinda ignore all the enemies. They're like flies that get swatted if they get too close, but that's it. This is NOT the experience a first time player will have. Instead of flies, each enemy is an angry bear with a time bomb strapped to its back, with robot claws. Every enemy strikes them with fear and apprehension. All of this goes away as you become accustomed to the game.

When you watch an experienced player play, you obviously see the former and not the latter and what you see is NOT the experience you will have. (Although, you can of course watch a video where someone new to the series is playing... but the majority of videos are by existing fans)

</comment></comment></comment><comment><USER12> Interesting - I've never cared for professional reviewers or anything of the sort - instead I just look for the biggest user review site around, which is currently probably Steam and read the comments a bit and then if I'm on the borderline I'll watch a YouTube video of actual gameplay. I can understand why they existed before, but what's the benefit of professional reviewers in this day and age, when it's far easier to determine what the common opinion of something will be?

<comment><USER13> Video game reviews usually have opposing goals: journalists want to elevate video games to an art and to elevate their criticism to art criticism, but users want them to quickly provide a helpful recommendation (which is represented by a number score).

Steam reviews are concise by design and give you a better idea of whether you'll have the same kind of positive opinion (for example, if all the positive reviews are memey, that says something significant). So I'd say they're definitely better.

I think some people who were video game reviewers will go on to become popular youtube "video essay" producers like this guy: [https://www.youtube.com/user/Matthewmatosis](https://www.youtube.com/user/Matthewmatosis) and the rest will get new jobs.

<comment><USER6> The games press doesn't "want to elevate video games to an art". Games _are_ art. And there are both game reviewers and game critics and the distinction is pretty clear once you've spent a few minutes figuring out if that particular person's thinking matches your own enough to be worth considering.

 _> users want them to quickly provide a helpful recommendation (which is represented by a number score)_

Speak for yourself. I'm a "user". I also appreciate criticism that places a game in a historical, textual, and social context and that often tells me more about whether I'll like the game than "oh yeah, it runs at 60fps solid on my 1080Ti". A game _reviewer_ might have put me off of _Wolfenstein 2: The New Colossus_ or _NieR: Automata_ because of gameplay ephemera they didn't like; game _critics_ turned me onto both games because they were must-play experiments in how we tell stories.

<comment><USER14> Videogames use art but its not art. Or more specifically, its not created for their artistic value. Videogames are a amusement product over an artistic product.

For example, a stunning artistic videogame but boring versus a ugly game but funny.

<comment><USER15> There are many types of videogames with many different audiences, similar to movies. You can argue that videogames aren't art by pointing to Call of Duty, just as I can argue that movies aren't art by pointing to Suicide Squad. If you argue that movies are art by pointing to Citizen Kane, I'll point to Spec Ops: The Line or the Stanley Parable.

I also think you're conflating "art" and "visual design".

<comment><USER6> Even within _Call of Duty_ , I would certainly call the single-player campaigns, from the original game up through today, successive iterations on a presentation of a narrative message even completely divorced from the ephemera of play (which is itself artistic in nature, though less universally obviously so).

 _Quake_ would be a better example, but I'd hold, too, that the decisions and the ephemera of _that_ are art as well. Nothing says you can't play art.

</comment></comment></comment></comment></comment></comment><comment><USER16> This article reflects an opinion I've long held about game reviews - it's okay for other people to have different opinions. All a review can be is one person's opinion. It might be insightful, helpful, great, terrible, but it's all just an opinion.

There should be room within artistic criticism for critics to have different opinions. If Polygon wants to analyze games through the lens of left-leaning politics, that's fine! Readers who want games examined in that way will find that useful. If Totalbiscuit wants to rate games based on their PC ports and framerate, that's also fine! He has an audience that enjoys that.

It is acceptable and even valuable for there to be a wide variety of opinions and criticism for an art form. Forget Metacritic bonuses. It's not our job to worry about that. When you read criticism you disagree with, have the confidence to say, "I understand why you didn't like that game, but I did and that's okay."

</comment><comment><USER17> As a counter arguement to the one put forward in the blog, it's also ok to care deeply about how journalists in the game industry behave because it's ok to care about stuff, even if it's not politics.

<comment><USER18> The article doesn't say "Nobody should care deeply about game reviewers"; it says "If a game reviewer gives a game you like a bad score, that's okay; it means that you and the reviewer disagree and you should disregard their opinions on games because you are probably looking for different things than they are".

<comment><USER17> If a reviewer gave a game a bad score, it could also mean that the reviewer is being paid to write a bad score.

And a good score could be paid for, too.

And I think it's OK to care about who is being paid to say what.

<comment><USER6> _> If a reviewer gave a game a bad score, it could also mean that the reviewer is being paid to write a bad score._

Extraordinary claims require extraordinary evidence. Until then, this is static.

<comment><USER19> Why do you feel that's an extraordinary claim?

<comment><USER6> Because I'm familiar with both the games press and games PR. I understand how those interactions work well enough to be very, very skeptical. There is some minor possibility of good reviews in exchange for advertising--except that sales and content at any outlet significant enough to be called the "games press", from Kotaku to Giant Bomb, has a wall between sales and content _and_ publishers (when they bother to notice the games press at all) know that bad scores are, occasionally, just part of the package. The last major break of that I can think of was Gamespot and Jeff Gerstmann, and the people involved in causing _that_ were so roundly shredded that I don't even think most of them are in the industry anymore. So while vanishingly unlikely, sure, there's a possibility of payola there. But getting paid for _bad reviews_? Come on. Substantiate--with evidence--those wild claims or don't make them.

If he'd said "games YouTube"\--now, that's a different thing, as the interactions between influencers and publishers (in ways that are deleterious to the public, to be honest) are pretty well-documented across the board in ways that are not "some rando with an anime avatar said so". But even _they_ aren't incentivized in any way that I've ever, not once, seen substantiated to give _bad reviews_. So, again, that's a put-up-or-shut-up.

</comment></comment></comment></comment></comment></comment><comment><USER15> "Look, I love laughing at game professionals flailing at games as much as anyone. Remember when that unnamed Polygon writer tried Doom and showed no signs of ever having played it (or any video game) ever before? That was a hoot.

(My favorite bit is when the player unloads a full shotgun blast into a health pack resting on the ground, in what I can only assume is a post-modern deconstruction of late-stage capitalism.)

But some people watched that video and said, "Wow, I should never buy this game," and were right to say it. So the video was useful after all."

I feel like he brushes this criticism off without really confronting it.

A reviewer who's experienced with gaming and good at it can gauge difficulty, one who's inexperienced and terrible can't reliably. Reviewers shouldn't be perfect mirror images of the people they represent. They need to be above average to have cogent criticism and to communicate that to gamers effectively. Terrible analogy: No one is arguing that war correspondents don't need to know anything about geopolitics because "most people who read about geopolitics don't understand it, and they deserve correspondents who advocate for them."

<comment><USER20> Yeah, that part seemed particularly bizarre. I would never accept a gig writing reviews for Jazz performances -- I don't know anything about Jazz and I can't fathom why anyone would care about what I have to say.

</comment></comment><comment><USER21> I don't care about "critics'" reviews or most media reviews for that matter. To evaluate something, I prefer to ask those who like given genre and can express an educated opinion.

<comment><USER22> You don't care about critics, you care about critics. I understand what you're trying to say, but I think you're dismissing criticism at the same time.

You want a critic who has a familiarity with the genre that is beyond superficial, and preferably on a deeper level. You want that critic to express an educated opinion, which should be a minimum for any form of criticism.

There are some critics who take a larger frame of reference, who might try to represent general audiences who are less familiar with a genre. Some critics can shift in an out of different perspectives. A good movie critic can talk about the merits of an over-the-top action movie without dismissing it.

It is perfectly reasonable to find the general critic less useful than the niche critic, both forms are still valid criticism.

<comment><USER21> What I meant is that I don't care about "professional critics" most of the time, unless they are well informed. I'm more interested in informal reviews coming from actual gamers.

<comment><USER22> I think professional critics are more useful in fields with a longer traditional of quality criticism. I haven't really found a set that are useful when it comes to video games for myself, and rarely even touch a game anymore.

Part of the problem might be that the time required to become fully versed in video games is immense, if finishing the games are required. One can get up to speed on the history of multiple film genres in less time than it would take to play through the genre of RPGs. Some games are meant to be disposable rehashes (e.g. modern war FPS) that just push the edge of graphics tech (which is OK), so it's easy to judge if the graphics suck or not.

I think another issue is that some people want the experience of the critic to match their own. A kid growing up will find a lot of ideas to be fresh that are tired and cliche to anyone with a childhood of [gaming,movies,etc.] experience. The drawback is that though peer reviews are useful, they don't always challenge you to think critically beyond what your peers think.

<comment><USER21> I agree, games are a more complicated medium to review because they require more time. That's why opinions of those who actually play them make more sense. They can evaluate game approach and highlight strong and weak aspects of it, in game design, story branching, writing and etc. I suppose technical aspects are easier to review for those who don't invest that much time in it.

It's for sure difficult for RPGs, but even for FPS, take something like Shadow Warrior (remake). Without finishing the game, one can't know the story twist and full evolution of the main character which kind of puts the whole game in a different light. It's just a work of art IMHO. For any critic to adequately review it, they need to finish the game.

</comment></comment></comment></comment></comment><comment><USER23> Here's the thing: Game journalism corruption has been a thing for _decades_ now. When _Bubsy_ first came out, there was a media blitz in magazines like _GamePro_ , who had fulsome praise and promoted Bubsy as the next Sonic. Of course anyone who's played the game knows it's rather terrible. So I think when we see outrage against games journalists, what we are really seeing is a skeptical audience and that's a sign of health in the community. Games journalists who praise a bad game as good because they were paid to, or who criticize a good game as bad because they can't be arsed to learn to play it and somehow, to them, it's the _game 's_ fault, are not fulfilling their ostensible function of informing the potential audience for these games.

That said if you're going to call out a games journalist, it's important to be gentlemanly and civilized and not act like a rabid chimp.

</comment><comment><USER24> One thing I still try to understand is the anger flared when a game/movie sucks. I think the only thing anyone should do when a game sucks is not buy it, and not watch it anymore. But for some reason some people make it their mission to make it a vendetta against the developer.

<comment><USER25> The problem is you usually don't know if a game sucks until you spend $60 on it. The younger gamers who are more likely to participate in mob action can't afford to waste $60 on a shitty game. If someone takes your money for a product that is obviously broken and shouldn't have made it past QA, it's hard not to feel burned.

<comment><USER26> If this was genuinely the case, wouldn't documenting ways to get a refund be more worthwhile? I believe in the UK you can return anything bought online within 2 weeks. There's plenty of other large stores that pride themselves on no quibble refunds.

I've never felt money was a key driver here.

(Unlike say, platform rivalry, which I've often put down to the fact that it's a massive investment for young kids when they choose to buy one platform and a bunch of games and peripherals, so hearing they've made a bad choice may inflame emotions)

<comment><USER9> I tried to return a game I bought on playstation network and Sony flat out refused because I had played it (how else would I have known it wasn't good? If reviews etc had helped, I wouldn't have bought it to begin with). They told me to direct any further complaints about it to their legal department. I didn't bother.

</comment></comment></comment></comment><comment><USER27> I thought an important part of this article was to avoid sites where a different reviewer reviews games chosen seemingly at random (like the mainstream IGN, Gamespot, Polygon). Just because you agree with/like John's IGN review of game A doesn't mean you'll agree with Mark's IGN review of game B. Instead find a review site with consistent reviewers whom you like or agree with and read them. For me, I like RockPaperShotgun and Destructoid. Both of those sites seem like they are written by gamers who love gaming, not paid critics. I'd be interested in hearing about other high quality game review sites.

</comment><comment><USER28> Good video summing up "outrage" that occurred around Cuphead:

[https://www.youtube.com/watch?v=_-P9_oUV9Gw](https://www.youtube.com/watch?v=_-P9_oUV9Gw)

<comment><USER29> The author(Shaun) is very reasonable, as are the SJWs who expand on the vid in response to 'secretagentlucario'. But even after that user's efforts to discover what the problem in problematic is, they fail to make it clear. Everyone ends at "it's worth talking about", everyone denies wanting anything loony like inserting PSAs before videogames that want to use a 30s american animation aesthetic. What is there to talk about? I don't blame gamers for concluding those tweets were an attack on Cuphead; that's what 'problematic' is, an airheaded attack.

<comment><USER28> I can't speak for the people having the discussion, but if I were to put a "game critic" hat on I would say that Cuphead seems to have missed an opportunity to borrow an art style but subvert the racism of the genre, but instead chose to sweet it under the rug. That's a shame, it could've made a great game even greater to smartly acknowledge the fire it was playing with.

I agree that "problematic" should be retired because it's lazy shorthand that has gotten out of control. But to "academic" types saying something is "problematic" is really banal: literally everything is problematic, in some way or another to a critic. That's okay though, and it's true of all other forms of art that are criticized and theorized. So I agree that the language and jargon of academia is, well... problematic :)

> I don't blame gamers for concluding those tweets were an attack on Cuphead; > that's what 'problematic' is, an airheaded attack.

I blame the people like the youtuber in at the beginning of Shaun's video, which I think is the point: there are people out there stoking the flames of outrage for profit based on misreading (on purpose or otherwise) of fairly banal things said by academics and critics.

<comment><USER29> Thanks for the response, I posted to a non-front-page thread knowing you specifically (if no one else) might see it.

I would like to know what you mean by subverting the racism / acknowledgeing it, without tinkering with the developer's vision. I believe the video that the _plot_ (which brings with it the dice character) was inspired by racist cartoons, but I don't think the art style alone should have to excuse itself.

<comment><USER28> I don't think the developer of cuphead should HAVE to do anything. They made a really good game, which I paid for because I loved the art style. And honestly they've been very straightforward about saying "yes we were aware that the cartoons were drawing from were very racist but we loved the style so much we wanted to seperate it from the racism." But once the audience is aware of where the tropes come from it's hard to look at the games features and not think about where it came from.

To borrow a review on cupheads Wikipedia page:

> Brandon Orselli of Niche Gamer defended the game as a tribute to that art > style, writing that it was not meant to deliver narratives, or "go anywhere > beyond where it needs to go in terms of its basic and child-like > storytelling"

That is a perfectly fine defense of cuphead IMO. But personally I like games that go a little bit beyond "child like storytelling."

I'm having trouble thinking of an a way that the tropes could've been subverted or a game that does this really well. But ultimately what it comes down to is that, personally, I think great games go beyond simple stories and simple pastiche of art styles. Copying the style is and creating all of this art is a marvelous technical achievement. But if you just swap out the racist characters for cups and dice, have you not missed an opportunity to also write a story that borrows from the past while also subverting or otherwise questioning its tropes?

And I acknowledge that plenty of people will read this and think "who cares, it's just a game?" And I will admit that if it's all "just games" then my thoughts will seem pretty irrelevant. That's okay. But I'm going to keep taking about games as if they were any other form of art, because that's how I see them.

</comment></comment></comment></comment></comment><comment><USER14> A journalist is like a Lawyer, they think that they are good at everything but they should be specialized, for example, a business lawyer trying to act in a criminal case.

In this case, a game journalist should be specialized in some kind of games. Its not as simple as "i play xbox" or "playstation". For example Flight Simulation games or Wargaming. All of them are niche, and if you don't get it, you could considers it as a boring game, and yes, they are bore if you aren't part of the target market.

Cuphead is an example, a apparently good journalist trying to play a game where hes clueless. IT WAS PATHETIC.</comment>


Ask HN: Someone still using Thunderbird for Gmail in 2015? - <AUTHOR>

I was wondering if someone is still using Thunderbird (or any other email client) nowadays and why. <comment><USER2> Thunderbird user here. Email clients are really useful when you have more than one email account. Everything is in one place and you don't have to keep signing into multiple accounts all the time.

I've been using Thunderbird because I simply cannot find an email client that provide that much functionally, respects your privacy and doesn't randomly break.

But there is email client that I am looking forward to called [0]mailpile, that I will probably switch to once its reached v1.0 (early October)

[0] [https://www.mailpile.is/](https://www.mailpile.is/)

</comment><comment><USER3> I use Thunderbird for all my emails (or almost), mainly for PGP, the plugins and the consistency (I don't have to switch from a web platform to another )

</comment><comment><USER4> I still use Apple Mail most days. To read mail - could you expand on your "why?" a little as it seems difficult to understand what you are asking?

<comment><AUTHOR> You are right, I was thinking about the fact that have been years that I am using Gmail via web, and found no reason to go back to use a desktop client (apart from gpg support).

Updated question, thanks.

<comment><USER4> A few reasons for me: 1\. Google keep messing around with button placement in their UI and it gets irritating after a while. 2\. I would never compose a long (important) email in a web browser in case I lost the page. 3\. Gmail is one of many accounts that I have and I like a unified inbox.

</comment></comment></comment><comment><USER5> Yes. Why? PGP through Enigmail. Also I don't have to be logged into Google's services to read my email.

Why would I not use an email client?

</comment><comment><USER6> I use it all the time as an email client and RSS reader on Windows and Linux. Why? Well, I like it, and as somebody who prefers desktop applications for everything, it's the only one I know that can do both mail and RSS.

<comment><AUTHOR> RSS looks like a declining habit, on what kind of websites you look for a feed?

<comment><USER6> I subscribe to content sites like InfoQ, to blogs which get regularly updated, and to discussion forums like coderanch / raspberry pi / stackoverflow / electronics. Some 80-100 feeds in all.

I'm not so sure RSS is declining. How else do you keep up to date with your favorite websites?

</comment></comment></comment><comment><USER7> The same in reverse: Why use web-based clients/web-pages for email?

</comment><comment><USER8> Beacause with Thunderbird I have all my e-mail accounts in one place. I got my calendar there, too. Also I still prefer desktop applications.

</comment><comment><USER9> I am still using it with 3 gmail accounts and 4 from different mail providers. I don't really like it but it works.</comment>


A News Feed for your site's Google Analytics - <AUTHOR> http://erickerr.com/news-feed-google-analytics

<comment><USER2> I'm especially fond of (and halfway competent at) the Salesforce reports interfaces.

Salesforce gives you the opportunity to run and export pre-loaded reports, or define a set a parameters, name them, and run / export those reports time and time again.

I think it's a great idea, Eric, and would definitely be interested if you:

#1 Set up key reports for - keyword optimization, link-sources, geography, timing, and on-site activity tracking.

#2 Allow me to mash, 'pivot-table, and create custom reports that stream to me everyday.

If your solution can do these things, I'll not only be an advocate.. I'd be a customer.

-Adam

</comment><comment><USER3> This is a pretty good idea. I googled for something similar and didn't find anything, but the search terms are pretty tough "google" "feed", etc :)

</comment><comment><USER4> See <http://trendly.com>. Sadly, I don't believe the site is operational any more.

</comment><comment><USER5> What you are describing is similar to the 'intelligence' feature in GA.

<comment><AUTHOR> Yes, as I mentioned you have to actively go through and set that up which few take the time to do. It doesn't "just work".</comment></comment>


Show HN: Storex – A modular and portable database abstraction for JavaScript - <AUTHOR> We'd like to show you Storex, a database abstraction layer that allows you to move your database interaction code between client- and server-side. By surrounding it with modular, recombinable packages for common problems such as schema migrations, it's possible to re-use logic touching the database across a wide variety of databases, allowing you to develop your code entirely in-browser in your daily development workflow, and then move your database to PostgreSQL/MySQL back-end once you're ready. Storex was designed modularly enough to easily be adapted to mBaaS like Firebase, which is coming up soon. Right now it's being used in WorldBrain's Memex (worldbrain.io) to provide you with a client-side full-text searchable database of every page you've seen online and your annotations on them (up to 5GB of data for some of our users.) We'd appreciate your thoughts very much, and don't hesitate to get involved! More info: https://medium.com/worldbrain/storex-a-modular-and-portable-... <comment><USER2> I think this can make it easier for hackers to understand your data model right from the beginning. Even with Firebase I don't manipulate data in the client because anyone can just open a f12 and start changing the data as they wish, it's a good idea but it's a hacking world and we need to make sure that data manipulation stays in the backend only with CORS, SSL and requests protection against injections either in SQL or anything else can even be a header.

I understand were you're coming from, I used to think why not. Well the security is still the barrier and even back in the old ages of Java EE the beans stayed safe guarded in the backend from the Web Project.

<comment><USER3> If that's your concern, part of the plan for later would be to make it easier to generate a REST/GraphQL API that you can easily consume on the client side, while not having any schema data in the front-end. Say you'd have a TodoStorage which has high level methods like markAsDone(), you could have that either write directly to IndexedDB in your dev workflow, or move that class to the backend, and replace the front-end version of TodoStorage talk to a GraphQL API instead. The point is to have a choice, and allow the user of the library to understand the risks of technologies involved and use and mix them according to their needs with minimal efforts.

</comment></comment><comment><USER4> I was starting to work on my own project just this week to deal with the exact same issues and use cases. Excited to check this out and see how it evolves!

This could absolutely be my own misunderstanding, but you mention that it's explicitly _not_ an ORM, but reading through the docs, it seems like the collections and querying aspects of this project are just that. It actually seems like most of what this project's scope seems to be is to be used as an ORM (which I personally am fine with). Can you elaborate on that at all?

<comment><USER3> Hey, Vincent (author of article) here! Indeed it's a fine line, but ORMs give you objects with methods that allow you to modify or further query the database, like User.save() or User.objects.find(). This is for me the distinction, and in Storex you get data objects back, but all the manipulation happens through one object, the StorageManager.

<comment><USER5> So its a data mapper instead of active record, but still an ORM.

<comment><USER3> Ah, thanks for pointing that out. Will read up on my terminology ;)

</comment></comment></comment></comment><comment><USER6> This is great. I definitely feel like the front-end could use a more ORM-like, feature rich data layer. I generally use an ORM on the backend. When I get the data to the front-end, it's still relational in nature, and I still want similar tools for working with it (e.g. schema definition, validations, and an api that lets me query and manipulate related data). It seems like Ember Data is closest thing. I wish it could more easily be used outside of the context of Ember.

<comment><USER3> You're free to implement an ORM on top if you feel that style of access suits you more. My mail is in the article, will endorse your package and help you implement it in a clean way if you want :)

<comment><USER6> Right... sorry. I didn't make my point very well. What I was trying to say was that this is sort of an ORM, which makes sense to me. I see a need for that on the front-end. I see your other comments about how this isn't exactly an ORM, which I see as a semantic discussion. It's ORM enough for my purposes. I bring up Ember Data because it's an example of battle tested and feature rich front- end ORM. I'm thinking it would be more popular if it wasn't tied to Ember so closely.

<comment><USER3> Thank you for your feedback, I got a bit confused there :) Indeed I think it's nice to be able to mix and match pieces of existing stuff, which I think more software should do. The multi-device sync I'm designing right now will also not be coupled tightly to Storex, so you can use it easily inside existing applications.

</comment></comment></comment></comment><comment><USER7> How is this not an ORM? Just because it's technically separate modules which are being combined to form an ORM? How does this meaningfully differ from Sequelize, Waterline, Objection, or Loopback's ORM?

<comment><USER3> Sequelize is only for SQL databases. This is also for the front end and in the future also for Firebase and others like it. And there's more in the article about adjacent functionality planned, which is outside of the scope of an ORM. And yes, got my terminology a bit wrong: meant to say it's not ActiveRecord.

</comment></comment><comment><USER8> Cool! We have developed something very similar in the last months and we are thinking of releasing it in open source as well, I'll keep an eye on your library as well! :-)

<comment><USER3> Very nice, curious to see how we could learn from each other :)

</comment></comment><comment><USER8> Cool, we have developed something very similar in the past months and we're thinking of releasing it in open source, I'll keep an eye on your library as well!

</comment><comment><USER9> I like this strategy, are there similar efforts?

<comment><USER3> There is one DAL which doesn't take relations into account, nor has a plug-in based approach, but I don't remember it's name. Also didn't have the goal of being a collection of packages that solve problems 'around' your data, like migrations and throwing it back and forth between client and server.

</comment></comment><comment><USER10> This is an ORM.

<comment><USER3> See comments below.

</comment></comment><comment><USER11> I have mixed feelings about this.

Sharing database abstractions between the client and the server might make sense for some applications, but I worry it might often be a code smell. I used to believe in the dream of sharing models between the client and server, but that illusion was shattered on first contact with reality. With that said, I'm still open to having my mind changed. I think meteor [0] set out with a similar goal, if not more ambitious, and it doesn't appear to have done very well.

The limitations are pretty severe, since you're basically targeting the lowest common denominator. You cannot reduce the inherent complexity of the problem which these databases set out to solve without sacrificing functionality. My thoughts on this have been all over the place, but lately I've been leaning towards adopting fewer abstraction layers. At some point you'll be forced to actually understand each underlying system anyway, and by designing your data models with a specific database in mind you can leverage all of its features to maximum effect in order to achieve optimal performance.

It might be useful to review Django's ORM design for ideas and inspiration, as they also implement the data mapper pattern. You should consider copying Django's migration commands [1] as well.

The following refers mostly to server databases, but some of it can apply to client databases as well. You probably shouldn't be running migrations automatically, especially in production. We're all human and mistakes happen, but there are steps you can take to reduce their potential impact, if not eliminate them entirely within certain processes. Running migrations outside of peak hours reduces the chance you'll bump into performance problems and that it'll affect users. Always create a snapshot or backup before running migrations, data loss is never acceptable! When a user trusts you with their data it's your responsibility to handle it with immense care.

This tool doesn't help with the more challenging problems related to schema management. Zero-downtime migrations are the industry standard. There's a large set of common migration operations which require a full table lock unless they're written with deliberate care so as to avoid those pitfalls. Sever-side migrations must always be done in lock-step, with fully backwards- compatible code capable of handling both versions during a transition. Client- side applications are usually expected to remain largely fully compatible with both backwards and future changes.

[0] [https://www.meteor.com/](https://www.meteor.com/)

[1] [https://docs.djangoproject.com/en/2.1/topics/migrations/](https://docs.djangoproject.com/en/2.1/topics/migrations/)

<comment><USER3> You're absolutely right, and I'm coming from the same place. All the thought that has gone into this is a bit hard to condense into one article, but I've written this stuff with the same things in mind. (Also have been a Django, and South user for years.)

The first idea is to have the common denominator implemented, and then being able to access or translate things to lower-level operations. Because even though there may be very complex queries happening, a lot of queries are also quite simple, especially when you're starting out. The goal therefore is to minimize, not completely eliminate database-specific code. And even though best practices for data modeling may differ between databases, in the end you want to express and work on relationships between data, whether in SQL, MongoDB, Firebase or Neo4j. If you express your intentions correctly, your database should provide you with options to translate it to common best practices. (Like the decision to embed objects in MongoDB, or do manual cross- relationship queries for example.)

About schema management, this is the first tool I've seen that actually does begin to support you with the more complex issues of migrations (although it's definitely not finished.) Most framework come with a package deal of how you should run your migrations, meaning from their codebase. Storex generates an intermediate structure of what it's going to do during a migration, which you can then decide what to do with (generate an SQL script, run it directly from code, etc.) This structure is divided into 3 phases for now: preparation, data migration and finalizing (which is something I've never seen before.) Running the prepare phase adds new columns and tables, so the application servers can still access the database. The data migration stage defines what needs to be done, both forward and backwards, which you can also execute in multiple ways (e.g. set up a process that migrates both old and new requests to the new data format.) Then after upgrading your application servers to new code, you can execute the finalize stage to drop old columns, etc. (All of this should happen with monitoring tools and good operation procedures in place, so I'd recommend doing nothing totally automatically.)

Feel free to contact me or open an issue here [1] if you can think of a better way to structure migrations.

Of course you need to do a lot of work yourself still, but at least Storex doesn't fight you, but instead gives you the flexibility to implement your operations exactly the way you want.

Also for the client-server interactions, additional packages will be written to help with this. You're more than welcome to contribute your experience in issues or by contacting me directly to design this in way that accounts for the real-world challenges involved.

What you're saying in the end is also what I'm saying: creating a real-world application is more than just one mega abstraction, but a collection of problems that we need tools for that we can flexibly recombine to our highly individual needs.

[1] [https://github.com/WorldBrain/storex-schema- migrations](https://github.com/WorldBrain/storex-schema-migrations)</comment></comment>


Show HN: Too busy to meet old friends? - 100-xyz https://firstname.lastname@example.com <comment> 100-xyz Hi,

From my direct experience - Friends want to meet friends. But they don't. They are just too busy. Its difficult to find a common, convenient time. They try to coordinate for a couple of times and then give up.

This is an attempted solution.

This is my schedule shown as a test. Such a form will be sent to my personal friends once a week, so if any of them have a convenient time and want to meet, they can.

Comments, suggestions welcome

</comment><comment><AUTHOR> You need to add your logo at the top with a link to the main page.

The image of the private photo profile, where is it from?

Can you send alerts, like "John is free in two hour and at two miles away, do you want to meet him?"

I get a few neighbor contacts where I live (in Buenos Aires) I guess they are fake. I'm not sure what you can use to fill the map somehow. A not very bad option are the fast food restaurants. They are everywhere, we sometime meet there, if one of them sponsor you it would be huge. I'm not sure that this is a good idea.

<comment> 100-xyz Thanks for writing. I am not clear which profile photo you are referring to. Currently I am testing the page as a stand alone product.

The alert 'john is ...' is not appropriate for what I have in mind. What I am aiming at is a somewhat more planned meeting. My friend sees I am available next weekend, contacts me and we plan the meeting.

Appreciate your sponsorship idea though.

Thanks

<comment><AUTHOR> I tried to go to the main page. Some screenshots edited with Paintbrush. [https://imgur.com/a/nfSjaVm](https://imgur.com/a/nfSjaVm)

<comment> 100-xyz Oh I see. That just means that the user's settings are private and you cannot see them. :-)

</comment></comment></comment></comment><comment><USER2> I'm available

<comment> 100-xyz Can you elaborate?</comment></comment>


Nim Language Draws from Best of Python, Rust, Go, and Lisp - <AUTHOR> http://www.infoworld.com/article/3157745/application-development/nim-language-draws-from-best-of-python-rust-go-and-lisp.html <comment><USER2> Nim always looked to me as a modern version of OCaml made by someone who has no idea how to do static type systems properly. The language as a whole might have a nice feeling and convenient features, but the type system is really not good ... D's type system, at least, is better designed.

On the other hand, I always considered Rust as the result of an ML programmer looking at C++ and thinking "this is bullshit, I can do it cleaner".

I might have a very ML view of the programming world, but that's ok, most other people have an ALGOL/C view of it. ;)

<comment><USER3> yeah i have fever dreams of C and ML having some sort of super baby. rust and nim are close but not quite

<comment><USER4> some others worth checking out (all largely single-developer efforts):

[http://www.ats-lang.org/](http://www.ats-lang.org/) [ml + c + everything dialled up to eleven. linear and dependent types. comes out of academia, but under active development and slowly beginning to gather a community.]

[https://eigenstate.org/myrddin/](https://eigenstate.org/myrddin/) [not really familiar with this one but it looks interetsing. close to the metal, has pattern matching over algebraic datatypes but seems more towards the c than the ml end of the spectrum from the brief glance i took.]

[http://mythryl.org/](http://mythryl.org/) [never took off, sadly; i really liked the looks of this one and its ambitious goals. strong sml influence, with better posix integration and some c-like surface features. developer is currently battling cancer: [http://mythryl.org/pipermail/mythryl/2016-April/000942.html](http://mythryl.org/pipermail/mythryl/2016-April/000942.html)]

[http://felix-lang.org/](http://felix-lang.org/) [spawn of ml + c++ rather than ml + c. under enthusiastic if haphazard development.]

there have been a few others i've seen pop up over the years; i keep meaning to make a website or at least a github awesome-style list cataloguing and tracking them.

<comment><USER2> For all those propositions, I have only one question: Why would I use that instead of OCaml ?

OCaml is far from being perfect, but it has lot's of features and a decent community (especially compared to all those hobby/research languages).

OCaml can do pretty much anything except things like image processing and video game programming. I mostly don't care about those things, and if I did, I would use Rust.

Now, from a research point of view, sure, those languages are interesting.

<comment><USER4> i'm in the same boat - i keep an interested eye on developments in the ML- cross-C space, but so far none of them seems compelling to use over ocaml. however, if one of them had a cross-compiler as good as go's, that would be a killer feature. i would really like an ml-like language i could use to develop desktop apps and trivially deliver binaries for multiple platforms.

</comment></comment></comment></comment></comment><comment><USER5> The problem I have with Nim is that it misses the simplicity of Go and the extra safety at high performance of Rust. At least _I_ , _personally_ don't see the need for a middle-of-the-road language.

I wish them however the best of luck. Compiling down to C means being able to leverage a lot of mature tools, and if they manage to simplify a lot of the language they may rival Go for projects when you need high performance but desire to retain high productivity regardless of how big and diverse your dev team is.

<comment><USER6> If Nim continues at the same pace, it may displace Python.

It is "as fun as" Python to start with, it has the knobs that made python popular in many niches. It has official JS, C, C++ and Objective-C backends (with perfectly compatible and natively fast FFI in each case). It compiles down to small, efficient executables like Go does.

It has some of the best metaprogramming facilities (in a non-lisp language), which makes it possible to introduce "source native" notation for e.g. XML and JSON.

It also has an LLVM backend, though it is not yet complete.

Nim is a big and complicated language, but so is Python. The size of a language itself is not a problem, as Python shows. Unlike C++, you don't have to be familiar with every small metaclass/descriptor/base-class-lookup issue to use the language. I believe Nim shares Python's "it's ok to ignore the details until you need them" feature.

<comment><USER7> > If Nim continues at the same pace, it may displace Python.

Um, no.

Look at how long it took Python to displace Perl. And Perl was actively shooting itself in the brain for _years_ or that probably wouldn't have happened.

Python is far more embedded in certain areas now than Perl ever was.

<comment><USER8> Even python (3) is struggling to replace python (2).

</comment></comment></comment></comment><comment><USER9> I don't see the appeal of Nim. We have the choice of C++14, Rust and Go for well supported robust languages with different focuses. C++14 has the best execution performance, Rust is the most safe and it seems likely go tries to be the simplest. What does Nim do better than any of these?

Presuming it does do anything better than those learning Nim is hard because the examples are stale and the documentation lacking. I don't mean just the official docs, which might be great, but where are all the answers on SO and community made books or tutorials.

<comment><USER10> C++ and Rust don't have garbage collection, Go's type system is very simplistic. Obviously, depending on what you do, this can be either an advantage or a disadvantage. My point is that there are clear differentiating factors.

The closest competitor for Nim is probably D, not any of the languages you name.

<comment><USER9> The article seemed to describe a high speed native language with garbage collection. I guess that does seem similar to D, but D is much closer to any of the languages I listed with more than 15 years of development and a much smaller list of breaking changes. It also isn't anywhere near as popular as the three I mentioned.

Why does Nim get the attention that D does not? I think Nim only gets attention around here because its new and not because it brings anything directly useful. As long as it is still "new" there is still so much potential.

As for garbage collection, I think you are overestimating its value. There are great resource management schemes in both Rust and C++, and they can each manage much more than just memory. I am only qualified to speak in detail on C++, but if you simply avoid the "new" operator and automatically allocate everything (some say stack allocate), which is the default, then everything is cleaned up for you automatically.

Further down the garbage collection route, if your app doesn't need performance then why not stick with Ruby, Javascript or Python, they are all well supported and provide tons of flexibility and libraries. If you need performance, why settle for have measures why not go for C++, Rust or one of the blazing fast fully native languages without GC (even one of the really fast ones with GC like Haskell or Java)? I see the space between them filling up with a ton of languages that seem hard to distinguish. Nim looks like just another, piling into this gap that swallows otherwise decent languages like D, cyclone, darkbasic, pascal, and .Net language that isn't C# and so many other languages that I cannot count them.

<comment><USER10> > The article seemed to describe a high speed native language with garbage > collection. I guess that does seem similar to D, but D is much closer to any > of the languages I listed with more than 15 years of development and a much > smaller list of breaking changes. It also isn't anywhere near as popular as > the three I mentioned.

Well, when you compare languages, you usually do it by feature set. Both Nim and D are statically typed, garbage collected, imperative languages with first-class metaprogramming features.

I'll also add that Nim has also about 9 years of development behind it. It's older than you think.

> Why does Nim get the attention that D does not? I think Nim only gets > attention around here because its new and not because it brings anything > directly useful. As long as it is still "new" there is still so much > potential.

I see both Nim and D getting comparable attention. They both aren't mainstream languages, so coverage is mostly by enthusiasts and intermittent. People are interested because both are sufficiently different from mainstream languages, not because they suddenly plan to bet their careers on them.

> As for garbage collection, I think you are overestimating its value. There > are great resource management schemes in both Rust and C++, and they can > each manage much more than just memory. I am only qualified to speak in > detail on C++, but if you simply avoid the "new" operator and automatically > allocate everything (some say stack allocate), which is the default, then > everything is cleaned up for you automatically.

This would be a long debate. Suffice it to say that for many people the benefit of avoiding GC is unclear. Both C++ and Rust manage shared ownership poorly (i.e. it being inefficient, leading to lots of syntactic noise, or both). Note also that I'm not saying that GC is always better, but that it's a differentiating feature.

As for resource management, RAII in my experience is primarily the consequence of poor support for higher order functions or equivalent functionality in a language. (The type of resource management that RAII facilitates is usually better done through higher order functions or a sufficiently expressive macro [1] system.)

> Further down the garbage collection route, if your app doesn't need > performance then why not stick with Ruby, Javascript or Python, they are all > well supported and provide tons of flexibility and libraries.

You seem to be have some serious misunderstandings about garbage collection. No, GC is not per se a performance drain, and adding the two orders of magnitude overhead that a typical bytecode interpreter for a dynamically typed language induces is not even in the same ballpark for even poorly implemented GC.

[1] And by macros I don't mean C/C++ preprocessor macros, but macros that are properly integrated in the language and its type system, such as in LISP, Nim, D, or Rust.

<comment><USER11> >Both C++ and Rust manage shared ownership poorly

Both C++ and rust encourage exclusive ownership. And that's a good thing.

> RAII in my experience is primarily the consequence of poor support for > higher order functions or equivalent functionality in a language.

HOF tie resources to lexical scope; RAII ties them to object lifetimes, recursively. In turn lifetimes may be bound to a lexical scope, but often is not the case.

<comment><USER10> > Both C++ and rust encourage exclusive ownership. And that's a good thing.

It's not. It makes lots of important things unnecessarily hard and often leads to unnecessary copying [1]. It makes it hard to even do something like OCaml's List.filter and Array.filter properly. It gets in the way of doing functional data structures (ex: binary decision diagrams). Lots of common design patterns also require shared ownership.

> HOF tie resources to lexical scope; RAII ties them to object lifetimes, > recursively. In turn lifetimes may be bound to a lexical scope, but often is > not the case.

No, higher order functions don't per se tie resource management to lexical scope (though that's the easiest application). You can build an entire transactional model on top of higher order functions.

Second, tying resource management to object lifetime is dangerous, as object lifetime can exceed the intended life of a resource (ex: closures, storing debugging information on the heap).

Third, RAII is in practice little more powerful than lexical scoping. RAII works poorly for global variables (problems with initialization/destruction order) and thus is in practice limited to automatic and heap storage. Using heap storage leads to the aforementioned problems, where object lifetime can become unpredictable.

[1] [https://news.ycombinator.com/item?id=8704318](https://news.ycombinator.com/item?id=8704318)

<comment><USER11> >It makes lots of important things unnecessarily hard and often leads to unnecessary copying [1]

If you read the article referenced by that thread you'll see that a major issue with string copying is due to having a lot of bad interfaces taking raw C pointers so code at both side of the ibterface need to make copies exactly because the raw C pointer doesn't guarantee exclusive ownership. The remaining issues are due to a badly optimized string buider in Chrome and failure of pre-reserving vector memory which lead to many copies on resize. This last issue is fixed with move semantics in c++11.

>It makes it hard to even do something like OCaml's List.filter and Array.filter

Std::remove_if works genrically on any range. Boost (and the range TR) provides iterator views when you need lazy evaluation.

> You can build an entire transactional model on top of higher order > functions.

I'm sure you can, in the end you can implement anything manually. With RAII propagation of lifetimes is done automatically by the compiler.

>Using heap storage leads to the aforementioned problems, where object lifetime can become unpredictable.

Only if you use shared ownership. Otherwise is completely predictable.

<comment><USER10> > If you read the article referenced by that thread you'll see that a major > issue with string copying is due to having a lot of bad interfaces taking > raw C pointers so code at both side of the ibterface need to make copies > exactly because the raw C pointer doesn't guarantee exclusive ownership. The > remaining issues are due to a badly optimized string buider in Chrome and > failure of pre-reserving vector memory which lead to many copies on resize. > This last issue is fixed with move semantics in c++11.

The point is that something like:

      List.filter (fun s -> String.length s > 0) list

simply cannot be done efficiently, because you require either copying or shared ownership for the strings. This also occurs naturally in a number of other situations, such as storing strings in objects.

> Std::remove_if works genrically on any range. Boost (and the range TR) > provides iterator views when you need lazy evaluation.

std::remove_if is destructive. Iterators are not the same thing as a functional filter operation.

> I'm sure you can, in the end you can implement anything manually.

The point here is that a transactional system is more powerful than RAII.

> Only if you use shared ownership. Otherwise is completely predictable.

If you don't use shared ownership, then you're basically limited to lexical scoping.

<comment><USER12> >> The point is that something like: List.filter (fun s -> String.length s > 0) list simply cannot be done efficiently, because you require either copying or shared ownership for the strings. This also occurs naturally in a number of other situations, such as storing strings in objects.

This is a _very salient_ point. It bounced around in my brain a couple of hours before I came back to comment.

How often do you need to control memory layout and management so you get the absolute best performance? Compare that to how often you need to express filters.

For me, there's no doubt that expressing functional logic and having it be decently efficient is the most important need.

This little example of yours illustrates that a well-designed garbage- collected language has a HUGE advantage over RAII. I may be slow on the uptake, but this is the first time I've seen it that way.

<comment><USER11> Filters are used all the time in C++.

* If the filtered result is used locally in a function (and then thrown away), a filtered view works just fine, is very cheap, efficient and is lazy (nice if you only consume a subset of it).

* Often only the filtered view is used, so you can destructively modify the original list, so no copies.

* If you need both the original list and the the filtered list, in a functional language you need to allocate new cons cells anyway. The cost of allocating, modifying and touching the new memory is going to dominate except for very long strings, so copying is not an issue.

Of course in C++ lists are frowned upon in the first place (as many algorithms can handle any data structure transparently), while they are kind of central in many functional languages.

There are cases of course where frictionless shared ownership is nice and GC shines. Filter is not one of them.

<comment><USER10> > Filters are used all the time in C++.

The problem is that you need a vastly more complex machinery to cover all the various ways to avoid copying/reference counting and then still don't have a general solution when you can't avoid multiple ownership (unless you count std::shared_ptr with its very high overhead).

As I said before, it's not that you can't do it, it's that there are costs associated with it.

> If you need both the original list and the the filtered list, in a > functional language you need to allocate new cons cells anyway.

You can filter arrays also and allocating cons cells for a list is pretty cheap with a modern GC, as discussed before.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> There's also a lot of Modula-3 in there. Actually, the whole language is full of Pascal-isms, but I'm not sure how many come directly from Pascal and how many come via Modula-3.

</comment><comment><USER14> But Wikipedia editors decided it is not notable, and speedy deleted it under Nimrod.

After that debacle, Wikipedia decided Nim is finally good enough for them, and they even link now Nimrod_(programming_language) to [https://en.wikipedia.org/wiki/Nim_(programming_language)](https://en.wikipedia.org/wiki/Nim_\(programming_language\))

</comment><comment><USER15> I don't know about Nim, but Infoworld is a pile of garbage.</comment>


Ask HN: Is going to conferences as a freelancer worth it? - good-idea Without an employer to sponsor a pass, the price of many conferences is fairly inhibiting. When I can watch the videos after the event, the idea of spending that kind of money to be there in-person doesn't really add up.
The networking aspect is attractive - but I imagine that these kind of connections would be more valuable to those in the startup / "salaried" landscape.
If you're a freelancer and have gone to a tech conference, what has your experience been like? Did you feel like it was it worth it?
In my case, I'm thinking about attending the GraphQL Summit later this year. My clients tend to be small businesses or early stage startups that are looking to put together an MVP - not necessarily the kind of people you'd meet while discussing the architecture of your API. <comment><AUTHOR> I would say it's worth it. It's an opportunity to learn and connect with the right people. The only tweak I suggest is introduce yourself as a business owner not a freelancer even if you are flying solo.

You can easily start an internet company within few days with stripe atlas: [https://stripe.com/atlas](https://stripe.com/atlas)

</comment><comment><USER2> From personal experience I'd say it's 100% worth it for the networking alone (as long as you are open, willing, and able to actually do it authentically), not to mention the knowledge gained from the speakers.

Over the years I've earned easily 10x in contracts what I spent on tickets, airfare, and hotels/transportation/food across all events, not to mention gaining new friends, colleagues, and industry connections. I highly recommend finding the right conference(s) and hitting them as often as you can, even if it's just once every few years.

But don't limit yourself to just the big conferences, either. Finding the right Meetups and smaller venues and groups can be just as valuable. You'll get as much out of them as you put into them.

</comment><comment><USER3> I've gone to conferences as a startup owner, where part of the cost was subsidized by government. They were fun but not very helpful. I've met a lot of people who were excited and wanted to close a deal, but kept dragging it out until I took it for a polite rejection.</comment>


Image Fulgurator: add messages on pictures taken by the others - <AUTHOR> http://www.juliusvonbismarck.com/bank/index.php?/projects/image-fulgurator/

<comment><USER2> Imagine pointing that device at a president. I wonder how long that would last. =)

<comment><AUTHOR> They did it in Germany with Obama: [http://www.juliusvonbismarck.com/fulgurator/bilder/obama- ful...](http://www.juliusvonbismarck.com/fulgurator/bilder/obama- fulgurator.jpg)

<comment><USER2> Aha, the cross! Well, then it's safe! =)

</comment></comment></comment><comment><USER3> Oh my god that could be so fun! You could really fuck with people with one of those!</comment>


Half-Life 2 Performance: Mac vs PC - <AUTHOR> http://themacgamer.com/2010/05/28/half-life-2-performance-mac-vs-pc/

<comment><USER2> To be fair, this was written two years ago before Apple updated some of their graphic drivers. It's much better now than when this article was written, but it's still noticeably behind Windows.

</comment><comment><AUTHOR> Sorry everyone, didn't notice it was written two years ago :(

</comment><comment><USER3> Is there some sort of update on how things have progressed in the two years since this was written?</comment>


The History of .NET [video] - <AUTHOR> https://vimeo.com/239969756 <comment><USER2> There's quite a bit factually wrong with this presentation, some of which is flagrant enough that I have to assume it's intentional.

For one thing, Bill Gates is pictured in his deposition for _US v. Microsoft_ with David Boies, not "US Senators".

For another, Windows 2000 is described as being released contemporaneously with Intel's Pentium, when they appeared nearly 7 years apart.

There's also a very strange take on _US v. Microsoft_ generally. If you actually watch Bill Gates' deposition (recommended!) it's clear that the focus of the government's case was alleged attempts to use the dominance of Windows to crush Sun's Java and Netscape's Navigator, not undocumented APIs as the speaker claims.

And the description of the collapse of Longhorn is odd. I've never before heard the theory that the team was inadequately resourced due to the requirements of Windows XP SP2. Also an interesting take that Vista only got poor reviews because it was released too early in order to meet enterprise contract commitments.

Finally, I have to question a supposedly insider history of .NET that isn't rich enough in detail to include "COOL".

</comment><comment><USER3> Youtube version (NDC Sydney 2017): [https://www.youtube.com/watch?v=IqWar6cEWsA](https://www.youtube.com/watch?v=IqWar6cEWsA)

Also a more recent one from NDC London Jan 2018: [https://www.youtube.com/watch?v=trHTLFNFoWk](https://www.youtube.com/watch?v=trHTLFNFoWk)

<comment><USER4> That channel is chock full of good content:

[https://www.youtube.com/channel/UCTdw38Cw6jcm0atBPA39a0Q/vid...](https://www.youtube.com/channel/UCTdw38Cw6jcm0atBPA39a0Q/videos)

</comment></comment><comment><USER5> If you enjoyed this talk, you might enjoy his (and Carl Franklin's) podcast Dotnet Rocks: [https://www.dotnetrocks.com/](https://www.dotnetrocks.com/)

<comment><USER6> Blimey, that's a blast from the past - I used to listen to that on my commute to my first .NET job out of university in 2002/3\. Impressive run.

<comment><USER7> To be honest it has sort of moved on from .net. The podcast is mostly about cloud, javascript frameworks, technologies and soft skills these days. The geek outs are the highlight in my opinion.

</comment></comment></comment><comment><USER8> This video can be called "Microsoft the Good Parts". Also WPF gets only one mention and the future is Azure? So is WPF heading the way of Silverlight?

On a side note, I wasn't aware that the agreement with the US government was meant to expire after ten years. Is it a coincidence that right after that we got the Windows Store push?

<comment><USER9> > So is WPF heading the way of Silverlight?

Yes and no. WPF has a long security support lifetime ahead of it (much longer than Silverlight got), but the present is and has been the UWP XAML stack with all new feature investment going to it (where both .NET and C/C++/"native" code may take advantage of it).

(For what it is worth, to go ahead and answer some of the FAQ: With .NET Standard 2.0 the migration story from WPF to UWP XAML is the best it has ever been. UWP apps _don 't_ have to Store published and sideloading has been on by default and as easy [if not easier] than Android APK/Windows MSI installation for more than a year now. UWP apps can contain classic Win32 desktop apps using the "Centennial" Desktop Bridge and even communicate with those parts for an eventual/piecemeal migration strategy.)

</comment></comment><comment><USER10> The mark of a good speaker is one who can hold an audience's attention. This man, is a very good speaker.

<comment><USER11> Yeah I don't know why I just watched all that.

</comment></comment><comment><USER12> I saw this talk last September in Sweden, at DevIntersection Europe. Campbell is a really good speaker and I really enjoy listening to his podcast dot net rocks. Try it if you haven't!

</comment><comment><USER13> I attended this same talk last month at NDC London. Very interesting talk with lots of little details, and a brilliant speaker.

</comment><comment><USER14> Nitpick: the javascript engine of firefox is spidermonkey, not nitro.</comment>


Backbone.js and ember.js good read - <AUTHOR> https://raw.github.com/gist/1732351/394300e27f56afd4f49476df79f7c90284f03d27/backbone-ember-back-and-forth-transcript.txt

<comment><USER2> I once heard that whenever wycats is at a conference, he's the only one that gets to ask any questions :P

I'd like to see a three-way free-for-all if DHH ended up stuck in the same room as them two (wycats & jashkenas). That would be amusing.

<comment><USER3> Sat next to him at RubyConfBR in 09 before he gave his talk and don't remember him being aggressive with the questions (and this is coming from the guy that Obi Fernandez called out as "Mr. Question" after his keynote there the year before.)

While I agree that it would be interesting, it would also be a classic TIMTOWTDI debate.

At the end of the day, Backbone.js and Ember.js are two tools, with two different philosophies that leads to a different set of features that are good for different things. That may appear to be a vague statement, but that's pretty much the case here.

Ember.js is a better tool out of the box for a narrower range of problems because it comes with a bit more features that solve some common annoyances that wycats found with backbone.js. Backbone.js is a better tool for a wider range of use cases precisely because it prescribes less in areas where you will find that a pre described way of doing things will get you into trouble.

From what I understand, if you are trying to make an advanced _website_ with rich interactivity, ember.js may be the better choice for you, and if you are trying to create a full-blown web _app_ , the flexibility of backbone.js will give you just what you need and get out of your way when you need something else. YMMV

Disclaimer: I've been using backbone since late 2009.

</comment></comment><comment><USER3> Well, it looks like I showed up right at the beginning of that conversation and not in the middle of it (when jashkenas says the part about the strawman). I kind of assumed that I had walked right into the middle of it.</comment>


The Guardian — Firestorm: The story of the bushfire at Dunalley - <AUTHOR> http://www.guardian.co.uk/world/interactive/2013/may/26/firestorm-bushfire-dunalley-holmes-family

<comment><USER2> [http://www.nytimes.com/projects/2012/snow- fall/#/?part=tunne...](http://www.nytimes.com/projects/2012/snow- fall/#/?part=tunnel-creek)

This has similar presentation, and makes for great story telling, especially dramatic stories.</comment>


Ask HN: First time in PyCon, recommendations? - <AUTHOR> Hi everyone,
I'm in PyCon for the first time (and first developer conference), and I'm curious as to what is the best way to take advantage of a conference like PyCon and this conference in specific.
Also, if any of you are interested in meeting I'll be happy to share a beer or two. <comment><USER2> A few days late with this, though I hope your first PyCon was a success.

One of the presenters, Al Sweigart, wrote a post about getting the most out of PyCon: "How to Do PyCon (or any tech conference)" [0].

The biggest takeaways are to meet strangers / community members and find a way to connect with them. I keep a Twitter list [1] for this and you can subscribe to it too.

[0]: [https://automatetheboringstuff.com/how-to-do-pycon-or-any- te...](https://automatetheboringstuff.com/how-to-do-pycon-or-any-tech- conference/) [1]: [https://twitter.com/kicksopenminds/lists/pycon-2016](https://twitter.com/kicksopenminds/lists/pycon-2016)</comment>