Gaming News

The Sounds of The Legend of Zelda: Breath of the Wild
Posted on Tuesday, April 25th, 2017

The Sounds of The Legend of Zelda: Breath of the Wild

The Legend of Zelda: Breath of the Wild is Nintendo’s latest and greatest Zelda success story, and as with the previous titles, this one’s audio design is truly superb. The different sounds you hear in Zelda: Breath of the Wild can greatly affect how you play the game, and by listening carefully, you can get a greater appreciation for this masterpiece, and also improve your gaming experience!

Investigating React Native
Posted on Tuesday, April 25th, 2017

Investigating React Native

On the Twitch mobile team, we care a lot about making sure we use the best tools available to build our apps. React Native is a topic that came up a lot internally, but unfortunately none of us on the team really understood the pros and cons of the framework.

With the blessing of my team, I spent a week using, reading about, and testing React Native on Android. I built a fairly simple Twitch client in React Native, hooked in custom native components that aren’t provided directly by React Native, and then investigated the costs of integrating React Native into a pre-existing, fully native app.

How does React Native work?

First, I think there is a lot of misconceptions on what React Native actually is. It specifically is not a glorified webview. React Native works by spinning up a Javascript thread that interprets Javascript code, communicating with native components under the hood. For example:

This is Javascript code that is interpreted and converted into an Android TextView. Likewise, If you create a button in React Native, it internally creates an Android view. When the Android view is clicked, it forwards the click from native code to Javascript.

What I liked

React as a paradigm for front-end development

React’s approach to writing UI feels great to use. Instead of manipulating views with imperative setters, UI is simply a function of state in React. Whenever you modify the internal state of a React component, React triggers a render() call onto the component. This is an incredibly simple approach to UI development that feels great to use. It makes it very easy to reason about your UI — it’s all right there, clearly declared in a render() function.

Live reload

One of the coolest features about React Native development is live reloading. As soon as you save a Javascript file, React repackages the Javascript bundle and ships it to the device, displaying the change immediately without recompiling the apk. The iteration loop in React Native is insanely fast compared to native. Building UI in Android is oftentimes a nonstop loop of trial and error, tweaking values ever so slightly. Instead of waiting 10+ seconds every single time for your apk to recompile, changes appear immediately.

Learn once, write everywhere

After spending a week writing React Native, I strongly believe that “Learn once, write everywhere” holds true. Once you learn the principles for building a React app, you basically can jump into any React code base. I spent some amount of time reading over our React mobile web codebase, and feel comfortable in saying I understand it and could contribute to it today. Similarly, I bet I could easily contribute to an iOS React Native codebase today.

On reusability, it seems fairly trivial to share logic between React code bases. While you sometimes need to dive into Android or iOS native code or write Android/iOS specific modules, the majority of Javascript code should be easily shared.

What I disliked

Cryptic errors

Error messages from React Native were often very confusing. I can’t count the number of times I would modify a file and run the app on my phone only to see some cryptic error message. Errors would appear with stack traces that go through React Native internals, giving me no insight into what I actually broke. For example: importing a custom module with a typo gave me this error. No guidance other than to check my outermost render method.

Immature platform

React Native feels like an immature platform. While React Native provides many components out of the box, a lot was missing. I could not find (excluding third party libraries) built-in ways to show checkboxes, spinners, video players, etc. Many tools we use at Twitch, such as Fabric for crash reporting, did not have official React Native support.

On top of this, things just don’t feel stable. The docs reference the Navigation component for navigating screens, but I later learned after implementing it that this was basically deprecated in favor of react-navigation! Finally, while I certainly did not experience this in my one week using the platform, I read many concerns of React Native’s release to release stability.

A big thing to realize is that React Native isn’t just an SDK or a library you are adding. It’s an entire platform on which you build your app. You are very heavily tied to React Native and very reliant Facebook’s continued support and development of React Native. For a platform that feels immature, this is a hard pill to swallow.

Android as a second class citizen

React Native was built for iOS first, and it shows. The documentation has many statements like: “This section will be updated shortly showing an integration into a more real world application such as the 2048 app that was used for Objective-C and Swift.” As an Android developer, this was disheartening.

The Multiple Repos problem

In order to truly reap the benefits of code sharing between Android/iOS with React Native, the two apps need to share a codebase. This is only a problem if you want to integrate into pre-existing Android and iOS apps, but merging an Android and iOS codebases isn’t exactly an easy feat. At Twitch, because our native Android and iOS apps have separate teams and processes, this would completely disturb how we handle continuous integration, code review, tagging release, etc. There are ways to get around this though. This tech talk explains how Airbnb encountered and hacked around the problem.

Performance

One big worry my team had about React Native is the performance cost. React Native runs on a single Javascript thread, and if it ever gets backed up your UI will suffer as a result. While writing my simple test app, I didn’t really run into performance issues on my Pixel. Unfortunately, when I tried to use some lower end devices, I could never get React Native to actually run. All of my pre-5.0 devices would fail to launch with a “Could not get BatchedBridge” error (see: cryptic errors). I spent some time googling and trying various solutions, but none of them worked for me.

Still though, just reading online about performance is a bit worrying. One common theme I’ve found is that for performance heavy work, companies are having to shunt the work to native. See here and here. For an app like Twitch (live playback, fast chat, inline playback within content directories), the performance considerations are very important. I particularly worry about missing multithreading and true memory management. On custom native components, it was actually pretty easy to create one myself (the documentation is pretty sparse though). This means though that in order to get the most out of React Native, you probably will need to be proficient in native development to begin with, which seems to circumvent some of the value proposition of the platform to begin with.

Javascript

It’s Javascript. Losing type safety, compile time errors, having to deal with the insanity of this binding, etc was really painful for a week. I know that I personally started mobile development specifically to avoid Javascript. If you have a team of native developers already, I worry that it would hard to convince them to all want to learn use Javascript all over again. Of course, you could mitigate these concerns with something like Flow or Typescript (our mobile web team uses Typescript).

Integration into an existing app

Finally, one of the big questions I had was how hard would it be to integrate pieces of React Native into our pre-existing Twitch app? You should be able to have a React Native activity intermixed with standard activities. Here are some of the issues I ran into:

  • React Native only ships 32 bit binaries. There has been an open issue for this since 2015. In practice, that means all libraries that have 64 bit binaries have to be stripped of their 64 bit binaries because you cannot use a mix of 32 and 64 bit binaries.
  • React Native is dependent on deprecated tools. For example, you have to set android.useDeprecatedNdk=true in order to use React Native.
  • Following the guide for how to integrate React Native into an existing app did not work for me! Getting the Twitch app to build with a custom React Native Activity was an exercise in frustration. Even after sorting out the above two issues, I kept getting “BatchedBridge” errors. I googled and tried various solutions fruitlessly.
  • This is certainly the road less traveled. It was far harder to look up information online about integrating React Native into an existing app versus a brand new one.

I eventually admitted defeat and gave up trying to integrate React Native into the Twitch app with my limited time. Instead, I opted to create a test Android app and integrate React Native into that. This was far easier to do and at least gave me confidence I could eventually add React Native to the Twitch app if given enough time.

One important open question though is that, out of the box, React Native is designed to only be used within Activities. And while fragments are a contentious topic in the Android community, there is no documentation for how to integrate React Native with fragments (there is an open PR for this).

Finally, I worry about the costs of sharing state between native code and React Native. You can create native modules to do so, but this adds yet another layer of code that developers have to worry about maintaining.

Conclusion

If I were to make an app from scratch that needed to be cross platform with little performance concerns, I’d very likely choose to use React Native. My cons list was larger than my pros list, but I really cannot emphasize enough how great the React model felt to use. My biggest concerns though are that consistently, it feels like React Native isn’t quite there yet.

We decided that React Native isn’t something we wanted to integrate into the Twitch mobile apps today. React Native is at it’s strongest when you start an app from scratch with it. Rewriting our mobile apps from the ground up isn’t something we really want to do, so the only option would be to add pieces of React Native into our apps. And for the various reasons mentioned above, it just doesn’t seem worth it for us to do so. I still remain very excited and hopeful for React Native in the future though, and many other companies have proven you can add React Native to large, pre-existing apps.


Investigating React Native was originally published in Twitch Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.

Notice: Crashing when visiting planets with Capital ships
Posted on Tuesday, April 25th, 2017

Notice: Crashing when visiting planets with Capital ships

Good evening everyone,

There have been a few reports so we just wanted to let you all know that we’re aware that a few of you are experiencing crashes when visiting planets with Capital ships near the surface. We have identified a fix for this and will be working to implement it as soon as possible. For now, you can avoid these crashes by staying away from the following planets until the fix has been implemented:-

* HIP 17225 – A1
* Maia – A 3 a
* Merope – 2a
* Merope – 5c
* Pleiades Sector AB-W b2-4 – 9a

GTA Online: Tiny Racers Out Now
Posted on Tuesday, April 25th, 2017

GTA Online: Tiny Racers Out Now

Reminisce about the good old days while you hysterically race to avoid bursting into flames in Tiny Racers, the new retro-styled Adversary Mode in GTA Online.

Tiny Racers channels the spirit of classic GTA titles with a shifting, bird’s-eye perspective designed to bring you a new flavor of vehicle combat. Up to four players can duke it out for the top spot across seven new courses with just one rule: Don’t blow up. Fall too far behind first place and your tiny car goes boom.

Scattered across the track are various power-ups ranging from Rockets and Bombs to light-wielding Shotaros and Special Vehicles. Making good use of these power-ups is key to closing the distance and avoiding a fiery doom. To celebrate the launch of Tiny Racers we’re currently awarding Double GTA$ & RP to all participants.

PLAY GTA ONLINE THIS WEEK TO BE ELIGIBLE FOR A TAX REFUND BONUS
Log in and play GTA Online on PS4, Xbox One or PC at any point between now and Sunday, April 30th to be eligible for a GTA$425K tax refund compliments of the San Andreas State Treasury Department, to be deposited in your Maze Bank account during the month of May.

Hardware News

The Sounds of The Legend of Zelda: Breath of the Wild
Posted on Tuesday, April 25th, 2017

The Sounds of The Legend of Zelda: Breath of the Wild

The Legend of Zelda: Breath of the Wild is Nintendo’s latest and greatest Zelda success story, and as with the previous titles, this one’s audio design is truly superb. The different sounds you hear in Zelda: Breath of the Wild can greatly affect how you play the game, and by listening carefully, you can get a greater appreciation for this masterpiece, and also improve your gaming experience!

Are you delivering maximum reliability in your large venue?
Posted on Tuesday, April 25th, 2017

Are you delivering maximum reliability in your large venue?

Are you delivering maximum reliability in your large venue?

BenQ Corporation

Your presentation is ready to go. You feel entirely prepared to walk into the venue you’re about to take on — whether it’s a packed university lecture hall, a busy conference center or an auditorium overflowing with guests.

But is your technology on that same level of readiness?

In a professional setting, reliability is key. Poor reliability can cause a series of issues, which lead to upset presenters and guests alike.

Logitech’s 2014 Share Buyback Program Expires; Company to Enter New Program
Posted on Tuesday, April 25th, 2017

Logitech’s 2014 Share Buyback Program Expires; Company to Enter New Program

Dateline City:
NEWARK, Calif. & LAUSANNE, Switzerland

NEWARK, Calif. & LAUSANNE, Switzerland–(BUSINESS WIRE)–Logitech International (SIX:LOGN) (Nasdaq:LOGI) today announced that, as
of April 24, 2017, the Company’s three-year share buyback program,
initiated in April 2014, expired. During the three years of the 2014
share buyback program, the Company repurchased 9,112,417 of its shares.
Details of Logitech’s share repurchase history can be found on the
Company’s website at http://ir.logitech.com.

Language:
English

Contact:

Logitech International
Ben Lu
Vice President, Investor Relations – USA
510-713-5568
or
Krista Todd
Vice President, External Communications – USA
510-713-5834
or
Ben Starkie
Corporate Communications – Europe
+41 (0) 79-292-3499

Ticker Slug:
Ticker:
LOGI

Exchange:
NASDAQ

Ticker:
LOGN

Exchange:
SWX

read more