<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <atom:link href="https://jacek.zlydach.pl/blog/tags/linux-feed.xml" rel="self" type="application/rss+xml"/>
    <title>Posts tagged: Linux - Jacek Złydach - blog</title>
    <link>https://jacek.zlydach.pl/blog/tags/linux.html</link>
    <lastBuildDate>Tue, 25 Jan 2022 12:54:25 +0100</lastBuildDate>
    <description>Blog of Jacek Złydach - a programmer and science enthusiast.</description>
    <generator>Regenerate2</generator>
    <managingEditor>temporal.pl@gmail.com (Jacek Złydach)</managingEditor>
    <webMaster>temporal.pl@gmail.com (Jacek Złydach)</webMaster>
    <ttl>1440</ttl>
    <copyright>© 2017, 2018, 2019, 2020, 2021, 2022, Jacek Złydach</copyright>
    <item>
      <title>Getting AltGr to run on Ubuntu under VirtualBox on Windows</title>
      <link>https://jacek.zlydach.pl/blog/2015-03-09-getting-altgr-to-run-on-ubuntu-under-virtualbox-on-windows.html</link>
      <guid isPermaLink="true">https://jacek.zlydach.pl/blog/2015-03-09-getting-altgr-to-run-on-ubuntu-under-virtualbox-on-windows.html</guid>
      <pubDate>Mon, 09 Mar 2015 00:53:35 +0100</pubDate>
      <category domain="https://jacek.zlydach.pl/blog/tags/old-blog.html">Old blog</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/windows.html">Windows</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/porady.html">porady</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/linux.html">Linux</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/stumpwm.html">StumpWM</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/ubuntu.html">Ubuntu</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/virtualbox.html">VirtualBox</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/keyboard.html">keyboard</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/problem.html">problem</category>
      <description><![CDATA[<em>I need to dump this arcane piece of knowledge somewhere so it will get indexed by Google and maybe make things easier to find for the next person who has this problem.</em>

So you installed a Linux in a VirtualBox under Windows machine, and now your Right Alt (aka. AltGr) started to work like CTRL under Linux? Here's a quick solution that makes no sense whatsoever, but works.

Go to the VirtualBox Manager window, open File-&gt;Preferences, and under Input tab uncheck the Auto Capture Keyboard option. Ta da, your AltGr should be working properly now. As a side effect, your Alt+Tab combo will <em>stop</em> working, being captured by Windows now. Also, make sure that when a VirtualBox pop-up shows up, asking you to capture keyboard, you click Cancel - otherwise AltGr will get back to being broken again until you &quot;uncapture&quot; input, by e.g. switching to host Windows system.

Source: about an hour or two in total wasted on three different occasions to find <a href="http://superuser.com/questions/681350/using-windows-as-a-virtualbox-host-how-i-can-get-altgr-behavior-on-linux-guest">this SuperUser answer</a>.

Now that it's fixed, I can finally get back to playing with <a href="https://stumpwm.github.io/">StumpWM</a>.
]]></description>
    </item>    <item>
      <title>QED - UNIX API w wersji trochę bardziej przyjaznej</title>
      <link>https://jacek.zlydach.pl/blog/2010-02-25-qed-unix-api-w-wersji-troche-bardziej-przyjaznej.html</link>
      <guid isPermaLink="true">https://jacek.zlydach.pl/blog/2010-02-25-qed-unix-api-w-wersji-troche-bardziej-przyjaznej.html</guid>
      <pubDate>Thu, 25 Feb 2010 20:25:56 +0100</pubDate>
      <category domain="https://jacek.zlydach.pl/blog/tags/old-blog.html">Old blog</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/cpp.html">C++</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/narzedzia.html">narzędzia</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/linux.html">Linux</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/unix.html">Unix</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/qed.html">QED</category>
      <description><![CDATA[<a href="projects.html#qed">Chciałbym opublikować kawałek kodu</a>, który napisałem pod wpływem emocji w ramach nauki na końcowe kolokwium z systemów operacyjnych. Zadania, które dostawaliśmy tam były niemożliwe do zrobienia bez dobrej znajomości API UNIXa dotyczącego <a href="http://pl.wikipedia.org/wiki/Komunikacja_mi%C4%99dzyprocesowa">komunikacji międzyprocesowej</a> i przygotowania sobie jakiegoś kodu wcześniej. Teoretycznie można było korzystać z Internetu i dowolnych własnych zasobów, ale bez wstępnego przygotowania nie było szans ;). Większość znajomych przygotowywała więc sobie rozwiązania dotychczasowych zadań z laboratorium w nadziei, że będą się dały zaadaptować do kolokwium.

QED, bo tak nazywa się biblioteka, powstała jako wynik frustracji po słabym zaliczeniu pierwszego terminu. Opakowuje ona całe to przykre i bolesne w użyciu API <a href="http://pl.wikipedia.org/wiki/Komunikacja_mi%C4%99dzyprocesowa">IPC</a> UNIX'a do postaci prostych klas i funkcji C++. Większość zadań da się zrobić bez ani jednej linii kodu w czystym UNIXowym API :).

<a href="projects.html#qed"><strong>Biblioteka QED oraz przykładowe zadania z laboratoriów / kolokwium.</strong></a>

Biblioteczka ta zawiera:
<ul>
	<li>Uproszczony <a href="http://www.boost.org/doc/libs/1_42_0/libs/conversion/lexical_cast.htm"><code lang="C++" inline="true"><span class="no-paren-fx">lexical_cast</span></code></a></li>
	<li>Obiekty do łatwego synchronizowania operacji na <code lang="C++" inline="true"><span class="no-paren-fx">std::ostream</span></code>(tak, na <code lang="C++" inline="true"><span class="no-paren-fx">std::cout</span></code> też!) w programach wielowątkowych</li>
	<li>Funkcję do pobierania czasu z milisekundową rozdzielczością</li>
	<li>Pomocnicze makra zastępujące powtarzający się w kółko kod</li>
	<li>Pomocnicze funkcje do <strong>wygodnego</strong> <code lang="C++" inline="true"><span class="no-paren-fx">fork<span class="paren1">(<span class="no-paren-fx"></span>)</span></span></code> (łącznie z przepinaniem STDIN i STDOUT dziecka); <a href="http://en.wikipedia.org/wiki/Fork-exec">fork-exec idiom</a> trzeba sobie zrobić samemu, ale co to za problem wywołać sobie funkcję <code lang="C++" inline="true"><span class="no-paren-fx">exec<span class="paren1">(<span class="no-paren-fx"></span>)</span></span></code> :P.</li>
	<li>Klasy izolujące <a href="http://beej.us/guide/bgipc/output/html/singlepage/bgipc.html#pipes">nienazwane</a> i nazwane <a href="http://beej.us/guide/bgipc/output/html/singlepage/bgipc.html#fifos">pipe'y (FIFO)</a>, <a href="http://beej.us/guide/bgipc/output/html/singlepage/bgipc.html#semaphores">semafory</a>, <a href="http://beej.us/guide/bgipc/output/html/singlepage/bgipc.html#shm">pamięć współdzieloną</a> i <a href="http://beej.us/guide/bgipc/output/html/singlepage/bgipc.html#mq">kolejki komunikatów</a></li>
	<li>Inne pomocnicze funkcje</li>
</ul>

Mam szczerą nadzieję, że kod ten przyda się przynajmniej tym z Czytelników, którzy już za rok (albo i wcześniej) zmierzą się z Systemami Operacyjnymi na IS :).

Dlaczego taka nazwa? QED oznacza <a href="http://pl.wikipedia.org/wiki/Elektrodynamika_kwantowa">elektrodynamikę kwantową</a> - bardzo pokręconą dziedzinę fizyki, o której czytałem sobie &quot;do obiadu&quot; w okresie prac nad powyższą biblioteką. <a href="http://pl.wikipedia.org/wiki/Q.e.d.">Q.E.D.</a> to też łaciński skrót oznaczający <em>Quod erat demonstrandum</em> (&quot;Co było do udowodnienia&quot;) - co dobrze współgrało z moją frustracją po pierwszym terminie (na zasadzie: &quot;no, na drugim pokażę!&quot;).

Dla niewystarczająco przekonanych, przykład kodu:
<pre><code lang="C++"><span class="no-paren-fx"><span class="comment">//================================================================
</span><span class="comment">//Beta section
</span><span class="comment">//================================================================
</span><span class="symbol">int</span> process_beta<span class="paren1">(<span class="no-paren-fx"><span class="symbol">void</span>* data</span>)</span>
<span class="paren1">{<span class="no-paren-fx">
	betaQueue.attach<span class="paren2">(<span class="no-paren-fx"></span>)</span>;
	alphaSharedQueue.attach<span class="paren2">(<span class="no-paren-fx"></span>)</span>;

	<span class="symbol">char</span> buffer<span class="paren2">[<span class="no-paren-fx">1024</span>]</span>;

	<span class="symbol">while</span><span class="paren2">(<span class="no-paren-fx"><span class="symbol">true</span></span>)</span>
	<span class="paren2">{<span class="no-paren-fx">
		std::memset<span class="paren3">(<span class="no-paren-fx">buffer, 0, 1024*<span class="symbol">sizeof</span><span class="paren4">(<span class="no-paren-fx"><span class="symbol">char</span></span>)</span></span>)</span>;
		
		<span class="comment">//get data from msg queue
</span>		betaQueue.receive_message<span class="paren3">(<span class="no-paren-fx">buffer</span>)</span>;

		<span class="comment">//cut out last two letters
</span>		buffer<span class="paren3">[<span class="no-paren-fx">std::max<span class="paren4">(<span class="no-paren-fx"><span class="symbol">static_cast</span>&lt;<span class="symbol">int</span>&gt;<span class="paren5">(<span class="no-paren-fx">std::strlen<span class="paren6">(<span class="no-paren-fx">buffer</span>)</span></span>)</span> - 2, 0</span>)</span></span>]</span> = <span class="character">'\0'</span>;

		<span class="comment">//send data via message queue to P1
</span>		alphaSharedQueue.send_message<span class="paren3">(<span class="no-paren-fx">buffer</span>)</span>;
	</span>}</span>

	<span class="symbol">return</span> 0;
</span>}</span></span></code></pre>
Oto kod procesu, który odbiera informacje z kolejki komunikatów, obcina im dwa ostatnie znaki i wysyła je inną kolejką komunikatów.
Teraz, wyobraź sobie, że piszesz w czystym UNIX API :P.
]]></description>
    </item>    <item>
      <title>Linux Oświecony - Tapety</title>
      <link>https://jacek.zlydach.pl/blog/2009-07-21-linux-oswiecony-tapety.html</link>
      <guid isPermaLink="true">https://jacek.zlydach.pl/blog/2009-07-21-linux-oswiecony-tapety.html</guid>
      <pubDate>Tue, 21 Jul 2009 12:00:51 +0200</pubDate>
      <category domain="https://jacek.zlydach.pl/blog/tags/old-blog.html">Old blog</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/grafika-komputerowa.html">Grafika Komputerowa</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/windows.html">Windows</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/sztuka.html">sztuka</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/linux.html">Linux</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/enlightened-guest.html">Enlightened Guest</category>
      <category domain="https://jacek.zlydach.pl/blog/tags/tapety.html">tapety</category>
      <description><![CDATA[Microsoft tworzy niekiedy bardzo ciekawe terminy. <a href="http://wawszczak.pr0.pl">Stanisław Wawszczak</a> dopadł ostatnio książkę o Windows Server 2008 (świeżutką, prosto z Microsoft Press) i tak oto dowiedzieliśmy się o istnieniu <em><a href="http://wawszczak.pr0.pl/2009/07/21/enlightened-guest-operating-system/">oświeconych systemów-gości</a></em> - z angielskiego <em>enlightened guest systems</em>. Dużo uwagi Microsoft przeznaczył na udostępnienie pewnych funkcji Linuksom, i tak powstał <em>'Enlightened Linux Guest'</em>. Techniczny opis znaleźć można <a href="http://msdn.microsoft.com/en-us/library/cc768520(BTS.10).aspx">na MSDN</a>; dla odmiany chciałbym zaprezentować artystyczne ujęcie tematu w oparciu o wizję przedstawioną przez Staśka. Poniżej znajdują się trzy tapety w rozdzielczości 1280x800 (laptopowa panorama) każda.
<center><a href="old-blog/download/galleries/enlightenment/enlightnment_blank.png"><img src="old-blog/download/galleries/enlightenment/enlightnment_blank_450.png" alt="Tapeta - Logo Windows 2008"></a></center>
<center><a href="old-blog/download/galleries/enlightenment/enlightnment_logo_bottom.png"><img src="old-blog/download/galleries/enlightenment/enlightnment_bottom_450.png" alt="Tapeta - Logo Windows 2008"></a>
</center>
<center><a href="old-blog/download/galleries/enlightenment/enlightnment_nologo.png"><img src="old-blog/download/galleries/enlightenment/enlightnment_top_450.png" alt="Tapeta - Kolejna z logo Windows 2008"></a></center>
Tapety są mojego autorstwa; zostały wykonane przy użyciu jedynie <a href="http://www.paint.net/">Paint.NET</a>. Na życzenie mogę przygotować wersje w innych (byle nie za dużych) rozdzielczościach.
Sam Tux w krawacie pochodzi z <a href="http://galeria.max-payne.info/wyswietl.php?gal=4&amp;zdjecie=1">pewnej strony</a>, na której nie udało mi się odnaleźć żadnych danych kontaktowych do autora - jeśli więc naruszyłem czyjeś prawa autorskie, proszę o powiadomienie.

Ah, w chwili przygotowywania tego posta do publikacji znalazłem na <a href="http://www.wykop.pl/wykopalisko">Wykopalisku</a> artykuł <a href="http://technologie.gazeta.pl/technologie/1,82011,6842542,Szok__Microsoft_ofiarowal_kod_do_kernela_Linuksa.html">poruszający temat</a> oświecenia Linuksa ;) . 
]]></description>
    </item>
  </channel>
</rss>