Gropweb: Learning
News Update
Loading...
‏إظهار الرسائل ذات التسميات Learning. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات Learning. إظهار كافة الرسائل

الاثنين، 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.

الأحد، 27 فبراير 2022

Renault keeps the hydrogen dream alive in France

Renault keeps the hydrogen dream alive in France

 Renault keeps the hydrogen dream alive in France

Last week, French automaker Renault released a sneak preview of a hydrogen-powered car. We don’t know that much about the car yet. Any car can look good with a few sexy neon lights and a dark backdrop. More news will come in May, but we have no real 

way of knowing if the concept car will even make it to market. Renault’s teaser pic for their hydrogen car. Credit: Renault we most creative when we're alone? Here’s what the experts say

But it’s important to not simply dismiss the idea out of hand, and here’s why:  

Not Renault’s first rodeo 

Firstly, this is not the company’s first foray into hydrogen fuel cell electric vehicles (FCEVs). In 2019, the company announced plans to add hydrogen to two of its light electric commercial vehicles.


Just a refresher: FCEVs operate with a fuel cell, which combines hydrogen from their tanks with oxygen from the air to produce electricity (to power an electric motor). The only emission is water.  



The Renault KANGOO ZE Hydrogen. Credit: Renault

But Renault is doing something different. The Renault Kangoo ZE Hydrogen and Renault Master Z.E. Hydrogen use hydrogen for extended range, not as the sole source of battery power. 


According to the company, the hydrogen fuel cell provides additional energy for up to three times more range than 100% electric vehicles, with a charging time of only five to 10 minutes. 


Its target market is specifically business fleets, especially those already in possession of a hydrogen fueling station or those who drive a regular route which includes access to a suitable refill station.


Can hydrogen fuel cells catch up to EV innovation? 

Last year, José Muñoz, chief operating officer for Hyundai, commented that hydrogen technology is about where battery vehicles were in the early 2010s. 


The company predicts that its fuel cells will reach cost parity with electric vehicle batteries by 2030. Geez, that’s a lot of catching up to do. 


Despite that, Hyundai aims to become the first automaker to apply fuel cell systems to all commercial vehicle models by 2028. 


One of the biggest barriers to commercializing hydrogen has been the lack of sustainable green steel and green hydrogen. Currently, over 95% of the hydrogen available is produced using fossil fuels — clearly counterintuitive to its reputation as a carbon-friendly form of energy. 


Further, we don’t know if Renault’s concept car is an all-hydrogen or extended range. 



How hydrogen refueling works. Credit: H2 station maps

But, we won’t see a Renault hydrogen-powered car without adequate infrastructure. For reference, all of France has less than 20 public charging stations in operation.  


By comparison, there are over 30,000 EV charging stations across the country. It makes the idea of extended range seem rather irrelevant.


And what’s more, you can’t refuel a hydrogen car at home at night. 


But France is investing big 

Fortunately, Renault is putting even more effort behind its hydrogen-powered ambitions. 


In 2021, the company announced a partnership with Plug Power on an enterprise called HYVIA. It focuses on vehicle R&D and refueling stations. Plug Power has deployed over 40,000 fuel cell systems and designed and built 110 refueling stations.


After less than six months of existence, the HYVIA has unveiled three hydrogen light commercial vehicles: a van, a chassis cab, and a city bus. The vehicles will be available in 2022 with green hydrogen production and distribution solutions. It’s a great start. 


And, for broader context, France has been betting big on hydrogen since launching a national plan in June 2018. It aims to have 400 to 1,000 hydrogen stations by 2028. Okay, the numbers look woeful compared to EV chargers, but still. 


Hydrogen taxis have hit the streets 

hydrogen taxis 

The hype has the world’s first hydrogen-powered taxi fleet. Credit: Hype

There’s even a taxi company called HYPE, the world’s first mobility company to develop a commercial fleet of hydrogen-powered taxis. Since their 2015 founding, they’ve already transported over a million passengers in France. 


The company plans to deploy 10,000 Hype taxis and 20 stations powered by locally produced green hydrogen in the Paris region, and expand to 15 additional cities by late 2024.


Can good intentions translate to commercial success?

So, when we talk about hydrogen, we’re never short of plans or good intentions. It’s putting these into practice that is taking a long time – and a lot of money. 


And, if we look at the auto industry delays of the last two years, FCEVs have A LOT of catching up to do. I want them to catch up. I want ALL of the alternative energy sources to succeed — electric, hydrogen, solar, and whatever comes next. It’s the waiting that I hate.

Featured

[Featured][recentbylabel]

Featured

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