Archive

Archive for the ‘linux’ Category

Getting started with C# on Linux

June 30, 2017 Leave a comment

I’ve heard lots of good things about C# but I’ve never tried it. I saw some codes and thought “fine, it’s like Java”. As I also have Linux on my primary machine, I was not interested in Microsoft technologies. However, a few years ago .NET Core was open sourced and it reached version 1.0 (now it’s 1.1). It’s a cross platform framework and it works well under Linux too, so I thought it was time to try it. Project Mono has also existed for a long time but .NET Core comes directly from Microsoft.

Under Manjaro, install these packages with yaourt: dotnet, dotnet-cli, dotnet-sdk. We will also try Mono, so install the package mono too. For Ubuntu, see the instructions here: https://www.microsoft.com/net/core#linuxubuntu .

Create a project

Create a folder for holding your C# projects, e.g. ~/CSharpProjects (optional), and create a folder for a sample project (e.g. ~/CSharpProjects/Sample). Enter it, and create a source file called hello.cs with the following content:

using System;
using static System.Console;
using System.Linq;

namespace SampleApp
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            WriteLine("Hello World!");
        }
    }
}

Compile with Mono

If you installed Mono, you have the command “csc” (C Sharp Compiler).

$ csc hello.cs
$ mono hello.exe 
Hello World!
$ chmod u+x hello.exe
$ ./hello.exe 
Hello World!

Compile with dotnet

Now let’s use the official command-line tools. You can also delete the file “hello.exe”. I suppose you are in the project’s folder. Issue the following command:

$ dotnet new console

It creates a project file (with extension .csproj), and a sample file called Program.cs . As we already have hello.cs, Program.cs is not needed so simply delete it (leave only one source file, but it doesn’t matter which one). Then,

$ dotnet restore    # installs some necessary packages, using the .csproj project file
Restoring packages for /home/jabba/Dropbox/csharp/Sample/Sample.csproj...
...
$ dotnet run        # compile and run
Hello World!

The binary output is here: bin/Debug/netcoreapp1.1/Sample.dll . If you use the command “dotnet”, you get a .dll, not an .exe . However, it can be executed:

$ cd bin/Debug/netcoreapp1.1
$ ./Sample.dll 
Hello World!
$ dotnet Sample.dll 
Hello World!

When you are ready with the development and ready for deployment, issue this command:

$ dotnet publish
Microsoft (R) Build Engine version 15.1.1012.6693
Copyright (C) Microsoft Corporation. All rights reserved.

  Sample -> /home/jabba/Dropbox/csharp/Sample/bin/Debug/netcoreapp1.1/Sample.dll

According to the docs, “dotnet publish compiles the application, reads through its dependencies specified in the project file, and publishes the resulting set of files to a directory. The dotnet publish command’s output is ready for deployment to a hosting system (for example, a server, PC, Mac, laptop) for execution and is the only officially supported way to prepare the application for deployment.”

REPL

Mono ships a REPL too called “csharp”.

$ csharp 
Mono C# Shell, type "help;" for help

Enter statements below.
csharp> 1+1
2
csharp>

Visual Studio Code support

Programming C# with VS Code is a joy. When you open a .cs file, the editor offers immediately to install the official C# extension. In order to execute a program, install the Code Runner extension. Then, add the following lines to your user settings:

    "code-runner.executorMap": {
        // "python": "python3",
        // "csharp": "echo '# calling mono\n' && cd $dir && csc /nologo $fileName && mono $dir$fileNameWithoutExt.exe",
        "csharp": "echo '# calling dotnet run\n' && dotnet run"
    }

Choose either Mono or dotnet.

Summary

If you have Linux, no problem, you can try C#. I started to play with it yesterday, but I like it. It seems a saner language than Java :)

Links

TODO…

fonts for programming

See https://github.com/powerline/fonts. It also has an installer script. The font Hack works very well for me.

Categories: linux Tags:

Pale Moon: an extremely fast web browser

April 16, 2017 Leave a comment

Pale Moon is an open source web browser, based on Firefox. It’s available for Linux and Windows too. Pale Moon focuses on efficiency and ease of use.

Pale Moon is surprisingly fast. It won’t replace my primary browser (which is Firefox), but I’ll use it for some specific sites.

Categories: firefox, linux, windows Tags: ,

Record audio in good quality

April 13, 2017 Leave a comment

Problem
I wanted to create some simple tutorial videos using a screen recording software (with gtk-recordMyDesktop to be precise), but the audio quality was terrible. There was a constant white noise in the background. I could reduce the noise with Audacity but 1) I couldn’t eliminate the noise, 2) it distorted my voice, and 3) the audio became weaker.

Solution
I had a cheap headphone / microphone that was connected with a jack plug. I think there was also some inference that caused the noise. So I bought a USB headset (Logitech H390) and the damn noise is gone! It works very well for me.

I tried it under Manjaro and here is how to make it work. Plug it and start Audacity. Next to the microphone icon there is a dropdown list. Select your headset and try to record some audio.

Try “pavucontrol” too. Under the Recording tab I had to select “Headset H390 Analog Mono”. Talk in the microphone and the sound feedback line should be moving.

How to record audio with gtk-recordMyDesktop? Start “pavucontrol” and “gtk-recordMyDesktop” too. In gtk-recordMyDesktop, go to Advanced -> Sound tab. Next to the device name I had “DEFAULT”. Change it to “pulse” (without quotes). Start recording with gtk-recordMyDesktop. Now switch to pavucontrol and go the Recording tab. At the bottom select “Show: Applications”. Now recordmydesktop should appear. Next to it there is a dropdown menu where select “Headset H390 Analog Mono”. It should do the trick.

increase sudo timeout

February 12, 2017 Leave a comment

Problem
You want to increase the sudo password remember timeout.

Solution
Run “sudo visudo“, then add this line to the end:

Defaults    timestamp_timeout=60

Where 60 means 60 minutes. If you specify -1, then the password is never forgotten (which is not a good idea IMO).

Tip from here.

Categories: bash, linux Tags: ,

Create a Windows installer USB stick from an ISO under Linux

September 30, 2016 Leave a comment

Problem
I decided to try Windows 10 and install it on a laptop of mine (worry not, it’ll be dual boot :)). Having an ISO, how to put it on a USB stick? In addition, Windows should install itself from the stick…

Solution
The software winusb did the job. Its usage is clear and simple:

$ winusb
Warning: you should run this script as root !
Error: No install method specified !

winusb usage
Install a windows ISO on an NTFS partition and edit MBR of the device
  winusb --install <iso path> <partition>
  Example: winusb win7_amd64.iso /dev/sdd1

Completely format a drive and install the ISO on it
  winusb --format <iso path> <device>
  Example: winusb win7_amd64.iso /dev/sdd

Options
 --verbose, -v        Verbose mode
 --help, -h           Show this help message and exit
 --noColor            Disable color

I had an empty USB stick with an NTFS partition, so I chose the “--install” method. The preparation of the USB stick is long, it took 15 minutes. Sometimes I had the impression that it got frozen but then it continued. So don’t worry, give it some time to finish.

Tip from here.

Categories: linux, windows, windows 10

Konsole: highlight the current tab

September 19, 2016 Leave a comment

Problem
Holy shit, this problem has been bugging me for years… But at last I found a solution.

So, I use the terminal emulator Konsole, which is very nice, I love it, but the current tab is not highlighted enough. Thus, if you have several tabs opened, it’s always difficult to figure out which is the current one.

konsole_off

Solution

It turns out that Konsole can be customized via a CSS stylesheet file. Here is an example (konsole.css) that you should save somewhere:

QTabBar::tab:selected {
    background: lightgreen;
    color: black;
    font: bold;
}

Then, in Konsole, go to Settings -> Configure Konsole… -> TabBar, and there specify this CSS file:

konsole_settings

And here is the result:

konsole_on

Links

Categories: linux Tags: , , , ,