-
Posts
1,321 -
Joined
-
Last visited
Never
Everything posted by Samsung Newsroom
-
Asynchronous coding is essential for writing responsive and efficient programs. However, writing good asynchronous code is often not easy. Some bad asynchronous code even leads to hard-to-diagnose problems like deadlocks. In this article, I'll explain a few basic concepts of asynchronous coding in C# and some common practices in Tizen applications. How is asynchronous coding different from multi-threading? Asynchronous coding allows a program to run multiple tasks at once without blocking a specific thread. However, this does not necessarily mean that another thread is created. For example, if a program started a Task on the main thread to read some large data from the storage, the program can still do something else on that thread until the data are fully read. You may think async code seems a little like multithreaded code. After all, many methods could be executing at the same time in both. In reality, async programming can be used together with singular or multithreaded applications. This means you can have a single-threaded async program, where one thread can run concurrent tasks. Conversely, you can also have a multi-threaded async application, where multiple threads can each run multiple concurrent tasks. Leslie Richardson - How Do I Think About Async Code?! I'll show you what really happens with this simple code: static void Main() { AsyncContext.Run(Start); } static async Task Start() { var task = DoSomethingAsync(); Thread.Sleep(1000); await task; Thread.Sleep(1000); } static async Task DoSomethingAsync() { await Task.Delay(1000); } Don't worry about AsyncContext.Run. It's used to make this console program have a UI app-like nature. This program is single-threaded, but runs two concurrent tasks at once: running an async Task (DoSomethingAsync) for a second and doing some other computation (Thread.Sleep) for a second. After the Task finishes, it again does some computation (Thread.Sleep) for a second. As shown in the below trace, the program only takes two seconds to finish and everything happens in a single thread. Notice that the two Thread.Sleep calls have different callstacks although they have the same caller (Start) in the code. This is because the compiler internally deconstructs and transforms the async method into an async state machine at compile time. (You don't have to learn the details right now.) When should I use async code? There are three major types of asynchronous operations. You have to identify which one of these fits your need. 1. I/O-bound work When you perform an I/O operation (such as sending a network request or reading a large file from disk), you don't want the whole application UI to freeze until the operation finishes. The await keyword in the following example allows the caller thread to do other work (such as handling UI events) while the network operation is in progress. There is no need to create a thread. button.Clicked += async (s, e) => { var result = await httpClient.GetStringAsync(requestUri); label.Text = result; }; Note: Although you don't typically need threading for I/O-bound work, you may sometimes have to use synchronous APIs which do not natively support asynchronous operations (for example, DataContractSerializer.WriteObject). In that case, a sync API can be wrapped into an async API using a background thread (or preferably, re-implement the async API). For how to use a background thread, read the next section. 2. CPU-bound work A background thread can be used if you don't want a specific thread to be occupied by a heavy computational job for a long time. This type of concurrency is also called parallelism or multi-threading. You can generally use Task.Run to offload work to a background thread in most cases. Consider you have a large JSON text that requires a noticeable amount of time to be deserialized. The following example parses a JSON string into an instance of Book class on a thread pool thread. Without Task.Run, you experience an uncomfortable delay when pressing the button because the operation blocks the UI thread. button.Clicked += async (s, e) => { var book = await Task.Run(() => { return JsonSerializer.Deserialize<Book>(jsonString); }); label.Text = book.Title; }; 3. UI transitions This is the most common scenario where a developer encounters an async Task for the first time when developing a UI application. In Xamarin.Forms, most page transitions (such as NavigationPage.PushAsync) and animations have a return type of Task, which means that the operations are done asynchronously. Similarly to the I/O-bound scenario, you can simply use the async and await keywords to wait for the Task completion. button.Clicked += async (s, e) => { await Navigation.PushAsync(page); }; Notice that the await expression has no return value. You might think that you can just call Navigation.PushAsync without the async and await keywords (it's syntactically correct). However, not properly waiting for a Task returned by an asynchronous method is not safe. I'll explain why in the next chapter. Important principles Badly written asynchronous code is an evil. Keep the following principles in mind when you write any asynchronous code. 1. Avoid async void As described in many other articles, you should always avoid using async void methods in your code. The main reason is their unique exception handling semantics. Any exception thrown by the async void methods cannot be caught by their callers and always crashes the process. Async/Await - Best Practices in Asynchronous Programming: Avoid Async Void by Stephen Cleary Asynchronous Programming: Async void by David Fowler Removing async void by John Thiriet There are only three exceptions when you can use async void. Otherwise, all async methods should return Tasks which can be awaited by their callers. App lifecycle methods (OnCreate, OnStart, etc.) Event handlers Commands (ICommand implementations) Caution: Just changing the signature of the method from async void to async Task (and not waiting for the returned Task) makes the problem even worse. Any exception thrown by the unawaited Task is silently ignored (actually, it's captured within the Task's Exception property). The following code doesn't raise an exception, but is not safe. public async Task DoSomethingAsync() { await Task.Delay(1000); throw new Exception(); } button.Clicked += (s, e) => { _ = DoSomethingAsync(); // Discard the result }; The above pattern is also referred to as fire-and-forget. Use this pattern only if you don't really care about the Task's result. Consider using an extension method to enable structured error logging. 2. Avoid .Result and .Wait() It is sometimes tempting to use Task.Result or Task.Wait to synchronously wait for Task completion without having to use async/await. Never use them because they can lead to immediate deadlocks when used in UI applications. Blocking a thread for a background task (sync-over-async) is always a bad idea. Don't Block on Async Code by Stephen Cleary Asynchronous Programming: Avoid using Task.Result and Task.Wait by David Fowler Async/Await - Best Practices in Asynchronous Programming: Async All the Way by Stephen Cleary The best solution is to use async and await. The problem usually arises when a developer wants to change only a small part of their application and 'hide' asynchronous operations from the rest of the code. However, switching from sync to async often requires significant changes in your application. For example, you may have to implement a new INotifyPropertyChanged-based type to visualize the progress and the result of the currently running asynchronous operation. If the callee is a pure library method which knows nothing about the app UI, you can make use of .ConfigureAwait(false) to enable synchronous calls to the method. Adding .ConfigureAwait(false) to every occurrence of await in the callee method prevents deadlocks. However, this is a dangerous practice and not generally recommended. Scenarios I have investigated some common patterns of using async code in Tizen applications. Some of them are listed below. 1. UI transitions Any UI transitions including animations and page navigations (.PushAsync, .PopAsync, .PopToRootAsync) should be awaited in Xamarin.Forms applications even though there is no extra work to do after the await expression. DON'T private void OnDismissButtonClicked(object s, EventArgs e) { Navigation.PopAsync(); } DO private async void OnDismissButtonClicked(object s, EventArgs e) { await Navigation.PopAsync(); } 2. Async Commands The ICommand interface is often used to define a data binding between a XAML file and a ViewModel in the MVVM architecture. Similar to an event handler, a Command can be constructed using an async void Action delegate. Make sure all exceptions are captured in the scope of the Command so as not to crash your application. public ICommand CheckForecastCommand = new Command(CheckForecast); private async void CheckForecast() { ... } Another approach is to implement a custom AsyncCommand class to visualize the Command's execution status using data binding. For more details, read the post Async Programming : Patterns for Asynchronous MVVM Applications: Commands. 3. Async constructors The await keyword cannot be used in constructors because they are synchronous. I've seen many developers using async void methods for asynchronous construction without considering the exact consequences. As stated above however, this kind of code should be avoided: DON'T private readonly SQLiteAsyncConnection _database; public RecordDatabase() { _database = new SQLiteAsyncConnection(PATH); InitializeAsync(); } private async void InitializeAsync() { await _database.CreateTableAsync<Record>(); } Instead, the factory pattern can be used to enable async construction. The caller should await the static method CreateAsync to instantiate this type. DO private readonly SQLiteAsyncConnection _database; public RecordDatabase() { _database = new SQLiteAsyncConnection(PATH); } private async Task<RecordDatabase> InitializeAsync() { await _database.CreateTableAsync<Record>(); return this; } public static Task<RecordDatabase> CreateAsync() { var instance = new RecordDatabase(); return instance.InitializeAsync(); } There are also other approaches. The AsyncLazy pattern is useful when the creation of an expensive resource can be delayed until it's actually needed. If the type is instantiated using data binding, you can implement the INotifyPropertyChanged interface to update the UI according to the status of the asynchronous initialization. For more details, see the post Async OOP 2: Constructors by Stephen Cleary. 4. Wrapping event-based APIs Many TizenFX APIs follow the Event-based Asynchronous Pattern (EAP). You may want to wrap some of these APIs into Task-based asynchronous calls using TaskCompletionSource to make your code more readable and easier to understand. A common example of this is asking users for privacy-related privileges using the PrivacyPrivilegeManager API. public async Task<bool> CheckPrivilege() { switch (PrivacyPrivilegeManager.CheckPermission(HEALTHINFO_PRIVILEGE)) { case CheckResult.Allow: return true; case CheckResult.Deny: return false; case CheckResult.Ask: if (!PrivacyPrivilegeManager.GetResponseContext(HEALTHINFO_PRIVILEGE).TryGetTarget(out var context)) return false; var tcs = new TaskCompletionSource<bool>(); context.ResponseFetched += (s, e) => { if (e.cause == CallCause.Answer) tcs.SetResult(e.result == RequestResult.AllowForever); else tcs.SetResult(false); }; PrivacyPrivilegeManager.RequestPermission(HEALTHINFO_PRIVILEGE); return await tcs.Task; default: return false; } } The ResponseFetched event is raised when there is a user response for PrivacyPrivilegeManager.RequestPermission. The wrapper Task is awaited until the result is set by the EventHandler associated with the event. You can also consider registering a CancellationToken to set a timeout for the Task. Advanced tips 1. Use .ConfigureAwait(false) for library code It is recommended to use .ConfigureAwait(false) for every await call in your (non-UI) library code. It prevents deadlocks when the code is accidentally called from a synchronous context in the user code. Tizen has its own SynchronizationContext-derived type (TizenSynchronizationContext) just as other platforms (such as WinForms and WPF) do. For more details, read the following articles. Why you should use ConfigureAwait(false) in your library code by Juan Don't Block on Async Code by Stephen Cleary ConfigureAwait FAQ by Stephen Toub 2. Run UI code on the UI thread When you manipulate the app UI in your code, make sure to do it on the UI thread. Otherwise, the code will not act as you expect. Your code runs on the UI thread unless you explicitly use a thread (Task.Run) or a non-default context (.ConfigureAwait(false)). For example, in the following code, the current SynchronizationContext is captured by the await keyword, and the code after await also runs on the same context. If you change Task.Delay(100) to Task.Delay(100).ConfigureAwait(false), the context is null and changing the button text has no effect. private async void OnButtonClicked(object sender, EventArgs e) { await Task.Delay(100); button.Text = "Clicked"; } The following code is incorrect because it tries to change the UI from a background (thread pool) thread. There is no SynchronizationContext for a thread pool thread. private void OnButtonClicked(object sender, EventArgs e) { Task.Run(() => { button.Text = "Clicked"; }); } In a Xamarin.Forms application with the MVVM architecture, it is generally possible to update ViewModels from non-UI threads. However, the better practice is to use Device.BeginInvokeOnMainThread to avoid any confusion. 3. TizenFX thread-safety TizenFX APIs are not generally meant to be thread-safe. If you call APIs which are not marked to be thread-safe simultaneously from different threads, they may lead to incorrect results or even deadlocks. For now, I recommend calling TizenFX APIs only from the main (UI) thread. Conclusion Although I've tried to provide as many details as possible, there are also other patterns you may face in real-world applications. If the above information is not sufficient to fit your need, you can find other materials on the web, including the pages I linked below. If you don't feel you fully understand all the concepts, simply note that you should try to complete your code first, and then polish it as you can. Even though your code doesn't meet the async standards, it should generally work for most cases. Asynchronous programming Task-based asynchronous programming C# Deadlocks in Depth - Part 2 by Michael Shpilt Understanding Async, Avoiding Deadlocks in C# by Eke Péter If you have any questions or feedback, please let me know at [email protected]. View the full blog at its source
-
In this episode of POW!, we interview Tomas Joscak from Vienna Studios. Tomas is an amazing watch face designer, winning the 2019 Best of Galaxy Store Award for Best Indie Watch Face Designer. He's priced some of his designs in the hundreds of dollars... and people are buying them. And, the software he uses to create the graphics is typically not used for designing watch faces. You’ll want to listen in and learn not only how he designs high-end watch faces, but also his tips on marketing. Topics Covered: Galaxy Watch Studio Galaxy Store Coupons Galaxy Store Badges Banner Promotions Social Media Multi-language Support Best of Galaxy Store Awards View the full blog at its source
-
If you are a watch face designer and want to distribute your watch face, it is highly recommended that you test your watch face on a real device before publishing it. While Galaxy Watch Studio (GWS) provides an emulator (the Run window) on which to run your watch face, it is not the same as running it on an actual device. Remote Test Lab (RTL) is a service that allows you to test your app on a real device, access the device remotely through the web, and it’s free! RTL is an amazing solution if you can’t buy a device or if you want to test your watch face on different watch models. This reduces your hardware costs for testing a watch face. Design a Watch Face If you don’t have a watch face to test, here is how to create a simple design using GWS. Launch GWS and create a new project. For simplicity, add a background, analog clock, and digital clock. The digital clock is used to add a time zone selector. The intention behind using the time zone selector is because we can’t test the tap action using the Run window. So, a real device is needed to test the time zone selector. If you want to know how to make a time zone selector, you can read this blog. After completing the design, you have to build the project so that a .tpk file is created. Go to Project > Build, set the Target API version, enter the password for your author certificate, and click Build (see image below). If you don’t change the location path of the workspace folder, then the .tpk file is saved in C:\Users\user_name\GearWatchDesigner\workspace. Get Started with RTL There are a few system requirements to run RTL on your PC. Read about Remote Test Lab from here. The system requirements are: A Samsung account Standard web browser with JavaScript support Java Runtime Environment 7 or later with Java Web Start. Internet environment where port 2600 is available. First, go to Remote Test Lab and sign in using your Samsung account. If you don’t have a Samsung account, create one and then sign in. Next, click GET STARTED. Now, select Watch from left sidebar. There are four types of devices and OS versions that are available (on 26th June, 2020): Device Name Model Name OS Version Galaxy Watch SM-R800 Tizen 4.0.0.2 Gear Sport SM-R600 Tizen 3.0.0.2 Gear S3 SM-R765A Tizen 3.0.0.2 Gear Fit2 SM-R360 Tizen 2.3.1.6 Choose a device based on your requirements. In the following example, Galaxy Watch is selected for testing. Select the OS version for the Galaxy Watch. Select any available device from the Device List. In the device name, IN, KR, or US indicates the country in which the device is located. It is better to choose the closest country to avoid latency issues. For example, if you are in Korea, you should select KR. Choose the amount of time to reserve the device from Reserve Time. Higher reservation times require more credits (credits are free and you receive a limited number every day), so it would be wise if you don’t reserve unnecessary time. After selecting all options for your selected device, click Start. The details of your selected device are shown. If a download window displays, click on start to download the JNLP file. Run the JNLP file to download the RTL client. The download window displays when the RTL Client is downloaded for the first time or an updated version is available. After launching the RTL client, click Run. The time to launch a device on RTL may vary depending on your network environment. A warning box appears. Read the warnings and click** I understand and wish to proceed.** Next, choose the language of your selected device. Test Your Watch Face on RTL After starting the device, follow the steps below to install and run your watch face. Right-click on the watch to launch the context menu. To learn about all features of the context menu, read RTL client features. Click on Test > Install Application From the Look in dropdown menu, navigate to the directory that contains the .tpk file which you want to test. Select the .tpk file and click Open. A dialog box shows the progress of opening the selected file on the remote device. Click Install from the Application Manager. Click OK after installing the watch face. Click on the default watch face. Rotate the bezel clockwise or counter-clockwise to select your installed watch face. When you find your installed watch face, click on it to launch it. Now, click on the digital clock to change the time zone for testing the time zone selector tap action. Search for and select your desired city to change the time zone Exit from the Remote Device It is recommended to uninstall your application from the remote device after completing your test. Tap on the watch face and click on the delete icon to uninstall the watch face. Now, right-click on the watch and click Exit to close the remote device. Using RTL, you can test your watch face designs on different watch models and different Tizen versions of your targeted users. You can do it anywhere, even if you are not at home or in the office. Remote Test Lab allows you to test your watch faces on many devices even if you have a small budget. View the full blog at its source
-
This is part of a 2 hour Tizen workshop that you can find here: https://youtu.be/5xp8jFpXOm8 In this video, you will modify the heart rate monitor and Tizen Advanced UI samples. These will give you several UI components that you can re-use in your projects. You can also connect with me, Diego, a Sr. Developer Evangelist, on Twitter: https://twitter.com/hielo777 Have questions? Post them in our forums: https://forum.developer.samsung.com/ Check out other videos, blog posts, and tips to improve your Tizen app development. Check out the Tizen Tidbits playlist on our YouTube channel, and learn more about the wide selection of Samsung technologies on our developer portal. View the full blog at its source
-
Start Date Jun 25, 2020 Location Online Les damos bienvenida a nuestra segundo evento en Español. Si alguna vez te has preguntado como crear tu primera aplicación para el Samsung Galaxy Watch, si te preguntas qué es Tizen, o cómo publicar tus aplicaciones en el Samsung Galaxy Store, esta es la charla para ti. Esta vez nuestro Desarrollador Evangelista Senior, Diego Lizarazo Rivera, se encargará de dar una introducción al desarrollo de aplicaciones para los relojes inteligentes de Samsung, y las diferentes ventajas de desarrollar con Tizen. Será una charla en vivo, completamente en castellano, en la que podrás hablar directamente con nuestros expertos y plantearles todas tus dudas sobre cómo desarrollar tus aplicaciones para el mercado global de Samsung. Aprovecha esta oportunidad para hablar con los expertos y otros desarrolladores sobre tus creaciones y para aprender más sobre la tecnología Samsung. View the full blog at its source
-
Start Date Jun 25, 2020 Location Online Diego Gonzalez, a product manager in the Samsung Internet team, will be giving a webinar on WebXR as part of the Horizon 2020 project. He'll show how WebXR is powering immersive experiences for several 5G Tours use cases. View the full blog at its source
-
Start Date Jun 24, 2020 Location Online OpenJS Foundation’s annual event brings together the JavaScript and web ecosystem including Node.js, Electron, AMP and more. In 2020, we’re going virtual to learn and engage with leaders deploying innovative applications at massive scale. Ada Rose Cannon, a developer advocate on the Samsung Internet team, will be giving a talk. She will run through what WebXR can do today, how you can use it to build Virtual Reality and Augmented Reality enabled websites, and show what WebXR has planned for the future. View the full blog at its source
-
This is part of a 2 hour Tizen workshop that you can find here: https://youtu.be/5xp8jFpXOm8 In this video, you will learn to use the wearable device sensors and modify a project to detect the user's heart rate. You can also connect with me, Diego, a Sr. Developer Evangelist, on Twitter: https://twitter.com/hielo777 Have questions? Post them in our forums: https://forum.developer.samsung.com/ Check out other videos, blog posts, and tips to improve your Tizen app development. Check out the Tizen Tidbits playlist on our YouTube channel, and learn more about the wide selection of Samsung technologies on our developer portal. View the full blog at its source
-
We continue to celebrate the top performing apps in creativity, quality, design, and innovation, as we interview winners of our Best of Galaxy Store Awards. Today, we're talking with Greg Borrud from Niantic about building games that take players out of their homes and into the real world. Tell us about Niantic Niantic is probably best known as the developer of Pokémon GO, but we are much more than that! Niantic is an Augmented Reality company that helps get people out into the world - exploring with others and having meaningful and engaging experiences. We are both a game developer/publisher as well as a technology company focused on bringing new games and experiences to the world through location-based and AR technology. Can you share how Niantic has pioneered real world gaming experiences? It started with Ingress - a game that asked you to go out and battle for control of points of interest in the real world. This then exploded with the launch of Pokémon GO in 2016. We all remember packs of people searching for Pokémon throughout their neighborhoods. We have continued to evolve our Real World Platform with more information about the world (we’ve mapped hundreds of millions of places around the world so far), with a focus on creating new gameplay experiences that encourage people to go outside and explore. Your premise has been to include a combination of maps and gaming in your app development. Can you share how this is done? We’ve built a robust platform that is a map of all the unique and interesting places in our world. This map is curated and updated by our players all the time and we strive to keep it as accurate as we can. That forms the foundation for our new game development. We want to have a wide variety of games and experiences, so we don't have too many restrictions on what a Niantic product can be. We want to let the creativity of our teams and our developer partners lead us to entirely new gameplay concepts. What programming languages do you use in development of your games? We use a variety of languages depending on what part of the code our engineers are working in. We primarily develop in C# for the player’s device and Java for our servers. Occasionally we'll also use C++ or a scripting language like Python. At Niantic, your work represents the culmination of decades of obsessing about geospatial technology. How important is this technology to your game experiences? Critically important. Our games are a reflection of the real world. They literally take you outside, exploring neighborhoods and cities, so without precise mapping, we couldn’t build what we offer today. We often hear stories from our Pokémon GO community about how walking with our games has uncovered hidden gems and historic monuments in their neighborhoods that they never knew existed. Our next area of focus is building a dynamic 3D map of the world so that we can progressively layer in augmented reality and other features into our games to make exploring the world more interesting and fun. At the end of the day, the game/experience needs to be fun no matter what technology it is built on top of. You have developed some of the biggest game titles, including Pokémon GO and Harry Potter: Wizards Unite, winner of the Best of Galaxy Store Awards 2019 for Best AR Game. How does Augmented Reality enhance your games and bring them to life? AR allows us to turn the world outside your door into one of the most amazing, dynamic game boards you can imagine. Through AR, your world can be filled with Pokémon or Wizards. And we’re just in the infancy of what AR can offer. We’re excited to share some of the new AR technologies we are cooking up. Your games are highly rated on the Galaxy Store. How do you maintain your games' quality? We try to learn from and listen to our players as much as we can. Although it’s impossible to please everyone all of the time, we do take player feedback very seriously, and we are constantly striving to improve our games by listening, then iterating fast. How has the Galaxy Store badge supported your game discovery on the Galaxy Store? The Galaxy Store badge is supported on a variety of our marketing materials, including the product's website, so players know the game is available on their preferred platform. With all of your success, do you still experience challenges when developing your games? That is one of the great things about making games - there are always new challenges. As technologies, devices, and player preferences evolve, we are challenged every single day we come to work. You have to love (and live for) challenges if you want to be happy in this industry. Are there common errors made by developers while programming games? A common error is not testing in a way that replicates a player’s real experience. When tested in isolation, something might ‘work’. But the key is constant testing while looking through the lens of the players. What advice do you have for indie developers attempting to develop a successful game business? Start with a small, simple game loop and build it. Get it into the hands of your friends and then iterate. It’s an incredible world for game developers right now, as the ability to build something on your own has never been easier. I’m a firm believer in learning by doing. As you continue to pioneer new technologies and gameplay mechanics, what trends do you expect to see? As our mapping and AR technologies continue to evolve and converge, we envision a 3D map of the world that will truly be the ultimate game board. If we can pair that with wearable devices in the future, we believe we will develop new entertainment experiences unlike anything you have seen before. What is ahead for Niantic? We’ve got a lot of exciting stuff coming in the near term. As the end of June nears, we’re fast approaching our first anniversary of Harry Potter: Wizards Unite, which put magic in the hands of witches and wizards all around the world last summer. For that product, we’re thinking of some exciting new ways to immerse players in the wizarding world with new upcoming features, content releases, and fun in-game events. The fourth anniversary of Pokémon GO is also approaching this July, and we’ve reimagined our tentpole Pokémon GO Fest event to be playable by the global player base on July 25-26th, wherever they may be. Over the past four years, Trainers have accomplished some amazing feats; notably walking a collective 28 billion kilometers and making over 280 billion visits to unique points of interest around the world. In the long term, our ultimate goal is to create meaningful and purposeful gameplay experiences. We think these will come in a wide variety of shapes and sizes, and to that extent we have more than 10 new games and AR experiences in different stages of development. We hope to release two new titles in the next six months, with a goal to sustain that cadence annually. We hope these experiences will have a long lasting impact on those who play them. Thanks to Greg Borrud for sharing how Niantic creates successful game franchises. Follow us on Twitter @samsung_dev for more developer interviews and tips for building games, apps, and more for the Galaxy Store. Find out more about our Best of Galaxy Store Awards. View the full blog at its source
-
Start Date Jun 19, 2020 Location Online Close out your week with a chat about web gaming with Srushtika Neelakantam, developer advocate at Ably Realtime. Srushtika will join us for our developer "office hours" to talk about her real time space invaders game. Join us for the discussion! Agenda Time (UTC) Time (PDT) Topic 17:30 PM GMT+1 9:30 AM PDT Welcome, Latest Samsung Internet News 17:40 PM GMT+1 9:40 AM PDT Web Gaming Discussion 18:20 PM GMT+1 10:20 AM PDT Q&A 18:30 PM GMT+1 10:30 AM PDT Event Ends About Srushtika Srushtika Neelakantam is a Developer Advocate for Ably Realtime. She is a passionate tech advocate, with a keen interest in real-time and web technologies. She loves spending time fiddling around with tech and then simplifying that for others by speaking or writing about it. She is a co-author of “Learning Web-Based Virtual Reality” and supports the open web by volunteering with Mozilla's Tech Speaker and Reps programs. View the full blog at its source
-
Are you interested in designing mobile UI themes for Galaxy devices? You can now submit your portfolio to Samsung and apply to become a Galaxy Themes seller. The submission window is open June 17 - July 1. Watch the video below for an overview of the process and what you need to prepare. Then download the Themes Submission Starter Kit and let the creative juices flow. The application process is very selective, and only the best of the best are selected. Think you have what it takes? We can't wait to find out. View the full blog at its source
-
Start Date Jun 17, 2020 Join Samsung Evangelist Tony Morelan and special guest, John Shih from X9 Studios as they talk Galaxy Themes designing, publishing, marketing and more! X9 Studios won Best Indie Themes Designer at the 2019 Best of Galaxy Store Awards and continues to be a top developer on the Galaxy Store. Join the discussion and receive live support from a pro! View the full blog at its source
-
Start Date Jun 17, 2020 Join Samsung Evangelist Tony Morelan and special guest, John Shih from X9 Studios as they talk Galaxy Themes designing, publishing, marketing and more! X9 Studios won Best Indie Themes Designer at the 2019 Best of Galaxy Store Awards and continues to be a top developer on the Galaxy Store. Join the discussion and receive live support from a pro! View the full blog at its source
-
Congrats! You've published your app on the Galaxy Store. Now it's time to let the world know with a Galaxy Store badge. For some publishers, the Galaxy Store may be the only place your content is listed. For others, your app may be available on multiple app stores. Either way, a Galaxy Store badge lets consumers know exactly where to find your content. In addition to the badge image, the Galaxy Store badge service provides short links that deep link directly to your content in the store. While you can use the full, long URL, using the galaxy.store short link will allow you to better track any traffic you drive to your content from your website or digital marketing promotions. You can generate your short link in the promotion section of the Seller Portal. If you've been a Galaxy Store badge user for a while, here are a few quick tips to ensure you're completely up-to-date with the latest brand requirements. First make sure you're using the latest badge image. The badge should not include the Samsung lettermark and should not say Galaxy Apps. You can download the image above here. Next, make sure you update your short link from the older galxy.us domain to galaxy.store. Your badge name remains the same. The Galaxy Store badge makes it easy for users to find and download your content. Get started today! View the full blog at its source
-
The new Developer Economics survey, administered by Slash Data, is now live for Q2 2020! Speak out about the type of projects you're working on and your favorite languages, tools, technologies, or platforms. In return, you enter prize drawings to win new dev gear to upgrade your workstation or courses and licenses to learn something new, worth over USD $15,000 in total. You will also get a free, complimentary report and graphs which compare your skills to the global average. The survey is available in eight languages and is open to students, hobbyists, and professionals. Whether you developing for the web, IoT, voice, mobile, games, or other platforms, we and Slash Data want to hear from you. View the full blog at its source
-
What is Water lock mode? Water lock mode was introduced on the Galaxy Watch to prevent accidental touches and wake-up gestures on your screen while swimming. And the thrilling news for developers is that you can enable Water lock mode directly from your app. If you have a fitness-related app, you can use this feature to enhance your app’s capability for various water-based exercises like swimming, water aerobics, and aqua teaser. Let’s dig into the details of how to do this in a Tizen web app. How do you enable Water lock mode from your app? This implementation is quite simple. Water lock mode can be enabled using the Application launch API. It involves three simple steps: Configure your app with privileges Retrieve application ID Enable Water lock mode Let’s get started. Configure your app with privileges First, add the following privileges to the config.xml file. <tizen:privilege name="http://tizen.org/privilege/application.launch"/> <tizen:privilege name="http://tizen.org/privilege/application.info"/> <tizen:privilege name="http://tizen.org/privilege/power"/> http://tizen.org/privilege/application.launch - Allows the application to open other applications http://tizen.org/privilege/application.info - Allows the application to retrieve information related to other applications http://tizen.org/privilege/power - Allows the application to control power-related settings Retrieve application ID You can enable Water lock mode directly using the launch() method of the Application API. The launch() method launches an application with the given application ID. That’s why we need to know the application ID of the Water lock mode pop-up. Retrieve the app ID using the following code snippet in the JS file. The following code snippet returns the list of all applications installed on the watch. Among them you can choose the exact ID of the app which you need to launch. For example, we picked the ID com.samsung.clocksetting.water-lock-popup to enable Water lock mode. function onListInstalledApps(applications) { for (var i = 0; i < applications.length; i++) console.log("ID : " + applications[i].id); } tizen.application.getAppsInfo(onListInstalledApps); Figure 1: Installed application list Enable Water lock mode Once you get the app ID, you can enable Water lock mode with following code snippet in the JS file: tizen.application.launch("com.samsung.clocksetting.water-lock-popup"); And that’s it. Water lock mode is launched. Please note that, if the mode is launched for the first time in the device, a pop-up appears with a permission message. When Water lock mode is enabled, the touchscreen, as well as the wake-up gesture feature, is deactivated. So, there is no user interaction between the user and your app. Meanwhile your application runs in the background. So if you want to keep your app running in the foreground, you can use the Power API. To set the power state, the request() method is called. To manage the screen and CPU state, use the following code snippet in the JS file: tizen.power.request(“SCREEN”, “SCREEN_NORMAL"); tizen.power.request("CPU", "CPU_AWAKE"); tizen.power.release("SCREEN"); tizen.power.release("CPU"); For example, here I have added a time counter while the Water lock mode is on using an open source library named EasyTimer.js. First, add the JS library to the HTML file. <script src="lib/easytimer/dist/easytimer.min.js"></script> After that, add the following code snippet to the JS file to implement a time counter. var timerInstance = new easytimer.Timer(); timerInstance.start(); timerInstance.addEventListener('secondsUpdated', function (e) { document.getElementById("excercise_timer").textContent=timerInstance.getTimeValues().toString(); }); document.getElementById("counting_done").addEventListener("click", function(){ timerInstance.stop(); }); Figure 2: Water lock enabled To disable Water lock mode, users must long press the Home key. After disabling Water lock mode, the user can start interacting with your app immediately. For example, the user can stop the time counter using the Done button in the sample app (see Figure 2). Quite simple, right? You can check out the sample app here. If you have any questions, you can post your queries to Samsung Developer's forum. View the full blog at its source
-
The new SmartThings Core SDK for JavaScript is now available as a developer preview. With the new Core SDK, you can easily integrate the core SmartThings REST APIs into your JavaScript applications. We’ve built the SmartThings Core SDK with professional developers and hobbyists alike in mind - so that you can freely control and automate thousands of Works with SmartThings devices from your web server, Express app, and more. Let’s say you wanted to build a dashboard and display all of your SmartThings devices. Here is a sample Node app to get you started - you can use the below code with an OAuth or PAT token to get a list of devices: Getting Started If you want to jump right in, we recommend using npm to install the Core SDK for JavaScript. npm install @smartthings/core-sdk You can use the Core SDK for JavaScript Wiki to learn more about all of the endpoints available. If you are not sure where to start, visit the SmartThings Community for video tutorials and ideas. The SmartThings development team has put a lot of effort into building this SDK - we are excited to share it with you. Now, we invite you to start building, ask questions on the SmartThings Community, and provide open feedback. Thank You! View the full blog at its source
-
In this episode of POW!, we interview Ash Nazir, Editor in Chief for the website IoT Gadgets. Ash was an early advocate for Tizen OS, building a huge following, Tizen Experts. With that success, Ash and his team launched the website IoT Gadgets as a way to expand their coverage of hardware, software and all things internet. In addition to IoT Gadgets, Ash also runs the largest Facebook Group dedicated to Samsung Galaxy Watch with over 75k members. Topics Covered: • Tizen OS • Maemo • MeeGo • Linux Foundation • Tizen Experts • Writing for IoT Gadgets • Facebook Group, Samsung Galaxy Watch View the full blog at its source
-
Tizen is continuously improving Tizen .NET development tools to increase developer productivity. Today, we are pleased to announce the beta release of Tizen Template Studio. Tizen Template Studio is a Visual Studio 2019 Extension that uses a wizard to help you create a Tizen .NET app. You create a new project by selecting the type of project, UI pages, and features in the wizard. Once selection is finished, the wizard generates the project, including code templates where the specified UI pages and features are composed. You can use these templates as starter code to quickly build Tizen .NET apps and develop UI and commonly used features. Tizen Template Studio currently supports the creation of Tizen .NET apps running on Samsung Galaxy Watch. Templates are designed to help you write apps optimized for Galaxy Watch using Xamarin.Forms and the Tizen .NET framework. If you are new to Tizen .NET, we encourage you to review Get Started with .NET Applications. Meet Tizen Template Studio Let's get started with Tizen Template Studio by creating a new Tizen .NET app project. Launch Visual Studio 2019 and, from the Create a new project menu, select Tizen Template Studio. Enter a name for your new Tizen .NET app and click Create. Tizen Template Studio appears and walks you through four steps to create the desired project. Step 1: Project Type First, select the project type for the app you are about to generate (Application, Watch Face, Widget, or Service). Tizen Template Studio provides standard project templates that include essential project configuration and files to help you start your development. Step 2: Design Pattern Once you have selected a project type, you can select a coding pattern, either Code Behind or MVVM Basic. Step 3: Pages Next, build your app's user interface. Tizen Template Studio provides UI page templates to help you create beautiful and usable apps that follow UI design guidelines and best practices. Select the UI pages that you want to add into your app. You can add as many of each page as you need. Step 4: Features Lastly, you can select which Tizen .NET framework features you want to use in your app. Tizen Template Studio provides a variety of templates to help you use Tizen .NET framework APIs easily. Templates help you follow best practices, reduce writing boilerplate code, and free you from handling manifest files, so you can focus on building functional apps. Get Started Today Tizen Template Studio beta is available now and you can install the Visual Studio 2019 Extension from the Visual Studio Gallery. Once installed, you should then see Tizen Template Studio in the Create a new project menu of your Visual Studio 2019. Note: Before you install the extension, you must have an environment for developing Tizen .NET apps. For more information, see Installing Visual Studio Tools for Tizen. What's Next? We care about your Tizen .NET app development experience. As we continue to add in new features and templates, Tizen Template Studio will continue to help you write high quality apps. Try building a Tizen .NET app with Tizen Template Studio and let us know what you think! If you find a bug or issue, don't forget to file an issue. View the full blog at its source
-
Calling all mobile game publishers! Have you published your game in the Samsung Galaxy Store yet? We have a new set of resources to help you reach millions of active Samsung device users. From Samsung In-App Purchase to marketing tools to performance analysis, there are resources to help both new and experienced game developers. View the full blog at its source
-
The S Pen is a stylus exclusive to Samsung’s Note series devices, powered by Bluetooth technology. The S Pen for Note10 devices has accelerometer and 3D gyroscope modules, which enable the stylus to detect air actions, such as single and double button presses, and directional gestures, such as up, down, left, right, clockwise circle, and counter-clockwise circle gestures. You can use the S Pen Remote SDK to map S Pen actions and gestures to features in your application. To help you avoid making the same mistakes as I did when I was developing my application with the S Pen Remote SDK, this article describes some common implementation mistakes and their solutions. Note: The S Pen for Note9 devices do not support the S Pen Remote SDK, but you can implement single and double button press actions for it in the application configuration file. Mistake #1: Too many remote action activities The S Pen Remote SDK allows one remote action activity for each application. If you define multiple remote action activities, only one activity is functional. Figure 1: Remote action activity in the AndroidManifest.xml file Mistake #2: Air actions are disabled When you install an application on a device, such as to test it, you must manually enable air actions for the application before the application can respond to S Pen gestures. To enable air actions for your application, on the device, go to Settings > Advanced features > S Pen > Air actions, select the application from the App actions list, and toggle the Off switch to On. Figure 2: Enable the application in the Air actions settings If you want the application to have air actions enabled by default, you need special permission from Samsung to add the enable_key attribute to the remote-actions element in the remote_action.xml file. To obtain permission, submit the following information about your application to [email protected]: Application name Package name Information about how air actions are used in your application: Does the application use the media session? Does the application support background playback? Describe the user scenarios in which air actions are used. Mistake #3: Remote_action.xml configuration problems If your application is installed on the device but does not appear in the Air actions settings, check that the remote_action.xml file content is defined correctly. Common problems include: Duplicate action priorities: The priority attribute is a mandatory part of the action element. A smaller number denotes a higher priority. Make sure each action has a unique priority number. Figure 3: Priority attributes in action elements Incorrectly defined action labels: In the remote_action.xml file, make sure that the label attributes of the action elements refer to resource IDs. You cannot directly implement a text string in the label attribute. You must first define the string as a resource in the strings.xml file within the values directory, then refer to the string’s resource ID in the label attribute of the action element. Figure 4: Assign resource IDs to label strings Figure 5: Refer to resource IDs in the label attribute Hope this blog helps you to integrate the S Pen Remote SDK smoothly by avoiding these mistakes. You can also study the sample application for guidance. View the full blog at its source
-
Did you miss the game development Live Chat with Samsung Sr. Developer Evangelist Diego Lizarazo? If so, this is your chance to watch the replay. In this Live Chat, we talked about game development with Samsung technologies. It was aimed to answer questions of developers already creating games, or that are interested in finding out how to create games for the Galaxy Store. Below are links to helpful resources that were covered during this live chat session: Developer Portal Samsung Developer Program resources. This is your point of entry for most Samsung technologies, SDKs, documentation and tutorials. Enrolling in the Galaxy Store The Samsung Galaxy Store is a boutique of expertly curated apps from major brands, as well as Samsung games, watch apps, watch faces, and Themes. Intro to Wearable Apps Development All the documents and data you need to develop Galaxy Watch apps. Samsung In-App Purchase SDK Samsung In-App Purchase (IAP) is a payment service that makes it possible to sell a variety of items in applications for the Samsung Galaxy Store. This page will cover the basics on what you can do with this service and how to get started. Creating companion apps This tutorial shows you how to create and configure a basic Tizen .NET application project in Visual Studio. Galaxy Watch sensors A Tizen powered device can have various physical and virtual sensors. This page lists the different sensors you can access and control in your apps Code samples This page lists the readily available .NET Tizen samples that you can modify and use as starting points to create your own apps. Anime.js Anime.js is a lightweight JavaScript animation library with a simple, yet powerful API. You can easily integrate it with your web apps in Tizen Studio. Phaser.js Open source framework for web based games. It has a long list of samples and tutorials that you can modify and improve for wearable devices. Three.js Three.js is a lightweight cross-browser JavaScript library/API used to create and display animated 3D computer graphics on a Web browser. Construct 2 Construct is an HTML5-based 2D game editor. The latest version, Construct 3, is web based and allows for cross-platform game development. Events Find events that will build your skills. This is where you will hear about new Live Chats and workshops. Forums Connect with the Samsung Developer community in our forums. Visit the Samsung Developer Program to become a part of the Samsung developer community today! View the full blog at its source
-
The new SmartThings Core SDK for JavaScript is now available as a developer preview. With the new Core SDK, you can easily integrate the core SmartThings REST APIs into your JavaScript applications. We’ve built the SmartThings Core SDK with professional developers and hobbyists alike in mind - so that you can freely control and automate thousands of Works with SmartThings devices from your web server, Express app, and more. Let’s say you wanted to build a dashboard and display all of your SmartThings devices. Here is a sample Node app to get you started - you can use the below code with an OAuth or PAT token to get a list of devices: Getting Started If you want to jump right in, we recommend using npm to install the Core SDK for JavaScript. npm install @smartthings/core-sdk You can use the Core SDK for JavaScript Wiki to learn more about all of the endpoints available. If you are not sure where to start, visit the SmartThings Community for video tutorials and ideas. The SmartThings development team has put a lot of effort into building this SDK - we are excited to share it with you. Now, we invite you to start building, ask questions on the SmartThings Community, and provide open feedback. Thank You! View the full blog at its source
-
Start Date Jun 03, 2020 Location Online Join Senior Developer Evangelist Diego Lizarazo Rivera to discuss game development with Samsung technologies. If you are already creating games, or are interested in finding out how to create games for the Galaxy Store, join this conversation. Not interested in games? That's ok! Bring your development questions and get live support. View the full blog at its source