118 stories
·
0 followers

The State of Canadian Wireless in One Chart: No One Has Carriers That Generate More Revenue With Less Usage

1 Comment and 2 Shares

Tefficient has released a new report on global wireless market that makes it clear that Canada is a global outlier (or leader if you are a telecom executive). Simply put, no one has carriers that generate more revenue with less usage per SIM than Canada.

 

Tefficient ARPU Data Usage, https://tefficient.com/unlimited-moves-the-needle-but-its-when-mobile-addresses-slow-fixed-internet-that-something-happens/

It is difficult to overstate how much the lack of wireless competitiveness is holding back the Canadian market. With the CRTC refusing to take act and carriers continuing to increase fees (particularly on overage fees that generate more than a billion in revenue per year), it falls to Innovation, Science and Economic Development Minister Navdeep Bains to recognize that longstanding failed Canadian wireless policies must change.

The post The State of Canadian Wireless in One Chart: No One Has Carriers That Generate More Revenue With Less Usage appeared first on Michael Geist.

Read the whole story
ayuvar
157 days ago
reply
Share this story
Delete
1 public comment
dnorman
157 days ago
reply
Sounds about right. We get screwed by cellular companies.
Calgary
dreadhead
156 days ago
I think you mean communication companies in general.
dnorman
156 days ago
good point. the fact that the same company owns the production company that makes a TV show, the network it runs on, the cable company that delivers it, the set-top box interface, and the internet connection used by alternatives? Yikes.
dreadhead
156 days ago
I use an independent ISP (teksavvy) but the "last mile" carrier (shaw) still managed to cut of my connection for nearly 3 weeks a few months ago... Even the alteratives are not a great option for the exact reason that they all share the same infrastructure owned by a few monopolies.

ESP8266 Home Computer Hides Unexpected Gems

1 Share

With a BASIC interpreter and free run throughout their hardware, home computers like the ZX Spectrum and Commodore 64 used to be a pervasive way to light that hacker fire. With the advent of cheap single board computers like the Raspberry Pi, devices purpose built to emulate these classic systems have become fairly commonplace. [uli] built a device in this vein called the BASIC Engine which is driven by a microcontroller and a handful of hardware peripherals. Like other examples it can be attached to a keyboard, programmed in a BASIC, play video and sound, etc. But digging into the BASIC Engine reveals that it’s similarity to other devices is only skin deep.

The current version of the BASIC Engine (“rev2”) lives in a Raspberry Pi 3 case for convenience. It has RCA connectors for NTSC or PAL video output and mono audio, plus a bank of headers to tap into GPIOs, connectors for a keyboard, and more. [uli] wanted to aim for extreme low cost so a relatively beefy board like a Raspberry Pi didn’t fit the bill, and we expect it was an enjoyable challenge. Instead its interpreter runs atop an ESP8266 but with the networking stack removed. [uli] was disheartened by how bloated even a “Hello world” program was and ripped it out, discovering that hidden beneath was a very powerful and disproportionately inexpensive general purpose microcontroller. The video is driven by a VS23S010, sold as a 1 Mbit parallel SRAM with a neat trick; it also includes a composite video controller!

The real treat here is [uli]’s history writeup of how the BASIC Engine came to be. We’d recommend brewing a cup of coffee and sitting down for a full read-through. The first version was inspired by the PlayPower project, which was repurposing clones of Nintendo’s Famicom (NES to Americans) game console to make low cost home computers, complete with keyboard and gamepad input. [uli] started out by building a custom cartridge for a particular Famicom clone that ran a BASIC interpreter but after showing it to disinterested adults the project was left fallow. Years later, [uli] was encouraged to pick up the project again, leading down a twisted rabbit hole to where we are today.

If you want to build a BASIC Engine for yourself, Gerbers and build instructions are available on the pages linked above.

Thanks for the tip [antibyte]!





Read the whole story
ayuvar
170 days ago
reply
Share this story
Delete

Buttery Smooth Fades with the Power of HSV

1 Share

In firmware-land we usually refer to colors using RGB. This is intuitively pleasing with a little background on color theory and an understanding of how multicolor LEDs work. Most of the colorful LEDs we are use not actually a single diode. They are red, green, and blue diodes shoved together in tight quarters. (Though interestingly very high end LEDs use even more colors than that, but that’s a topic for another article.) When all three light up at once the emitted light munges together into a single color which your brain perceives. Appropriately the schematic symbol for an RGB LED without an onboard controller typically depicts three discrete LEDs all together. So it’s clear why representing an RGB LED in code as three individual values {R, G, B} makes sense. But binding our representation of color in firmware to the physical system we accidentally limit ourselves.

The inside of an RGB LED

Last time we talked about color spaces, we learned about different ways to represent color spatially. The key insight was that these models called color spaces could be used to represent the same colors using different groups of values. And in fact that the grouped values themselves could be used to describe multidimensional spacial coordinates. But that post was missing the punchline. “So what if you can represent colors in a cylinder!” I hear you cry. “Why do I care?” Well, it turns out that using colorspace can make some common firmware tasks easier. Follow on to learn how!

Our friend the HSV Cylinder by [SharkD]
For the rest of this post we’re going to work in the HSV color space. HSV represents single colors as combinations of hue, saturation, and value. Hue is measured in degrees (0°-359°) of rotation and sets the color. Saturation sets the intensity of the color; removing saturation moves towards white, while adding it moves closer to the set hue. And value sets how much lightness there is; a value of 0 is black, whereas maximum value is the lightest the most intense the color can be. This is all a little difficult to describe textually, but take a look at the illustration to the left to see what I mean.

So back again to “why do I care?” Making the butteriest smooth constant brightness color fades is easy with HSV. Trivial. Want to know how to do it? Increment your hue. That’s it. Just increment the hue and the HSV -> RGB math will take care of the rest. If you want to fade to black, adjust your saturation. If you want to perceive true constant brightness or get better dynamic range from your LEDs, that’s another topic. But for creating a simple color fade all you need is HSV and a single variable.

Avoid Strange Fades

A linear interpolation from green to pink

“But RGB color fades are easy!” you say. “All I need to do is fade R and G and B and it works out!” Well actually, they aren’t quite as simple as that makes them appear. The naive way to fade between RGB colors would be exactly what was described, a linear interpolation (a LERP). Take your start and end colors, calculate the difference in each channel, slice those differences into as many frames as you want your animation to last, and done. During each frame add or subtract the appropriate slice and your color changes. But let’s think back to the color cube. Often a simple LERP like this will work fine, but depending on the start and end points you can end up with pretty dismal colors in the middle of the fade. Check out this linear fade between bright green and hot pink. In the middle there is… gray. Gray!?

RGB CubeSo what causes those strange colors to show up? Think back to the RGB cube. By adjusting red, green, and blue at once we’re traversing the space inside the cube between two points in space. In the case of the example green/pink fade the interpolation takes us directly through the center of the cube where grey lives. If every point inside the cube represents a unique mixture of red, green, and blue we’re going to get, well, every color. Some of that space has colors that you probably don’t want to show up on your 40 meter light strip. Somewhere in that cube is murky brown.

But this can be avoided! All you have to do is traverse the colorspace intelligently. In RGB that probably means adjusting channels one or two at a time and trying to avoid going through the mid-cube badlands. For the sample green to pink fade we can break it into two pieces; a fade from green to blue, then a fade from blue to pink. Check out the split LERP on the right to see how it looks. Not too bad, right? At least there is no grey anymore. But that was a pretty complex way to get a boring fade to work. Fortunately we already know about the better way to do it.

A LERP in HSV

How does this fade look in HSV? Well there’s only one channel to interpolate – hue. If we convert the two sample RGB values into HSV we get bright green at {120°, 100%, 100%} for the start and pink at {300°, 100%, 100%} for the end. Do we add or subtract to go between them? It doesn’t actually matter, though often you may want to interpolate as quickly as possible (in which case you want to traverse the shortest distance). It’s worth noting that 0° and 359° are adjacent, so it’s safe to overflow or underflow the degree counter to travel the shortest absolute distance. In the case of green/pink it is equally fast to count up from 120° to 300° as it is to count down from 120° to 300° (passing through 0°). Assuming we count upwards it looks like the figure on the left. Nice, right? Those bland grays have been replaced by perky shade of blue.

There are a couple other nice side effects of using HSV like this. One is that, as long as you don’t care about changing brightness, some animations can be very memory efficient. You only need one byte per pixel! Though that does prevent you from showing black and white, so you’d need an extra byte or two for those (not every colorspace is perfect). Changing a single parameter also makes it easy to experiment with non-linear easing to adjust how you approach a color setpoint, which can lead to some nice effects.

If you want to experiment with HSV, here are a couple files I’ve used in the past. No guarantees about efficiency or accuracy, but I’ve built hundreds of devices that used them and things seem to work ok.

There’s one more addendum here, and that’s that color is nothing if not an extremely complex topic. This post is just the barest poke into one corner of color theory and does not address a range of concerns about gamma/CIE correction, apparent brightness of individual colors, and more. This was what I needed to improve my RGB blinkenlights, not invent a new Pantone. If accurate color is an interesting topic to you, dig in and tell us what you learn!





Read the whole story
ayuvar
179 days ago
reply
Share this story
Delete

Let’s catch up with PICO-8 and feed some ducks 🦆Though we...

1 Comment




Let’s catch up with PICO-8 and feed some ducks 🦆

Though we haven’t talked about the PICO-8 platform for making, sharing, and playing tiny games (all built into the cute PocketCHIP handheld), the community continues to put out curious releases for the “fantasy console.”

If you want to dive right into what’s been going on in the PICO-8 scene and its standout releases, our friend and Club Tiny member Tony just brought Pico Chat out of hiatus, an appropriately brief podcast dedicated to the platform. Listen to it here or check it out on Anchor for links to the games discussed:

This episode introduced me to the wonderfully silly Feed the Ducks, which I won’t spoil but will tell you to stick through its seemingly simple screens in the first few minutes. Being a PICO-8 game, you can play it for free in your browser.

THE NEW CLUB TINY IS HERE Support Tiny Cartridge!
Read the whole story
ayuvar
209 days ago
reply
Feed The Ducks is my game of the year.
Share this story
Delete

Arabic version of Sega's early-1990s logo

1 Share

This marvel of design was posted to Twitter by VGDensetsu; it's said to be official, and apparently romanizes as "Seja" as Arabic lacks a hard "G".

The Japanese company uses the classic Latin-alphabet logo in Japan, but here is a fanmade Japanese version: https://twitter.com/exciteless/status/710354237914529793

And here is a Hebrew logo, devised by Baraksha, creator of an unlicensed translation of Sonic the Hedgehog into that language:

Read the whole story
ayuvar
282 days ago
reply
Share this story
Delete

Interactive Line Editing in .NET

2 Shares

Even these days, I still spend too much time on the command line. My friends still make fun of my MacOS desktop when they see that I run a full screen terminal, and the main program that I am running there is the Midnight Commander:

Every once in a while I write an interactive application, and I want to have full bash-like command line editing, history and search. The Unix world used to have GNU readline as a C library, but I wanted something that worked on both Unix and Windows with minimal dependencies.

Almost 10 years ago I wrote myself a C# library to do this, it works on both Unix and Windows and it was the library that has been used by Mono's interactive C# shell for the last decade or so.

This library used to be called getline.cs, and it was part of a series of single source file libraries that we distributed with Mono.

The idea of distributing libraries that were made up of a single source file did not really catch on. So we have modernized our own ways and now we publish these single-file libraries as NuGet packages that you can use.

You can now add an interactive command line shell with NuGet by installing the Mono.Terminal NuGet package into your application.

We also moved the single library from being part of the gigantic Mono repository into its own repository.

The GitHub page has more information on the key bindings available, how to use the history and how to add code-completion (even including a cute popup).

The library is built entirely on top of System.Console, and is distributed as a .NET Standard library which can run on your choice of .NET runtime (.NET Core, .NET Desktop or Mono).

Check the GitHub project page for more information.

Read the whole story
ayuvar
336 days ago
reply
Share this story
Delete
Next Page of Stories