Google: I’ll pay, but only if you at least try.

I like android. I really do. But one thing that got me until I got a device running Cyanogen was the marketplace’s horrible habit of being… “Exclusive”… “Dividied”… no… thats not it…”Broken!” Yeah, that’s a good way to say it.

There are a shitload of Android devices in the world. How many? Enough to confuse most people. The problem is that no matter how hard you try, you will find that 99% of the apps on the market will never show up on those devices via the market. Why? Because the market relies on vendors of the devices to get Google to provide a few magical strings in build.prop that define what the device can or cannot do.

Why? Because its Google

That’s right, kids… Google just wants to play in their sandbox. And you know what… Thats okay!.

But why do I bring this up? This article at PC Pro UK had me thinking: Why this figure? Then I thought back to my recent experience with one of the above mentioned tables — recently replaced with a Nook Color running CM7.2RC2.

I had pirate apps in order to get some of the apps I wanted (namely: Beautiful Widgets, which I later bought, WidgetLocker). Why? This little message:

This is pretty common. Despite the fact that there are some vendor-specific apps like nVidia TegraZone which, no matter what you have, say they’ll run (And, oddly enough, this app will run. It will even charge you money for apps you can’t run).

This is even worse sometimes when you buy a device, e.g. a Samsung Galaxy S. It promptly breaks (no shock there) so you go back and find that you can get a refund and a slightly older device (say, nexus one or some such). Now, your apps that required something special on the Galaxy S (e.g. OpenGL ES 2.2)… don’t work. At all. And you paid for some of those apps.

There is a solution, and it involves being intelligent.

  • Baselining. This can be done by OEMs, creating a baseline performance (scores X of 100 on openGL, hardware, etc.) — This does include vendor-specific hardware (e.g. 3G connection, Tegra-based chipset, OpenGL ES1/2+, etc). This should also be visible to the user (and runnable by the user) so they can confirm their carrier isn’t fucking them over.
  • Not biasing against carrier (since now there are devices with no carrier), location (since when does location affect what kind of apps you should have?), etc.
  • Allowing users with devices that don’t meet specs to accept the possible of functionality. Many, many apps (namely, Facebook, etc) decided their apps were “too heavy” for my previous tablet. Funnily, they run amazingly on my Nook Color, which has a lower benchmark on everything.

So, Google, if not this, can we at least be told why we don’t qualify to install some random app?

0 notes

A short guide to threads and processes (or, how I learned to love chrome.exe)

Every once and a while, I see a discussion of why chrome.exe shows up a few billion times on some users machines. The consistent answer is that chrome uses a sandbox methodology. The next logical question is “isn’t this slowing down my computer?”

Well, not really.

You see, there’s three kinds of threads (Windows sometimes calls these Processes) used in operating systems, each with subtly different ways of doing things. They are as follows:

  • Heavyweight threads
  • Medium-weight threads
  • Lightweight threads

First, some simple terminology.

  • PID: Process Identifier; A unique (to the machine) number that identifies a particular thread (nee process)
  • Thread: A thread of executing code and/or memory.

Heavyweight threads

Heavyweight threads are copies of their parent thread — the code and memory of its parent process is entirely copied. This is what Windows normally uses in order to start new programs. Applications that spawn too many of these can often cause memory leaks (where the program doesn’t clean up after itself, leaving bits of memory laying around for the OS to step on and get mad about)

Heavyweight threads are often used where the application is essentially cloning itself (e.g. Windows Explorer in Multi-Process mode) to perform a task that needs more time on the scheduler (We’ll get to him later).

In many ways, Heavyweight threads are akin to cell division, causing the whole process to duplicate itself.

Medium-weight threads

Medium-weight threads share the code portion of their parent process, but are free to modify their own copy of the memory that once belonged to their parent process. It is up to the operating system whether the memory that the child process gets is empty, an exact duplication of the parent process’ memory at the time of the child process starting, or an indeterminate state. In most operating systems, the child process has a duplicate of the parent process’ memory at the instant before the child process was created.

These don’t pressure the scheduler too hard, but can impose extra system load if an application makes up too many.

Light-weight threads

These are the fastest of the fast, sharing both code and memory with their parent. They have full control, almost parasitically, of what happens in the parent’s execution time.

They can however, cause some serious problems when not used correctly. We’ll get there in a second. For now, know that few applications need use of these, despite their usage.

Chrome, The Scheduler and some macguffins

Chrome uses Medium-Weight threads for its work, keeping the core Chrome framework locked in code-space and the thing its working with (be it a web page, plugin, image, or something else), so that its safe.

This brings us now to the topic of the Scheduler. The Scheduler’s job is to make sure every thread gets the time it needs on the system. When a process starts using more time than others, it can slow down the system. The operating system is, in of itself, just a thread on the machine. Windows users will see this as a program called “System” (generally taking up 2..4% of their CPU time). In the case of UNIX systems (such as Linux or OSX), this is called “init” (for INITial process). This is how the system gets time to do its work.

Back to Chrome. Since it uses Medium-Weight threads, Windows reports it as being separate programs (Technically, they are multiple instances of the same program). Its not uncommon for an application to have 4-5 threads if it wants to make the illusion of everything working smoothly. Games which can take advantage of multi-cpu systems use multiple light or medium threads to offload the work.

Studdering audio, laggy internet, and a whole flood of other problems can be attributed to a program taking up too much time on the machine.

A sidenote: Process Explorer can be your best friend.

Mark Russonovitch of SysInternals (now a part of Microsoft) wrote a wonderful little tool called Process Explorer. Process Explorer is one of the many tools you can find to see what’s using your computer’s resources.

TL;DR

Chrome doesn’t slow your computer down just because it has a bunch of processes running. Because chrome doesn’t make complete copies of itself over and over, the system can run faster than if it did.

0 notes

Epiphany: Y U NO scale images?

I’ve started using GNOME’s default browser, Epiphany. Its a nice browser all things considered but I find it a bit of a pain when it comes to one simple thing: Image scaling.

You see, if I click on a link from Reddit, say this beautiful wallpaper, I get it scaled at 100%. Unlike every other browser I’ve worked with (Links2 included) which will happily scale down the image until you click on it, thus embiggening the picture; clicking again shrinkifies the picture. Simple, no?

Epiphany lacks this ability, for some odd reason. I dont like Midori, as its really unstable; I like Chrome, but the multithreaded-ness eats a lot of cpu time and kills the scheduler when Java comes into play (I use Java a lot).

So, it appears that I will either a) have to live with it or b) accept that the GNOME people just Dont Want Me doing things like that. I could, theoretically, write some kind of javascript plugin but I dont think that’d look good.

Anything I find says it existed long ago, but now doesn’t.

Bummer. I wanted something that worked, looked good and didn’t kill the scheduler.

0 notes

Its a game review: Pocky & Rocky 2

So I like SNES games. Its not my fault I like SNES games, they’re just fun to play some times. Other times you want to strangle them (Star Fox, anyone?) But for those awkward moments where all you have is your trusty modded controller (and some spare time).

So, on to the review.

Plot Overview

Pocky and and her raccoon friend Rocky are back at it, this time with a plot line! The village has had its princess, Luna, kidnapped, and Pocky is the only one that can save her. On the way she meets such nasty foes as Impy, Bolta and brother Volta, finishing in a spectacular battle with Dynagon.

Gameplay

I’ll sum it up in a phrase: its mind-numbingly hard. For those of us familiar with top-down pseudo-shooters, its great — You get basic power-ups, the combos are fantastic to play through. But the levels are laid out in such a way that unless you know what is coming your way, you may just miss an entire side-room with a some power-up or coinage deposit.

There are some bosses that are just hard. There are also stages which are blisteringly hard. It rapidly digresses to an almost rail-shooter style in several areas, which can make certain obstacles near impossible.

There is one redeeming factor to this: the tutorial is right on par with Mega Man X’s intro stage. It could make even AVGN happy. You’re asked if you want a tutorial and if you say yes, it guides you through each of the core concepts in the game — from moving around (simple) to calling and throwing your partner character (Strangely satisfying once you get the hang of it). Its most redeeming factor is that it gives you a chance to learn each thing you will use — repeatedly — throughout the game.

You aren’t expected to know that R-Trigger summons your partner for tosses and that during segments of the game that X will head-butt you into your partner and “magic” you into them because you read the manual — It teaches you in one of the best possible ways.

Overall

I was only able to play it through by having an emulator and rewind/save-states. There are some points you cannot win without having amazing reflexes. Yet, despite the frustration that this game puts out, it is fun. There is no other word to describe it. The plot is well thought-out and guides you through a pretty linear sequence, pulling you in by the nape of your neck and making you thoroughly enjoy finally completing it.

I quite enjoyed it.

1 note

Fuji-san appreciates zen-like simplicity.

Fuji-san appreciates zen-like simplicity.

1 note

askudonge:



Headphones are the most inconvenient things ever




Yes, yes they are.

askudonge:

Headphones are the most inconvenient things ever

Yes, yes they are.

82 notes

Quick Hack: make Claws obey GApp’s many-emails-one-user rule

I use Claws-mail. Its basically like doing speed, heroine and crack all at once while reading your email. Best of all, it doesn’t give you crap about what you’re doing: it assumes you are skilled enough to figure out what the hell you want from it.

One of its other beautiful things is a magic that most folks aren’t familiar with: srsbns plugins. Plugins are more than bits of Javascript interacting with some shell commands. They’re hunks of C/C++ code that can do amazing things.

One of the long-standing bugs is that you can’t easily handle multiple email addresses that are, in reality, one in the same.

I have four email addresses, two on two domains. All point to the same GApps domain. Works great in Gmail (once you get it set up) but /horrible/ by default. I’ll get occasional messages from email lists telling me something along the gist of “Hi! We want to send your message, but you’re not on the list! Goodbye!” because I haven’t changed from one email address to another while sending.

Damn.

I don’t want to have to manually change it every time, plus I forget, plus sometimes I want to use that main email (it happens).

This brings me back to the plugins. One of them is a Python scripting plugin that lets you do some wicked awesome shit with GTK and certain parts of the interface. I’m concerned about making sure that when I send an email to [foo@bar.net] that I’m going to be sending it from [this+email@provider.sucks] instead of [that+damn@provider.sucks]. Well, its pretty easy (seven or so lines in Python).

So, without further ado, here’s Super Manglo-Tron 9000

Stash this in your ~/.claws-mail/python-scripts/auto/ folder as compose_any, enable the Python plugin (on Ubuntu, you may have to run sudo ln -s /usr/lib/libpython2.6.so.0 /usr/lib/libpython2.6.so)

1 note

laughingsquid:

British tourists arrested in America on terror charges over Twitter jokes

Americans: Not getting any of Cockney/Brit slang since.. well, damn… forever?

laughingsquid:

British tourists arrested in America on terror charges over Twitter jokes

Americans: Not getting any of Cockney/Brit slang since.. well, damn… forever?

157 notes

laughingsquid:

The Slow Death of a Washing Machine

Impressive. Mine wouldn’t have made it past the first :30.

156 notes