Gropweb
News Update
Loading...

Featured

[Featured][recentbylabel]

Featured

[Featured][recentbylabel]

الاثنين، 28 فبراير 2022

Python may be a hard

Python may be a hard

Python may be easy but it’s a goddamn mess

By industry leaders and academic researchers a like, Python is touted as one of the absolute best languages for novice programmers. And they’re not wrong — but that doesn’t mean that it doesn’t confuse the shit out of programming newbies anyway.


Take dynamic typing as an example. It seems amazing at first: Python figures out by itself what sort of value a variable might take, and you don’t need to waste another line of code by telling it. This makes everything go faster!


At first. Then you mess it up on one single line — yes, one! — and your whole project crashes before it’s finished running.


Got plans this June?

Tickets to TNW 2022 are available now!


To be fair, many other languages use dynamic typing. But in the case of Python, this is only the beginning of the shit-list.


Reading code gets messy with implicitly declared variables

When I started my Ph.D. a couple of years ago, I wanted to develop an existing software, written by a colleague, further. I understood the basic idea of what it was doing, and my colleague had even written a paper about it as documentation.


But I still needed to read through thousands of lines of Python code to make sure I knew which part did what, and where I could put the new features I had in mind. That’s where it got problematic…


The whole code was littered with variables that were declared nowhere. To understand what every variable was there for, I had to search for it throughout the whole file and, more often, across the whole project.


Add the complication that a variable is often called one thing inside a function, but then something else when the function is called… And the fact that a variable can be intertwined with one class which is tied to another variable from another class which influences a different class… You get the idea.


I’m hardly alone with this experience. The Zen of Python clearly says explicitly is better than implicit. But it’s so easy to do implicit variables in Python that, especially in large projects, sh*t hits the fan very quickly.


Mutable types are hiding everywhere — even in functions

In Python, you can define functions with optional arguments — that is, arguments that you don’t need to state explicitly afterward — by providing a default value. Like so:


def add_five(a, b=0):

return a + b + 5

That’s a silly example, I know. But the idea is that you can call the function with one argument now, or two, and it works anyways:


add_five(3) # returns 8

add_five(3,4) # returns 12

This works because the expression b=0 is defining b as an integer, and integers are immutable. Now consider this:


def add_element(list=[]):

list.append("foo")

return list

add_element() # returns ["foo"], as expected

So far, so good. But what happens if you execute it again?


add_element() # returns ["foo", "foo"]! wtf!

Because a list, the [“foo”] one, already exists, Python just appends its thing to that one. This works because lists, unlike integers, are mutable types.


“Insanity is doing the same thing over and over again and expecting different results,” so goes the common saying (it’s often misattributed to Albert Einstein). One could also say, Python plus optional arguments plus mutable objects is insanity.


Class variables aren’t safe from danger

If you thought that such problems are limited to the — admittedly not so ubiquitous — case of mutable objects as optional arguments, you’re mistaken.


If you do object-oriented programming — that is almost everyone — classes are everywhere in your Python code. And one of the most useful features of classes of all time is… (drumroll)

… inheritance.


Which is just a fancy word for saying that if you have a parent class with some properties, you can create children which inherit the same properties. Like this:


class parent(object):

x = 1

class first child(parent):

pass

class secondchild(parent):

pass

print(parent.x, firstchild.x, secondchild.x) # returns 1 1 1

This isn’t a particularly brainy example, so don’t copy it into your code projects. The point is, the child classes inherit the fact that x = 1, so we can call it and get the same result for the child classes as for the parent.

And if we change the x attribute of a child, it should change that child only. Like when you dyed your hair as a teen; that didn’t change your parents’ or your siblings’ hair either. This works:


first child.x = 2

print(parent.x, first child.x, second child.x) # returns 1 2 1

And what happened when you were little and mommy dyed her hair? Your hair didn’t change, right?


parent.x = 3

print(parent.x, firstchild.x, secondchild.x) # returns 3 2 3

Ew.


This happens because of Python’s Method Resolution Order. The child classes inherit everything the parents have, as long as it’s not stated otherwise. So, in Python-world, if you don’t protest in advance, mommy dyes your hair whenever she does hers.


Scopes go inside out sometimes

This next one I’ve stumbled over so many times.


In Python, if you’re defining a variable inside a function, this variable won’t work outside the function. One says it’s out of scope:


def myfunction(number):

basenumber = 2

return basenumber*number

basenumber

## Oh no! This is the error:

# Traceback (most recent call last):

# File "", line 1, in

# NameError: name 'basenumber' is not defined

This should be rather intuitive (and no, I didn’t stumble over that part).


But what about the other way around? I mean, what if I define a variable outside a function, and then reference it inside a function?


x = 2

def add_5():

x = x + 5

print(x)

add_5()

## Oh dear...

# Traceback (most recent call last):

# File "", line 1, in

# File "", line 2, in add_y

# UnboundLocalError: local variable 'x' referenced before assignment

Strange, right? If Albert lives in a world that contains trees, and Albert lives inside of a house, surely Albert still knows what trees look like? (The tree is x, Albert’s house is add_5() and Albert is 5…)


I’ve stumbled over this so many times while trying to define functions in one class that get called from another class. It took me a while to get to the root of the problem.


The thought behind this is that x inside the function is different from the x outside, and so you can’t just change it like that. Like if Albert dreams about turning the trees orange — that doesn’t make the trees orange of course.


Luckily, there’s a simple solution to this problem. Just slap a global before x!


x = 2

def add_5():

global x

x = x + 5

print(x)

add_5() # works!

So if you thought scopes only shield variables inside functions from the outside world, think again. The outside world gets protected from local variables in Python, in the same way, that Albert can’t color trees orange with the power of his thoughts.


Modifying lists while iterating over them


Eh, well… yes, I’ve managed to run into such bullsh*ttery myself a couple of times.


Consider this:


mynumbers = [x for x in range(10)]

# this is [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

for x in range(len(mynumbers)):

if mynumbers[x]%3 == 0:

mynumbers.remove(mynumbers[x])

## Ew!

# Traceback (most recent call last):

# File "", line 2, in

# IndexError: list index out of range

This loop doesn’t work because it deletes an element of the list every so often. The list’s end, therefore, shifts forward. Then it’s impossible to arrive at element number 10 because it’s no longer there!


One dirty but handy workaround is assigning a silly value to all elements that you want to delete, and then removing them in the next step.


But there’s a much better solution:


mynumbers = [x for x in range(10) if x%3 != 0]

# that's what we wanted! [1, 2, 4, 5, 7, 8]

Just one line of code!


Note that we’ve already used Python’s list comprehension in the broken example above, to invoke the list.


It’s the expression in the square brackets [] and is a short form for loops. List comprehensions are often a little bit faster than regular loops, which is cool if you’re handling large datasets.


Unlike some of the phenomena described above, this isn’t a case of Python madness. Even if beginners may stumble over this at first, this is Python genius.


Some light at the horizon

Back in the day, coding wasn’t the only pain when it came to Python-related woes.


Python also used to be incredibly slow at execution, running anywhere from 2 to 10 times slower than most other languages.


This has gotten a lot better now. The Numpy package, for example, is incredibly fast at handling lists, matrices, and the like.


Multiprocessing has gotten much easier with Python, too. This lets you use all your 2 or 16 or however many cores of your computer, instead of just one. I’ve been running processes on 20 cores at a time and, boy, it’s saved me weeks of computing time already.


Also, as machine learning has taken up steam over the past few years, Python has shown that it has places to go. Packages like Pytorch and Tensorflow make this dead easy, and other languages are struggling to keep up.


However, the fact that Python has become better over the years doesn’t guarantee a rosy future.


Python still isn’t idiot-proof. Use it with caution.


This article was originally published on Medium. You can read it here.

Oi, developers! ‘Best practices’ can turn you into complacent

Oi, developers! ‘Best practices’ can turn you into complacent

 Oi, developers! ‘Best practices’ can turn you into complacent a-holes

Have you ever baked cookies and wondered why the recipe is exactly that way and no other? If you changed this ingredient up or that temperature, would it make the cookies even better? I certainly have had these thoughts. It’s the reason why most of the things I bake aren’t very edible…

When it comes to programming, these thoughts arise too. What if I wrote this part as a separate function? If I hard-coded this bit over there, would it make the code easier? Can I rewrite those ten ugly lines into two elegant ones?

Ask Edward Snowden anything live during his talk!

There are no recipes in programming, but there are best practices. They’re not precise like a recipe, but clear enough that it’s evident if you haven’t implemented them. Like with recipes, some best practices get repeated over generations of programmers. Sometimes it makes sense to do so; sometimes that’s nothing more than a tradition. Cargo cult programming, if you wish to call it that way.

But eventually, even the coolest tradition dies out or evolves into something more useful. The same will happen with some, but not all, best practices in programming.

Simultaneous “don’t repeat yourself” and separation of concerns doesn’t work


Recently I reviewed some of my old code and noticed that the same four lines of code popped up three times in the same file.

Now, any person who has studied any formal computer science (not me, I did physics) will tell you that this is silly because you need to keep your code DRY. Don’t Repeat Yourself has become a mantra of sort


I’m not a computer science major, but I do read a bit, and I’d internalized that mantra. So I took those four lines and put them in a function.


Then I noticed that I couldn’t do that so easily because those four lines weren’t completely identical. A small change on the third line meant that I’d have to add at least one option to my new function. I’d also need an if-clause and perhaps a new boolean parameter to invoke that option.


That would’ve made the code as complicated as it was before.


But then I noticed that those four lines always get invoked after calling other functions, two different functions across three different places, and so I thought I might as well add the four lines to those functions. This worked well because the small change on the third line would be handled by each of the preceding functions, and one of the two already contained a matching parameter.


This did simplify my code slightly. I did end up repeating myself, but only twice instead of three times. And I violated the Single Responsibility Principle because my two functions were doing more than they were advertised for.


You could argue that I probably just wrote bad code and that there might be much more elegant workarounds for what I was trying to accomplish. And these workarounds might have even satisfied both principles.


Fair enough. It’s hard to disprove a claim like that.


But programmers aren’t paid to write the most elegant and beautiful code of the decade. They’re paid to make something work.


My project works. And more code cosmetics would cost me valuable time that I’d rather spend on other projects that aren’t working yet.


Maybe I’m just so dumb I can’t even get two programming principles two work. But I guarantee you that there are whole swathes of programmers that are on a similar level as me.


Swathes of people who can’t get DRY and SRP to work together either.


It’s unlikely that this would cause DRY to dry out (sorry, the pun had to be). It’s an extremely useful principle for example in functional programming, which is taking up steam these days.


The Single Responsibility Principle, on the other hand, might become rarer. Think about neural networks, for example. They don’t figure out one single thing. The more sophisticated ones understand and react to, millions of different images, text messages, or complicated proteins. That’s the opposite of SRP.


In other words… SRP is DRYing out.


Please reinvent the wheel from time to time

Like DRY and SRP, this practice was popularized by people with good intentions. But that doesn’t change the fact that it isn’t always sensible to implement.


The idea is that if a solution to your problem already exists, you should use it. It’s probably less buggy and more efficient than your home-cooked solution.


There are a few problems with this thought.


First of all, existing solutions rarely match your specific problem 100 percent. So it’s quite likely that you’ll solve, say, 75 percent by importing a solution or a package that addresses your issue. But you’ll still have to do a substantial part of the legwork yourself, plus testing, debugging and maintaining.


Second, existing solutions often have more than one feature. And you’ll probably not use all the features. So you’ll be introducing a certain amount of superfluous code to your project, which makes it harder to understand and harder to maintain. You could have avoided that by custom-building your own.


Third, beware of incorporating open-source solutions in proprietary projects. This is a violation of copyright and can, in the worst case, get you into legal trouble. If you use open-source code in your project, your project should be open-source too.


Finally, reinventing the wheel won’t guarantee freedom of bugs anyway. Even if it’s tried, tested, and up-to-date (which is rare enough), you still have to incorporate it right and write the boilerplate code around it.


So why not write your custom solution, make a few mistakes in the process, and learn from them? These kinds of lessons can be extremely valuable, and they’ll make you a much more valuable programmer in the long run.


Quantity over quality

Writer Sean Kernan (he’s great, check him out) has a great piece about how you should push for quantity, not for quality when you’re doing creative work.


For writing, this means that if you write one article a month and polish it until it’s great, it’s going to be around about okay. Not great, because you haven’t used your writing muscles very much with only one article. But not bad-bad because you’ve polished it up quite a bit.


But if you wrote 30 articles in one month, it’s quite unlikely that all of them would only be bad-bad or okay. Some of them will be great, and one or two of them might even be excellent.


Of course, you haven’t had the time to polish your work as much, but your writing muscles will be Arnold-Schwarzenegger-size once the month is over. And you’ll have had the time to make every possible mistake, from typos to treading on other people’s feet, and hopefully internalized the lessons.


Now, you might object that programming is rather different to free writing.


Yes, programming is more technical than writing and you might need a lot more background knowledge to even start. But programming is, in its essence, quite a creative discipline.


Programming is basically about finding interesting, elegant, and efficient ways to solve problems with a computer. That’s creative!


Detractors might say that 100 pieces of mediocre code are still mediocre, and one piece of great code is therefore better.


But seriously, if you have 100 shots surely you’ll shoot one in the right direction! By the laws of statistics, if 100 pieces of on-average mediocre code, ten will be great and two will be excellent — and that’s better than one piece of great code.


So code more, make more mistakes, and learn more.


Best practices turn you into a complacent a-hole

It boils down to this: You‘re free to follow all best practices.


But they might limit your thinking and blind you to more innovative solutions.


If you want to stand out positively, use best practices as guidelines. Break those guidelines when that seems appropriate to you.


People who always follow the rules become complacent. And complacency, over time, kills success.


Start breaking the rules and you have a shot at joining the great heads.


Repeat yourself if that’s better for you.


Leave your responsibilities tangled if that’s easier to maintain.


Code your solutions instead of importing existing ones that don’t fit perfectly.


And code more. Much more. Even if it’s bad or buggy. There’ll be a few gemstones in the mess you create.


This article was originally published on Medium. You can read it here.

AI’s true purpose is freeing up humans to find the big problem

AI’s true purpose is freeing up humans to find the big problem

 AI’s true purpose is freeing up humans to find the biggest problems

Last week’s announcement of AlphaCode, DeepMind’s source code–generating deep learning system, created a lot of excitement—some of it unwarranted—surrounding advances in artificial intelligence.


As I’ve mentioned in my deep dive on AlphaCode, DeepMind’s researchers have done a great job in bringing together the right technology and practices to create a machine learning model that can find solutions to very complex problems.


However, the sometimes-bloated coverage of AlphaCode by the media highlights the endemic problems with framing the growing capabilities of artificial intelligence in the context of competitions meant for humans.


Measuring intelligence with tests

Got plans this June?

Tickets to TNW 2022 are available now!


For decades, AI researchers and scientists have been searching for tests that can measure progress toward artificial general intelligence. And having envisioned AI in the image of the human mind, they have turned to benchmarks for human intelligence.


Being multidimensional and subjective, human intelligence can be difficult to measure. But in general, there are some tests and competitions that most people agree are indicative of good cognitive abilities.


Think of every competition as a function that maps a problem to a solution. You’re provided with a problem, whether it’s a chessboard, a go board, a programming challenge, or a science question. You must map it to a solution. The size of the solution space depends on the problem. For example, go has a much larger solution space than chess because it has a larger board and a bigger number of possible moves. On the other hand, programming challenges have an even vaster solution space: There are hundreds of possible instructions that can be combined in nearly endless ways.


But in each case, a problem is matched with a solution and the solution can be weighed against an expected outcome, whether it’s winning or losing a game, answering the right question, maximizing a reward, or passing the test cases of the programming challenge.


A game in progress on a Go board

A game in progress on a Go board. Image via Pixabay

When it comes to us humans, these competitions test the limits of our intelligence. Given the computational limits of the brain, we can’t brute-force our way through the solution space. No chess or go player can evaluate millions or thousands of moves at each turn in a reasonable amount of time. Likewise, a programmer can’t randomly check every possible set of instructions until one results in the solution to the problem.


We start with a reasonable intuition (abduction), match the problem to previously seen patterns (induction), and apply a set of known rules (deduction) continuously until we refine our solution to an acceptable solution. We hone these skills through training and practice, and we become better at finding good solutions to the competitions.


In the process of mastering these competitions, we develop many general cognitive skills that can be applied to other problems, such as planning, strategizing, design patterns, theory of mind, synthesis, decomposition, and critical and abstract thinking. These skills come in handy in other real-world settings, such as business, education, scientific research, product design, and the military.


In more specialized fields, such as math or programming, tests take on more practical implications. For example, in coding competitions, the programmer must decompose a problem statement into smaller parts, then design an algorithm that solves each part and put it all back together. The problems often have interesting twists that require the participant to think in novel ways instead of using the first solution that comes to mind.


Interestingly, a lot of the challenges you’ll see in these competitions have very little to do with the types of code programmers write daily, such as pulling data from a database, calling an API, or setting up a web server.


But you can expect a person who ranks high in coding competitions to have many general skills that require years of study and practice. This is why many companies use coding challenges as an important tool to evaluate potential hires. Otherwise said, competitive coding is a good proxy for the effort that goes into making a good programmer.


Mapping problems to solutions

When competitions, games, and tests are applied to artificial intelligence, the computational limits of the brain no longer apply. And this creates the opportunity for shortcuts that the human mind can’t achieve.


Take chess and go, two board games that have received much attention from the AI community in the past decades. Chess was once called the drosophila of artificial intelligence. In 1996, DeepBlue defeated chess grandmaster Garry Kasparov. But DeepBlue did not have the general cognitive skills of its human opponent. Instead, it used the sheer computational power of IBM’s supercomputers to evaluate millions of moves every second and choose the best one, a feat that is beyond the capacity of the human brain.


At the time, scientists and futurists thought that the Chinese board game go would remain beyond the reach of AI systems for a good while because it had a much larger solution space and required computational power that would not become available for several decades. They were proven wrong in 2016 when AlphaGo defeated go grandmaster Lee Sedol.


But again, AlphaGo didn’t play the game like its human opponent. It took advantage of advances in machine learning and computation hardware. It had been trained on a large dataset of previously played games—a lot more than any human can play in their entire life. It used deep reinforcement learning and Monte Carlo Tree Search (MCTS)—and again the computational power of Google’s servers—to find optimal moves at each turn. It didn’t do a brute-force survey of every possible move like DeepBlue, but it still evaluated millions of moves at every turn.


AlphaCode is an even more impressive feat. It uses transformers—a type of deep learning architecture that is especially good at processing sequential data—to map a natural language problem statement to thousands of possible solutions. It then uses filtering and clustering to choose the 10 most-promising solutions proposed by the model. Impressive as it is, however, AlphaCode’s solution-development process is very different from that of a human programmer.


Humans are problem finders, AIs are problem solvers

alpha code hyped headlines

When thought of as the equivalent of human intelligence, advances in AI lead us to all kinds of wrong conclusions, such as robots taking over the world, deep neural networks becoming conscious, and AlphaCode being as good as an average human programmer.


But when viewed in the framework of searching solution spaces, they take on a different meaning. In each of the cases described above, even if the AI system produces outcomes that are similar to or better than those of humans, the process they use is very different from human thinking. These achievements prove that when you reduce competition to a well-defined search problem, then with the right algorithm, rules, data, and computation power, you can create an AI system that can find the right solution without going through any of the intermediary skills that humans acquire when they master the craft.


Some might dismiss this difference as long as the outcome is acceptable. But when it comes to solving real-world problems, those intermediary skills that are taken for granted and not measured in the tests are often more important than the test scores themselves.


What does this mean for the future of human intelligence? I like to think of AI—at least in its current form—as an extension instead of a replacement for human intelligence. Technologies such as AlphaCode cannot think about and design their problems—one of the key elements of human creativity and innovation—but they are very good problem solvers. They create unique opportunities for very productive cooperation between humans and AI. Humans define the problems, set the rewards or expected outcomes, and the AI helps by finding potential solutions at superhuman speed.


There are several interesting examples of this symbiosis, including a recent project in which Google’s researchers formulated a chip floor-planing task as a game and had a reinforcement learning model evaluate numerous potential solutions until it found an optimal arrangement. Another popular trend is the emergence of tools like AutoML, which automate aspects of developing machine learning models by searching for optimal configurations of architecture and hyperparameter values. AutoML is making it possible for people with little experience in data science and machine learning to develop ML models and apply them to their applications. Likewise, a tool like AlphaCode will provide programmers to think more deeply about specific problems, formulate them into well-defined statements and expected results, and have the AI system generate novel solutions that might suggest new directions for application development.


Whether these incremental advances in deep learning will eventually lead to AGI remains to be seen. But what’s for sure is that the maturation of these technologies will gradually create a shift in task assignment, where humans become problem finders and AIs become problem solvers.


This article was originally published by Ben Dickson on TechTalks, a publication that examines trends in technology, how they affect the way we live and do business, and the problems they solve. But we also discuss the evil side of technology, the darker implications of new tech, and what we need to look out for. You can read the original article here.

We tried a bunch of free Windows apps from the Microsoft Store — here are our favorites

We tried a bunch of free Windows apps from the Microsoft Store — here are our favorites

 We tried a bunch of free Windows apps from the Microsoft Store — here are our favorites

The Microsoft Store has been around for nearly 10 years now — it launched as the Windows Store with Windows 8 — but compared to app marketplaces on other platforms, it can feel like a barren wasteland. On Windows, I’d hazard the vast majority of apps are still installed via old-school .exe files and other third-party programs.


Still, there are benefits to perusing through Microsoft’s app store.


Most of the software there tends to be better-optimized for touchscreens, which is handy if you have a 2-in-1 PC. Likewise, Microsoft has more control over the apps that land on its marketplace, which helps prevent the spread of malware.


Are we most creative when we're alone?

Here’s what the experts say


In general, these apps also use more modern code and are optimized to use fewer system resources. They tend to behave more like mobile apps in this regard, although there are some more traditional apps and system utilities in the Windows Store as well.


If you haven’t checked out the Microsoft Store in a long time, we’ve done the arduous work of searching through its selection of apps for some hidden gems. Here are some Store apps you should check out.


PowerToys

PowerToys is a utility package created by Microsoft that adds a variety of genuinely useful features to Windows 11, along with system-wide shortcuts to access them.

Some highlights include:


Fancy Zones: this allows you to create custom window layouts, which is especially useful if you have a large monitor or multi-monitor setup.

Color Picker: a system-wide color picker that could be useful for designers and visual artists.

Video Conference Mute: a universal ‘mute’ button for both your microphone and camera that works with any software.

Always On Top: lets you ‘pin’ any app so it doesn’t become obscured by other windows.

Image Resizer: resize any image into a variety of configurable sizes by simply right-clicking from the File Explorer.

PowerToys Run: this is the Windows equivalent to macOS’ Spotlight, offering a few more features over boring-old Start menu search. That includes searching for files, as well as running processes, doing quick calculations, running shell commands, executing system tasks, and much more.

Awake: quickly customize how long your screen and system stay on.

And there’s much more. Better yet, Microsoft is constantly adding features to PowerToys — it’s one of the best utilities the company has ever made for Windows.


Drawboard PDF

Drawboard PDF has been around since Windows 8 days, and it’s one of the few Windows Store apps that’s been continuously updated since then. What makes Drawboard special as a PDF annotation tool is its combination of intuitive markup features and thoughtful design — it looks and feels every bit like a modern app, and is especially handy if you have a touchscreen laptop with stylus support.

  • Drawboard PDF

Although some features are available as paid upgrades, it’s a full-fledged PDF reader even in free mode. I use it regularly to sign documents, scribble on textbooks, and annotate sheet music — and it’s also the best PDF reader I’ve come across for Windows.


  • Netflix

In general, I’m trying to avoid apps that work just fine through a browser. Indeed, some of the streaming ‘apps’ in the Windows Store are just web apps packaged into an app you can pin to your Start Menu, offering otherwise identical functionality to the browser versions.


But the Netflix app offers a few benefits over its web version: most notably, full resolution and the ability to download episodes.


By default, Netflix maxes out to 720p in almost every browser, which is pretty ludicrous considering 1080p is a bare minimum on almost every display these days. Only Edge and the Netflix Windows App officially support higher resolutions; if you don’t want to use Microsoft’s browser, the Windows App is your only way to get a full resolution (you might also need to install an HEVC codec as well if you want 4K resolution).


Of course, if you want to watch Netflix content on the go, you’re much better off downloading it beforehand than hoping for a strong Wi-Fi signal at an airport or another venue.


FocusCommit

FocusCommit combines task management features with a Pomodoro timer to help keep you productive. You can keep track of your tasks using a Trello-like Kanban board, or a standard to-do list.





It also offers some useful bonus features, such as statistics on task completion and goals to keep yourself motivated. The app also has additional features behind a paywall, including several white noise options and integration with Google Tasks and Microsoft To-Do.


Modern Flyouts

One of the biggest complaints about Windows 11 was that it felt unfinished. Despite being one of the biggest Windows redesigns ever, some elements of the UI remain outdated. One notable eyesore is the flyouts — the little pop-ups that show up when you adjust your volume or brightness. These have been essentially unchanged since Windows 8.



Modern Flyout is a small app that simply replaces the outdated rectangular flyouts with new ones that are a much better match for Window 11’s aesthetic.


Keep in mind that Microsoft is already working on an update to these design elements, but who knows when they will be available to the wider public?


Splash!

There are three types of people in the world: those who change their wallpaper regularly, those who may be set their wallpaper once every few years, and those who are still using the stock Windows background.


If you’re in the latter categories, Splash! allows you to automatically update your wallpaper and lock screen using images from stock photography site Unsplash. You can set images to update at a variety of intervals, from 15 minutes to one week. The free app supports resolutions up to 1080p, but the paid version ($2.49) supports 4K content.


Files

For years, Microsoft has promised improvements to the built-in File Explorer, but its basic functionality and design have barely changed in decades. Windows 11 saw some aesthetic improvements, but the simply-named Files app is the update I wish Microsoft made.



That’s mainly because of one basic feature: tabs. At long last, you can have multiple explorer instances in one window, helping keep things organized. It also allows you to view two tabs at the same time in its dual-pane mode.


Tabs aside, Files also just looks nicer, incorporating the translucent acrylic elements of Microsoft’s Fluent design language throughout the entire window, rather than only a small part of it. And as far as I can tell, it offers nearly all the same day-to-day functionality of the built-in app. Outside of the occasional bug, it’s simply better than Microsoft’s built-in solution.


Paint 3D

Microsoft Paint has been a staple of Windows since version 1.0, and it’s seen remarkably few updates since then. But in 2016, the company tried to legitimately modernize the app with a replacement called Paint 3D.


Paint 3D

I made a wolf-eat pizza ‘cuz why not.

Released in 2017, it was initially met with some controversy because people didn’t want classic Paint to go away. It’s no longer included with Windows 11 and its future is uncertain — but it’s still a neat way to sketch quick ideas and create some rudimentary 3D images, thanks to an intuitive UI and a multitude of built-in 3D models.


Photoshop Express

You guessed it: Photoshop Express is a lightweight version of Photoshop. Though it’s far less powerful than the full version, it’s also free, and free is nice. You can use the app to apply a variety of filters to photos, adjust lighting parameters like shadows and highlights, smooth skin and remove artifacts, and more.


It’s a great little image editor for modifying pictures in a pinch, especially if you have a touch-screen device.


Journal

This recommendation only applies to people who use a PC with a stylus, but Journal may just be the best note-taking app on Windows — even better than Microsoft’s own OneNote.


While OneNote is completely jam-packed with features for both handwriting and typing (made even more confusing because Microsoft currently offers two versions of the app), Journal is a stripped-down, stylus-only affair. It’s meant to replicate the feeling of writing in an actual notebook while offering a touch of modernization through clever handwriting tricks.



For example, you can select items by simply circling them, or erase them by scratching them out — no need to switch modes. Even more useful are the organization tricks: you can draw an asterisk next to a line of text to bookmark it, for example, or create a heading by simply underlining large text. Microsoft then uses machine learning to allow you to copy and paste your text to other applications as well. How neat is that?


Amazon Appstore

One of the best apps you can get for Windows 11 is… an app that gets you more apps. With the most recent Windows 11 update, Microsoft has started to roll out the Amazon Appstore, which currently offers about 1,000 Android apps and games. Few of these are truly great, but the list is rapidly growing.

Windows 11 Amazon app store android app store

If you’re tech-savvy or just like to live dangerously, installing the Amazon Appstore also opens the door to sideloading Android apps that haven’t been officially sanctioned to work with Windows 11 by Microsoft and Amazon. Doing so is currently a convoluted process, especially if you need access to Google Play services, but there are guides aplenty for getting all sorts of Android apps running.


Sideloading apps should be done with serious caution, but it’s wonderful to at least have the option to run thousands of Android apps.


More to come

For the first time in years, bolstered by the addition of Android apps, the Microsoft Store seems to be showing signs of life. We’ll keep this list updated as we discover new apps for you to check out.

How to install Android apps on Windows 11, the easy way

How to install Android apps on Windows 11, the easy way

How to install Android apps on Windows 11, the easy way

By far the biggest surprise Microsoft had in store with Windows 11 — besides Windows 11 itself existing — was that the OS would be able to run Android apps, thanks to a partnership with Amazon. In one fell swoop, Microsoft dramatically improved the utility of the oft-maligned Microsoft Store. There are some decent apps in the Microsoft Store, but there are simply way more Android apps to choose from.


And then — because nobody releases finished software these days — Microsoft announced the Android feature would arrive at a later date. 


Four months later and that highly anticipated update is finally here, albeit limited to US customers at the time of publication. Here’s our guide to getting you set up with Android apps, whether you want to stick to the official method or you want to risk sideloading apps.


  • How to set up Android apps on Windows 11
  • Got plans this June?
  • Tickets to TNW 2022 are available now!


Luckily, setting up Android compatibility is easy-peasy — if you’re only planning on trying officially-approved apps, anyway. First, let’s make sure your system is compatible. You will need at least:


8GB of RAM (16 GB is recommended).

A minimum of an Intel Core i3 8th Gen, AMD Ryzen 3000, or Qualcomm Snapdragon 8c CPU.

720p (1280 x 720) display.

An SSD; Android apps aren’t compatible with old school hard drives for some reason.

Windows 11 build 22000.426 or higher.

The latest version of the Microsoft Store.

If your hardware is compatible — most PCs that can run Windows 11 should be fine — then it’s just a matter of running Windows update to make sure you’re on the latest build of the OS and the Microsoft Store.

Once that’s in order, simply head on over to the Microsoft Store, search for ‘Amazon Appstore Preview’ and install the software. This will also install the Windows Subsystem for Android (WSA), the behind-the-scenes engine (powered by Intel Bridge technology) that allows all sorts of Android apps to run on Windows 11 relatively smoothly.



Then simply search for ‘Amazon Appstore’ (that’s not a typo, it’s just Amazon’s edgy spelling) in your Start menu, open the app, and log in with (or create) your Amazon account. You’ll see a curated selection of apps to choose from. The Amazon Appstore currently only offers about 1,000 apps and games — most of them rather basic — but more are being added all the time.


How do Android apps compare to Windows apps?

Other than a different aesthetic, Android apps pretty much behave like any regular Windows app. They will show up in your Start menu, and they can be pinned there or your taskbar as well. You can generally use your mouse, keyboard, and/or touch input to interact with the apps. They can also usually be resized at will, although you should keep in mind many Android apps are not optimized for use in landscape mode.


The main difference you’ll notice is that when you open an Android app, you’ll have to wait for the Windows Subsystem for Android to load first, which can be a little slow.


If you expect to be running Android apps often, you can head over to Windows Subsystem for Android Settings from the Start menu, and under the section dubbed ‘Subsystem resources,’ select the ‘Continuous’ option.



This will keep WSA running in the background so your apps load instantly. This could presumably cause a performance hit on your PC, but I haven’t personally noticed any issues so far.


You can also use the settings menu to view files associated with or downloaded by Android apps, choose which GPU you’d like to power graphics, and enable developer mode — necessary if you plan on sideloading apps (more on that below).


What about installing apps that aren’t on the Amazon Appstore?

Unfortunately, most of the officially-sanctioned apps are not very exciting, and as Google seemingly wasn’t involved in creating this new feature, you won’t find anything that relies upon Google services (Google is currently working on its method of bringing Android games to Windows, but there’s no word on other kinds of apps).


Although we recommend most people stick to the official way of getting Android apps, the WSA means you can run all sorts of apps on Windows 11. You will have to use some elbow grease, and anything that requires Google services won’t work without extensive workarounds. But many have successfully sideloaded a variety of unapproved Android apps onto Windows.


Needless to say, you should exercise an abundance of caution when sideloading apps. There’s a good chance the app you’re trying to sideload will either act wonky or won’t work at all.


With that disclaimer out of the way, there are many ways you could go about sideloading Android apps, but I’m going to focus on the easiest method I know.

First things first, make sure you’ve enabled Developer Mode in WSA Settings, as noted in the earlier section.

Once that’s done, install WSATools from the Microsoft Store. This app does two things. First, it installs the Android Debug Bridge (part of Google’s official developer toolkit), which is required for sideloading apps.

That 3.7-star rating is giving me “it works… most of the time” vibes. Note that a few users have reported having trouble installing ADB from WSATools, in which case you can download it manually from Google. You can then point WSATools to wherever you extract the “platform-tools” folder from Google.


Second, it allows you to install Android apps (.apk files) with one click — no need to mess with the command line. You can find APKs for thousands of apps on sites like APKMirror and APKPure.


Once ADB is set up, simply point WSA Tools to your APK file, and it should install right away.



If for whatever reason WSATools isn’t able to install the APK you could try a similar app from the Windows Store. Or, you could just do it the pro way if you’re comfortable with Command Prompt — XDA has a great guide on how to sideload apps via ADB here.


Hopefully sideloading won’t be necessary much longer, as more developers will place their Android apps in the Amazon Appstore over the coming months now that the feature is open to the public. But in the meantime, this guide should help get you started. 

Featured

[Featured][recentbylabel]

Featured

[Featured][recentbylabel]
Notification
This is just an example, you can fill it later with your own note.
Done