<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wikidot="http://www.wikidot.com/rss-namespace">

	<channel>
		<title>Private news</title>
		<link>http://dpc.ucore.info/news</link>
		<description></description>
				<copyright></copyright>
		<lastBuildDate></lastBuildDate>
		
					<item>
				<guid>http://dpc.ucore.info/forum/t-222064/recording-a-screencast-in-linux-ubuntu-9-10</guid>
				<title>Recording a screencast in Linux (Ubuntu 9.10)</title>
				<link>http://dpc.ucore.info/forum/t-222064/recording-a-screencast-in-linux-ubuntu-9-10</link>
				<description>As I&#039;ll have to record some video presentations in the upcoming future and lately I&#039;ve been thinking about publishing some video screencasts - today I&#039;ve spent some time on checking and setting up some tools to do this on my computer. I&#039;ve decided to post my findings and final settings.</description>
				<pubDate>Tue, 23 Feb 2010 22:53:09 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>It seemed like there were really two options for straightforward unix-like tool to do the job:</p> <ul> <li><tt><a href="http://xvidcap.sourceforge.net/">xvidcap</a></tt></li> <li><tt><a href="http://recordmydesktop.sourceforge.net/">recordmydesktop</a></tt></li> </ul> <p>I had some audio related problems with both programs - both recorded video with audio going out of sync, or nosie. I've found this: <a href="http://karussell.wordpress.com/2009/11/18/recordmydesktop/">http://karussell.wordpress.com/2009/11/18/recordmydesktop/</a></p> <p>And the options suggested in one of the comments are working fine for me:</p> <div class="code"> <pre> <code>--v_bitrate 2000000 --s_quality 10 --delay 1 --fps 20 --overwrite -device plughw:0,0 --no-wm-check --buffer-size 65538 --freq 48000 --quick-subsampling --on-the-fly-encoding</code> </pre></div> <p>I've spend few more minutes to "import" this into the <tt>gtk-recordMyDesktop</tt> front-end to <tt>recordmydesktop</tt>. My <tt>.gtk-recordmydesktop</tt> file now looks like this:</p> <div class="code"> <pre> <code>#Order and overall number of lines must be preserved #For this file to be read correctly #Framerate 12 #Cursor(0 xfixes,1 white,2 black,3 none) 0 #Sound,0 disabled 1 enabled 1 #Full shots,1 disabled 0 enabled 1 #Filename /home/dpc/test.ogv #Delay,seconds 0 #Number of channels 1 #Frequency 48000 #Sound-device plughw:0,0 #Video quality(0-63) 63 #Audio quality(0-10) 5 #Display $DISPLAY #Shared memory,1 disabled 0 enabled 0 #Reset capture area,1 disabled 0 enabled 0 #Recording area -1,-1,-1,-1 #Quick subsampling,1 disabled 0 enabled 0 #Working directory(temporary files) /tmp #On the fly encoding,1 disabled 0 enabled 0 #Zero compression,1 disabled 0 enabled 1 #overwrite existing files,0 disabled 1 enabled 0 #Include window decorations,1 disabled 0 enabled 1 #Use jack 0 #last used jack ports #Tooltips,1 disabled 0 enabled 0 #draw an on-screen frame, surrounding the capture area 0 #Extra options --v_bitrate 2000000 --no-wm-check --buffer-size 65538 --no-wm-check #Follow mouse,1 disabled 0 enabled 1</code> </pre></div> <p>I think that the following link may be useful soon - before publishing my videos:<br /> <a href="http://wiki.showmedo.com/index.php/Video_editing_Ubuntu">http://wiki.showmedo.com/index.php/Video_editing_Ubuntu</a></p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-221203/codezero-l4-microkernel-developer-starting-guide</guid>
				<title>Codezero (L4 microkernel) developer starting guide</title>
				<link>http://dpc.ucore.info/forum/t-221203/codezero-l4-microkernel-developer-starting-guide</link>
				<description>Concept of microkernel was one of those ideas that I&#039;ve had fallen in love at the first sight. It&#039;s a beauty of KISS rule applied to kernel programming. I&#039;m especially interested in the modern, so called second generation microkernel, called L4 . I&#039;ve was researching a subject for a long time, but never actually got my hands dirty with it. It always seemed to hard to start developing such creature - set up development environment, understand how things work or write the code from scratch. Finally - I&#039;ve reached a point where I&#039;m able to work with L4 kernel. And I&#039;d like to write down my experience so that others can at least research the subject and play with it for fun or more meaningful goals. If you&#039;d like to start working with L4 yourself - go ahead and read this article.</description>
				<pubDate>Sun, 21 Feb 2010 01:15:54 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <h1><span>Introduction</span></h1> <p>So you'd like to start developing a microkernel? To do so you obviously need to have some experience with:</p> <ul> <li>C programming</li> <li>low level computer fundamentals</li> </ul> <p>and have some UNIX (possibly Linux) installed.</p> <p>If you don't know what L4 is, please read a <a href="http://en.wikipedia.org/wiki/L4_microkernel_family">wikipedia page about L4 microkernel family</a>.</p> <p>To start working with L4 you'll first have to understand how it works. The good starting point is <a href="http://ertos.nicta.com.au/software/kenge/pistachio/latest/userman.pdf">L4 User Manual by Ihor Kuz</a> from <a href="http://en.wikipedia.org/wiki/NICTA">NICTA</a>.</p> <p>Due to its nature L4 perfectly matches the requirements of modern embedded systems. And now days almost all embedded systems are targeting the ARM architecture. The <a href="http://infocenter.arm.com/help/topic/com.arm.doc.ddi0210c/DDI0210B.pdf">ARM reference manual</a> contains all the information you could possibly need working with this architecture. However if this subject is completely new for you - you should probably search for more beginner-friendly documentation.</p> <h1><span>Implementation</span></h1> <p>There are several implementations of L4 out there, but the one that I've looked for to start playing with had to be:</p> <ul> <li>Open Sourced</li> <li>written in C &amp; assembler</li> <li>easy to start playing with</li> </ul> <p>After some time I've discovered <a href="http://www.l4dev.org/">Codezero Embedded Hypervizor and OS</a>. As this project is quite new its codebase is not that overwhelming for a newcomer, however complete enough to give working and efficient starting point for my microkernel developing journey. Developers seem to put a lot of effort to maintain really well structured and clean code which seems very good for a project from which I'd like to learn.</p> <h1><span>Starting</span></h1> <p>While the <a href="http://www.l4dev.org/getting_started">Codezero Starting Guide</a> is a good starting point and most of the time really useful it has some problems too: it's too lengthy and time consuming to follow and it contains some mistakes. That's why I've decided to automate all the work and set up my own <a href="http://github.com/dpc/codezero">Codezero git fork for newcomers</a>. The init-build-env branch is where I accumulate all the changes that make life easier for a Codezero newcomer like me. With this changes you should be able to have L4 based project running in up to 30 minutes with most of the time spent on waiting for automated download and compilation process to complete.</p> <h2><span>Setting up tools and building codezero</span></h2> <p>To start just grab a copy of my Codezero's init-build-env repository with git:</p> <div class="code"> <pre> <code>git clone git@github.com:dpc/codezero.git</code> </pre></div> <p>If you don't know what git is, how to run it or how it works - you should really spend some time getting familiar with it. Try <a href="http://learn.github.com/p/intro.html">Github's Introduction to Git</a>.</p> <p>So now, enter the project directory and run the tool script that will setup building environment for you:</p> <div class="code"> <pre> <code>cd codezero ./tools/init-build-env.sh</code> </pre></div> <p>This script will do almost everything what is described in the Codezero's Getting Started page. It will download, build and install environment tools in [[~/opt/arm]] so that the only thing that you have to do (hopefully!) is to press enter once during installation, and add one directory to your PATH environment afterwards.</p> <p>Just follow the process, install missing software if needed and rerun the script if required.</p> <p>After successful execution you will have a build environment ready to build a codezero project.</p> <p>First configure the project. The defaults are fine so just run:</p> <div class="code"> <pre> <code>./configure.py</code> </pre></div> <p>and press q to save the settings.</p> <p>To build the project run:</p> <div class="code"> <pre> <code>./build.py</code> </pre></div> <p>If everything was prepared correctly the build process should create something like the following in the build directory:</p> <div class="code"> <pre> <code>codezero$ ls build config.cml configdata config.h config.rules cont0 conts final.elf kernel.elf loader rules.compiled</code> </pre></div> <h2><span>Runing codezero</span></h2> <p>To run and debug Codezero we will use a <a href="http://wiki.qemu.org/Main_Page">Qemu</a> to emulate a fully working ARM-based system for us. So you should have qemu installed:</p> <div class="code"> <pre> <code>codezero$ which qemu-system-arm /usr/bin/qemu-system-arm</code> </pre></div> <p>There are two options on how to debug the system:</p> <ul> <li>plain gdb</li> <li>insight frontend to gdb</li> </ul> <p>As I don't like GUI applications in development process I'll describe using <tt>./tools/run-qemu-gdb</tt> only. For Insight - you may use <tt>./tools/run-qemu-insight</tt> - it does essentially the same thing.</p> <p>So to make life easier link the script:</p> <div class="code"> <pre> <code>ln -s tools/run-qemu-insight gdb</code> </pre></div> <p>and run it with:</p> <div class="code"> <pre> <code>./gdb</code> </pre></div> <p>so you should get:</p> <div class="code"> <pre> <code>codezero$ ./gdb Qemu started. System serial console accessible via `telnet localhost 12445` GNU gdb (Sourcery G++ Lite 2009q3-67) 6.8.50.20090630-cvs Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later &lt;http://gnu.org/licenses/gpl.html&gt; This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi". For bug reporting instructions, please see: &lt;https://support.codesourcery.com/GNUToolchain/&gt;. QEMU 0.11.0 monitor - type 'help' for more information (qemu) 0x00100000 in ?? () add symbol table from file "build/kernel.elf" at .text_addr = 0x8000 (gdb)</code> </pre></div> <p>What have just happened?</p> <p>The script started Qemu to emulate an ARM system for us with a Codezero kernel image loaded. The virtual machine is stopped and waiting for commands. Two network sockets were created by the Qemu - one for gdb to control and debug the system and second emulating ARM system serial console - which embedded systems usually use as a basic I/O system.</p> <p>Then - right after qemu - gdb is being started with symbols loaded and connected to qemu virtual machine so we can navigate through the source code as it's being executed and control the execution.</p> <p>To connect to the system serial console, open new terminal and run:</p> <div class="code"> <pre> <code>$ telnet localhost 12445 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.</code> </pre></div> <p>Voila! You now have a L4 microkernel running in an ARM virtual machine and you're connected to it's serial port. Was not that hard, was it?</p> <h2><span>Initial debugging</span></h2> <p>As you may not know - the starting process for the Codezero is done in two steps. First - the loader is initializing the platform and then puts the kernel into the right place in the system's memory. Then it passes the execution to the kernel itself and gets out the way.</p> <p>So, in the running gdb session try <tt>dissasemble</tt> command (or just <tt>dissas</tt> alias):</p> <div class="code"> <pre> <code>(gdb) disas Dump of assembler code for function _start: 0x00100000 &lt;_start+0&gt;: ldr sp, [pc, #4] ; 0x10000c &lt;_start+12&gt; 0x00100004 &lt;_start+4&gt;: bl 0x102a8c &lt;platform_init&gt; 0x00100008 &lt;_start+8&gt;: bl 0x1003a0 &lt;main&gt; 0x0010000c &lt;_start+12&gt;: andseq lr, lr, r8, lsr #31 End of assembler dump. (gdb)</code> </pre></div> <p>It's here where everything starts. Corresponding code is in the <tt>loader/libs/c/crt/sys-userspace/arch-arm/crt0.S</tt> file and all the loader code is int the <tt>loader</tt> subdirectory. The starting point is written in the ARM assembler.</p> <p><tt>stepi</tt> will advance one CPU instruction forward. Run it two times, like this:</p> <div class="code"> <pre> <code>(gdb) stepi 0x00100004 in _start () (gdb) stepi platform_init () at conts/libdev/uart/src/platform_init.c:56 56 { (gdb)</code> </pre></div> <p>As you may see the execution flow has reached the C code that is responsible for initializing the platform code. As we're now in the C code we can use <tt>list</tt> command to see the C code listing (or a <tt>l</tt> alias):</p> <div class="code"> <pre> <code>(gdb) l 51 52 return 0; 53 } 54 55 void platform_init(void) 56 { 57 uart.base = PL011_BASE; 58 pl011_initialise(&amp;uart); 59 } 60 (gdb)</code> </pre></div> <p>So we can see that <tt>platform_init</tt> function is doing only one thing here: initializing the <a href="http://pl.wikipedia.org/wiki/Universal_Asynchronous_Receiver_and_Transmitter">UART</a>.</p> <p>As this is not a GDB tutorial I will not cover more about using gdb commands here. There are plenty of such tutorial on web - just look for it.</p> <p>To advance to the point where the loaded gets out of the way do:</p> <div class="code"> <pre> <code>(gdb) tbreak arch_start_kernel Temporary breakpoint 1 at 0x100374: file loader/main.c, line 103. (gdb) c Continuing. Breakpoint 1, arch_start_kernel (entry=0x102aa8) at loader/main.c:103 103 printf("elf-loader:\tStarting kernel\n\r"); (gdb)</code> </pre></div> <p>And then:</p> <div class="code"> <pre> <code>(gdb) l 98 return 0; 99 } 100 101 void arch_start_kernel(void *entry) 102 { 103 printf("elf-loader:\tStarting kernel\n\r"); 104 void (*func)(unsigned long) = (void (*)(unsigned long)) (*(unsigned long*)entry); 105 func(0); 106 } 107 (gdb) n 103 printf("elf-loader:\tStarting kernel\n\r"); (gdb) n arch_start_kernel (entry=0x102aa8) at loader/main.c:104 104 void (*func)(unsigned long) = (void (*)(unsigned long)) (*(unsigned long*)entry); (gdb) n 105 func(0); (gdb) n 0x00008000 in _start_text () (gdb)</code> </pre></div> <p>You could be wondering at this point where are we. Well, we are at <tt>src/arch/arm/head.S</tt> on the line 27.</p> <div class="code"> <pre> <code>(gdb) disassemble Dump of assembler code for function _start_text: 0x00008000 &lt;_start_text+0&gt;: msr CPSR_fc, #19 0x00008004 &lt;_start_text+4&gt;: mrc 15, 0, r0, cr1, cr0, {0} 0x00008008 &lt;_start_text+8&gt;: bic r0, r0, #1 0x0000800c &lt;_start_text+12&gt;: bic r0, r0, #4 0x00008010 &lt;_start_text+16&gt;: bic r0, r0, #4096 ; 0x1000 0x00008014 &lt;_start_text+20&gt;: bic r0, r0, #8 0x00008018 &lt;_start_text+24&gt;: mcr 15, 0, r0, cr1, cr0, {0} 0x0000801c &lt;_start_text+28&gt;: ldr sp, [pc, #40] ; 0x804c &lt;_kernel_init_stack&gt; 0x00008020 &lt;_start_text+32&gt;: msr CPSR_fc, #215 ; 0xd7 0x00008024 &lt;_start_text+36&gt;: ldr sp, [pc, #36] ; 0x8050 &lt;_kernel_abt_stack&gt; 0x00008028 &lt;_start_text+40&gt;: msr CPSR_fc, #210 ; 0xd2 0x0000802c &lt;_start_text+44&gt;: ldr sp, [pc, #32] ; 0x8054 &lt;_kernel_irq_stack&gt; 0x00008030 &lt;_start_text+48&gt;: msr CPSR_fc, #209 ; 0xd1 0x00008034 &lt;_start_text+52&gt;: ldr sp, [pc, #28] ; 0x8058 &lt;_kernel_fiq_stack&gt; 0x00008038 &lt;_start_text+56&gt;: msr CPSR_fc, #219 ; 0xdb 0x0000803c &lt;_start_text+60&gt;: ldr sp, [pc, #24] ; 0x805c &lt;_kernel_und_stack&gt; 0x00008040 &lt;_start_text+64&gt;: msr CPSR_fc, #211 ; 0xd3 0x00008044 &lt;_start_text+68&gt;: bl 0x1493c &lt;start_kernel&gt; 0x00008048 &lt;_start_text+72&gt;: b 0x8048 &lt;_start_text+72&gt; End of assembler dump. (gdb)</code> </pre></div> <p>To skip this code use <tt>step</tt>. This will get us to the next C code:</p> <div class="code"> <pre> <code>(gdb) s Single stepping until exit from function _start_text, which has no line number information. start_kernel () at src/glue/arm/init.c:295 295 printascii("\n"__KERNELNAME__": start kernel...\n"); (gdb) l 290 scheduler_start(); 291 } 292 293 void start_kernel(void) 294 { 295 printascii("\n"__KERNELNAME__": start kernel...\n"); 296 297 /* 298 * Initialise section mappings 299 * for the kernel area (gdb)</code> </pre></div> <h1><span>Last words</span></h1> <p>I think this is enough to start with. You should now concentrate on using debugger, reading a source code and available documentation to learn how do the things work in the Codezero L4 microkernel.</p> <p>It may take you some time, but I hope you will have much more enthusiasm now - with a working codebase and debugger - to learn about L4 and Codezero. And eventually you may start to contribute to this wonderful project yourself.</p> <p>If you had any problems or you find anything not clear enough, just leave me a note in a comment and I'll try to help and correct any mistakes that I've made.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-220201/gnu-screen-as-a-default-shell-for-remote-account</guid>
				<title>GNU Screen as a default shell for remote account</title>
				<link>http://dpc.ucore.info/forum/t-220201/gnu-screen-as-a-default-shell-for-remote-account</link>
				<description>I have a shell account on great polish shell account provider: Rootnode. Today I&#039;ve discovered a way to greatly improve the way I work with it from multiple locations. I use a GNU Screen as default-like shell in a multi-view mode.</description>
				<pubDate>Wed, 17 Feb 2010 23:44:10 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Everything is nicely scripted in <tt>.bashrc.screen</tt>:</p> <div class="code"> <pre> <code>if [[ $- != *i* ]] ; then # Shell is non-interactive. Be done now! return fi if [[ "$IN_THE_SCREEN" != "TRUE" ]]; then export IN_THE_SCREEN="TRUE" exec screen -xRR -S main fi</code> </pre></div> <p>As I use <tt>bash</tt> as a default shell, I plug this code into <tt>.bashrc</tt> with just one line:</p> <div class="code"> <pre> <code>[ -f "$HOME/.bashrc.screen" ] &amp;&amp; source "$HOME/.bashrc.screen"</code> </pre></div> <p>This way I don't have to remember about running <tt>screen</tt> manually which obviously has many advantages. And I can connect/disconnect from multiple locations and work on one default session without disconnecting any ssh client already connected. It's like remote desktop session - only for shell account.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-202674/spotify-wine-and-pulseaudio</guid>
				<title>Spotify, wine and PulseAudio</title>
				<link>http://dpc.ucore.info/forum/t-202674/spotify-wine-and-pulseaudio</link>
				<description>Lately I&#039;ve discovered Spotify - wonderful service for music lovers like me. It works with Wine in Linux, but I&#039;ve had a problem. The sound was really bad. It was skipping and finally stopping. Here is the solution that worked for my Ubuntu.</description>
				<pubDate>Mon, 07 Dec 2009 20:30:41 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>My setup:</p> <div class="code"> <pre> <code>$ uname -a Linux richiter 2.6.31-16-generic #52-Ubuntu SMP Thu Dec 3 22:07:16 UTC 2009 x86_64 GNU/Linux $ lspci -v | grep -i audio 00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 03)</code> </pre></div> <p>Resources:<br /> <a href="https://wiki.ubuntu.com/DebuggingSoundProblems/KarmicCaveats">https://wiki.ubuntu.com/DebuggingSoundProblems/KarmicCaveats</a><br /> <a href="http://blog.paulbetts.org/index.php/2007/05/27/make-wine-and-pulseaudio-get-along/">http://blog.paulbetts.org/index.php/2007/05/27/make-wine-and-pulseaudio-get-along/</a></p> <p>So I did:</p> <ul> <li><tt>padsp winecfg</tt>, and changed driver to oss: hardware acceleration as emulation, 44100, 16 bit, no driver emulation;</li> <li>I've installed newer backport of alsa for Karmic Koala;</li> <li>I'm now running Spotify with <tt>env WINEPREFIX="/home/dpc/.wine" padsp wine "C:\Program Files\Spotify\spotify.exe"</tt> and sound is perfect;</li> </ul> <p>Hope that will help somebody.—</p> <p>Edit:<br /> I have now installed <tt>wine1.2</tt> package in Ubuntu and sound works even better without any <tt>winecfg</tt> tweaks.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-199073/understanding-drupal-my-first-impressions</guid>
				<title>Understanding Drupal -  my first impressions</title>
				<link>http://dpc.ucore.info/forum/t-199073/understanding-drupal-my-first-impressions</link>
				<description>Lately I&#039;ve been working on creating a portal for the non-profit organization that I&#039;m cooperating with. I&#039;ve decided to use Drupal 6 CMS. Here are my thoughts about the first contact with it - I hope this will save some time Drupal newbies like me.</description>
				<pubDate>Sun, 22 Nov 2009 14:20:16 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <h2><span>Installation and hosting</span></h2> <p>I've decided to use Drupal 6. This is obvious choice as it's seems current and stable. Nothing to add here, I guess.</p> <p>I must admit that installation was very straightforward and easy. Nothing really tricky. However I had some problems with hosting. On the current hosting provider that the organization is using: <a href="http://strefa.pl">strefa.pl</a> installation failed. After editing .htdocs file and removing "Option" sections I was able to get initial stage of installation, but it couldn't finish.</p> <p>I've searched the web and found out that public opinion about this hosting is very bad and even on the most known polish hosting provider: <a href="http://home.pl">home.pl</a> things may need some trickery because they are not using apache.</p> <p>After some research I've decided to try <a href="http://linuxpl.com">linuxpl.com</a> hosting and so far I'm happy with the choice. It seems everything I need will be working even on the most basis hosting option, which is very cheap solution for me. However it's far to early to make any strong opinions about the overall quality of this hosting. But I must admit that the fact they have a <em>linux</em> in the name pleases me. They claim they give ssh access after fully activating the account (paying ;) ) which seems neat.</p> <h2><span>First impression</span></h2> <p>Right after installation Drupal functionality seemed painfully limited. Navigation is easy but I couldn't see where did the whole Drupal hype came from. I had no idea how to make anything more useful than basic WordPress installation …</p> <p>However I've made a long journey to read about how to use Drupal and quickly discovered that it's very powerful after extending it with <a href="http://drupal.org/project/modules">Drupal modules</a> .</p> <h2><span>Understanding howto use Drupal</span></h2> <p>I think I've got it all figured out now, after few days with toying with it so I'll quickly describe what I think may help others to understand how to use Drupal.</p> <h3><span>Content on the page</span></h3> <p>Basically each page view in Drupal seems to be build from the following elements:</p> <ul> <li>menus</li> <li>blocks</li> <li>page content</li> <li>other minor elements</li> </ul> <p>Menu configuration is very similar to the solutions from other CMSs - hierarchical system with few roots (primary links, secondary links, navigation). Of course you can do more advanced stuff with it, but the basic concept is simple.</p> <p>Blocks for me are … widgets. Each site theme provides you with regions like: header, footer, left column, right column, etc. . In the block configuration menu you can put blocks (widgets) in the places (regions) you like with some more advanced options (what to display, when, and in what way). You can create your own blocks as well (more about this later).</p> <p>Main content is displayed in the main content area (at least basically).</p> <h2><span>Modules</span></h2> <p>Drupal is all about it's modules. Take a look how many of them is there: <a href="http://drupal.org/project/modules">Drupal modules</a>. Got to the <tt><a href="http://yoursite.com/admin/build/modules">http://yoursite.com/admin/build/modules</a></tt> and get familiar with it. Installation of new modules is a matter of dropping extracted module to the <tt>modules</tt> subdirectory and enabling it on the module administration page.</p> <h3><span>Internationalization</span></h3> <p>If you're not going to use it you may consider installing it anyway. But if know you're going to use it at some point: install, configure it and play with it on the very beginning. It will save your time discovering how does it connect with other modules later. I18n is available almost everywhere and its configuration is on each and every place.</p> <h3><span>Content and CCK</span></h3> <p><a href="http://drupal.org/project/cck">Content Construction Kit (CCK)</a> is the very basic module that you should install at the very beginning and which is crucial for the way Drupal works.</p> <p>The basic idea is not to use <em>page</em> or <em>article</em> for everything on you site, but to create a <em>content category</em> for the things you want to be a content. If you're creating a site about music you may want to have a <em>song</em>, <em>artist</em> or <em>album</em> content type. Each content type may have a custom fields. <em>Album</em> will probably refer to it <em>author</em> as a <em>artist</em> reference, have it's cover (as image that you can upload). A <em>song</em> may refer to the album on which it's placed. This is all achievable through adding fields.</p> <p>What does it give? It gives a structure to your content. Instead of thinking about the categories and pages - you create a content first. And then you can do some magic with other modules to make this objects display in many various ways. Create a widget to display "other songs for this artist", etc.</p> <h3><span>Views</span></h3> <p>Next main modules is the <a href="http://drupal.org/project/views">Views</a>. It's damn hard to understand and learn, but it's incredibly powerful. Using structured data from the CCK you can create page content, blocks (widgets) with any functionality you imagine. You will have to seek for solutions on the web at first, but after a while you will have and menus, widgets and pages that you desire.</p> <p>Big advice - read the provided documentation first. Learn how to create basic views and then implement some ideas described by other people on the web. You may have to code (or at least copy) some PHP to get more advanced views. And you may have a hard time figuring out what the heck is going on at first. But it's totally worth it.</p> <p>And remember to look at the publication date of documents you read. Views 2 is the version you're using. There are many tutorials on the web that describe other older versions.</p> <h3><span>Taxonomy</span></h3> <p><a href="http://drupal.org/project/taxonomy">Taxonomy module</a> will allow you to attach abstract terms to the content. You can use many sets of terms for different purposes. This is used by Views and CCK. Read a documentation and understand how this works - it will be crucial for efficient use of Views and CCK.</p> <h3><span>Other modules</span></h3> <p>At the moment in my <tt>modules</tt> directory is about 60 entries.</p> <p>Below are the one that I find most important:<br /></p> <dl> <dt><a href="http://drupal.org/project/admin_menu">admin_menu</a></dt> <dd>Displays a handy administration menu to let you quickly work with your site. Very useful for site administator.</dd> <dt><a href="http://drupal.org/project/cck">cck</a></dt> <dd>Already described. A must-have.</dd> <dt><a href="http://drupal.org/project/extlink">extlink</a></dt> <dd>Put these nice arrows next to outgoing links.</dd> <dt><a href="http://drupal.org/project/google_analytics">google_analytics</a></dt> <dd>Obviously, you'll want to watch some stats about the result of your work.</dd> <dt><a href="http://drupal.org/project/imagecache">imagecache</a></dt> <dd>A must have if you're going to work with images in your content. Lets you configure profiles for the images to have them in desired sizes here and there.</dd> <dt><a href="http://drupal.org/project/imagefield">imagefield</a></dt> <dd>Lets you add fields of image type to your CCK content. As the above - a must-have.</dd> <dt><a href="http://drupal.org/project/masquerade">masquerade</a></dt> <dd>Want to take quick look how does the site looks like for particular user? This is it.</dd> <dt><a href="http://drupal.org/project/profile">profile</a></dt> <dd>Let's you configure a <em>Profile</em> content type where users put information about themselves.</dd> <dt><a href="http://drupal.org/project/realname">realname</a></dt> <dd>If you want users to be identified by the full names instead of logins - this will to the job.</dd> <dt><a href="http://drupal.org/project/taxonomy">taxonomy</a></dt> <dd>Already described. A must-have.</dd> <dt><a href="http://drupal.org/project/views">views</a></dt> <dd>Already described. A must-have indeed.</dd> </dl> <h2><span>Summary</span></h2> <p>Drupal is powerful, but damn hard to understand at first. And things that make it powerful like CCK and Views are definitely not configurable for non tech-savy users. Each web site will have to get some kind of skilled admin that will get it up and running, understand relational databases (Views) and will be familiar with how do pieces (modules) work together. However it is possible to create an environment in which normal users (content editors, translators, users) will feel comfortable and able to work.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-195933/universal-filtering-tool</guid>
				<title>Universal filtering tool</title>
				<link>http://dpc.ucore.info/forum/t-195933/universal-filtering-tool</link>
				<description>Today an idea was born in my mind. I wish I could have an straightforward and generic information filtering tool. I thought about it and writing a quick draft of how could it potentially work.</description>
				<pubDate>Wed, 11 Nov 2009 19:56:29 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Today an idea was born in my mind. I wish I could have an straightforward and generic information filtering tool. I thought about it and writing a quick draft of how could it potentially work.</p> <p>The project name for it is <a href="http://dpc.ucore.info/lab:metaforward">metaforward</a> as more obvious metafilter is already used by <a href="http://www.metafilter.com/">metafilter weblog</a>.</p> <p>I'm pretty sure many people have already thought about this but I'm unable to find any existing project on the web.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-194686/more-time-for-my-personal-wiki</guid>
				<title>More time for my personal wiki</title>
				<link>http://dpc.ucore.info/forum/t-194686/more-time-for-my-personal-wiki</link>
				<description>My online presence is getting more and more integrated, I&#039;ve got a new bigger disk, new Ubuntu 9.10 installed and I was able to do some maintenance on all my data that I was restoring from backups etc. Now I&#039;ve found some time to get my wiki in shape.</description>
				<pubDate>Sat, 07 Nov 2009 21:41:06 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>I'm working more and more on integrating my online and offline life. Web 2.0 features can be really useful in simplifying things like work and communication.</p> <p>Recently my disk crashed and I had to restore the data from backups. This have gave me an opportunity to make some maintenance with stuff I keep. I've already spent some time on online services, but now I've gone with my private data. It's good I've had some free time due to staying at home on a sick leave because it's so many of data to be segregated, compressed, backed up, etc.</p> <p>Today I've finally was able to work on my wikidot page. I love wikidot, all it's features and endless possibilities it gives me. With help of <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">firebug</a> firefox extension I've quickly made my page look better and now I'm working on restructuring it a bit.</p> <p>I was thinking about setting up a blog as nowadays I've got more and more interesting things on my mind that I'd like to share. As I think I'll be writing more now I hope to work more with my precious wiki.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-165516/less-updates</guid>
				<title>Less updates</title>
				<link>http://dpc.ucore.info/forum/t-165516/less-updates</link>
				<description>Why I post less and why the site looks a bit abandoned.</description>
				<pubDate>Sat, 27 Jun 2009 08:29:44 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Due to other duties (personal and professional) I have now much less time for my personal projects. I didn't forgot about this site, but I have much less information to put here. Sorry. :)</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-111238/domain-change</guid>
				<title>Domain change</title>
				<link>http://dpc.ucore.info/forum/t-111238/domain-change</link>
				<description></description>
				<pubDate>Sat, 06 Dec 2008 13:46:35 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>Tired of constant problems with jabber/email providers and switching my contact informations I've decided to get my own domain name. Its name is: <a href="http://ucore.info">ucore.info</a>. I think it is a good one - short and with a nice unix/kernel/engineering related name.</p> <p>So now you can find my wiki under <a href="http://dpc.ucore.info">dpc.ucore.info</a>. I hope to have a comfort of possible domain delegation change when I'm moving my service providers. We shall see if it is going to work.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-58096/university-project:dpcgoban</guid>
				<title>University project: dpcgoban</title>
				<link>http://dpc.ucore.info/forum/t-58096/university-project:dpcgoban</link>
				<description></description>
				<pubDate>Tue, 06 May 2008 12:37:24 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>As a part of my "J2ME" subject on the current semester I had to develop some mobile application. I've choosen to write mobile Go (board game) application. It should be ligth, efficient, well written and use fair documented protocol for multiplayer.</p> <p>Lately I've made it public - hoping that someone will be willing to help me before I get a grade. (Kidding. :D) . I'm not even near finishing it, but the current state of UI is quite nice and I plan to add basic game logic soon.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-58095/moving-to-github</guid>
				<title>Moving to github</title>
				<link>http://dpc.ucore.info/forum/t-58095/moving-to-github</link>
				<description></description>
				<pubDate>Tue, 06 May 2008 12:26:09 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>I like git very much. In the past I was using <a href="http://repo.or.cz">http://repo.or.cz</a> to store my public repositories, but lately I've discovered <a href="http://github.com">http://github.com</a> and it feels as much better and more polished place for git users.</p> <p>I have migrated all my public repositories to github.</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-41345/new-project-in-d:dack</guid>
				<title>New project in D: dack</title>
				<link>http://dpc.ucore.info/forum/t-41345/new-project-in-d:dack</link>
				<description></description>
				<pubDate>Thu, 14 Feb 2008 22:04:58 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p><a href="http://dpc.wikidot.com/lab:dack">http://dpc.wikidot.com/lab:dack</a></p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-24196/xmpp-status-bot-for-amarok-0-3</guid>
				<title>XMPP Status Bot for Amarok 0.3</title>
				<link>http://dpc.ucore.info/forum/t-24196/xmpp-status-bot-for-amarok-0-3</link>
				<description>New version released.</description>
				<pubDate>Wed, 24 Oct 2007 00:59:53 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>I've just released brand new version of <a href="http://dpc.ucore.info/lab:xmppstatusbot">XMPP Status Bot for Amarok</a>.</p> <h6><span>Changes:</span></h6> <ul> <li>Remote control.</li> <li>Unicode status fixes.</li> <li>New home page and git public repository.</li> </ul> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
					<item>
				<guid>http://dpc.ucore.info/forum/t-24162/my-public-wiki</guid>
				<title>My public wiki!</title>
				<link>http://dpc.ucore.info/forum/t-24162/my-public-wiki</link>
				<description></description>
				<pubDate>Tue, 23 Oct 2007 19:24:19 +0000</pubDate>
				<wikidot:authorName>dpc</wikidot:authorName>				<wikidot:authorUserId>30867</wikidot:authorUserId>				<content:encoded>
					<![CDATA[
						 <p>I've created this wiki to let myself manage stuff about myself and get all the pieces of my Internet presence together.</p> <p>Today I've managed to find some time to get this wiki into shape that I can call "activation". I hope it will be useful (especially for me).</p> 
				 	]]>
				</content:encoded>								<category>Blog</category>
							</item>
				</channel>
</rss>