<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans%3A300%2C400%2C600%2C700">jaksuka, Author at veruswealth.net

What’s new with Fast Pair

  • July 20, 2019

Posted by Catherina Xu (Product Manager)

Last November, we released Fast Pair with the Jaybird Tarah Bluetooth headphones. Since then, we’ve engaged with dozens of OEMs, ODMs, and silicon partners to bring Fast Pair to even more devices. Last month, we held a talk at I/O announcing 10+ certified devices, support for Qualcomm’s Smart Headset Development Kit, and upcoming experiences for Fast Pair devices.

The Fast Pair team presenting at I/O 2019.
The Fast Pair team presenting at I/O 2019.

Upcoming experiences

Fast Pair makes pairing seamless across Android phones – this year, we are introducing additional features to improve Bluetooth device management.

  • True Wireless Features. As True Wireless Stereo (TWS) headphones continue to gain momentum in the market and with users, it is important to build system-wide support for TWS. Later this year, TWS headsets with Fast Pair will be able to broadcast individual battery information for the case and buds. This enables features such as case open and close battery notifications and per-component battery reporting throughout the UI.

     Detailed battery level notifications surfaced during “case open” for TWS headphones.
    Detailed battery level notifications surfaced during “case open” for TWS headphones.

    • Find My Device. Fast Pair devices will soon be surfaced in the Find My Device app and website, allowing users to easily track down lost devices. Headset owners can view the location and time of last use, as well as unpair or ring the buds to locate when they are in range.

    Connected Device Details. In Android Q, Fast Pair devices will have an enhanced Bluetooth device details page to centralize management and key settings. This includes links to Find My Device, Assistant settings (if available), and additional OEM-specified settings that will link to the OEM’s companion app.

    The updated Device details screen in Q allows easy access to key settings and the headphone’s companion app.

    Compatible Devices

    Below is a list of devices that were showcased during our I/O talk:

    • Anker Spirit Pro GVA
    • Anker SoundCore Flare+ (Speaker)
    • JBL Live 220BT
    • JBL Live 400BT
    • JBL Live 500BT
    • JBL Live 650BT
    • Jaybird Tarah
    • 1More Dual Driver BT ANC
    • LG HBS-SL5
    • LG HBS-PL6S
    • LG HBS-SL6S
    • LG HBS-PL5
    • Cleer Ally Plus

    Interested in Fast Pair?

    If you are interested in creating Fast Pair compatible Bluetooth devices, please take a look at:

    Once you have selected devices to integrate, head to our Nearby Devices console to register your product. Reach out to us at [email protected] if you have any questions.

  • 6 Ways to Deal With an Insecure Partner

    • July 20, 2019

    With the huge pressures that life can put on relationships — from work-related stress to health issues, becoming parents and even social media — it’s no wonder many of us feel insecure at times. Likewise, most of us have, at one point or another, found ourselves trying to reassure a partner who doesn’t feel as confident in a relationship as they should.

    When one person in a partnership becomes insecure, the need for reassurance can sometimes set off an unpleasant cycle of neediness, impatience, and more insecurity. If dealt with correctly, however, it’s possible to break the negative behavioral patterns and reach a stronger, more confident phase in your relationship.

    This, of course, has to be a labor of love between the two of you. If you are currently in that stage, here’s how to deal with an insecure partner.

    Identify the source of the problem together

    insecure partner

    There are countless reasons why people feel insecure in relationships. It could be leftover pain from a previous romance, your partner’s sense of self-worth or something you have done or continue to do.

    These issues can be big: perhaps you fear commitment or have cheated in the past. They can also be small: your new hobby clashes with date night. Health issues like erectile dysfunction can also be tough on a partner since this impacts intimacy.

    Whatever the root of this insecure feeling is, you must identify it together in order to move forward. That’s the first step in learning how to deal with an insecure partner.

    Who does the problem lie with — and are they willing to change?

    If your partner is generally jealous and needy, this could stem from their past experiences and overall level of self-esteem. Knowing they can trust you may not be enough. That FOMO or feeling of being left out and the inability to share you with friends can all add up to make your daily lives tricky.

    Can your partner identify that they are the problem? Are they ready to find new ways to deal with this?

    Likewise, if you regularly go out partying till the early hours, without so much as a friendly text to your other half, can you put yourself in your partner’s shoes and understand how such behavior might make them feel?

    See Also: How To Stop Unhappiness Rituals in Your Relationships

    Communication is key

    When a person is insecure, they tend to jump to the most negative conclusions. They fill in the blanks with the most disastrous possible assumptions and let their imagination run to the worst-case scenario time and again.

    By making a bigger effort than usual to communicate, you can prevent your partner from having to guess what you’re doing and feeling. Send a straightforward text message explaining where you are and who with. Make the effort to put into words how much you appreciate your partner, even if that’s out of your comfort zone. Who knows, it may not just be your partner who benefits from this openness.

    Encourage independence

    Very often, one person in a relationship assumes dominance. They take the lead on travel plans and their friends are central to the couple’s social world. Their life choices may inform those of their partner.

    Sound familiar?

    As the leader in your partnership, you can support your partner to feel more secure by helping them form bonds and achieve things outside of your relationship. Making a new friend they can hang with when you’re working or taking up a shiny new hobby could help take their mind off irrational doubts and fears.

    Laugh together

    dealing with an insecure partner

    If you’re convinced that this insecurity is coming from a harmless place and you’ve talked about it sensibly, calmly and with each other’s best intentions at heart, it’s time for you both to stop indulging your partner’s doubts, move on, and get the fun back. While it’s paramount not to make little of your loved one’s insecurities, finding ways to laugh together is a surefire way to strengthen the bond you share.

    It sounds obvious, but your favorite sitcom, play fights, and stand-up comedy evenings are some of the quickest methods to get you laughing together and feeling connected.

    See Also: 3 Ways To Inject More Humor Into Your Relationship

    Respect these changes long-term

    Having a quick chat and whisking your partner off for a night of fun is rendered useless if the following week you’ve entirely forgotten your other half’s distress. While they may seem to be dealing with things better, it’s up to you to keep in mind that future scenarios could trigger their doubts.

    If you know your partner can trust you and has no deep-seated reason to be insecure, other than the lack of confidence that plagues us all at times, make the effort to renew your reassuring actions over the weeks, months and years of your relationship. Small changes can often reap the biggest rewards.

    The post 6 Ways to Deal With an Insecure Partner appeared first on Dumb Little Man.

    Monthly Web Development Update 7/2019: Modern Techniques And Good Trouble

    • July 19, 2019

    Monthly Web Development Update 7/2019: Modern Techniques And Good Trouble

    Monthly Web Development Update 7/2019: Modern Techniques And Good Trouble

    Anselm Hannemann


    What can we do to cause “good trouble”? First of all, I think it needs to be friendly, helpful and meaningful actions that don’t impact other peoples’ lives. Secondly, it’s something we strongly believe in — it might be using simpler JavaScript methods, reducing the application size, a better toggle UI, publishing a book or building a business without selling user data to others. Whatever it is, it’s good to have a standpoint of view and talk about it.

    It’s good to advocate others about accessibility problems, about how to listen better to others in a conversation, how to manage projects, products or even a company better. The most important thing on all these actions is to remember that they are helping other people and not impacting them as well as animals or our environment in general.

    Doing something useful — as small as it might seem — is always a good thing. And don’t forget to honor your action just by smiling and being thankful for what you did!


    • Chrome 76 removes a couple of things like feature policy: lazyload, insecure usage of DeviceMotionEvent and the DeviceOrientationEvent. If you use them, please ensure you use a secure context by now or replace them by their successors.
    • Firefox 68 is out and this is new: BigInts for JavaScript, Accessibility Checks in DevTools, CSS Scroll Snapping and Marker Styling, access to cameras, microphones, and other media devices is no longer allowed in insecure contexts like plain HTTP. It’s now possible to resend a network request without editing the method, URL, parameters, and headers via DevTools, and a lot of (compatibility) fixes are included for CSS features as well.
    • Chrome 76 brings image support for the async clipboard API, making it easy to programmatically copy and paste image/png (currently, this is the only supported format though, unfortunately) images.
    • Tracking prevention is now available in Microsoft Edge preview, following other browsers like Safari and Firefox.


    • Have you heard of the concept of “good trouble”? Frank Chimero defines it as questioning and re-imagining the status quo, and having your actions stand in contrast to the norm. But the interview with the designer shows much more than a new concept, it’s challenging how we work today and how to do your own thing that doesn’t match the norm of the society.

    Particularly, I like this quote here:

    “Slow down, find a quiet place and create time for solitude so you can hear yourself. It’s so noisy out there.”

    • What if control is only an illusion? We would realize that the true nature of an experience is revealed only in the interplay with the people who use it and that an invalidated design is nothing but an opinion. Quite a thought that puts our assumptions and approach on projects into a different light.





    Work & Life

    • Active Listening is a skill that helps us listening for meaning, and how the other person is feeling instead of that usual listening that focuses on ‘how can I reply or comment on this or how will we solve this?’. Buffer’s guide written by Marcus Wermuth is a great resource to learn and practice Active Listening.
    • Christoph Rumpel shares what he learned from self-publishing a book and shows interesting insights into finances of it and what to avoid or do better.
    • Ben Werdmüller on doing well while doing good: This is a personal story about struggling with revenue, investments, third-party capital, trying to earn money on your own by selling your product while having free competitors and how to still produce good things while doing financially well.
    • Shape Up — Stop Running in Circles and Ship Work that Matters is a new, free online book by Ryan Singer about project management, leading a company and product. It’s amazing and while I only had time to flick through it quickly and read some individual chapters and sections, this will definitely become a resource to save and refer to regularly.

    Going Beyond…

    I was in the cinema last week to watch a movie about some people who created a farm. The trailer was nice and while I wasn’t 100% convinced of it, it was an evening where I was up to go out to watch a movie. So I did and it was good that I went to see “The Biggest Little Farm”. The farmer made the film himself as he’s a wildlife filmmaker so expect some quite stunning pictures and sequences of wildlife animals in there!

    The most revealing part was how much of an impact only a handful of people can make out of desert land in a few years of time, and how much we as humans can influence wildlife, give a habitat to insects, and produce quality food while including CO2 from the air into our soil to make plants grow better, in order to restore nature and make an impact in the effort to fight climate change.

    At several points during the movie, I was close to tears and I was extremely thankful that I’m able to have my little garden space as well where I can do similar things (though way smaller than their farm). If you’re up for something new, to learn something about food, meat, economy and how it all connects or how to create a beautiful green space out of desert, this movie is for you.

    Last but not least, solar panels are a good way to produce renewable energy and it’s good usage of roofs. In China though, air pollution is currently so bad that solar panels sometimes stop working. Another reason to act quickly! If solar panels don’t work due to missing sunrays, our bodies will suffer the same lack of sunlight and we need it for our health.

    Smashing Editorial

    Kotlin named Breakout Project of the Year at OSCON

    • July 19, 2019

    Posted by Wojtek Kaliciński, Developer Advocate, Android

    Stephanie on Stage with Kotlin on screen

    Stephanie Saad Cuthbertson announces support for Kotlin during the Developer Keynote at I/O 2017.

    Today at OSCON (the O’Reilly Open Source Software Conference), Kotlin was awarded the Open Source Award for Breakout Project of the Year.

    There is no doubt to us why Kotlin received this award: it’s a fast moving (but thoughtfully developed) programming language that lets you write better code, faster. It’s great to see Kotlin continue to receive the sort of recognition as Breakout Project of the Year, building on other awards like #1 fastest growing language on Github.

    We’re big fans of Kotlin, and we’ve heard that you are too – feedback from you is in part why we announced support for the language over two years ago. This meant bundling the Kotlin plugin in Android Studio, along with promising to support Kotlin-built apps going forward.

    But there was a long way to go for many teams at Google to provide a first class experience with Kotlin in the Android ecosystem, and to convince developers that Kotlin on Android is not just a fad, but is here to stay.

    If you haven’t tried Kotlin yet, now is a great time to start! In fact, in the past two years, we’ve been adding a number of new features and upgrades to the Kotlin for Android experience, including:

    • Android Jetpack APIs now have first class support for Kotlin Coroutines, transforming the way we do async operations on Android. This includes Room, LiveData, ViewModels, WorkManager and more coming in the future.
    • Many Jetpack libraries have Kotlin extension libraries (KTX) to make using them even more fluent with Kotlin.
    • The compilation toolchain has received many improvements for Kotlin, including compiler enhancements, incremental annotation processing with KAPT, and Kotlin-specific R8 optimizations.
    • All of our documentation pages now contain Kotlin code snippets, so you can easily compare how our APIs work in both languages.

    Kotlin code snippet

    • Most of our flagship samples are also written in Kotlin (including IOSched, Plaid, Sunflower and many more), along with any new samples that we make in the future.
    • We’ve added a language switcher to our API reference pages, so you can have a Kotlin view of the AndroidX library and the Android framework.

    Kotlin view of the AndroidX library

    • We doubled down on providing guidance to developers and teams who want to switch to Kotlin on our developers.android.com/kotlin pages.
    • Our Developer Relations engineers are posting real life examples and guides on integrating Kotlin in your apps on our Medium publication, such as the great intro to Coroutines on Android series and many more.
    • If you prefer to learn Kotlin in person, you can join one of the many Kotlin/Everywhere events happening around the world. If you are an organizer in a local developer community, consider signing up to host your own event!
      This initiative is a cooperation between JetBrains and Google.
    • For those of you who don’t have access to in-person training, we added a new, free course on Udacity for Developing Android apps in Kotlin. Our Kotlin Bootcamp for Programmers course is still available as well!
    • We have worked with many external partners to gather feedback and learn about their experiences with Kotlin, such as this case study with Square.
    • And lastly, we’ve enabled Kotlin as a supported language for Android app teams at Google. We’re already seeing adoption in apps such as Google Home, Google Drive, Android System UI, Nest, with many more to follow.

    The road to fully supporting Kotlin on Android was not always easy, but it was truly rewarding seeing Kotlin adoption among professional Android developers rise from a handful of early adopters to around 50% since the original announcement!

    We were confident when we announced earlier this year at Google I/O 2019 that Android is going increasingly Kotlin-first, opening up the possibility for APIs built specifically around Kotlin and for Kotlin users, starting with the new, declarative UI toolkit – Jetpack Compose (still in early development).

    We want to congratulate JetBrains, our partners through the Kotlin Foundation and creators of Kotlin, on receiving the OSCON Open Source Award today. It shows how disruptive and transformative Kotlin has been, and not just for the Android developer community, but beyond.

    We know one thing: on Android, Kotlin is here to stay.

    The Lazy Nomads’ Top 3 Safety Tips for Travelers in 2019

    • July 18, 2019

    Worldwide, 400,000 pickpocketing incidents occur daily. And more likely, this figure is higher since innumerable people assume items stolen from their backpacks or pockets were lost. Among the top risks associated with travel include theft, scamming, political unrest, natural catastrophes, and health risks.

    While traveling might be fun, there’s always danger. With that, whether you’re traveling for business or pleasure, take into account the following safety tips for travelers.

    Dodge street hazards

    safety tips travelers

    Thieves know many ways to separate a traveler from their valuables. The most prevalent threats include pickpockets, snatchers, and fake beggars. It’s no surprise that pickpockets are found in about all major tourist destinations.

    To minimize risks, carry valuables (credit cards, passport, and money) close to you. Don’t carry your wallet in the rear pocket. If anything, wear a hidden pouch above the belt.

    In case you are carrying a handbag, hold it firmly and move away from busy streets. Similarly, if you are approached by a quirky beggar—holding a placard—walk away. Otherwise, you’ll get distracted and lose a valuable item to an unseen pickpocket.

    Likewise, don’t use public Wi-Fi. Public Wi-Fi grease the wheels for criminals to hack into the information stored in your laptop or mobile phone. If you can’t avoid using the internet, use your portable router. All you’ll need is a local SIM card.

    See Also: Internet Access While Traveling: Tips for Keeping Your Data Safe

    Blend in with the locals

    Don’t offend or disrespect with inappropriate dress or manners. As much as possible, wear clothing similar to locals. Avoid clothing with your country’s flag, political statements or hometown brands. Don’t wear expensive-looking jewelry and imprinted tote bags, too.

    If you are going to a party several kilometers from home, don’t get too drunk and always take a taxi at night. If it allows, consider investing in a ride, especially if you feel uncomfortable walking in isolated streets at night. Also, consider learning a few things from the locals, including how to speak their language.

    Do Your Research

    travelers safety tips

    Don’t be uninformed about where you are going. Apart from knowing these safety tips for travelers, it’s important to know your travel destination comprehensively beforehand. Learn about the cultural norms and the political situation.

    Make an effort to check websites for country updates and obtain contact information for the nearest local emergency department, embassy or police station.

    Besides, be familiar with who to call in the event of an emergency. Read traveler reviews and ask the residents for information about incidences of crime, places to stay, and safe neighborhoods.

    The post The Lazy Nomads’ Top 3 Safety Tips for Travelers in 2019 appeared first on Dumb Little Man.

    Yarn Workspaces: Organize Your Project’s Codebase Like A Pro

    • July 18, 2019

    Yarn Workspaces: Organize Your Project’s Codebase Like A Pro

    Yarn Workspaces: Organize Your Project’s Codebase Like A Pro

    Jorge Ferreiro


    Any time I start working on a new project, I ask myself, “Should I use separate git repositories for my back-end server and my front-end client(s)? What’s the best way to organize the codebase?”

    I had this same question after a few months working on my personal website. I originally had all the code in the same repository: the back end used Node.js and the front end used ES6 with Pug. I adopted this organization for convenience, since having both projects in the same repo made it easy to search for functions and classes, and facilitated refactors. However, I found some downsides:

    • No independent deployments.
      Both apps were using the same package.json, and there was no clear separation on both projects.
    • Unclear boundaries.
      Since I rely on a global package.json, I didn’t have a mechanism to set specific versions for the back end and front end.
    • Shared utilities and code without versioning.

    After some research, I found that Yarn workspaces was a great tool to solve those cons, and it was a helpful tool to create a monorepo project (more to come later!).

    In this article, I share an intro to Yarn workspaces. We’ll run through a tutorial together on how to create your first project with it, and we’ll finish with a recap and next steps.

    What Are Yarn Workspaces?

    Yarn is a package manager by the folks at Facebook, and it has a great feature called Yarn workspaces. Yarn workspaces let you organize your project codebase using a monolithic repository (monorepo). The idea is that a single repository would contain multiple packages. Packages are isolated and could live independent of the larger project.

    Yarn Workspaces

    As an alternative, we could place all of these packages into separate repositories. Unfortunately, this approach affects the shareability, efficiency, and developer experience when developing on the packages and their dependent projects. Furthermore, when we work in a single repository we can move more swiftly and build more specific tooling to improve processes for the entire development life cycle.

    Monorepo projects have been widely accepted by large companies like Google or Facebook, and they have proven monorepo can scale.

    React is a good example of an open-source project that is monorepo. Also, React uses Yarn workspaces to achieve that purpose. In the next section we will learn how to create our first monorepo project with Yarn.

    Creating A Monorepo Project With React And Express Using Yarn Workspaces In Six Steps

    So far, we have learned what Yarn is, what a monorepo is, and why Yarn is a great tool to create a monorepo. Now let’s learn from scratch how to set up a new project using Yarn workspaces. To follow along, you’ll need a working environment with an up-to-date npm install. Download the source code.


    To fully complete this tutorial, you will need to have Yarn installed on your machine. If you haven’t installed Yarn before, please follow these instructions.

    These are the steps we’ll be following in this tutorial:

    1. Create Your Project And Root Workspace
    2. Create A React Project And Add It To The Workspace List
    3. Create An Express Project And Add It To The Workspace
    4. Install All The Dependencies And Say Hello To yarn.lock
    5. Using A Wildcard (*) To Import All Your Packages
    6. Add A Script To Run Both Packages

    1. Create Your Project And Root Workspace

    In your local machine terminal, create a new folder called example-monorepo:

    $ mkdir example-monorepo

    Inside the folder, create a new package.json with our root workspace.

    $ cd example-monorepo
    $ touch package.json

    This package should be private in order to prevent accidentally publishing the root workspace. Add the following code to your new package.json file to make the package private:

       "private": true,
       "name": "example-monorepo",
       "workspaces": [],

    2. Create A React Project And Add It To The Workspace List

    In this step, we will create a new React project and add it to the list of packages inside the root workspace.

    First, let’s create a folder called packages where we will add the different projects we will create in the tutorial:

    $ mkdir packages

    Facebook has a command to create new React projects: create-react-app. We’ll use it to create a new React app with all the required configuration and scripts. We are creating this new project with the name “client” inside the packages folder that we created in step 1.

    $ yarn create react-app packages/client

    Once we have created our new React project, we need to tell Yarn to treat that project as a workspace. To do that, we simply need to add “client” (the name we used earlier) inside the “workspaces” list in the root package.json. Be sure to use the same name you used when running the create-react-app command.

       "private": true,
       "name": "example-monorepo",
       "workspaces": ["client"],

    3. Create An Express Project And Add It To The Workspace

    Now it’s time to add a back-end app! We use express-generator to create an Express skeleton with all the required configuration and scripts.

    Make sure you have express-generator installed on your computer. You can install it using Yarn with the following command:

    $ yarn global add express-generator --prefix /usr/local

    Using express-generator, we create a new Express app with the name “server” inside the packages folder.

    $ express --view=pug packages/server

    Finally, add the new package “server” into the workspaces list inside the root package.json.

       "private": true,
       "name": "example-monorepo",
       "workspaces": ["client", "server"],

    Note: This tutorial is simplified with only two packages (server and client). In a project, you might typically have as many packages as you need, and by convention the open-source community use this naming pattern: @your-project-name/package-name. For example: I use @ferreiro/server on my website.

    4. Install All The Dependencies And Say Hello To yarn.lock

    Once we have added our React app, as well as our Express server, we need to install all the dependencies. Yarn workspaces simplifies this process and we no longer need to go to every single application and install their dependencies manually. Instead, we execute one command — yarn install — and Yarn does the magic to install all the dependencies for every package, and optimize and cache them.

    Run the following command:

    $ yarn install

    This command generates a yarn.lock file (similar to this example). It contains all the dependencies for your project, as well as the version numbers for each dependency. Yarn generates this file automatically, and you should not modify it.

    5. Using A Wildcard (*) To Import All Your Packages

    Until now, for every new package we have added, we were forced to also update the root package.json to include the new package to the workspaces:[] list.

    We can avoid this manual step using a wildcard (*) that tells Yarn to include all the packages inside the packages folder.

    Inside the root package.json, update the file content with the following line: "workspaces": ["packages/*"]

       "private": true,
       "name": "example-monorepo",
       "workspaces": ["packages/*"],

    6. Add A Script To Run Both Packages

    Last step! We need to have a way to run both packages — the React client and the Express client — simultaneously. For this example, we will use concurrently. This package let us run multiple commands in parallel.

    Add concurrently to the root package.json:

    $ yarn add -W concurrently

    Add three new scripts inside the root workspace package.json. Two scripts initialize the React and Express clients independently; the other one uses concurrently to run both scripts in parallel. See this code for reference.

       "private": true,
       "name": "example-monorepo",
       "workspaces": ["packages/*"],
           "client": "yarn workspace client start",
           "server": "yarn workspace server start",
           "start": "concurrently --kill-others-on-fail "yarn server"  "yarn client"

    Note: We will not need to write our start scripts into the “server” and “client” packages because the tools we used to generate those packages (create-react-app and express-generator) already add those scripts for us. So we are good to go!

    Finally, make sure you update the Express boot-up script to run the Express server on port 4000. Otherwise, the client and server will try to use the same port (3000).

    Go to packages/server/bin/www and change the default port in line 15.

    var port = normalizePort(process.env.PORT || '4000');

    Now we are ready to run our packages!

    $ yarn start

    Where To Go From Here

    Let’s recap what we’ve covered. First, we learned about Yarn workspaces and why it’s a great tool to create a monorepo project. Then, we created our first JavaScript monorepo project using Yarn, and we divided the logic of our app into multiple packages: client and server. Also, we created our first basic npm scripts and added the required dependencies for each app.

    From this point, I’d suggest you review open-source projects in detail to see how they use Yarn workspaces to split the project logic into many packages. React is a good one.

    Jorge Ferreiro’s website using yarn workspaces and packages with a back-end and frontend apps

    Jorge Ferreiro’s website using yarn workspaces and packages with a back-end and frontend apps (Large preview)

    Also, if you want to see a production website using this approach to separate back-end and front-end apps into independent packages, you can check the source of my website, that also includes a blog admin. When I migrated the codebase to use Yarn workspaces, I created a pull request with Kyle Wetch.

    Moreover, I set up the infrastructure for a hackathon project that uses React, webpack, Node.js, and Yarn workspaces, and you can check the source code over here.

    Finally, it would be really interesting for you to learn how to publish your independent packages to become familiar with the development life cycle. There are a couple of tutorials that are interesting to check: yarn publish or npm publish.

    For any comments or questions, don’t hesitate to reach out to me on Twitter. Also, in the following months, I’ll publish more content about this in my blog, so you can subscribe there as well. Happy coding!

    Smashing Editorial
    (dm, og, il)

    10 Amazing Organizational Ideas to Boost Productivity

    • July 18, 2019

    You’re reading 10 Amazing Organizational Ideas to Boost Productivity, originally posted on Pick the Brain | Motivation and Self Improvement. If you’re enjoying this, please visit our site for more inspirational articles.

    boost productivity

    There’s a fun quote around productivity that always makes me smile when I read it: 

    “Drink Coffee – Do stupid things faster, with more energy!” 

    While I enjoy a good cup of coffee, there are definitely more efficient ways to completing your daily tasks to increase productivity. In my desire to be more productive during my time at work, I have run across some great ideas for strengthening everyday productivity. Here are 10 productivity tips for you, whether you’re tired of your physical surroundings at work, or are looking for some fresh mindsets to enhance your efficiency.

    5 Organizational Ideas For Your Work to Increase Productivity

    1. Drink More Water

    Staying hydrated is an essential part of staying productive. Your body needs water; not pop, or coffee, or an energy drink. If you need to be convinced of this fact, read this article on the benefits of drinking water. Keep a water bottle within arm’s reach at all times and use it. If you are working at a computer, use your stretch break as an opportunity to rehydrate. This habit, once formed will help power your body, keep your mind clear, and provide a great alternative to unnecessary calories.

    2. Lose the Phone

    This practice is easier for some than for others. If you need access to your smartphone to complete your work, then disable or silence notifications. If you don’t need your phone to work, put it in another room, out of arm’s reach, or at least out of site. Every time you stop what you are working on to glance at your smartphone or send a quick reply, you’re derailing your productivity. Rebecca Benson states in her Pick The Brain article, “It’s also pretty obvious that phones are incredibly distracting – it’s all too tempting to stop what you’re doing to get the instant gratification of scrolling through Facebook or checking that WhatsApp message.” I couldn’t agree more.

    3. Create an Inspiring Workspace

    Developing a workspace that promotes healthy habits and helps you focus is a great achievement. Why not add to that environment by developing an atmosphere that boosts your creativity? Print out a handful of quotes that inspire you and display them prominently. An encouraging photo of family or friends can be just the inspiration you need to keep working effectively. Bringing natural light or a houseplant into your office is a great way to stay relaxed as you work. You get the idea. Surround yourself with an exclusive selection of reminders to keep you inspired and productive.

    4. Use Music to Aid Your Work

      The jury seems to be out on whether or not listening to music while you work is truly beneficial. (Studies have provided varied results) The safe way to apply this idea is personal experimentation. If you are easily distracted by sudden noises, some ambient music might work well to help you stay on task. On a long and difficult project, epic and uplifting music may give you the emotional lift you need. Piano sonatas are a good choice to help minimize stress and keep you relaxed. The key is to leverage music to promote your work, not distract you from your work. 

    5. Keep a Tidy Workspace

      The old saying “A place for everything and everything in its place” has never been more applicable than in your workzone. Start by making a list of the essentials: the tools and resources you need every day to complete your tasks. Then, organize them and make them accessible. This can be applied to physical objects as well as digital information. (using a password protection app can be a great way to put this into practice) The less time you spend searching the more time you can spend working toward your goal.

    5 Organizational Ideas For Your Mind

    1. Plan Your Day the Night Before

    A healthy amount of sleep is crucial to staying productive, but getting your brain to turn off isn’t always easy. Make a habit of writing down your goals for the next day, before you try going to sleep. This approach not only allows you to get your ideas down on paper (and off your mind) it also gives you a chance to reevaluate and edit your goals the next morning – after you’re rested. 

    2. Focus on Your Big Three

    Once your To-Do list has taken form, it’s time to prioritize. Michael Hyatt talks about focussing on your Big 3 for each day: three tasks that are both essential and time sensitive. Identifying your priorities is a huge step toward achieving them, so take the time to single out your top goals for the day. Then, keep them in a conspicuous spot to help you refocus when you’re in danger of being distracted. 

    3. Find Your Optimal Timespan 

    How long can you work on a task before you burn out? More importantly, how long does it take before your productivity on a given task begins to wane? 15 minutes of cold calling? 30 minutes of designing? 1 hour of writing? Figure out your optimal timeframe for a given project and stick to it. As long as you can stay ahead of any deadlines, this approach to work allows you to optimize your time. Try to divide up your day into time slots that are most effective for your work style. 

    4. Encourage Productive Habits

    Sometimes I get so excited about trying something new, that I overlook something great that’s already a part of my life. It’s tempting to think that some new method is going to immediately and drastically improve my life. (I call this Selective Optimism) Before you go crazy trying to revamp your work day, take a look at habits you’ve already formed. Ask a friend, coworker, or your spouse to help you identify strengths you’ve already formed. Then, find ways to establish those habits; let’s keep a good thing going. 

    5. Appreciate Variety

    This last tip is about living life to the fullest, whether you are working, playing, resting or just trying to stay sane. Realizing the importance of routine is vital to staying productive throughout the day. If you can find purpose in whatever you are doing, you’ll be one step closer to thoroughly enjoying each day. Work is great, so is rest. Appreciate them both and know when to stop one and start the other. 


    Before you dive into your pile of tasks this next week, take another look at how you get things done. Is there a time of day when you tend to drag? Do you feel disorganized and overwhelmed by the clutter surrounding your computer? Are you having trouble getting your mind to relax after you’ve “clocked out”? My hope is that at least one of these 10 tips will enhance your work day and help you achieve greater productivity. Have fun experimenting!

    Ben Tejes is the Co-Founder and CEO of Ascend Finance, a platform to help people achieve self improvement in the area of personal finance. He is a writer for the Ascend Blog where he writes on topics such as Chapter 7, Chapter 13debt, collections and creditors to help people get out of debt and experience financial freedom.

    You’ve read 10 Amazing Organizational Ideas to Boost Productivity, originally posted on Pick the Brain | Motivation and Self Improvement. If you’ve enjoyed this, please visit our site for more inspirational articles.

    DragonFruit and System.CommandLine is a new way to think about .NET Console apps

    • July 18, 2019

    There’s some interesting stuff quietly happening in the “Console App” world within open source .NET Core right now. Within the https://github.com/dotnet/command-line-api repository are three packages:

    • System.CommandLine.Experimental
    • System.CommandLine.DragonFruit
    • System.CommandLine.Rendering

    These are interesting experiments and directions that are exploring how to make Console apps easier to write, more compelling, and more useful.

    The one I am the most infatuated with is DragonFruit.

    Historically Console apps in classic C look like this:

    #include <stdio.h>

    int main(int argc, char *argv[])

    printf("Hello, World!n");
    return 0;

    That first argument argc is the count of the number of arguments you’ve passed in, and argv is an array of pointers to ‘strings,’ essentially. The actual parsing of the command line arguments and the semantic meaning of the args you’ve decided on are totally on you.

    C# has done it this way, since always.

    static void Main(string[] args)

    Console.WriteLine("Hello World!");

    It’s a pretty straight conceptual port from C to C#, right? It’s an array of strings. Argc is gone because you can just args.Length.

    If you want to make an app that does a bunch of different stuff, you’ve got a lot of string parsing before you get to DO the actual stuff you’re app is supposed to do. In my experience, a simple console app with real proper command line arg validation can end up with half the code parsing crap and half doing stuff.

    myapp.com someCommand --param:value --verbose

    The larger question – one that DragonFruit tries to answer – is why doesn’t .NET do the boring stuff for you in an easy and idiomatic way?

    From their docs, what if you could declare a strongly-typed Main method? This was the question that led to the creation of the experimental app model called “DragonFruit”, which allows you to create an entry point with multiple parameters of various types and using default values, like this:

    static void Main(int intOption = 42, bool boolOption = false, FileInfo fileOption = null)
        Console.WriteLine($"The value of intOption is: intOption");
        Console.WriteLine($"The value of boolOption is: boolOption");
        Console.WriteLine($"The value of fileOption is: fileOption?.FullName ?? "null"");

    In this concept, the Main method – the entry point – is an interface that can be used to infer options and apply defaults.

    using System;

    namespace DragonFruit

    class Program

    /// <summary>
    /// DragonFruit simple example program
    /// </summary>
    /// <param name="verbose">Show verbose output</param>
    /// <param name="flavor">Which flavor to use</param>
    /// <param name="count">How many smoothies?</param>
    static int Main(
    bool verbose,
    string flavor = "chocolate",
    int count = 1)

    if (verbose)

    Console.WriteLine("Running in verbose mode");

    Console.WriteLine($"Creating count banana (count == 1 ? "smoothie" : "smoothies") with flavor");
    return 0;

    I can run it like this:

    > dotnet run --flavor Vanilla --count 3   
    Creating 3 banana smoothies with Vanilla

    The way DragonFruit does this is super clever. During the build process, DragonFruit changes this public strongly typed Main to a private (so it’s not seen from the outside – .NET won’t consider it an entry point. It’s then replaced with a Main like this, but you’ll never see it as it’s in the compiled/generated artifact.

    public static async Task<int> Main(string[] args)

    return await CommandLine.ExecuteAssemblyAsync(typeof(AutoGeneratedProgram).Assembly, args, "");

    So DragonFruit has swapped your Main for its smarter Main and the magic happens! You’ll even get free auto-generated help!

    DragonFruit simple example program

    DragonFruit [options]

    --verbose Show verbose output
    --flavor <flavor> Which flavor to use
    --count <count> How many smoothies?
    --version Display version information

    If you want less magic and more power, you can use the same APIs DragonFruit uses to make very sophisticated behaviors. Check out the Wiki and Repository for more and perhaps get involved in this open source project!

    I really like this idea and I’d love to see it taken further! Have you used DragonFruit on a project? Or are you using another command line argument parser?

    Sponsor: Ossum unifies agile planning, version control, and continuous integration into a smart platform that saves 3x the time and effort so your team can focus on building their next great product. Sign up free.

    © 2019 Scott Hanselman. All rights reserved.

    What’s New in Android: Q Beta 3 & More

    • July 18, 2019

    Posted by Dave Burke, VP, Engineering

    Today Android is celebrating two amazing milestones. It’s Android’s version 10! And today, Android is running on more than 2.5B active Android devices.

    With Android Q, we’ve focused on three themes: innovation, security and privacy, and digital wellbeing. We want to help you take advantage of the latest new technology — 5G, foldables, edge-to-edge screens, on-device AI, and more — while making sure users’ security, privacy, and wellbeing are always a top priority.

    Earlier at Google I/O we highlighted what’s new in Android Q and unveiled the latest update, Android Q Beta 3. Your feedback continues to be extremely valuable in shaping today’s update as well as our final release to the ecosystem in the fall.

    This year, Android Q Beta 3 is available on 15 partner devices from 12 OEMs — that’s twice as many devices as last year! It’s all thanks to Project Treble and especially to our partners who are committed to accelerating updates to Android users globally — Huawei, Xiaomi, Nokia, Sony, Vivo, OPPO, OnePlus, ASUS, LGE, TECNO, Essential, and realme.

    Visit android.com/beta to see the full list of Beta devices and learn how to get today’s update on your device. If you have a Pixel device, you can enroll here to get Beta 3 — if you’re already enrolled, watch for the update coming soon. To get started developing with Android Q Beta, visit developer.android.com/preview.

    Privacy and security

    As we talked about at Google I/O, privacy and security are important to our whole company and in Android Q we’ve added many more protections for users.


    In Android Q, privacy has been a central focus, from strengthening protections in the platform to designing new features with privacy in mind. It’s more important than ever to give users control — and transparency — over how information is collected and used by apps, and by our phones.

    Building on our work in previous releases, Android Q includes extensive changes across the platform to improve privacy and give users control — from improved system UI to stricter permissions to restrictions on what data apps can use.

    For example, Android Q gives users more control over when apps can get location. Apps still ask the user for permission, but now in Android Q the user has greater choice over when to allow access to location — such as only while the app is in use, all the time, or never. Read the developer guide for details on how to adapt your app for the new location controls.

    Outside of location, we also introduced the Scoped Storage feature to give users control over files and prevent apps from accessing sensitive user or app data. Your feedback has helped us refine this feature, and we recently announced several changes to make it easier to support. These are now available in Beta 3.

    Another important change is restricting app launches from the background, which prevents apps from unexpectedly jumping into the foreground and taking over focus. In Beta 3 we’re transitioning from toast warnings to actually blocking these launches.

    To prevent tracking we’re limiting access to non-resettable device identifiers, including device IMEI, serial number, and similar identifiers. Read the best practices to choose the right identifiers for your use case. We’re also randomizing MAC address when your device is connected to different Wi-Fi networks and gating connectivity APIs behind the location permission. We’re bringing these changes to you early, so you can have as much time as possible to prepare your apps.


    To keep users secure, we’ve extended our BiometricPrompt authentication framework to support biometrics at a system level. We’re extending support for passive authentication methods such as face, and we’ve added implicit and explicit authentication flows. In the explicit flow, the user must explicitly confirm the transaction. The new implicit flow is designed for a lighter-weight alternative for transactions with passive authentication, and there’s no need for users to explicitly confirm.

    Android Q also adds support for TLS 1.3, a major revision to the TLS standard that includes performance benefits and enhanced security. Our benchmarks indicate that secure connections can be established as much as 40% faster with TLS 1.3 compared to TLS 1.2. TLS 1.3 is enabled by default for all TLS connections made through Android’s TLS stack, called Conscrypt, regardless of target API level. See the docs for details.

    Project Mainline

    Today we also announced Project Mainline, a new approach to keeping Android users secure and their devices up-to-date with important code changes, direct from Google Play. With Project Mainline, we’re now able to update specific internal components within the OS itself, without requiring a full system update from your device manufacturer. This means we can help keep the OS code on devices fresher, drive a new level of consistency, and bring the latest AOSP code to users faster — and for a longer period of time.

    We plan to update Project Mainline modules in much the same way as app updates are delivered today — downloading the latest versions from Google Play in the background and loading them the next time the phone starts up. The source code for the modules will continue to live in the Android Open Source Project, and updates will be fully open-sourced as they are released. Also, because they’re open source, they’ll include improvements and bug fixes contributed by our many partners and developer community worldwide.

    For users, the benefits are huge, since their devices will always be running the latest versions of the modules, including the latest updates for security, privacy, and consistency. For device makers, carriers, and enterprises, the benefits are also huge, since they can optimize and secure key parts of the OS without the cost of a full system update.

    For app and game developers, we expect Project Mainline to help drive consistency of platform implementation in key areas across devices, over time bringing greater uniformity that will reduce development and testing costs and help to make sure your apps work as expected. All devices running Android Q or later will be able to get Project Mainline, and we’re working closely with our partners to make sure their devices are ready.

    Innovation and new experiences

    Android is shaping the leading edge of innovation. With our ecosystem partners, we’re enabling new experiences through a combination of hardware and software advances.


    This year, display technology will take a big leap with foldable devices coming to the Android ecosystem from several top device makers. When folded these devices work like a phone, then you unfold a beautiful tablet-sized screen.

    We’ve optimized Android Q to ensure that screen continuity is seamless in these transitions, and apps and games can pick up right where they left off. For multitasking, we’ve made some changes to onResume and onPause to support multi-resume and notify your app when it has focus. We’ve also changed how the resizeableActivity manifest attribute works, to help you manage how your app is displayed on large screens.

    Our partners have already started showing their innovative foldable devices, with more to come. You can get started building and testing today with our foldables emulator in canary release of Android Studio 3.5.

    5G networks

    5G networks are the next evolution of wireless technology — providing consistently faster speeds and lower latency. For developers, 5G can unlock new kinds of experiences in your apps and supercharge existing ones.

    Android Q adds platform support for 5G and extends existing APIs to help you transform your apps for 5G. You can use connectivity APIs to detect if the device has a high bandwidth connection and check whether the connection is metered. With these your apps and games can tailor rich, immersive experiences to users over 5G.

    With Android’s open ecosystem and range of partners, we expect the Android ecosystem to scale to support 5G quickly. This year, over a dozen Android device makers are launching 5G-ready devices, and more than 20 carriers will launch 5G networks around the world, with some already broad-scale.

    Live Caption

    On top of hardware innovation, we’re continuing to see Android’s AI transforming the OS itself to make it smarter and easier to use, for a wider range of people. A great example is Live Caption, a new feature in Android Q that automatically captions media playing on your phone.

    Many people watch videos with captions on — the captions help them keep up, even when on the go or in a crowded place. But for 466 million Deaf and Hard of Hearing people around the world, captions are more than a convenience — they make content accessible. We worked with the Deaf community to develop Live Caption.

    Live Caption brings real-time captions to media on your phone – videos, podcasts, and audio messages, across any app—even stuff you record yourself. Best of all, it doesn’t even require a network connection — everything happens on the device, thanks to a breakthrough in speech recognition that we made earlier this year. The live speech models run right on the phone, and no audio stream ever leaves your device.

    For developers, Live Caption expands the audience for your apps and games by making digital media more accessible with a single tap. Live Caption will be available later this year.

    Suggested actions in notifications

    In Android Pie we introduced smart replies for notifications that let users engage with your apps direct from notifications. We provided the APIs to attach replies and actions, but you needed to build those on your own.

    Now in Android Q we want to make smart replies available to all apps right now, without you needing to do anything. Starting in Beta 3, we’re enabling system-provided smart replies and actions that are inserted directly into notifications by default.

    You can still supply your own replies and actions if you want — such as if you are using ML Kit or other ML frameworks. Just opt out of the system-provided replies or actions on a per-notification basis using setAllowGeneratedReplies() and setAllowSystemGeneratedContextualActions().

    Android Q suggestions are powered by an on-device ML service built into the platform — the same service that backs our text classifier entity recognition service. We’ve built it with user privacy in mind, and the ML processing happens completely on the device, not on a backend server.

    Because suggested actions are based on the TextClassifier service, they can take advantage of new capabilities we’ve added in Android Q, such as language detection. You can also use TextClassifier APIs directly to generate system-provided notifications and actions, and you can mix those with your own replies and actions as needed.

    Dark theme

    Many users prefer apps that offer a UI with a dark theme they can switch to when light is low, to reduce eye strain and save battery. Users have also asked for a simple way to enable dark theme everywhere across their devices. Dark theme has been a popular request for a while, and in Android Q, it’s finally here.

    Starting in Android Q Beta 3, users can activate a new system-wide dark theme by going to Settings > Display, using the new Quick Settings tile, or turning on Battery Saver. This changes the system UI to dark, and enables the dark theme of apps that support it. Apps can build their own dark themes, or they can opt-in to a new Force Dark feature that lets the OS create a dark version of their existing theme. All you have to do is opt-in by setting android:forceDarkAllowed="true" in your app’s current theme.

    You may also want to take complete control over your app’s dark styling, which is why we’ve also been hard at work improving AppCompat’s DayNight feature. By using DayNight, apps can offer a dark theme to all of their users, regardless of what version of Android they’re using on their devices. For more information, see here.

    Gestural navigation

    Many of the latest Android devices feature beautiful edge-to-edge screens, and users want to take advantage of every bit of them. In Android Q we’re introducing a new fully gestural navigation mode that eliminates the navigation bar area and allows apps and games to use the full screen to deliver their content. It retains the familiar Back, Home, and recents navigation through edge swipes rather than visible buttons.

    Users can switch to gestures in Settings > System > Gestures. There are currently two gestures: Swiping up from the bottom of the screen takes the user to the Home screen, holding brings up Recents. Swiping from the screen’s left or right edge triggers the Back action.

    To blend seamlessly with gestural navigation, apps should go edge-to-edge, drawing behind the navigation bar to create an immersive experience. To implement this, apps should use the setSystemUiVisibility() API to be laid out fullscreen, and then handle WindowInsets as appropriate to ensure that important pieces of UI are not obscured. More information is here.

    Digital wellbeing

    Digital wellbeing is another theme of our work on Android — we want to give users the visibility and tools to find balance with the way they use their phones. Last year we launched Digital Wellbeing with Dashboards, App Timers, Flip to Shush, and Wind Down mode. These tools are really helping. App timers helped users stick to their goals over 90% of the time, and users of Wind Down had a 27% drop in nightly usage.

    This year we’re continuing to expand our features to help people find balance with digital devices, adding Focus Mode and Family Link.

    Focus Mode

    Focus Mode is designed for all those times you’re working or studying, and you want to to focus to get something done. With focus mode, you can pick the apps that you think might distract you and silence them – for example, pausing email and the News while leaving maps and text message apps active. You can then use Quick Tiles to turn on Focus Mode any time you want to focus. Under the covers, these apps will be paused – until you come out of Focus Mode! Focus Mode is coming to Android 9 Pie and Android Q devices this Fall.

    Family Link

    Family Link is a new set of controls to help parents. Starting in Android Q, Family Link will be built right into the Settings on the device. When you set up a new device for your child, Family Link will help you connect it to you. You’ll be able to set daily screen time limits, see the apps where your child is spending time, review any new apps your child wants to install, and even set a device bedtime so your child can disconnect and get to sleep. And now in Android Q you can also set time limits on specific apps… as well as give your kids Bonus Time if you want them to have just 5 more minutes at bedtime. Family Link is coming to Android P and Q devices this Fall. Make sure to check out the other great wellbeing apps in the recent Google Play awards.

    Family link lets parents set device bedtime and even give bonus minutes.

    Android Foundations

    We’re continuing to extend the foundations of Android with more capabilities to help you build new experiences for your users — here are just a few.

    Improved peer-to-peer and internet connectivity

    In Android Q we’ve refactored the Wi-Fi stack to improve privacy and performance, and also to improve common use-cases like managing IoT devices and suggesting internet connections — without requiring the location permission. The network connection APIs make it easier to manage IoT devices over local Wi-Fi, for peer-to-peer functions like configuring, downloading, or printing. The network suggestion APIs let apps surface preferred Wi-Fi networks to the user for internet connectivity.

    Wi-Fi performance modes

    In Android Q apps can now request adaptive Wi-Fi by enabling high performance and low latency modes. These will be of great benefit where low latency is important to the user experience, such as real-time gaming, active voice calls, and similar use-cases. The platform works with the device firmware to meet the requirement with the lowest power consumption. To use the new performance modes, call WifiManager.WifiLock.createWifiLock().

    Full support for Wi-Fi RTT accurate indoor positioning

    In Android 9 Pie we introduced RTT APIs for indoor positioning to accurately measure distance to nearby Wi-Fi Access Points (APs) that support the IEEE 802.11mc protocol, based on measuring the round-trip time of Wi-Fi packets. Now in Android Q, we’ve completed our implementation of the 802.11mc standard, adding an API to obtain location information of each AP being ranged, configured by their owner during installation.

    Audio playback capture

    You saw how Live Caption can take audio from any app and instantly turn it into on-screen captions. It’s a seamless experience that shows how powerful it can be for one app to share its audio stream with another. In Android Q, any app that plays audio can let other apps capture its audio stream using a new API. In addition to enabling captioning and subtitles, the API lets you support popular use-cases like live-streaming games, all without latency impact on the source app or game.

    We’ve designed this new capability with privacy and copyright protection in mind, so the ability for an app to capture another app’s audio is constrained, giving apps full control over whether their audio streams can be captured. Read more here.

    Dynamic depth for photos

    Apps can now request a Dynamic Depth image which consists of a JPEG, XMP metadata related to depth related elements, and a depth and confidence map embedded in the same file on devices that advertise support. Requesting a JPEG + Dynamic Depth image makes it possible for you to offer specialized blurs and bokeh options in your app. You can even use the data to create 3D images or support AR photography use-cases. Dynamic Depth is an open format for the ecosystem — the latest version of the spec is here. We’re working with our device-maker partners to make it available across devices running Android Q and later.

    With Dynamic Depth image you can offer specialized blurs and bokeh options in your app

    New audio and video codecs

    Android Q adds support for the open source video codec AV1, which allows media providers to stream high quality video content to Android devices using less bandwidth. In addition, Android Q supports audio encoding using Opus – a codec optimized for speech and music streaming, and HDR10+ for high dynamic range video on devices that support it. The MediaCodecInfo API introduces an easier way to determine the video rendering capabilities of an Android device. For any given codec, you can obtain a list of supported sizes and frame rates.

    Vulkan 1.1 and ANGLE

    We’re continuing to expand the impact of Vulkan on Android, our implementation of the low-overhead, cross-platform API for high-performance 3D graphics. We’re working together with our device manufacturer partners to make Vulkan 1.1 a requirement on all 64-bit devices running Android Q and higher, and a recommendation for all 32-bit devices. For game and graphics developers using OpenGL, we’re also working towards a standard, updateable OpenGL driver for all devices built on Vulkan. In Android Q we’re adding experimental support for ANGLE on top of Vulkan on Android devices. See the docs for details.

    Neural Networks API 1.2

    In NNAPI 1.2 we’ve added 60 new ops including ARGMAX, ARGMIN, quantized LSTM, alongside a range of performance optimisations. This lays the foundation for accelerating a much greater range of models — such as those for object detection and image segmentation. We are working with hardware vendors and popular machine learning frameworks such as TensorFlow to optimize and roll out support for NNAPI 1.2.

    Thermal API

    When devices get too warm, they may throttle the CPU and/or GPU, and this can affect apps and games in unexpected ways. Now in Android Q, apps and games can use a thermal API to monitor changes on the device and take action to help restore normal temperature. For example, streaming apps can reduce resolution/bit rate or network traffic, a camera app could disable flash or intensive image enhancement, or a game could reduce frame rate or polygon tesselation. Read more here.

    ART optimizations

    Android Q introduces several improvements to the ART runtime to help your apps start faster, consume less memory, and run smoother — without requiring any work from you. To help with initial app startup, Google Play is now delivering cloud-based profiles along with APKs. These are anonymized, aggregate ART profiles that let ART pre-compile parts of your app even before it’s run. Cloud-based profiles benefit all apps and they’re already available to devices running Android P and higher.

    We’re also adding Generational Garbage Collection to ART’s Concurrent Copying (CC) Garbage Collector. Generational CC collects young-generation objects separately, incurring much lower cost as compared to full-heap GC. It makes garbage collection more efficient in terms of time and CPU, reduces jank, and helps apps run better on lower-end devices.

    More Android Q Beta devices, more Treble momentum than ever

    In 2017 we launched Project Treble as part of Android Oreo, with a goal of accelerating OS updates. Treble provides a consistent, testable interface between Android and the underlying device code from device makers and silicon manufacturers, which makes porting a new OS version much simpler and more modular.

    In 2018 we worked closely with our partners to bring the first OS updates to their Treble devices. The result: last year at Google I/O we had 8 devices from 7 partners joining our Android P Beta program, together with our Pixel and Pixel 2 devices. Fast forward to today — we’re seeing updates to Android Pie accelerating strongly, with 2.5 times the footprint compared to Android Oreo’s at the same time last year.

    This year with Android Q we’re seeing even more momentum, and we have 23 devices from 13 top global device makers releasing Android Q Beta 3 — including all Pixel devices. We’re also providing Q Beta 3 Generic System Images (GSI), a testing environment for other supported Treble devices. All of these offer the same behaviors, APIs, and features — giving you an incredible variety of devices for testing your apps, and more ways for you to get an early look at Android Q.

    You can see the full list of supported partner and Pixel devices at android.com/beta. Try Android Q Beta on your favorite device today and let us know your feedback!

    Explore the new features and APIs

    When you’re ready, dive into Android Q and learn about the new features and APIs you can use in your apps. Take a look at the API diff report for an overview of what’s changed in Beta 3, and see the Android Q Beta API reference for details. Visit the Android Q Beta developer site for more resources, including release notes and how to report issues.

    To build with Android Q, download the Android Q Beta SDK and tools into Android Studio 3.3 or higher, and follow these instructions to configure your environment. If you want the latest fixes for Android Q related changes, we recommend you use Android Studio 3.5 or higher.

    How do I get Beta 3?

    It’s easy! Just enroll any Pixel device here to get the update over-the-air. If you’re already enrolled, you’ll receive the update soon, and, no action is needed on your part. Downloadable system images are also available.

    You can also get Beta 3 on any of the other devices participating in the Android Q Beta program, from some of our top device maker partners. You can see the full list of supported partner and Pixel devices at android.com/beta. For each device you’ll find specs and links to the manufacturer’s dedicated site for downloads, support, and to report issues.

    For even broader testing on supported devices, you can also get Android GSI images, and if you don’t have a device you can test on the Android Emulator — just download the latest emulator system images via the SDK Manager in Android Studio.

    As always, your input is critical, so please let us know what you think. You can use our hotlists for filing platform issues (including privacy and behavior changes), app compatibility issues, and third-party SDK issues. You’ve shared great feedback with us so far and we’re working to integrate as much of it as possible in the next Beta release.

    We’re looking forward to seeing your apps on Android Q!

    Blurring Offline and Online: More on the Potential of Long Tail Social Media

    • July 18, 2019

    Photo by Ben Seidelman.

    Earlier this week, I began a discussion about long tail social media. The premise behind this trend is that as our internet habits mature, we no longer need social platforms with massive user bases.

    I’m cautiously optimistic about this model as I think niche networks can better deliver on the promise of the social internet while avoiding pitfalls like engineered addiction and emotional manipulation. (These smaller alternatives also tend to be better on the legal-techno geek issues like data privacy and effective contention moderation.)

    In response to my recent post on this topic, a reader pointed me toward a fascinating long tail social media case study that I wanted to briefly share, as I think it helps underscore the potential of this movement.

    In 2017, serial entrepreneur Gina Bianchini launched a new startup called Mighty Networks. Fellow net nerds might remember Bianchini from her 2007 company, Ning, which let users setup their own customized social networks. Ning was ahead of its time, as it launched in a period when most people were largely unfamiliar with social networking. Mighty Networks is trying again: but this time focused on mobile devices and pitching to an audience much more familiar with this mode of interaction.

    The basic idea is that individuals use the software to setup custom social networks for their existing communities. The network operates like a fancy Facebook Group, with discussions divided into topics that you can easily browse and join. It also makes it easy to setup mastermind groups, virtual conferences, and offer courses.

    The example networks I saw were focused (a couple thousand users at most), and typically charged subscription fees from the users (eliminating the need to sell ads or harvest data).

    The feature, however, that really piqued my interest, and instigated this post, is the ability to find community members near you in the physical world.

    To be more concrete, consider the specific Mighty Network that was originally brought to my attention: The Little Black Dress Academy — a small-size, exclusive social network for women business leaders.

    If you’re a member of this network, and enjoy the discussions, you’re encouraged to use a built-in feature that lets you find women leaders who live nearby so you can setup offline get togethers. Similarly, if you’re traveling, you can find members in the city you’re visiting and setup an impromptu coffee date or dinner — injecting a jolt of extra value into the trip.

    This blurring of the offline and online would never work on a mass market platform like Facebook or Twitter — could you imagine! — but on small networks, made up of paying members with pre-existing bonds, it provides a major boost to the social value the online tool generates.

    This is just an isolated example, but it hints at an intriguing conclusion I’ve been interrogating in my recent work: perhaps in attempting to consolidate the social internet into a small number of massive platforms, we were accidentally stripping away much of the potential of this technology to actually make us more social.