Author: David

How to extract text from an Image

How to extract text from an Image

Puzzle image with textThis is more of a tip, but it can be a useful thing to know. If you look at this photo you’ll see it contains a bunch of words. Now you could type them in but that’s a bit tedious.

If you have Ms Office then you’ll have probably have OneNote. Take the image and paste it into OneNote. Now right click on the image (in OneNote and in the popup menu) you should see Copy Text from Picture as the third item in the menu.

Just click that then paste the text in to notepad, a text editor, whatever. There’s your text.

OneNote with popup menu

Here’s the text pasted directly from the clipboard. 100% accurate apart from a ! that it found from somewhere near the edge (just after wain)!

Solution to Puzzle 1
ain, alb, albs, als, ani, ard, ards, arid, ars, awn, blah, blain, dhal
dhals, dirl, dirls, drain, draw, drawn, fah, fain, fan, far, fard, tards,
farl, farls, fars, faw, fawn, flan, flaw, flawn, fra, hain, half, halts, han,
hard, hards, harl, harls, harn, harns, haw, hid, ids, infra, inward,
inwards, lah, lain, lar, lard, lards, larn, larns, law, lawin, lawn, nard,
nards, rah, rai, rain, ran, rani, raw, rawn, rid, rids, slain, slaw, wain, !
wald, walds, wan, war, ward, wards, warn, warns, wars, wha, wharf,
wharfs, whid, whids, whir, whirl, whirls, whirs, Win

Undefined behaviour in C

Undefined behaviour in C

Unexpected
Image by John Hain from Pixabay

One of C’s not so brilliant features is the range of Undefined Behaviour (UB). Things like using an uninitialised variable or having an int variable overflow don’t have behaviour defined; thus it is UB and you cannot accurately predict what will happen. Likewise accessing a NULL pointer can cause odd behaviour. It gets more sophisticated than that. What if you type cast an int to a float?

The LLVM blog have an interesting set of posts on UB and it’s definitely worth reading. I’ve done a lot of C programming, so I’m rarely surprised by my programs but its useful to know about these things. In my case, I started with assembler programming and then learnt C++ and C in that order so my perspective has always been to try and understand whats going on deep down.

Chess in C

Chess in C

Tom Kerrigan ChessI noticed that the Covid lockdown had made streaming of chess games very popular and did a search to see if I could find the source of one in C. The first one I found was actually C++ (cout << is a bit of a giveaway!) but I found this one by a developer called Tom Kerrigan. It runs from the command line and the exe is just 157 KB in size.

Note it is copyrighted but he has put his source code out there so if you are interested in seeing how a chess program is written this is an excellent place to start. His code also includes a lot of comments and includes an opening book.

 

How to install WSL 2 and Linux on Windows 10

How to install WSL 2 and Linux on Windows 10

Winver commandThis assumes that you have the version 2004 of Windows 10. Run the command Winver (open a command line then type winver) to see what version you have.

WSL is Windows Subsystem for Linux and lets you run one of several Linuxes (after installing) in Windows. For now it is terminal only but you can debug programs using Visual Studio. WSL 2 is the current version of WSL though you can run the older WSL 1.

Your computer also needs to support Hyper-V Virtualization to run WSL 2. If it doesn’t you can run WSL 1.

Steps.

  1. Open a PowerShell windows in Admin mode. My way of doing this is open the search window and type Powershell. Then right-click run as Admin.

 

When I mean Search Window, I mean the one on the Toolbar that looks like this like a magnifying glass: (highlighted in the red square)

Search Window

 

 

2. In the Powershell Windows, copy and paste this command:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

3. Next run this command in the same Windows:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

4. Set WSL 2 as default with this Powershell command:

wsl --set-default-version 2

Now close the Powershell Window and in the search box type Store. You should see Microsoft Store.  It’s an app on your PC. Click it to run it and type in Linux in the search box. Click Show all and you should see something like this. Pick one like Ubuntu, Debian etc.  Apart from the ones with a price against them, the rest are free. Cl;ick Get and it will install.

Linux in Microsoft Store

After it has installed, you can run it from your Start Menu. I dragged it onto the square so I have a nice clickable icon.

Windows Start MenuJust click it and your Ubuntu (or whatever) Linux will open at a terminal prompt like this.

Ubuntu Terminal

 

Sometimes it’s not software to blame

Sometimes it’s not software to blame

Never Assume banner
Image by Gordon Johnson from Pixabay

This last week has been a bad one for me technically speaking. First there was the Sky Q Minibox problem. I was away when it was originally setup. It would have saved me a couple of wasted days without Sky when it went wrong had I been present at the setup.

We had a power outage that lasted twenty minutes. When it came back everything powered up except the Sky Q Minibox. It displayed a couple of screens which said “when the screen goes blank, press the Home button on the Sky Q remote”. Nothing happened. Eventually (after a couple of days) I figured, it was a bit like an old BoomBox (cassette player) of mine that was never the same after a power outage. Something had blown perhaps. Time to contact technical support for a replacement?

But I did a last search and came across an interesting message on a forum. “Make sure your Sky Q Remote is paired with the Minibox”. This is one of those things that makes you sit it up and says “What?”. It’s just a remote, isn’t it , like the other ones. Except when I looked a bit closer I noticed it had no bulb or transparent plastic screen at the end. To cut a long story short, when it was paired (is it Bluetooth?) the Sky Q Minibox worked fine. D’oh… My first encounter with a non-Infra red TV remote.

It gets worse…

Yesterday I struggled trying to run a program on my two Android phones. The same phones that had worked fine with MonoGame. This was a different software dev system (Android Studio) and a different programming language (Flutter). The trouble was sometimes it would recognise one of the phones (but not the other one) and when I started copying the program it failed with ADB Error 1. I was scratching my head over this.  I’d tried configuring, all sorts, in Android Studio, in the phones. But nothing made a difference.

I did a Google and a StackOverflow answer showed up. Maybe the problem is your cable? Well I have a few Android cables lying around so I swapped it and sure enough. It worked, and now recognised both phones, the program copied and ran ok on both phones. So with the Sky remote, it was the old adage Assume= Makes an Ass of U and Me. and with the phones, I’d assumed it was the software. configuration that was wrong.

Modern C – a Free Ebook

Modern C – a Free Ebook

Modern C by Jens GustedtThis is the 2nd edition. Author Jens Gustedt has generously allowed a free version to be downloaded from his website.

If you like his book which is also published by Manning then you should consider buying a copy. He provides a 35% discount for the print or E book version.

I scanned the E-book and must admit, the bit on  signal handling taught me a lot that I didn’t know.

The E-book is nearly 300 pages long in 19 chapters.

Changing your default Font

Changing your default Font

This is one of those subjective things. Do you use the default font in text editors or do you switch to a programmer’s font when the option is possible?

For example in Visual Studio, you can select any font you want. The Monotype fonts (i.e. fixed width) are shown bold.

JetBrains, the people behind the Resharper tool for C#, Intellij Idea (the editor used in Android studio) and the Kotlin programming language have given away a new programmers font.

After downloading the font zip file, open it and unzip the multiple versions of the font. There’s 14 variations (extralight, italic etc) and also web versions that you can use in a website. I just took the regular and installed it in Windows. If you Preview the font then you get the option to install it.

In Visual Studio you have to go to Project Options then Font and Colors and select the font. After that you have to close Visual Studio and reopen it.

One interesting thing is that this font supports ligatures.  These are special characters that replace things like !=. Here’s what that looks like after installing this font.

Visual Studio Font with ligatures

Of course if you don’t like JetBrains Mono or want to try others programmer’s fonts, here’s an article with eleven listed.

It’s not just Visual Studio that this works with, you can change the font in Visual Studio Code and others.

Interesting C Program- What do you think it does?

Interesting C Program- What do you think it does?

Question mark
Image by Gordon Johnson from Pixabay

This is a past IOCCC winner. It needs a #include <stdio.h> to compile.

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}

When I compiled and ran it in Visual Studio it output 0.25 which is not the value it’s intended to output. That said it also messed up the formatting.

I can’t recommend this formatting BTW but then that’s the idea, to obfuscate i.e. disguise its purpose! So have you figured it out yet? I put the image on the right so as not to break up the program listing…