Archiwum kategorii: Tech

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

SpinDown zewnętrznego dysku USB

Podłączanie i używanie przenośnego dysku USB wydaje się prostą sprawą. I w większości przypadków  taką jest, jednakże zauważyłem problemy przy odłączaniu urządzeń pod Windows7 i Linuksem.
WindowsXP po bezpiecznym odmo(u)ntowaniu urządzania wprowadzał je w tryb uśpienia lub niskiego poboru prądu co objawiało się wyłączeniem silnika dysku – tzw. spin-down. Powodowało to iż można było pewnie i bezpiecznie odłączyć kabel USB.

Windows7/Vista domyślnie tego nie robią. Ale jest i sposób na to. Microsoft wystosował artykuł KB2401954 opisujący jak wrócić do zachowania znanego z WindowsXP.

Pod „Linuszym” jednak należy posłużyć się innym rozwiązaniem. Po wielu próbach z sdparm, dzięki sg3gutils ostatecznie udało mi się wyłączać silnik dysku USB komendą

scsi_stop /dev/sdb

(gdzie /dev/sdb to urządzenie dysku). Mój dysk przenośny natychmiast przechodzi w tryb uśpienia i można go bezpiecznie wyjąć. Czy są jakieś przeciwwskazania do takiego postępowania?

Skrypt backupowy

Jak mówi stare góralskie przysłowie: ludzie dzielą się na tych co robią backupy, i tych co je będą robić. Tym samym przedstawiam mój super prosty skrypt do backupowania systemu.

#!/bin/bash

ionice -c3 nice tar -cvpO \
  --exclude=/home/chaos/.VirtualBox/Machines \
  --exclude=/tmp/swap \
  --exclude=/home/pub \
  --exclude=/usr/portage \
  --exclude=/usr/src \
  --exclude=/var/log \
  --exclude=/var/tmp/distfiles \
  --exclude=/var/tmp/swap1 \
  /bin/ /boot/ /etc/ /home/ /lib/ /opt/ /sbin/ /usr/ /var/ \
| 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on -p -si \
backup.tar.7z

Analiza zgodnie z kolejnością: odpalenie na niskim priorytecie I/O i procesora potoku tar-ującego do stdout. Zakładam paręnaście excludów na katalogi i podkatalogi których nie chcę backupować, definiuję katalogi główne do backupu. wyjście z tara kieruję na potok wejściowy pakera 7z który działa z maksymalną kompresją i szyfrowaniem wynikowego archiwum o nazwie backup.tar.7z. Używam tara bo tar zachowuje więcej parametrów plików niźli 7z by zrobił.
Z przeprowadzonych subiektywnych testów, 7z  pakuje z większym ratio niż gzip czy bzip, chociaż robi to dłużej.

DLNA vs Samsung LCD

Kontynuując wątek na temat sprzętu który posiadam lub konfigurowałem, teraz będzie o telewizorach. Dokładniej o telewizorach firmy Samsung. Jeden większy to Samsung LE40B650 a mniejszy to Samsung LE37C650. Jeden posiadają moi rodzice, drugi jest moją własnością. Oba sprzęty wpierają technologię DLNA/UPnP. Czyli najogólniej rzecz ujmując, potrafią odtwarzać zdalny kontent dostępny przez sieć LAN.

Na Linuksie najpopularniejsze rozwiązanie dla DLNA to użycie programu MediaTomb lub MiniDLNA. W sieci jest bardzo wiele tutoriali i opisów jak oba skonfigurować, szczególnie przy pomocy MediaTomba, więc nie ma sensu tego tutaj przytaczać.

Konfiguracja routera i Linuksa jest dość prosta – w dwóch routerach z jakimi miałem do czynienia wystarczyło włączyć opcję UPnP. Nie udało mi się  zmusić modelu Samsung LE40B650 do odtwarzania udostępnianych przez MediaTomba filmów, mimo zastosowania popularnego obejścia problemu. MiniDLNA mimo że jest prostszy, nie stroi żadnych fochów więc na nim ostatecznie się oparłem.

Oba telewizory bardzo dobrze odtwarzają udostępniane materiały różnych typów: zdjęcia, muzykę w formacie MP3, filmy wideo zakodowane w formacie MP4, AVI, DivX, Matroska itp. Jedyny problem powstał na Samsung LE40B650 przy odtwarzaniu filmów z dźwiękiem DTS. Sprzęt wyświetlał komunikat o braku wsparcia dla tego typu dźwięku. Podejrzewam że ten model nie ma albo zainstalowanego kodeka albo w ogóle mieć nie miał ze względu na brak licencji na DTS.

Problem z dźwiękiem obszedłem trochę siłowo, mianowicie każdy taki film z dźwiękiem DTS rozdzielam na dwa strumienie: dźwięk i obraz. Używam do tego pakietu mkvtoolnix. Następnie plik z wyodrębnionym dźwiękiem DTS konwertuję na format AC3 przy pomocy ffmpeg i całość łączę znowu przy użyciu mkvtoolnixa. Opcjonalnie można jeszcze wykonać „hardsubbing” napisów do strumienia wideo, ale ten proces jest bardzo pracochłonny – na słabym procesorze film 4GB potrafi się konwertować od paru godzin do pół dnia :-). Konwersję taką wykonuję przy użyciu mencoder-a.

Po reorganizacji sprzętów i mebli padło na to, iż telewizor u rodziców oddali się od routera na tyle znacznie, iż nie opłaca się ciągnąć do niego kabla ethernet. Dlatego niejako zmuszony zostałem do kupna adaptera WiFi przystosowanego do obsługi sieci WiFi dla telewizorów Samsunga. Urządzenie mimo iż niepozorne spisuje się bardzo dobrze.

Podsumowując, można powiedzieć iż telewizory Samsunga odznaczają się ponadprzeciętnymi właściwościami multimedialnymi i w połączeniu z Linuksem (i nie tylko) potrafią zapewnić sporo rozrywki i zabawy 🙂

Skrypty:

#Konwersja dźwięku z filmu do pliku AC3
ffmpeg -i orginalnyPlikZFilmem.mkv -vol 750 -threads 4 -acodec ac3 -ac 6 -ab 448k wyjsciowyPlikAudioAC3.ac3

#Łączenie dźwięku AC3 ze strumieniem wideo. Wynikiem jest nowy plik MKV
mkvmerge -o docelowyPlikWynikowyZeZlaczanymDZwiekiemAC3iObrazem.mkv \
"--language" "1:eng" "--default-track" "1:yes" "--forced-track" "1:no" \
"--display-dimensions" "1:1280x528" "--default-duration" "1:23.976fps" \
"--compression" "1:none" "-d" "1" "-A" "-S" "-T" "--no-global-tags" \
"--no-chapters" "orginalnyPlkikZFilmem.mkv" "--language" "0:pol" "--forced-track" \
"0:no" "--compression" "0:none" "-a" "0" "-D" "-S" "-T" "--no-global-tags" \
"--no-chapters" "plikZeSkonwertowanymDzwiekiemAC3.ac3" "--track-order" \
"0:1,1:0"

#Wgrywanie (hardsubbing) napisów do filmu
mencoder orginalnyPlikZFilmem.mkv -o wyjsciowyStrumienWideoZWgranymiNapisami.h264 \
-nosound -ovc x264
-sub plikZNapisamiDoFilmu.txt -subcp cp125 \
-x264encopts bframes=3:weight_b:partitions=all:8x8dct:subq=5:frameref=2:bitrate=7000

H4ck

Ostatnio zainteresowałem się tematem bezpieczeństwa (i nie-) w sieciach bezprzewodowych. Nie chcę powtarzać oczywistości jak to że WEP jest „be” a WPA w dobrej konfiguracji ok. Bardziej mnie zainteresowało łamanie mocnych zabezpieczeń w nietrywialnych konfiguracjach.

Jak dojdę do własnych konkretnych konkluzji to pewnie je tu opiszę; na razie testy są w trakcie realizacji

Gentoo na laptopie

No i stało się, zainstalowałem Gentoo na laptopie 🙂
Wcześniejsze Ubuntu było fajne, działało nieźle, wyglądało super, zero wysiłku itp. ale czegoś mi jednak brakowało. Brakowało mi portage, gentoolkit, znanego mi zarządzania pakietami specyficznego podejścia filozoficznego Gentoo.

Oczywiście doprowadzenie do podobnie działającego systemu jest o niebo dłuższa w przypadku Gentoo, jednak jest bardziej świadoma, dostarcza o wiele więcej frajdy (no może jak dla kogo) i jest o wiele bardziej pouczająca ;-P

Komórkowy internet

Jadę sobie właśnie tramwajem i korzystam w dobrodziejstw w mobilnego komórkowego netu w mojej Nokii E51. Głównie używam Opery mobile ale też z Google map, Gmaila, Palringo.

Jako całość internet mobilny w E51 działa naprawdę dobrze. Jedyne co mogę mu zarzucić to to, iż Opera Mobile często sypie komunikatami o braku pamięci na wielu cięższych stronach lub kilku zakładkach. Ale to raczej normalne. Jak wiadomo apetyt rośnie w miarę jedzenia, toteż zacząłem się już dość dawno rozglądać za słuchawką o większych możliwościach.

Moimi typami są oczywiście androidowe smartfony pokroju Sony Erricson Xperia X10, Samsung Galaxy S, HTC Desire itp. Czy stać mnie będzie na wydanie ~1000-2000 PLN na następna komórkę? Tego jeszcze nie wiem.

Jakoś(ć) internetu bezprzewodowego

W lipcu przeprowadziłem się do nowego mieszkania na Warszawską Pragę południe. W mieszkaniu owym nie było ani telefonu stacjonarnego ani żadnego innego połączenia z internetem. Nie wdając się w szczegóły, w końcu nadszedł czas że bycie off-line zaczęło mocniej ugniatać. Postanowiliśmy z Agatą że trzeba załatwić jakiś „net” bezprzewodowy. Trzeba nadmienić iż naszą główną docelową lokacją była Warszawa czyli miasto gdzie pokrycie i sygnał Orange’a powinien być wręcz wzorcowy.

Tak się szczęśliwie złożyło, że rodzice moi nabyli zestaw Orange Free. Jako że oni, przez dłuższy czas nie potrzebowali bezprzewodowego internetu, ustaliliśmy że wezmę modem „do testów”. Tak oto stałem się już od 3 miesięcy testerem i użytkownikiem bezprzewodowego internetu Orange Free z pakietem 512 MB na miesiąc :-/ Oto moje opinie na temat tegoż internetu:

Prze pierwszy miesiąc download był żenująco wolny, nie przekraczał ~20KB/sec. Pingi były rzędu 200, 400, 1500 (!!)sekund. Latency ruchu przy połączeniu przez PuTTY (normalna sesja SSH ze zdalnym serwerem) był mocno uciążliwy. Ruch i wysyłanie pakietów potrafiły zamierać na minutę albo dłużej przerywając sesję SSH oraz komunikację HTTP (GET i POST przeglądarki).

Po miesiącu przekroczyłem jakimś cudem mieniony wcześniej limit 512 MB. Ruch został jeszcze bardziej ograniczony (download rzędu 5 KB/sec). Ok, było źle, jest jeszcze gorzej – mam dość. Cholera mnie brała i już miałem zamiar reklamować ten pakiet „niby” internetu (nad czym nadal czasem myślę). Po parunastu dniach gdy limit ograniczający transfer przypadający na dany miesiąc został zniesiony, nastąpiła znaczna poprawa – download dochodził do 200-300 KB/sec. Latency i pingi zostały na dawnym, czyli tragicznym poziomie 🙁

Najdziwniejsze jest to iż komunikacja jest co jakiś czas przerywana bezapelacyjnie nawet na minutę, podczas któej nie wysyłane są żadne pakiety – zakręcony kurek i nic nie wchodzi ani nie wychodzi. Taki stan rzeczy jest dość mocno powtarzalny i wnerwiający. Nie będę już nawet mówił o stosunku Quality/ceny usługi który jest uwłaczający.

Podsumowując – według mnie, na przykładzie Orange Free bezprzewodowy internet jest technologią mocno w fazie startowej, z dużą ilością rzeczy do poprawienia.