Archiwa autora: Chaos Engine

Samsung SCX-3405W in Gentoo (Cups, drivers etc.)

TL;DR – emerge -va net-print/splix and use custom ppd file

Once upon a time my printer stopped working (of course when I want to print something urgently). The hardware was ok, working and not otherwise broken because connecting it to laptop did the job – I print urgent fliers.

What was weird, is that nothing was changed inside etc/cups directory. So there must be some other things that changed: /usr/libexec/cups was the natural choice. Specifically my ppd file included:

*cupsFilter: "application/vnd.cups-raster 0 rastertoqpdl"

And CUPS test page upon printing returned rastertoqpdl not available: No such file or directory. Well, this rastertoqpdl was supposed to be somewhere. Let’s look it up inside /usr/libexe/cups/filter. Nope – nothing, I’ve looked into backups half year back – nope, no such file. Ooo, let’s pick new driver maybe?

Unfortunately Samsung sold (??) it’s driver support to HP and they had a driver fresh and new for SCX-3400 family but it was not working –

Unable to open raster pipe raster stream - : Broken pipe

that’s what I got from every try to print anything. So driver was new (latest) but not functioning. It was not using rastertoqpdl filter though. Different route maybe? I downgraded cups, cups-filters, and checked with ldd proper binaries linking – nothing. But I know I had working setup with proper ppd file which contained rastertoqpdl. So where to get this file?

Ok, search the net – not much, search backup – none, older driver – same stuff. And after one day of fight (and sleep over with the problem) I stumbled upon 

[I] net-print/splix
Available versions: 2.0.0_p20130826 {+jbig}
Installed versions: 2.0.0_p20130826(16:48:17 01.09.2018)(jbig)
Homepage: http://splix.sourceforge.net/
Description: A set of CUPS printer drivers for SPL (Samsung Printer Language) printers

Yup, something for the Samsung from open source? My hope is almost depleted but I will emerge this and see what’s underneath. Woooaa, it has the rastertoqpdl which my working ppd is using. Come on, it can’t be. But it was – my printer was working again 🙂

BTW. Here’s my PPD file: https://gist.github.com/ChaosEngine/65532a1bb837e5adaa067af7670ff2c2

Kodowanie asynchroniczne w C# na web-ie, czyli czemu w końcu przydadzą się procesory wielordzeniowe

No dobra, po epokowej przerwie (ostatnio wpis jakieś 4 lata temu?!!) mam coś ciekawego.

Szybki up-to-date, wkręciłem się w nowego „dotneta” (.NET core) a ściślej ASP.NET Core.

Jak zwykle przeglądając czeluście internetu trafiłem tutaj: https://caleblloyd.com/software/net-core-mvc-thread-pool-vs-async/

Wiedziałem że słowo kluczowe async, await w programowaniu usług sieciowych w C# musi mieć jakiś większy sens i treść i oto wytłumaczenie. No więc nie byłbym sobą gdybym nie zmaścił jakiegoś benchmarka. Postanowiłem za autorem użyć podobnego scenariusza i przetestować metody (kod ASP.NET core WebAPI):

// GET api/values/sleep
[HttpGet("sleep")]
public string GetSleep()
{
    Thread.Sleep(1000);
    return Process.GetCurrentProcess().Threads.Count.ToString();
}

// GET api/values/delay
[HttpGet("delay")]
async public Task<string> GetDelay()
{
    await Task.Delay(1000);
    return Process.GetCurrentProcess().Threads.Count.ToString();
}

No i dobra, ale przydałby się jakiś kod testowy C# a nie odwołanie (jak caleblloyd) do pakietu stress-testującego. No to wymyśliłem takie coś (fragment kodu aplikacji GUI):

private async Task SyncAcynsWebProcessing(CancellationToken token, int seconds2Run = 60, int threadCount = 50)
{
	Stopwatch watch = new Stopwatch(), global_watch = new Stopwatch();
	int run_times = 0;
	string url = txtDebug.Text.Trim().Split(new[] { '\r', '\n' }).FirstOrDefault();
	global_watch.Start();

	while (true)
	{
		if (!token.IsCancellationRequested &&
			global_watch.ElapsedMilliseconds > (seconds2Run * 1000))//do this procedure X number of seconds
			break;

		var all_tasks = new Task<int>[threadCount];
		watch.Reset();
		watch.Start();
		for (int i = 0; i < threadCount; i++)//create-and-run x tasks
		{
			all_tasks[i] = Task.Run(async () =>
			{
				try
				{
					using (var client = new HttpClient())
					{
						var stackContent = await client.GetAsync(url, token);
						var response = await stackContent.Content.ReadAsStringAsync();
						if (response.Length > 10)
						{
							return response.Length;
						}
						else
						{
							if (int.TryParse(response, out int j))
								return j;
							return -1;
						}
					}
				}
				catch (Exception ex)
				{
					this.Dispatcher.Invoke(() =>//run something on UI thread
					{
						txtDebug.AppendText(ex.ToString());
					});
					return -2;
				}
			}, token);
		}
		//wait for all threads to complete
		await Task.WhenAll(all_tasks).ContinueWith((all_results) =>
		{
			watch.Stop();
			this.Dispatcher.Invoke(() =>//run something on UI thread
			{
				string comm = "";
				txtDebug.AppendText(Environment.NewLine);
				foreach (var res in all_results.Result)
				{
					txtDebug.AppendText(comm + res);
					comm = ",";
				}
				txtDebug.AppendText($"{Environment.NewLine}ElapsedMilliseconds: {watch.ElapsedMilliseconds}");
			});

			watch.Reset();
			foreach (Task<int> tsk in all_tasks) tsk.Dispose();
			all_tasks = null;
		}, token);
		//await Task.Delay(250).ConfigureAwait(false);
		run_times++;
	}

	this.Dispatcher.Invoke(() =>//run something on UI thread
	{
		txtDebug.AppendText($"{Environment.NewLine}----------{Environment.NewLine}Bottom line summary: {global_watch.ElapsedMilliseconds}"
			+ $" run {run_times} times");
	});
}

To cudo wykonuje przez zadaną ilość sekund (domyślnie 60) działanie polegające na zasypywaniem serwera wielu króciutkich zapytań i sumuje odpowiedzi (które są ilością sumą wątków robocznych .NET). Robione jest to specjalnie przez X sekund i z zadaną ilością wątków (domyślnie 50) aby równo obciążyć (czyt. dobić) serwer.

Wyniki, dla metody używającej synchronicznych wywołań (metoda http://localhost:4553/sleep):

http://localhost:4553/sleep
26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26
Elapsed millis: 9053
26,26,26,26,27,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27
Elapsed millis: 7169
29,29,29,29,29,29,29,30,29,29,30,30,30,30,31,30,30,30,30,36,30,31,36,31,35,35,35,31,35,31,36,31,36,35,36,36,36,36,36,36,36,36,36,35,36,36,36,36,35,36
Elapsed millis: 5199
37,37,37,37,37,37,37,37,37,37,37,37,38,37,38,38,38,38,38,38,38,38,38,38,39,38,38,39,38,39,39,39,39,39,39,39,39,39,39,39,38,39,39,39,39,39,39,39,39,39
Elapsed millis: 4105
39,39,39,39,39,39,39,39,39,39,40,39,39,40,40,39,40,40,39,39,40,40,40,40,40,40,40,40,40,40,40,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,40,41
Elapsed millis: 3706
42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,43,42,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,42,43,43,43,43,43,43,43,43,43,43
Elapsed millis: 3126
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64
Elapsed millis: 2128
65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65
Elapsed millis: 2073
66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66
Elapsed millis: 2082
67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67
Elapsed millis: 2066
67,67,67,67,67,67,67,67,67,67,67,64,67,67,67,67,67,67,67,67,64,67,67,67,64,64,67,64,67,64,64,67,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64
Elapsed millis: 2098
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,63,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64
Elapsed millis: 2066
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,63,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64
Elapsed millis: 2122
69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,68,69,69,69
Elapsed millis: 2059
70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,69,70,70
Elapsed millis: 1798
71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71
Elapsed millis: 1136
71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,70,70,71,71
Elapsed millis: 1169
71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,70,71,71,71,71,71,71
Elapsed millis: 2113
71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,70,71,71,71,71,71,71,71,71,71,71,71,71,71
Elapsed millis: 2108
71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,70,71,71,71,71,71,71,71,71,71,71,71,71
Elapsed millis: 2063
75,75,75,75,75,75,75,71,71,71,71,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,74,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75
Elapsed millis: 2056
----------

Took 61565 millis to run 21 times

A teraz to samo dla metody wykorzysujące asyncrhoniczne wyowłania (async/await http://localhost:4553/delay):

http://localhost:4553/delay
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1150
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1075
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1058
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1059
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1095
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1049
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1082
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1073
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1070
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1076
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1062
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1080
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1059
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1081
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1074
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1075
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1066
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1087
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1062
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1091
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1070
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1073
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1079
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1070
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1060
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1085
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1063
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1095
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1063
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1107
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1077
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1087
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1076
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1054
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1068
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1085
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1075
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1079
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1068
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1089
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1074
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1064
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1062
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1061
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1059
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1078
44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44
Elapsed millis: 1066
44,45,45,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,44,45,44,44,45,44,44,45,44,44,44,44,44,44,44
Elapsed millis: 1070
45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
Elapsed millis: 1061
45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
Elapsed millis: 1069
45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
Elapsed millis: 1094
45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
Elapsed millis: 1067
45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
Elapsed millis: 1043
45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
Elapsed millis: 1094
45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
Elapsed millis: 1069
45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
Elapsed millis: 1077
----------

Took 60225 millis to run 56 times

Jak widać dla takiego samego czasu działania (około 60 sekund) ilość obsłużonych zadań jest przeszło dwa razy większa – 2x przyspieszenie. 21 vs 56

mplayer + youtube-dl = Super Combo

Z serii niesamowite jedno-linijkowsce

$ mplayer $(youtube-dl -g "<youtube link>")

na przykład:

$ mplayer $(youtube-dl -g "http://www.youtube.com/watch?v=EI7dJS02lzM")

LXC a może docker?

Trzeba by się zająć czymś fajnym. Na przykład dockerem albo natywnymi lxc-containers. Odciążyło by mi to znacznie Linuksowe maszyny wirtualne które teraz wciągają nie tak mało zasobów.
PS. Fajny wykład na temat:

Używamy Cookies

Tak, używam cookies jak 90% stron internetowych i tak jest od ~20 lat!!!!
Co więcej nie zamierzam się tym chwalić ani informować kogokolwiek. Spowodowane jest to tym iż każdy może sobie zablokować zapisywanie cookies i tyle – to sprawa przeglądarki każdego użytkownika tego i innych stron internetowych. Obecnie ze względu na nowe rozporządzenie UE, każda niemal polska strona jest zeszpecona tymi wyskakującymi głupimi informacjami; dlatego mówię DOSYĆ.

A dodatkowo klikanie na stutysięczny-dziewięćdziesiąty-drugi banner informujący o oczywistej oczywistości jest tak irytujące jak tylko być może.

Screen – moje zdalne autopodłączanie

Screen to jak wiadomo program do rozszerzania standardowego terminalu (lub emulatora terminala) o możliwość pracy na wielu ekranach. To uproszczenie ale przedstawia główną idee działania. Alternatywą do niego jest tmux, jednak ja raczej pozostaję wierny pierwowzorowi. Używam screena właściwie codziennie na komputerze lokalnie, na zdalnym serwerze i wewnątrz wirtualnej maszyny.

Przy zdalnym dostępie oczywiście wykorzystywany jest klient ssh. Dla jego wykorzystania zrobiłem sobie podręczny skrypt a właściwie funkcję basha automatyzującą podłączenie:

sshMyHost()
{
 ssh -L 8080:localhost:8080 -L 8081:remoteHost:8080 myUser@My.Host.com \
-t ". /etc/profile; screen -dR"
}

Taka funkcja standardowo łączy się przez ssh z hostem My.Host.com. Ciekawym natomiast jest opcja -t która powoduje automatyczne wywołanie podanego polecenia na zdalnej maszynie. I tu cały pic i magia; polecenie to

. /etc/profile; screen -dR

powoduje iż wczytywany jest główny profil login shella aby odświeżyć parametry locale, env itp. a następnie podłączamy się do istniejącej sesji screena lub tworzymy nową.

Ta funkcja, mimo iż prosta pozwala zaoszczędzić maaasę klikania i powtarzania machinalnych czynności. Często używane hosty są tak zdefiniowane do automatycznego szybkiego podłączenia. Oczywista, używam autoryzacji sesji SSH przy pomocy kluczy publicznych. Dążymy do tego aby jak najmniej niepotrzebnie klikać i obciążać naszą pamięć białkową 🙂 Funkcję tą doklejamy do ~/.bashrc albo ~/.bash_profile albo aby używać tego globalnie do /etc/bash/bashrc lub /etc/profile. Tym sposobem funkcja automatycznie się ładuje do zmiennych środowiskowych usera.
O obsłudze screena nie będę pisał bo każdy może znaleźć lepsze, obszerne manuale i tutoriale w sieci.

Netvibes – najlepszy czytnik RSS

Chyba wiadomym jest iż obecnymi czasy natłok informacyjny jest przeogromny. Media generują przeogromną masę treści które ciężko przetrawić i odfiltrować interesujące nas treści. Trochę to łatwiej osiągnąć jest w internecie gdzie to użytkownik przetrawić co go interesuje najbardziej.

Przyjęło się iż w różne serwisy i portale generują swoje treści (tzw. content) w postaci przenośnego formatu RSS. Format ten jest uniwersalny i dość przenośny między różnymi platformami. Z technicznego punktu widzenia, RSS to nic innego jak pliki XML. Obróbka albo formatowanie tego formatu jest nadzwyczaj prosta, dlatego też istnieje bardzo dużo wszelkiej maści czytników RSS. Są czytniki natywne, czyli w postaci uruchamianych programów, są też czytniki on-line, czyli strony internetowe prezentujące treść otrzymywaną przez RSS.

Czytaj więcej »

Rekurencja

Żeby zrozumieć rekurencję należy zrozumieć rekurencję

Bede grał w GRE!

Parafrazując klasyczny film na youtube, nie będzie to jednak Tomb Raider 😉

Zafascynował mnie natomiast projekt pt. Tricku Truck czyli symulator jazdy ciężarówką.

Gra polega na jazdą ciężarówką w zestawie z przyczepą. Bardzo fajnie odwzorowana jest fizyka jazdy i zachowania z całym otoczeniem świata. Gra mimo że jest dość prosta oferuje mnóstwo miodnej rozrywki z uwagi na mnogość plansz stworzonych przez samych użytkowników. Poziomy obfitują w zagadki logiczne, zręcznościowe, wyzwania czasowe i zmagania z precyzją sterowania. W wersji demo dostępny jest tylko jeden pojazd w konfiguracji: ciągnik i długa naczepa. Pełna wersja dodaje do tego parę różnych kombinacji ciągników i naczep oraz innych pojazdów. Nadrzędnym celem każdego z poziomów jest pokonanie przeszkód na trasie i dowiezienie >50% ładunku do punktu docelowego.
Niesamowitą frajdę sprawia samo poruszanie się naszym pojazdem, szczególnie że cały czas należy myśleć o długiej i ciężkiej naczepie z ładunkiem. Łatwo jednakże nie jest; możemy się rozbić kompletnie, stracić przyczepność kół napędowych, zablokować przyczepę, urwać niejedno koło, pozbyć się ładunku oraz spaść w przepaść. Ba, już samo obserwowanie unicestwiania naszego pojazdu daje niemałą satysfakcję.

PS. Ponadto Tricky Truck działa pod Wine 😉

TV@ONET.PL

Super fajna strona z programem TV: http://programtv.onet.pl/.

Prosta acz mega funkcjonalna.