<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-4782981620644831943</id><updated>2012-02-06T17:27:28.473-08:00</updated><category term="c#" /><category term="linux" /><category term="CruiseControl.NET" /><category term="unsorted ramblings" /><category term="FAKE" /><category term="NAnt" /><category term="MSBuild" /><category term="Techblog" /><category term="en" /><category term="konnekt" /><category term="gadgets" /><category term=".NET" /><title type="text">skolima</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://skolima.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default?start-index=26&amp;max-results=25" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>90</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/skolima_headers" /><feedburner:info uri="skolima_headers" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-8083640817468414436</id><published>2012-02-06T12:12:00.000-08:00</published><updated>2012-02-06T12:14:28.293-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="en" /><category scheme="http://www.blogger.com/atom/ns#" term="MSBuild" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="NAnt" /><category scheme="http://www.blogger.com/atom/ns#" term="FAKE" /><title type="text">Build systems for the .NET Framework</title><content type="html">&lt;P&gt;When on 13th of February 2002 Microsoft released the first stable version of the .NET Framework,the ecosystem lacked an officially supported build platform. However, since early betas wereavailable short after July 2000 Professional Developers Conference, a native solution – &lt;A HREF="http://nant.sourceforge.net/"&gt;NAnt&lt;/A&gt; – emerged in August 2001,three months before the framework itself became officially available. But it was not until7th of November 2005 that Microsoft presented it’s own tool : &lt;A HREF="http://msdn.microsoft.com/en-us/library/dd393574.aspx "&gt;MSBuild&lt;/A&gt;. For two years the competingsystems coexisted in the .NET world, as MSBuild was a new, and relatively unpolished, product. When on 19thof November 2007 a second version of MSBuild (labeled 3.5, to match the .NET Framework versionit accompanied) was released, it brought multiple improvements that developers have asked for. The community’s focus switchedfrom NAnt to the Microsoft solution, and NAnt 0.86-beta1, released on 8th of December 2007, was the last releasefor almost three years. Although NAnt development started again in April 2010, this long stagnationhas led many of it’s previous users to believe the Open Source solution to be abandoned.&lt;/P&gt;&lt;P&gt;MSBuild 4.0 offers multiple improvements over NAnt: it ships with packaged Target files for commonly used project types,in accordance with “convention over configuration” paradigm; it has an ever-growing collection of community Taskswhich perform various commonly executed build operations; it supports parallel builds; it integrates withTeam Build (a &lt;I&gt;Continuous Integration&lt;/I&gt; component of Microsoft Team Foundation Server) and other CI systems;and most importantly, it is used internally by Visual Studio, which presents most build options through a graphical user interface– developers creating a build project with the help of an IDE may not even be aware that MSBuild is being used underneath.&lt;/P&gt;&lt;P&gt;Nowadays MSBuild is the &lt;I&gt;de facto&lt;/I&gt; standard tool for build automation in the .NET ecosystem. However, multipleprojects still employ a legacy NAnt build system – the main problems preventing migration being complexity of theexisting build infrastructure and supporting &lt;A HREF="http://www.mono-project.com/Main_Page"&gt;Mono&lt;/A&gt;, which, until 2.4 (released on 8th of December 2009),lacked an MSBuild implementation. Although the Mono version of MSBuild 3.5 is now relatively complete,version 4.0 is still virtually non-existent.&lt;/P&gt;&lt;!--TOC section Existing Solutions--&gt;&lt;H4&gt;Pre-existing Solutions&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt;Apart from the two already mentioned build platforms, there are several others. The first of them, dating way back into the Unix times, is called Autotools, officially known as the &lt;A HREF="http://www.gnu.org/s/hello/manual/automake/GNU-Build-System.html"&gt;GNU Build System&lt;/A&gt;. The core of Autotools – make – was released in 1997. Although this system is widely used by projects developed in &lt;I&gt;C&lt;/I&gt; or &lt;I&gt;C++&lt;/I&gt;, such as the Mono runtime engine, it has no built-in support for .NET specific compilers, requiring a large amount of custom per-project work by developers. It also has a reputation of being convoluted and unfriendly, although extremely powerful.&lt;/P&gt;&lt;P&gt;Developers and users of other build system, such as &lt;A HREF="http://www.cmake.org/"&gt;CMake&lt;/A&gt;, Ant or Maven, had on numerous occasions undertaken efforts to enhance .NET support. Especially Maven community has spawned numerous .NET-targeted clones – &lt;A HREF="http://incubator.apache.org/npanday/"&gt;NPanday&lt;/A&gt;, &lt;A HREF="http://byldan.codeplex.com/"&gt;Byldan&lt;/A&gt;, &lt;A HREF="http://incubator.apache.org/nmaven/"&gt;NMaven&lt;/A&gt; – none of which has gained any traction. The only exception seems to be maven-dotnet-plugin, which delegates the build process back to MSBuild.&lt;/P&gt;&lt;P&gt;An interesting new tool that is worth mentioning is &lt;A HREF="https://github.com/forki/FAKE"&gt;FAKE – F# Make&lt;/A&gt;. Although still very much an experimental project, started on 30th of March 2009, this tool is under active development by several contributors. It borrows heavily from ideas explored by &lt;A HREF="http://rake.rubyforge.org/"&gt;Rake&lt;/A&gt; (written in and for the needs of projects in the ruby language), and allows users to describe the build process configuration in the same language they are using to write their code.&lt;/P&gt;&lt;!--TOC section Problem Statement and Goals--&gt;&lt;P&gt;This post looks in depth at three existing build platforms employed on the .NET Framework: NAnt – which used to be the &lt;I&gt;de facto&lt;/I&gt; standard, Microsoft Build – the officially supported tool, and FAKE – an interesting build tool employing an entirely different build description paradigm.&lt;/P&gt;&lt;P&gt;All three tools present the same basic functionality of a build platform: a project file contains tasks, enclosed in targets, which may have specified dependencies upon other targets. During the build process, those targets are first sorted topologically and then tasks within each target are executed in sequence. However, the structure of a project file differs greatly between tools.&lt;/P&gt;&lt;!--TOC section NAnt--&gt;&lt;H4&gt;NAnt&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt;&lt;A ID="ch:nant"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;When Stefan Bodewig announced first official Ant release on 19th July 2000, the project already had undergone over a year of public development as part of the Tomcat servlet container, and had been used for a year before that as an internal tool at Sun Microsystems (under the name &lt;EM&gt;Another Neat Tool&lt;/EM&gt;). In August 2001, Gerry Shaw made a decision to base the new .NET build platform on the existing Ant file syntax (initial code for .NET Beta 1 Ant clone was written by David Buksbaum of Hazware and released under the name of XBuild). Keeping with the open source tradition of self-recursive names, he aptly named this new tool NAnt, from &lt;EM&gt;NAnt is not Ant&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;After almost ten years of separate development, NAnt’s &lt;CODE&gt;Project.build&lt;/CODE&gt; is still difficult to distinguish from Ant’s &lt;CODE&gt;build.xml&lt;/CODE&gt; file; the only obvious giveaway being the use of C#’s &lt;CODE&gt;csc&lt;/CODE&gt; compiler task instead of Java’s &lt;CODE&gt;javac&lt;/CODE&gt;. An absolutely minimal working NAnt build file looks as follows:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;project default="build"&amp;gt;&lt;br /&gt;  &amp;lt;target name="build"&amp;gt;&lt;br /&gt;    &amp;lt;csc target="exe" output="Hello.exe"&amp;gt;&lt;br /&gt;      &amp;lt;sources&amp;gt;&lt;br /&gt;        &amp;lt;include name="*.cs" /&amp;gt;&lt;br /&gt;      &amp;lt;/sources&amp;gt;&lt;br /&gt;    &amp;lt;/csc&amp;gt;&lt;br /&gt;  &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;This short example contains a single target (&lt;CODE&gt;build&lt;/CODE&gt;), which in turn contains a single task, with a simple nested fileset. Executing this file starts the default target, which invokes the &lt;I&gt;csc&lt;/I&gt; task to compile the code using the appropriate C# compiler.&lt;/P&gt;&lt;P&gt;NAnt projects consist of several basic entities: task, types, properties, functions and loggers. Tasks wrap fundamental operations, such as copying a file, performing source control operations or invoking the compiler. Types represent strongly typed parameters, are aware of their content and validate their correctness on creation. A fileset is perhaps the most often used type – it is a lazily evaluated collection of files (the &lt;I&gt;sources&lt;/I&gt; element in the example above is a fileset). Properties can be used for storing text values that are used multiple times. They are evaluated in the place of their declaration. Functions, along with operators, can be used in any attribute value, and are evaluated when the attribute is read (usually upon task execution). Loggers are usually employed for reporting build progress to the user through various front-ends, but can also serve for tracking project execution for other purposes. NAnt ships with a large collection of predefined elements, additional ones can be either loaded from external assemblies or defined in-line using a &lt;I&gt;script&lt;/I&gt; task. Scripts can be written in any .NET language that has a &lt;CODE&gt;System.CodeDom.Compiler.CodeDomProvider&lt;/CODE&gt; available.&lt;/P&gt;&lt;P&gt;A more advanced example, showing properties, functions and global tasks (not enclosed inside a target):&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;project&amp;gt;&lt;br /&gt;  &amp;lt;property name="is-mono"&lt;br /&gt;    value="${string::contains(framework::get-target-framework(), 'mono')}" /&amp;gt;&lt;br /&gt;  &amp;lt;property name="runtime-engine"&lt;br /&gt;    value="${framework::get-runtime-engine(framework::get-target-framework()) }" /&amp;gt;&lt;br /&gt;  &amp;lt;echo message="Checking Mono version" if="${is-mono}"/&amp;gt;&lt;br /&gt;  &amp;lt;exec program="${runtime-engine}" commandline="-V" if="${is-mono}" /&amp;gt;&lt;br /&gt;  &amp;lt;echo message="Using non-Mono runtime engine: '${runtime-engine}'"&lt;br /&gt;    unless="${is-mono}" /&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Global tasks are always executed in the order they are declared and are used for setting up the project. Functions and properties are evaluated inside &lt;CODE&gt;${}&lt;/CODE&gt; blocks, they can be distinguished by the fact that functions use &lt;CODE&gt;::&lt;/CODE&gt; to separate the prefix from the function name. Also visible in this example are the &lt;I&gt;if&lt;/I&gt; and &lt;I&gt;unless&lt;/I&gt; attributes which are available on every task and are used for conditional task execution.&lt;/P&gt;&lt;P&gt;While NAnt inherited Ant’s mature syntax, along with such brilliant constructs as a distinction between &lt;CODE&gt;*&lt;/CODE&gt; (match in current directory) and &lt;CODE&gt;**&lt;/CODE&gt; (recursive directory match) for file inclusion/exclusion, it also inherited Ant’s deficiencies. The most glaring one is the inherent single threaded nature of the build process – although the engine itself can be relatively easily extended to invoke targets in &lt;A HREF="https://github.com/skolima/NAnt-new/tree/parallel"&gt;parallel&lt;/A&gt;, existing build files rely on targets being executed sequentially.&lt;/P&gt;&lt;!--TOC section Microsoft Build--&gt;&lt;H4&gt;Microsoft Build&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt;&lt;A ID="ch:microsoft-build"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;MSBuild 2.0 (releases are numbered after the Microsoft .NET Framework they accompany, thus the first release is labeled 2.0, second – 3.5 and third – 4.0) was released on the 7th of November, 2005, as part of the Microsoft .NET 2.0 release. It came bundled as the default build tool for Visual Studio 2005. MSBuild’s initial design was similar to NAnt’s, but because at that time company policy forbade Microsoft employees from looking at the implementation of open source solutions (in order to prevent intellectual property violation claims), it does differ in many subtle ways.&lt;/P&gt;&lt;P&gt;Visual Studio 2005 used Microsoft Build for compiling C# and Visual Basic projects, all other solution types were still handled by the built-in mechanisms inherited from the 2003 release. Before version 2.0 MSBuild was not used internally by Microsoft, but as soon as it had reached the &lt;EM&gt;Release To Manufacturing&lt;/EM&gt; stage, intense build process conversion effort has been launched, and by the early November 2005 it was already building about 40% of the Visual Studio project itself. This internal version added support for parallel builds (released to the general audience on 19th November 2007 as 3.5) and compiled all types of projects available in Visual Studio, including &lt;I&gt;Visual C++&lt;/I&gt; (this last feature was released on 12th April 2010 as part of 4.0 version). Another important improvement released with Visual Studio 2010 was a graphical debugging tool.&lt;/P&gt;&lt;P&gt;A minimalistic MSBuild’s &lt;CODE&gt;Project.proj&lt;/CODE&gt; looks as follows:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&lt;br /&gt;  DefaultTargets="Build"&amp;gt;&lt;br /&gt;  &amp;lt;Target Name="Build"&amp;gt;&lt;br /&gt;    &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;      &amp;lt;Compile Include="*.cs" /&amp;gt;&lt;br /&gt;    &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;    &amp;lt;CSC Sources="@(Compile)" OutputAssembly="Hello.exe"/&amp;gt;&lt;br /&gt;  &amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Although a different naming convention is used (uppercase identifiers instead of lowercase), this file shows great similarity to NAnt’s &lt;I&gt;Project.build&lt;/I&gt;. It contains a single target, which in turn contains an item group and a task. The namespace definition is required and uses the same schema regardless of the MSBuild version. Executing this file starts the default target, named &lt;I&gt;Build&lt;/I&gt;, which calls the &lt;I&gt;CSC&lt;/I&gt; task to compile the code. File collections (and item groups in general) can be declared at target or project level, but (unlike NAnt) cannot be nested inside tasks (some tasks allow for embedding item groups and property groups, but this is rare behavior). Prior to version 4.0, items could not be modified once declared.&lt;/P&gt;&lt;P&gt;Despite being a valid MSBuild file, the above example would not be recognized by Visual Studio (and by most .NET developers). Instead of requiring the user to describe the whole build process verbosely, MSBuild offers &lt;CODE&gt;.target&lt;/CODE&gt; files which allow “convention over configuration” approach to build process : user only specifies those settings and actions that differ from the default ones. MSBuild projects use &lt;CODE&gt;.proj&lt;/CODE&gt; extension for generic build scripts, and language-specific extensions are used for files importing specific &lt;CODE&gt;.target&lt;/CODE&gt;s (for example &lt;CODE&gt;.csproj&lt;/CODE&gt; for C# projects). Thus, a minimal &lt;CODE&gt;Project.csproj&lt;/CODE&gt; might be written as:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&amp;gt;&lt;br /&gt;  &amp;lt;ItemGroup&amp;gt;&lt;br /&gt;    &amp;lt;Compile Include="*.cs" /&amp;gt;&lt;br /&gt;  &amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;  &amp;lt;Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;By replacing an explicit invocation of the &lt;I&gt;CSC&lt;/I&gt; task with an &lt;I&gt;Import&lt;/I&gt; directive, this file inherits the whole build pipeline defined for Visual Studio, including automatic dependency tracking (should one declare &lt;I&gt;Reference&lt;/I&gt; items), graphical user interface for configuring the build, targets for cleaning and rebuilding the assembly, and standardized extension points.&lt;/P&gt;&lt;P&gt;Basic entities in a MSBuild project are properties, items and tasks. Properties represent simple values. Items are untyped key-value collections, mostly used to represent files. Both types are evaluated as soon as they are encountered. They must be wrapped in groups, but this only allows them to share a &lt;I&gt;Condition&lt;/I&gt;: properties cannot be bundled and items are always grouped by name (in the example above the &lt;I&gt;ItemGroup&lt;/I&gt; generates items named &lt;I&gt;Compile&lt;/I&gt;, one for each matching file). MSBuild has a mechanism named &lt;I&gt;batching&lt;/I&gt; that splits items sharing a name according to a specified metadata value – when this is used, a task defined once will be executed for each batch of items separately. Item definitions allow setting default item metadata values. MSBuild, like NAnt, distinguishes between &lt;CODE&gt;*&lt;/CODE&gt; (match inside current folder) and &lt;CODE&gt;**&lt;/CODE&gt; (recursive directory match). Loggers can be used for tracking project execution, but they must be attached from command line. There is a quite extensive task collection available out of the box, many of them are direct replacements for NAnt tasks. Since 4.0 it is also possible to define a task in-line with the help of &lt;A HREF="http://msdn.microsoft.com/en-us/library/t41tzex2.aspx"&gt;&lt;I&gt;UsingTask&lt;/I&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;An example of using functions for evaluating task conditions (this example does not work as of Mono 2.10 because functions are still not implemented):&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&amp;lt;Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&lt;br /&gt;  InitialTargets="Info"&amp;gt;&lt;br /&gt;  &amp;lt;PropertyGroup&amp;gt;&lt;br /&gt;    &amp;lt;IsMono&amp;gt;$(MSBuildBinPath.Contains('mono'))&amp;lt;/IsMono&amp;gt;&lt;br /&gt;    &amp;lt;RuntimeEngine&amp;gt;$(MSBuildBinPath)/../../../bin/mono&amp;lt;/RuntimeEngine&amp;gt;&lt;br /&gt;  &amp;lt;/PropertyGroup&amp;gt;&lt;br /&gt;  &amp;lt;Target Name="Info"&amp;gt;&lt;br /&gt;    &amp;lt;Message Text="Checking Mono version" Condition="$(IsMono)"/&amp;gt;&lt;br /&gt;    &amp;lt;Exec Command="$(RuntimeEngine) -V" Condition="$(IsMono)"/&amp;gt;&lt;br /&gt;    &amp;lt;Message Text="Using non-Mono runtime engine: '$(MSBuildBinPath)'"&lt;br /&gt;      Condition="!$(IsMono)"/&amp;gt;&lt;br /&gt;  &amp;lt;/Target&amp;gt;&lt;br /&gt;&amp;lt;/Project&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Property values and functions are evaluated inside &lt;CODE&gt;$()&lt;/CODE&gt; blocks, basic operators (such as &lt;CODE&gt;==&lt;/CODE&gt;) are also recognized outside of those markers. &lt;CODE&gt;@()&lt;/CODE&gt; syntax is used for referencing collections of items and &lt;CODE&gt;%()&lt;/CODE&gt; triggers the batching mode using item metadata. MSBuild 4.0 is keeping track of the actual underlying type of each property value and is able to invoke any .NET instance methods defined on such an object – however, because of security concerns, only methods marked as safe (number/date/string/version manipulation and file system read-only access) are available in scripts (this security mechanism can be disabled by setting the environment variable &lt;CODE&gt;MSBUILDENABLEALLPROPERTYFUNCTIONS&lt;/CODE&gt; to 1). The syntax for method invocation comes from PowerShell – instance methods are called with a simple &lt;CODE&gt;Value.Method()&lt;/CODE&gt;, while static methods can be invoked with &lt;CODE&gt;[Full.Type.Name]::Method()&lt;/CODE&gt;.&lt;/P&gt;&lt;P&gt;The MSBuild syntax draws heavily from NAnt and should feel quite familiar for any developer once one grasps how items differ from NAnt’s strongly typed collections. The tool is under active development, has extensive support from both Microsoft and the community, and – since Mono 2.4 was released on 8th of December 2009 – is usable as a cross-platform build system.&lt;/P&gt;&lt;!--TOC section FAKE--&gt;&lt;H4&gt;FAKE&lt;/H4&gt;&lt;!--SEC END --&gt;&lt;P&gt;Fake was published by Steffen Forkmann on the 1st of April, 2009. His goal was to create a build platform using the same language he wrote his programs in – F# (this trend is also observed in Ruby, Python and other languages which allow executable domain-specific languages to be defined at the language level). Three years later, Fake still remains more of an academic exercise than a widely deployed tool, but it does explore a very interesting approach to build management. Fake executes its scripts through the F# interpreter, extending the syntax of the language with three simple additions:defining build steps (&lt;CODE&gt;Target? TargetName&lt;/CODE&gt;),declaring coupling between targets (&lt;CODE&gt;For? TargetName &amp;lt;- Dependency? AnotherTargetName&lt;/CODE&gt;) and specification of default targets (&lt;CODE&gt;Run? TargetName&lt;/CODE&gt;). &lt;/P&gt;&lt;P&gt;A basic &lt;CODE&gt;build.fsx&lt;/CODE&gt; might look as shown in the listing below:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;#I @"tools\FAKE"&lt;br /&gt;#r "FakeLib.dll"&lt;br /&gt;&lt;B&gt;open&lt;/B&gt; Fake&lt;br /&gt;&lt;br /&gt;Target? Default &amp;lt;-&lt;br /&gt;  &lt;B&gt;fun&lt;/B&gt; _ -&amp;gt;&lt;br /&gt;    &lt;B&gt;let&lt;/B&gt; appReferences  = !+ @"**.csproj" |&amp;gt; Scan&lt;br /&gt;    &lt;B&gt;let&lt;/B&gt; apps = MSBuildRelease @".\build\" "Build" appReferences&lt;br /&gt;    Log "AppBuild-Output: " apps&lt;br /&gt;&lt;br /&gt;Run? Default&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;First three lines import the &lt;CODE&gt;Fake&lt;/CODE&gt; namespace from the &lt;CODE&gt;FakeLib.dll&lt;/CODE&gt; file in directory &lt;CODE&gt;tools\FAKE&lt;/CODE&gt;. Following them is a target definition, with a fileset wildcard match pipelined (using F#’s &lt;CODE&gt;|&amp;gt;&lt;/CODE&gt; operator) to the Scan function, then a &lt;CODE&gt;MSBuildRelease&lt;/CODE&gt; task invocation, log output, and finally – declaration of the default target. It should be noted here that Fake does not have built-in tasks for compiling code – it relies on the presence of MSBuild instead. There is also no need for a special in-line task definition syntax, as arbitrary F# code can be embedded anywhere in the script. This can be seen in the following example:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;#I @"tools\FAKE"&lt;br /&gt;#r "FakeLib.dll"&lt;br /&gt;&lt;B&gt;open&lt;/B&gt; Fake&lt;br /&gt;&lt;B&gt;open&lt;/B&gt; System&lt;br /&gt;&lt;br /&gt;&lt;B&gt;let&lt;/B&gt; isMono = Type.GetType ("Mono.Runtime") &amp;lt;&amp;gt; null&lt;br /&gt;&lt;B&gt;let&lt;/B&gt; stringType = Type.GetType ("System.String")&lt;br /&gt;&lt;B&gt;let&lt;/B&gt; corlibLocation = IO.GetDirectoryName (stringType.Assembly.Location)&lt;br /&gt;&lt;B&gt;let&lt;/B&gt; notMono = String.Format("Using non-Mono runtime engine: {0}", corlibLocation)&lt;br /&gt;&lt;br /&gt;Target? Info &amp;lt;-&lt;br /&gt;  &lt;B&gt;fun&lt;/B&gt; _ -&amp;gt;&lt;br /&gt;    &lt;B&gt;if&lt;/B&gt; isMono &lt;B&gt;then&lt;/B&gt;&lt;br /&gt;      trace "Running on Mono"&lt;br /&gt;    &lt;B&gt;else&lt;/B&gt;&lt;br /&gt;      trace notMono&lt;br /&gt;&lt;br /&gt;Run? Info&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The keyword &lt;CODE&gt;let&lt;/CODE&gt; declares a F# variable, which is equivalent to property declarations used by NAnt and MSBuild. However, unlike those two tools, Fake allows the developer to invoke any .NET method, without security contraints.&lt;/P&gt;&lt;P&gt;As an experimental project, Fake does have some shortcomings. It does not execute its targets in parallel, although the code inside them can be easily parallelized. It also does not keep track of a target’s outputs up-to-date state, executing the target commands during every project rebuild, which makes it unsuitable for large projects. There is no support for using Fake under operating system other than Windows. And the F# language itself still remains exotic to most .NET developers, making the build scripts hard to understand and maintain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-8083640817468414436?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/8083640817468414436/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2012/02/build-systems-for-net-framework.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/8083640817468414436" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/8083640817468414436" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/-KG4wyp-j8M/build-systems-for-net-framework.html" title="Build systems for the .NET Framework" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://skolima.blogspot.com/2012/02/build-systems-for-net-framework.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-5801915114617931446</id><published>2012-01-18T12:21:00.001-08:00</published><updated>2012-01-19T08:50:57.392-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CruiseControl.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="en" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">Upgrading from CruiseControl.NET 1.5 to 1.6 / 1.7</title><content type="html">&lt;p&gt;I've finally decided to update the version of &lt;a href="http://www.cruisecontrolnet.org/projects/ccnet/wiki"&gt;CruiseControl.NET&lt;/a&gt; I use, going from 1.5 straight to 1.7 nightly build. My previous attempt ended with cryptic error messages, but, as this time the build server was already having some problems and required maintenance, I went through with the update (&lt;b&gt;after&lt;/b&gt; fixing the problems first, of course).&lt;/p&gt;&lt;p&gt;Most important thing, if you don't already know it: there's a validator included in the downloadable package, which you can use to check how the server will interpret your pretty configuration files spaghetti. If you are making use of the &lt;a href="http://www.cruisecontrolnet.org/projects/ccnet/wiki/Configuration_Preprocessor"&gt;pre-processor&lt;/a&gt; feature - the validator is indispensable. A neat trick while using it is copying the output (processed) configuration, changing the input files and copying the new output to a separate file, then running diff on those two to check whether the actual change you just introduced is what you were intending to do. In my case - I was checking whether I got exactly the &lt;b&gt;same&lt;/b&gt; output while using a two-years-newer release by running my original configuration through the 1.5 validator and trying to get identical results from the 1.7 parser.&lt;br /&gt;The initial result you'll get will most likely be this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Unused node detected: xmlns:cb="urn:ccnet.config.builder"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Oh. Not good. &lt;a href="http://stackoverflow.com/q/2843506/3205"&gt;StackOverflow&lt;/a&gt; has an answer that claims to fix this problem, only to result in this:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Unused node detected: xmlns="http://thoughtworks.org/ccnet/1/5"&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Well - not exactly a change for the better.&amp;nbsp; What is the problem? The changes in the configuration parser made it a bit more picky about the files it accepts. Now they have to start with the XML preamble and include the version information (1.5 or 1.6, there's no 1.7 schema yet). The required beginning of the main configuration file is now as follows:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;cruisecontrol xmlns:cb="urn:ccnet.config.builder"&lt;br /&gt;xmlns="http://thoughtworks.org/ccnet/1/5"&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Also, while 1.5 allowed you to include files containing a "naked" node (e.g. to reuse svn version control configuration), 1.6 requires the top level node in the included file to be either a &lt;code&gt;&amp;lt;cb:config-template&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;cb:scope&amp;gt;&lt;/code&gt;. Thus, to be on the safe side, start each of your configuration sub-files with the following:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;cb:config-template xmlns:cb="urn:ccnet.config.builder"&lt;br /&gt;xmlns="http://thoughtworks.org/ccnet/1/5"&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With those changes in place, my configuration file results in the same pre-processor output both in CruiseControl.NET 1.5 and 1.7.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-5801915114617931446?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/5801915114617931446/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2012/01/upgrading-from-cruisecontrolnet-15-to_18.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/5801915114617931446" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/5801915114617931446" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/FRLROBpvO3Y/upgrading-from-cruisecontrolnet-15-to_18.html" title="Upgrading from CruiseControl.NET 1.5 to 1.6 / 1.7" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://skolima.blogspot.com/2012/01/upgrading-from-cruisecontrolnet-15-to_18.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-810431949097578523</id><published>2009-05-08T08:24:00.006-07:00</published><updated>2012-01-19T08:50:57.443-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="en" /><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><title type="text">D'oh!</title><content type="html">&lt;p&gt;I just spent two hours blaming &lt;a href="ccnet.thoughtworks.com"&gt;CruiseControl.Net&lt;/a&gt; release candidate for a bug, which turned out to be a trailing &lt;code&gt;\&lt;/code&gt; in my configuration.&lt;p/&gt;&lt;br/&gt;&lt;p&gt;So remember, kids: &lt;code&gt;nant -D:publishroot="E:\PublicBuilds\" publishbuild&lt;/code&gt; will invoke nant with the default target. To make it work as expected, one has to use &lt;code&gt;nant -D:publishroot="E:\PublicBuilds\\" publishbuild&lt;/code&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-810431949097578523?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/810431949097578523/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2009/05/d_9230.html#comment-form" title="Komentarze (2)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/810431949097578523" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/810431949097578523" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/j-pd4ZgcR5c/d_9230.html" title="D&amp;#39;oh!" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://skolima.blogspot.com/2009/05/d_9230.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-2889462884394617163</id><published>2008-08-25T03:44:00.006-07:00</published><updated>2012-01-19T08:50:57.305-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="en" /><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">Using a cellphone GPRS/EDGE/UMTS Internet connection through Bluetooth
under Gentoo Linux</title><content type="html">&lt;p&gt;Before you start, make sure that:&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;you can browse the Internet from your cellphone (take note of the connection profile you use)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;you have a working &lt;a href="http://www.gentoo.org/doc/en/bluetooth-guide.xml"&gt;Bluetooth connection between your phone and the PC&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;the devices are paired for connecting without asking for confirmation&lt;/li&gt;&lt;br/&gt;&lt;li&gt;you have bluez-utils emerged with &lt;code&gt;USE="old-daemons"&lt;/code&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;p&gt;Configure a RFCOMM connection with the phone:&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;in &lt;code&gt;/etc/conf.d/bluetooth&lt;/code&gt; set &lt;code&gt;RFCOMM_ENABLE=true&lt;br/&gt;&lt;/code&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;use &lt;code&gt;sdptool search DUN&lt;/code&gt; to find the device's Bluetooth hardware address and the channel on which the cellphone listens for RFCOMM, the scan will take some time&lt;/li&gt;&lt;br/&gt;&lt;li&gt;in &lt;code&gt;/etc/bluetooth/rfcomm.conf&lt;/code&gt; add a new connection with the address and channel you just found:&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;br/&gt;#&lt;br/&gt;# RFCOMM configuration file.&lt;br/&gt;#&lt;br/&gt;&lt;br/&gt;rfcomm0 {&lt;br/&gt;	# Automatically bind the device at startup&lt;br/&gt;	bind yes;&lt;br/&gt;&lt;br/&gt;	# Bluetooth address of the device&lt;br/&gt;	device XX:XX:XX:XX:XX:XX;&lt;br/&gt;&lt;br/&gt;	# RFCOMM channel for the connection&lt;br/&gt;	channel	4;&lt;br/&gt;&lt;br/&gt;	# Description of the connection&lt;br/&gt;	comment "Cellphone GPRS/UMTS DUN";&lt;br/&gt;}&lt;br/&gt;&lt;/pre&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;execute &lt;code&gt;/etc/init.d/bluetooth restart&lt;/code&gt;, you should now have a &lt;code&gt;/dev/rfcomm0&lt;/code&gt; device available, and &lt;code&gt;cat /dev/rfcomm0&lt;/code&gt; should cause the PC to connect to the cellphone (cat will output nothing, just kill it with &lt;code&gt;Crtl+C&lt;/code&gt; when you verify the connection works).&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;p&gt;Kernel requirements: besides what is needed for Bluetooth, enable all options under &lt;code&gt;Device Drivers / Network device support / PPP (point-to-point protocol) support&lt;/code&gt;. This only adds 16KB to the kernel size. Recompile, install, reboot with your new kernel (or if you really don't want to reboot, compile PPP as a module and modprobe it).&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Emerge ppp with &lt;code&gt;USE="dhcp"&lt;/code&gt;. Create a network service with &lt;code&gt;ln -s /etc/init.d/net /etc/init.d/net.ppp0&lt;/code&gt;. Configure it by creating &lt;code&gt;/etc/conf.d/net.ppp0&lt;/code&gt; with the following contents:&lt;/p&gt;&lt;pre&gt;&lt;br/&gt;### GPRS/EDGE/UMTS configuration ###&lt;br/&gt;config_ppp0=( "ppp" )&lt;br/&gt;link_ppp0="/dev/rfcomm0"&lt;br/&gt;&lt;br/&gt;pppd_ppp0=(&lt;br/&gt;	"noauth"&lt;br/&gt;	"debug"&lt;br/&gt;	"local"&lt;br/&gt;&lt;br/&gt;	"defaultroute"&lt;br/&gt;	"usepeerdns"&lt;br/&gt;&lt;br/&gt;	"lcp-echo-interval 15"&lt;br/&gt;	"lcp-echo-failure 3"&lt;br/&gt;&lt;br/&gt;	"lock"&lt;br/&gt;&lt;br/&gt;	"115200"&lt;br/&gt;	"crtscts"&lt;br/&gt;	)&lt;br/&gt;&lt;br/&gt;chat_ppp0="&lt;br/&gt;ABORT BUSY&lt;br/&gt;ABORT ERROR&lt;br/&gt;ABORT 'NO ANSWER'&lt;br/&gt;ABORT 'NO CARRIER'&lt;br/&gt;ABORT 'NO DIALTONE'&lt;br/&gt;ABORT 'Invalid Login'&lt;br/&gt;ABORT 'Login incorrect'&lt;br/&gt;'' AT&lt;br/&gt;TIMEOUT 5&lt;br/&gt;OK 'ATH'&lt;br/&gt;OK 'ATE1'&lt;br/&gt;OK 'AT+CGDCONT=1,\"IP\",\"internet\"'&lt;br/&gt;OK 'ATD*99#'&lt;br/&gt;TIMEOUT 60&lt;br/&gt;CONNECT ''&lt;br/&gt;TIMEOUT 5&lt;br/&gt;~--''&lt;br/&gt;"&lt;br/&gt;### end GPRS/EDGE/UMTS configuration ###&lt;br/&gt;&lt;/pre&gt;&lt;p&gt;You'll need to replace "internet" with the name of the connection profile you use for your data transfer (this should be provided by your cellular operator - "internet" is what Plus GSM uses in Poland). Start the connection with &lt;code&gt;/etc/init.d/net.ppp0 start&lt;/code&gt; and everything should work.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Software used:&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;sys-kernel/gentoo-sources-2.6.25-r7&lt;/li&gt;&lt;br/&gt;&lt;li&gt;sys-apps/openrc-0.2.5&lt;/li&gt;&lt;br/&gt;&lt;li&gt;sys-apps/baselayout-2.0.0&lt;/li&gt;&lt;br/&gt;&lt;li&gt;net-wireless/bluez-libs -3.36&lt;/li&gt;&lt;br/&gt;&lt;li&gt;net-wireless/bluez-utils-3.36 with USE="old-daemons"&lt;/li&gt;&lt;br/&gt;&lt;li&gt;net-dialup/ppp-2.4.4-r15 with USE="dhcp"&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;p&gt;Hardware used:&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;Nokia N95 8GB&lt;/li&gt;&lt;br/&gt;&lt;li&gt;HP Pavilion built-in Bluetooth adapter&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;p&gt;How-To based on articles:&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;&lt;a href="http://www.teaparty.net/technotes/blue-gprs.html"&gt;Tom's attempts to get GPRS working over bluetooth with his laptop&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;a href="http://gentoo-wiki.com/Mobile_Phone/UMTS"&gt;Mobile Phone/UMTS - Gentoo Linux Wiki&lt;/a&gt; (extremely messy)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;a href="http://apes.pl/gprs/gprs.html"&gt;Jak połączyć się z internetem przez GPRS w linuksie?&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-2889462884394617163?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/2889462884394617163/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/08/using-cellphone-gprsedgeumts-internet_1191.html#comment-form" title="Komentarze (7)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2889462884394617163" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2889462884394617163" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/YIz0gQNmEFs/using-cellphone-gprsedgeumts-internet_1191.html" title="Using a cellphone GPRS/EDGE/UMTS Internet connection through Bluetooth&#xA;under Gentoo Linux" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>7</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/08/using-cellphone-gprsedgeumts-internet_1191.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-225835523117270260</id><published>2008-07-08T10:03:00.006-07:00</published><updated>2012-01-19T08:50:57.285-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><title type="text">fsck -y</title><content type="html">&lt;a href="http://www.flickr.com/photos/skolima/2649178657/" title="fsck -y"&gt;&lt;img src="http://farm4.static.flickr.com/3108/2649178657_44383b7aa7.jpg" width="375" height="500" alt="fsck -y" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-225835523117270260?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/225835523117270260/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/07/fsck-y_8434.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/225835523117270260" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/225835523117270260" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/zBxGQb3Uv5k/fsck-y_8434.html" title="fsck -y" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm4.static.flickr.com/3108/2649178657_44383b7aa7_t.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/07/fsck-y_8434.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-4559150211284919630</id><published>2008-07-06T09:24:00.006-07:00</published><updated>2012-01-19T08:50:57.363-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">Wymiana procesora w laptopie</title><content type="html">&lt;p&gt;Jakiś czas temu otwarcie obudowy laptopa było dla mnie przerażające - na pewno coś zepsuję, pogubię śrubki i nie będzie działać. Od &lt;a href="http://skolima.jogger.pl/2006/01/25/toshiba-satellite-2140-tam-i-z-powrotem/"&gt;pierwszego udokumentowanego podejścia&lt;/a&gt; minęło już nieco czasu, zdążyłem się oswoić i nabrać śmiałości. Fotorelacja z wczorajszej zabawy - &lt;a href="http://www.flickr.com/photos/skolima/sets/72157605992787740/"&gt;wymiany procesora w laptopie HP Compaq&lt;/a&gt; - jest do obejrzenia dla ciekawskich, ja mam jeszcze parę dodatkowych wskazówek:&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;Rozkręcając laptopa/notebooka/inny mały komputer miej pod ręką pastę termoprzewodzącą i jakąś niekłaczącą szmatkę/chusteczki. Nawet jeśli planujesz tylko zajrzeć do środka - część elementów może &lt;a href="http://www.flickr.com/photos/skolima/2639371651/in/set-72157605992787740/"&gt;wykorzystywać zewnętrzną obudowę w charakterze radiatora&lt;/a&gt;, pastę termoprzewodzącą trzeba zawsze wymienić (dokładnie usunąć starą, zaaplikować cienką warstwę świeżej) jeśli się rozdzieli posmarowane nią elementy.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;Oznaczaj/zapisuj skąd wykręciłeś niestandardowe śrubki). Oszczędza to potem &lt;a href="http://www.flickr.com/photos/skolima/2640268094/"&gt;sporo kombinowania&lt;/a&gt;. ;-) &lt;/li&gt;&lt;br/&gt;&lt;li&gt;Większość śrub trzymających obudowę będzie wkręcana od spodu, ale część znajduje się zawsze z wierzchu, &lt;a href="http://www.flickr.com/photos/skolima/2640180692/"&gt;pod klawiaturą&lt;/a&gt; lub przyciskami multimedialnymi. Sprawdź  czy płytka z tymi przyciskami nie jest przykręcona zanim zaczniesz ją podważać. :-)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;Górna część laptopa (wyświetlacz i klawiatura) połączona jest z płytą główną &lt;a href="http://www.flickr.com/photos/skolima/2640187810/"&gt;kilkoma taśmami&lt;/a&gt;. Wyglądają one na strasznie delikatne i trudne do wpięcia, na szczęście tak nie jest. Wystarczy je odpiąć (zatrzask jest zazwyczaj od strony płyty głównej) i wyciągnąć.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;Jeśli coś wymieniałeś - sprawdź, czy &lt;a href="http://www.flickr.com/photos/skolima/2640259914/"&gt;komputer nadal się uruchamia&lt;/a&gt; przed zmontowaniem go z powrotem. Zazwyczaj da się to zrobić nawet bez klawiatury, a można sobie oszczędzić sporo zbędnej pracy.&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;&lt;p&gt;Przy okazji - mam na sprzedaż &lt;a href="http://allegro.pl/item395698975_sodimm_ddr_256mb_cl2_5_333mhz.html"&gt;2 kości RAM do laptopa (DDR 333Mhz 256MB CL2.5)&lt;/a&gt; oraz &lt;a href="http://allegro.pl/item395703879_intel_celeron_m_330_1400mhz_512_kb_cache.html"&gt;procesor Intel Celeron M 330 1.4GHz&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-4559150211284919630?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/4559150211284919630/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/07/wymiana-procesora-w-laptopie_2588.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/4559150211284919630" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/4559150211284919630" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/qRUSMaYCiL8/wymiana-procesora-w-laptopie_2588.html" title="Wymiana procesora w laptopie" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/07/wymiana-procesora-w-laptopie_2588.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-2400715378642053919</id><published>2008-07-05T13:20:00.006-07:00</published><updated>2012-01-19T08:50:57.293-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">N-Gage po polsku</title><content type="html">&lt;a href="http://www.flickr.com/photos/skolima/2639851784/" title="N-Gage po polsku"&gt;&lt;img src="http://farm3.static.flickr.com/2098/2639851784_f65745a885_o.png" width="240" height="320" alt="Dokonaj zakupu aby kontynułować" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-2400715378642053919?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/2400715378642053919/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/07/n-gage-po-polsku_730.html#comment-form" title="Komentarze (6)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2400715378642053919" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2400715378642053919" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/C0JAcOf3L9Y/n-gage-po-polsku_730.html" title="N-Gage po polsku" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>6</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/07/n-gage-po-polsku_730.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-3009148739833501514</id><published>2008-05-12T05:01:00.006-07:00</published><updated>2012-01-19T08:50:57.308-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">Witamy w Chinach</title><content type="html">&lt;p&gt;Właśnie zobaczyłem mało przyjazny komunikat:&lt;/p&gt;&lt;br/&gt;&lt;blockquote&gt;&lt;span style="background:red;color:black;"&gt;This video is not available in your country.&lt;/span&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;p&gt;Cholera. Od kiedy YouTube cenzuruje filmy? W tym przypadku (&lt;a href="http://www.youtube.com/watch?v=K1SGSn6NOkI"&gt;"Nowy Hymn Radia Maryja / Rammstein"&lt;/a&gt;) na 100% nie chodzi o ochronę praw autorskich - przy takich zarzutach zdejmują film, a ten przez proxy z Wielkiej Brytanii można obejrzeć.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-3009148739833501514?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/3009148739833501514/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/05/witamy-w-chinach_4562.html#comment-form" title="Komentarze (10)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/3009148739833501514" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/3009148739833501514" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/7Y_JRri7I9I/witamy-w-chinach_4562.html" title="Witamy w Chinach" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>10</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/05/witamy-w-chinach_4562.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-7309573371096555665</id><published>2008-05-06T09:11:00.006-07:00</published><updated>2012-01-19T08:50:57.427-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">Cholerne tłumaczenia...</title><content type="html">&lt;p&gt;Chyba czas odwołać się do mądrości kolektywu ;-) Mam problem ze znalezieniem dobrze brzmiących i jednoznaczych tłumaczeń dla "commit", "changeset" oraz "revision". Ma ktoś pomysły na sensowne tłumaczenia poniższych sformułowań? (teksty z polskiej wersji &lt;a href="http://www.redmine.org/"&gt;Redmine&lt;/a&gt;)&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;"The entry or revision was not found in the repository." (roboczo - "Obiekt lub wersja nie zostały znalezione w repozytorium.")&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"Autofetch commits" (roboczo - "Automatyczne pobieranie zmian")&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"Referencing keywords" (roboczo - "Słowa tworzące powiązania")&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"Fixing keywords" (roboczo - "Słowa zmieniające status")&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"revision, revisions, view revisions, latest revision" (roboczo - "wersja, wersje, pokaż wersje, najnowsza wersja" - jak to odróżnić od "version"?)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"Commits per month" (roboczo - "Zatwierdzenia według miesięcy")&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"Commits per author" (roboczo - "Zatwierdzenia według autorów")&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"Referencing and fixing issues in commit messages" (roboczo - "Odwołania do zagadnień w komentarzach zatwierdzeń")&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"Associated revisions" (roboczo - "Skojarzone wersje")&lt;/li&gt;&lt;br/&gt;&lt;li&gt;"changeset, changesets" (roboczo - "zmiana, zmiany")&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-7309573371096555665?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/7309573371096555665/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/05/cholerne-tumaczenia_8699.html#comment-form" title="Komentarze (4)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/7309573371096555665" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/7309573371096555665" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/vOsghR1UWA8/cholerne-tumaczenia_8699.html" title="Cholerne tłumaczenia..." /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/05/cholerne-tumaczenia_8699.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-2012211620340595565</id><published>2008-04-13T08:51:00.006-07:00</published><updated>2012-01-19T08:50:57.277-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">Pstrykanie</title><content type="html">&lt;img src="http://konie.wlkp.pl/skolima/jogger/pstrykanie.jpg" alt="pstrykanie babolami - ściana obok" /&gt;&lt;br/&gt;&lt;p&gt;Wywieszka w toalecie u mnie w pracy. Z kartką doklejoną poniżej oryginalnego apelu nie mam absolutnie nic wspólnego, to jakiś aspołeczny osobnik musiał dodać ;-) &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-2012211620340595565?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/2012211620340595565/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/04/pstrykanie_4391.html#comment-form" title="Komentarze (4)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2012211620340595565" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2012211620340595565" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/eGEX3ny9IsU/pstrykanie_4391.html" title="Pstrykanie" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/04/pstrykanie_4391.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-213873951339808803</id><published>2008-03-27T14:02:00.006-07:00</published><updated>2012-01-19T08:50:57.282-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">Zabawa z bootchart</title><content type="html">&lt;p&gt;Zainspirowany konkursem &lt;a href="http://matiit.jogger.pl/2008/03/23/bootchart-moze-maly-konkursik/"&gt;"kto szybciej"&lt;/a&gt; zacząłem kombinować z przyśpieszaniem startu mojego Gentoo. Udało mi się ściąć... 3 sekundy. Patentów wypróbowanych - całkiem sporo.&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;RC_PARALLEL_STARTUP="yes"&lt;/strong&gt; - to są właśnie te uzyskane 3 sekundy (choć pamiętam, że z jakiegoś powodu, dawno temu, wyłączałem równoległe uruchamianie usług).&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://help.lockergnome.com/linux/gentoo-dev-baselayout-stablisation-plans-ftopict482116.html"&gt;baselayout-2&lt;/a&gt;&lt;/strong&gt; - czas startu spadł o 30 sekund. Bardzo przyjemnie, choć wymagało ręcznego poprawiania błędów w skryptach startowych i nie potrafi wyłączyć komputera gdy ma problemy z odmontowaniem udziałów NFS (o dziwo, baselayout-1 zawsze sobie z tym radzi). Zrezygnowałem.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;wyłączenie zbędnych usług&lt;/strong&gt; - poleciało dhcp i distccd. Kolejne 10 sekund. Razem z poprawą z baselayout-2 miałoby to sens, ale samodzielnie - nie. Leniwy jestem, włączyłem z powrotem.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;readahead-list&lt;/strong&gt; - żadnej różnicy w mierzonym czasie, problemy z zależnościami pomiędzy skryptami w /etc/init.d/. Dziękuję.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://forums.gentoo.org/viewtopic-t-646289.html"&gt;squashfs + aufs&lt;/a&gt;&lt;/strong&gt; - strasznie ryzykownie to wygląda, nie wypróbowałem.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;"timeout 1" w grub.conf&lt;/strong&gt; - bootchart tego nie mierzy, ale zawsze to nieco szybciej.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://www.gentoo.org/doc/en/prelink-howto.xml"&gt;prelink&lt;/a&gt;&lt;/strong&gt; - przy instalacji ebuild nie przechodzi własnych testów automatycznych. Nie.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;&lt;a href="http://forums.gentoo.org/viewtopic.php?t=67777"&gt;LDFLAGS&lt;/a&gt;&lt;/strong&gt; - pożyjemy, zobaczymy, ale tutaj raczej kolosalnej róznicy się nie spodziewam.&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;strong&gt;TuxOnIce&lt;/strong&gt;, albo inaczej - hibernacja. Z nieznanych mi powodów czasem się nie wznawia. Jeśli się wznowi, to wyłącza monitor (EDIT: pomogło dodanie &lt;code&gt;OnResume 99 /usr/bin/chvt 7&lt;/code&gt; do /etc/hibernate/common.conf). Ale kiedy działa, to komputer startuje w 1/6 normalnego czasu. Nice. Przydało by się jakieś GUI.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-213873951339808803?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/213873951339808803/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/03/zabawa-z-bootchart_355.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/213873951339808803" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/213873951339808803" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/1sjBrTnVCzQ/zabawa-z-bootchart_355.html" title="Zabawa z bootchart" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/03/zabawa-z-bootchart_355.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-6152690049508670350</id><published>2008-03-05T06:56:00.006-08:00</published><updated>2012-01-19T08:50:57.396-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><title type="text">Telefon. Z klapką.</title><content type="html">&lt;div&gt;&lt;br/&gt;&lt;p&gt;Szukam nowego telefonu. Na liście wymagań:&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;&lt;li&gt;obudowa &lt;a href="http://en.wikipedia.org/wiki/Clamshell"&gt;"z klapką"&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;odtwarzacz mp3(/wma/ogg)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;slot kart pamięci albo przynajmniej 2GB wbudowanej&lt;/li&gt;&lt;br/&gt;&lt;li&gt;gniazdo USB i działanie jako &lt;a href="http://en.wikipedia.org/wiki/USB_Mass_Storage_Device_class"&gt;urządzenie pamięci masowej&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;obsługa &lt;a href="http://en.wikipedia.org/wiki/A2DP#Advanced_Audio_Distribution_Profile_.28A2DP.29"&gt;słuchawek stereo przez Bluetooth&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;li&gt;dodatkowo punktowane gniazdo mini jack do słuchawek i marka Nokia&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;p&gt;Ktoś zna takowe urządzenie?&lt;/p&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-6152690049508670350?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/6152690049508670350/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/03/telefon-z-klapka_8423.html#comment-form" title="Komentarze (11)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/6152690049508670350" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/6152690049508670350" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/b_1Q04olk04/telefon-z-klapka_8423.html" title="Telefon. Z klapką." /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>11</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/03/telefon-z-klapka_8423.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-6573009130249302316</id><published>2008-01-31T11:00:00.006-08:00</published><updated>2012-01-19T08:50:57.408-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><title type="text">Mój domowy serwer</title><content type="html">Jest mały, szarozielony i nazywa się snotling.&lt;br/&gt;&lt;br/&gt;&lt;img src="http://konie.wlkp.pl/skolima/jogger/paragon.png" alt="komputer 49.99" /&gt;&lt;br/&gt;&lt;pre&gt;snotling ~ # cat /proc/cpuinfo&lt;br/&gt;processor       : 0&lt;br/&gt;vendor_id       : GenuineIntel&lt;br/&gt;model name      : Pentium III (Katmai)&lt;br/&gt;cpu MHz         : 448.646&lt;br/&gt;flags           : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse&lt;br/&gt;bogomips        : 897.87&lt;br/&gt;snotling ~ # uname -a&lt;br/&gt;Linux snotling 2.6.23-gentoo-r6 #2 Thu Jan 31 13:14:15 CET 2008 i686 Pentium III (Katmai) GenuineIntel GNU/Linux&lt;/pre&gt;&lt;br/&gt;Dostała mu się jeszcze gigabitowa sieciówka, kontroler SATA, dysk 300GB i 512MB RAMu – ale to już inny paragon ;-) Tak wyglądał zaraz po przyniesieniu do domu:&lt;br/&gt;&lt;br/&gt;&lt;img title="snotling prosto ze sklepu" src="http://konie.wlkp.pl/skolima/jogger/snotling_brand_new.jpg" alt="snotling prosto ze sklepu" width="845" height="634" /&gt;&lt;br/&gt;&lt;br/&gt;A tak po dołożeniu ulepszeń:&lt;br/&gt;&lt;br/&gt;&lt;img title="snotling z dodatkami" src="http://konie.wlkp.pl/skolima/jogger/snotling_upgrades.jpg" alt="snotling z dodatkami" width="845" height="634" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-6573009130249302316?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/6573009130249302316/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/01/moj-domowy-serwer_6106.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/6573009130249302316" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/6573009130249302316" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/Vs_8kkV0MiI/moj-domowy-serwer_6106.html" title="Mój domowy serwer" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/01/moj-domowy-serwer_6106.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-1179959044649818480</id><published>2008-01-30T08:13:00.006-08:00</published><updated>2012-01-19T08:50:57.253-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">gg.chrome.pl</title><content type="html">&lt;p&gt;Korzysta ktoś może z transportu gg.chrome.pl? Jest jakiś powód, dla którego od wczoraj jestem bombardowany prośbami o autoryzację, których najwyraźniej nie da się zablokować?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-1179959044649818480?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/1179959044649818480/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/01/ggchromepl_941.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/1179959044649818480" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/1179959044649818480" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/anqWDYpvigw/ggchromepl_941.html" title="gg.chrome.pl" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/01/ggchromepl_941.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-431431589124584812</id><published>2008-01-23T10:49:00.006-08:00</published><updated>2012-01-19T08:50:57.358-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">It's not a bug, it's a feature</title><content type="html">&lt;p&gt;Oj wybredny jest parser zapytań w MySQL, wybredny. &lt;code&gt;SUM (a)&lt;/code&gt; w &lt;code&gt;SELECT&lt;/code&gt; jak najbardziej przechodzi, ale w &lt;code&gt;CREATE VIEW xxx AS SELECT&lt;/code&gt; już nie. Przy tworzeniu perspektywy baza odmawia współpracy komunikatem "funkcja nazwatabeli.SUM nie istnieje". Chodzi o to, że spacja pomiędzy &lt;code&gt;SUM&lt;/code&gt; a nawiasem otwierającym jest inaczej interpretowana przy zwykłym zapytaniu a inaczej przy tworzeniu perspektywy - w pierwszym przypadku parser zaczyna od szukania funkcji &lt;code&gt;nazwatabeli.SUM&lt;/code&gt; a gdy jej nie znajdzie wywołuje zwykłe &lt;code&gt;SUM&lt;/code&gt;, w drugim przypadku od razu zgłasza błąd.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Sporo nerwów można stracić też przez inny "feature". MySQL w nazwach baz danych i tabel pozwala na znaki '_' i '-' oprócz zwykłych alfanumerycznych - ale takich tabel nie da się już użyć przy odwołaniu do kilku baz w jednym zapytaniu, bo parser ich po prostu nie znajdzie.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-431431589124584812?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/431431589124584812/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2008/01/it-not-bug-it-feature_7268.html#comment-form" title="Komentarze (7)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/431431589124584812" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/431431589124584812" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/9xE2rMXFjMU/it-not-bug-it-feature_7268.html" title="It&amp;#39;s not a bug, it&amp;#39;s a feature" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>7</thr:total><feedburner:origLink>http://skolima.blogspot.com/2008/01/it-not-bug-it-feature_7268.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-6850719876692285767</id><published>2007-11-28T04:31:00.006-08:00</published><updated>2012-01-19T08:50:57.422-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">screen</title><content type="html">&lt;p&gt;Bardzo, ale to bardzo przydatne polecenie:&lt;/p&gt;&lt;br/&gt;&lt;pre&gt;ssh -t user@host screen -RD&lt;/pre&gt;&lt;br/&gt;&lt;p&gt;Otwiera połączenie ssh z sesją screen'a, co pozwala wylogować się z maszyny &lt;code&gt;host&lt;/code&gt; bez zamykania powłoki i kończenia uruchomionych poleceń. W celu zakończenia sesji ssh należy nacisnąć &lt;code&gt;[crtl] + [a], [d]&lt;/code&gt;, potem można powrócić do (działającej ciągle na serwerze) powłoki tym poleceniem co poprzednio. Żeby zamknąć sesję &lt;code&gt;screen&lt;/code&gt; należy po prostu wydać polecenie &lt;code&gt;exit&lt;/code&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-6850719876692285767?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/6850719876692285767/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/11/screen_1832.html#comment-form" title="Komentarze (8)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/6850719876692285767" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/6850719876692285767" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/iZ5Pj9nOqkc/screen_1832.html" title="screen" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>8</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/11/screen_1832.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-5249098252559585579</id><published>2007-11-01T17:13:00.006-07:00</published><updated>2012-01-19T08:50:57.380-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">Konwersja .mp3 na .amr</title><content type="html">&lt;p&gt;Oczywiście wszystkie nowe komórki potrafią odtwarzać mp3. Tylko po co mi nowy telefon, jak stary nadal działa (i rozumie tylko dość egzotyczny format &lt;a href="http://pl.wikipedia.org/wiki/AMR_%28format_pliku%29"&gt;&lt;abbr title="Adaptive Multi-Rate"&gt;AMR&lt;/abbr&gt;&lt;/a&gt;)? Ku pamięci - konwersja plików dźwiękowych:&lt;/p&gt;&lt;br/&gt;&lt;pre&gt;ffmpeg -i input.mp3 -acodec libamr_nb -ar 8000 -ab 12.2k -ac 1 output.amr &lt;/pre&gt;&lt;br/&gt;&lt;p&gt;albo (ale to już mniej telefonów będzie potrafiło odtwarzać):&lt;/p&gt;&lt;br/&gt;&lt;pre&gt;ffmpeg -i input.mp3 -acodec libamr_wb -ar 16000 -ab 23.85k -ac 1 output.amr&lt;/pre&gt;&lt;br/&gt;&lt;p&gt;Oczywiście plik wejściowy może być w dowolnym formacie obslugiwanym przez ffmpeg, czyli prawie każdym istniejącym ;-) Pod Gentoo trzeba ustawić flagę &lt;code&gt;USE="amr"&lt;/code&gt; przy emergowaniu ffmpeg żeby włączyć obsługę kodeka.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-5249098252559585579?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/5249098252559585579/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/11/konwersja-mp3-na-amr_7544.html#comment-form" title="Komentarze (1)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/5249098252559585579" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/5249098252559585579" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/ZbmrQn6xCy8/konwersja-mp3-na-amr_7544.html" title="Konwersja .mp3 na .amr" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/11/konwersja-mp3-na-amr_7544.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-499571106072645756</id><published>2007-10-16T06:33:00.006-07:00</published><updated>2012-01-19T08:50:57.372-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><title type="text">Kiepskie s-f</title><content type="html">&lt;p&gt;"Dodatkowo kosmonauci odkryli, że jeden z nowych kabli jest o 40cm krótszy od tego, który miał zostać nim zastąpiony - nie sięga do złącza. Na szczęście po dokładnym obejrzeniu nie stwierdzili żadnych śladów korozji, więc wymiana nie była konieczna. Zainstalowali za to dodatkową osłonę termiczną wykonaną z zapasowego podręcznika obsługi oraz szarej taśmy samoprzylepnej. Na koniec usunęli założone wcześniej zworki obchodzące system bezpieczeństwa, upewnili się, że komputery działają i zamknęli obudowę." (tłumaczenie własne z języka angielskiego)&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Pytanie warte piwa: z czego pochodzi cytat?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-499571106072645756?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/499571106072645756/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/10/kiepskie-s-f_2446.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/499571106072645756" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/499571106072645756" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/xWyY8cERHak/kiepskie-s-f_2446.html" title="Kiepskie s-f" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/10/kiepskie-s-f_2446.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-2692918572405184929</id><published>2007-10-08T15:15:00.006-07:00</published><updated>2012-01-19T08:50:57.298-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">Twoja babcia na wybory zabiera koleżanki!</title><content type="html">&lt;p&gt;Odebranie w Urzędzie Miasta zaświadczenia o prawie do głosowania poza miejscem zamieszkania : 24 minuty. Możliwość narzekania na rząd przez najbliższe cztery(*) lata : bezcenne.&lt;br /&gt;(*) pełne cztery lata nie są gwarantowane&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-2692918572405184929?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/2692918572405184929/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/10/twoja-babcia-na-wybory-zabiera_4760.html#comment-form" title="Komentarze (11)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2692918572405184929" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2692918572405184929" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/DMAP8-9Gq2Q/twoja-babcia-na-wybory-zabiera_4760.html" title="Twoja babcia na wybory zabiera koleżanki!" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>11</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/10/twoja-babcia-na-wybory-zabiera_4760.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-3987262877424360621</id><published>2007-09-26T11:45:00.006-07:00</published><updated>2012-01-19T08:50:57.347-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="en" /><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">Tell us why you love Google Talk</title><content type="html">&lt;img src="http://konie.wlkp.pl/skolima/jogger/tell_us_why_u_love_gtalk.png" title="Tell us why you love Google Talk" alt ="I'm seeing unlawful pornography"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-3987262877424360621?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/3987262877424360621/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/09/tell-us-why-you-love-google-talk_9325.html#comment-form" title="Komentarze (1)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/3987262877424360621" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/3987262877424360621" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/cMSWUoFSTmk/tell-us-why-you-love-google-talk_9325.html" title="Tell us why you love Google Talk" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/09/tell-us-why-you-love-google-talk_9325.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-674398480529307032</id><published>2007-08-20T15:22:00.006-07:00</published><updated>2012-01-19T08:50:57.414-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">PicasaWeb Downloader</title><content type="html">&lt;p&gt;Trochę ponad tydzień temu &lt;a href="http://walker.jogger.pl/"&gt;Walker&lt;/a&gt; chwalił się &lt;a href="http://walker.jogger.pl/2007/08/09/uploadowanie-zdjec-na-picasa-web-pod-linuxem-picasauploader/"&gt;skryptem do uploadowania zdjęć&lt;/a&gt; do albumów &lt;a href="http://picasaweb.google.com/home"&gt;PicasaWeb&lt;/a&gt; (program Picasa w wersji na linuksa nie posiada takiej funkcjonalności). Jego wpis przypomniał mi o leżącym odłogiem 1GB sieciowego miejsca, akurat gdy zastanawiałem się, jak przesłać przyjaciołom (aktualnie przebywającym w Norwegii) zdjęcia z wakacji. Do wgrania obrazów w końcu wykorzystałem &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4724"&gt;Firefox Universal Uploader&lt;/a&gt;, został tylko jeden problem - jak pobrać taki album na dysk, nie instalując kobylastej Picasy?&lt;/p&gt;&lt;EXCERPT&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://www.tomergabel.com/default.aspx"&gt;Tomer Gabel&lt;/a&gt; napisał prosty konsolowy program w C#, który wykorzystuje &lt;a href="http://code.google.com/apis/picasaweb/overview.html"&gt;Google Data API&lt;/a&gt; by zassysać całe albumy z PicasaWeb. Do wczoraj jego rozwiązanie miał jedną wadę - nie obsługiwało albumów prywatnych, wymagających znajomości klucza. Jednak Tomer uwzględnił liczne prośby użytkowników ;-) i uzupełnił brakującą funkcjonalność. &lt;a href="http://www.tomergabel.com/PicasaWeb+Downloader.aspx"&gt;PicasaWeb Downloader&lt;/a&gt; można pobrać z jego strony razem z kodem źródłowym w C#. Oczywiście, ponieważ to .Net, więc kompiluje się i działa również pod linuksem, przy użyciu &lt;a href="http://www.mono-project.com/Main_Page"&gt;Mono&lt;a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-674398480529307032?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/674398480529307032/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/08/picasaweb-downloader_6764.html#comment-form" title="Komentarze (17)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/674398480529307032" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/674398480529307032" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/XohEynfcpX8/picasaweb-downloader_6764.html" title="PicasaWeb Downloader" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>17</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/08/picasaweb-downloader_6764.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-4757439684015113975</id><published>2007-08-01T10:10:00.006-07:00</published><updated>2012-01-19T08:50:57.369-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">Zdjęcia panoramiczne</title><content type="html">&lt;p&gt;W końcu znalazłem czas by wypróbować możliwości programu do składania zdjęć panoramicznych - &lt;a href="http://hugin.sourceforge.net/"&gt;hugin&lt;/a&gt;'a. Przy wsparciu &lt;a href="http://exolucere.ca/articles/create-panorama"&gt;dobrego tutoriala&lt;/a&gt; cały proces okazał się w miarę prosty (chociaż dość długotrwały - automat mielił zdjęcia ponad godzinę) a efekt końcowy jak dla mnie jest bardzo zadowalający.&lt;/p&gt;&lt;br/&gt;&lt;EXCERPT&gt;&lt;br/&gt;&lt;br/&gt;&lt;object width="450" height="292" type="application/x-shockwave-flash"&lt;br/&gt;	data="http://backend.deviantart.com/embed/view.swf"&gt;&lt;br/&gt;		&lt;param name="movie" value="http://backend.deviantart.com/embed/view.swf" /&gt;&lt;br/&gt;		&lt;param name="quality" value="high" /&gt;&lt;br/&gt;		&lt;param name="flashvars" value="id=61081401" /&gt;&lt;br/&gt;&lt;/object&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Na przyszłość muszę jeszcze pamiętać o takich "szczegółach" jak zablokowanie parametrów aparatu (czas naświetlania, przesłona itd.) po wykonaniu pierwszego zdjęcia z serii i zadbanie o wystarczającą ilość punktów odniesienia na zdjęciach (tzn. zdjęcia będące elementami panoramy powinny na siebie nachodzić w 30%-50% i zawierać obiekty charakterystyczne, szczególnie w pobliżu boków). &lt;a href="http://www.deviantart.com/deviation/61157787/"&gt;Druga próba zrobienia zdjęcia panoramicznego&lt;/a&gt; właśnie dlatego niezbyt mi się udała. No i statyw by się przydał...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-4757439684015113975?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/4757439684015113975/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/08/zdjecia-panoramiczne_6509.html#comment-form" title="Komentarze (2)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/4757439684015113975" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/4757439684015113975" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/QCvPxHC3_jc/zdjecia-panoramiczne_6509.html" title="Zdjęcia panoramiczne" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/08/zdjecia-panoramiczne_6509.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-2367509316660706383</id><published>2007-07-02T09:00:00.006-07:00</published><updated>2012-01-19T08:50:57.291-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="en" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="Techblog" /><title type="text">Debugging NUnit tests in Visual Studio 2005 Express</title><content type="html">&lt;p&gt;VS2005 Express imposes many limitations on it's users as a trade-off for being free. It's main disadvantage &lt;abbr title="In My Humble Opinion"&gt;IMHO&lt;/abbr&gt; is that it provides no support at all for unit tests. Fortunately there is a simple workaround for this. No, I am not talking about hacking VS to accept plugins as TestDriven.NET used to do. What I wanted to have was the ability to click "Debug" on a library project containing test and have it launched - inside the Visual Studio debugger.&lt;/p&gt;&lt;EXCERPT&gt;&lt;br/&gt;&lt;p&gt;This trick requires adding a tiny bit of magic code to the .csproj file:&lt;/p&gt;&lt;br/&gt;&lt;pre&gt;&lt;br/&gt;&amp;lt;PropertyGroup&gt;&lt;br/&gt;  &amp;lt;Nunit_Path Condition="'$(NUNIT_PATH)' == ''"&gt;C:\Program Files\NUnit&amp;lt;/Nunit_Path&gt;&lt;br/&gt;  &amp;lt;StartAction&gt;Program&amp;lt;/StartAction&gt;&lt;br/&gt;  &amp;lt;StartProgram&gt;$(NUNIT_PATH)\bin\nunit.exe&amp;lt;/StartProgram&gt;&lt;br/&gt;  &amp;lt;StartArguments&gt;/run $(TargetFileName)&amp;lt;/StartArguments&gt;&lt;br/&gt;  &amp;lt;!--.csproj.user overwrites those values!--&gt;&lt;br/&gt;&amp;lt;/PropertyGroup&gt;&lt;br/&gt;&lt;/pre&gt;&lt;br/&gt;&lt;p&gt;This should be pasted at the end of the project file, after &lt;code&gt;&amp;lt;Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /&gt;&lt;/code&gt; and just before &lt;code&gt;&amp;lt;/Project&gt;&lt;/code&gt;&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Save the changes and open the project in Visual Studio. You can now launch the tests by clicking "Debug-&gt;Start Without Debugging" and debug them with "Debug-&gt;Start Debugging". One caveat, though - this assumes that NUnit is installed in &lt;code&gt;C:\Program Files\NUnit&lt;/code&gt;. If your instalation directory is different, you have to set the environment variable &lt;code&gt;NUNIT_PATH&lt;/code&gt; accordingly.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;On a side note, some MSBuild/VS2005 quirks:&lt;/p&gt;&lt;br/&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;StartProgram&lt;/code&gt; has to point to an absolute location (i.e. not to a program in &lt;code&gt;PATH&lt;/code&gt;)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;&lt;code&gt;StartWorkingDirectory&lt;/code&gt; has to be unset (or it could point to &lt;code&gt;$TargetDir&lt;/code&gt;, if only I could get it to resolve instead of returning &lt;code&gt;"@(_OutputPathItem-&gt;'%(FullPath)')"&lt;/code&gt; literally)&lt;/li&gt;&lt;br/&gt;&lt;li&gt;all those properties can be set from Professional version - Express does not show edit boxes for most of them&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-2367509316660706383?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/2367509316660706383/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/07/debugging-nunit-tests-in-visual-studio_30.html#comment-form" title="Komentarze (3)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2367509316660706383" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/2367509316660706383" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/-6R_-E80uV8/debugging-nunit-tests-in-visual-studio_30.html" title="Debugging NUnit tests in Visual Studio 2005 Express" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/07/debugging-nunit-tests-in-visual-studio_30.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-3029367293483538295</id><published>2007-06-26T11:00:00.006-07:00</published><updated>2012-01-19T08:50:57.311-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gadgets" /><title type="text">Krótkie lekcje</title><content type="html">&lt;p&gt;&lt;em&gt;Elektronika.&lt;/em&gt; Zasilacza 12V, 1000mA nie można zastąpić zasilaczem 12V, 1200mA mimo takich samych wtyczek. Próba kończy się głośnym pyknięciem i dymem unoszącym się z routera.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;&lt;em&gt;Marketing.&lt;/em&gt; Warto przyjmować reklamację produktu bez zbytniego wybrzydzania. Klient zapamięta miłą obsługę, a nie uszkodzony produkt i wróci po kolejne zakupy. Zwłaszcza, jeśli produkt został uszkodzony "tak nie do końca z winy sklepu".&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-3029367293483538295?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/3029367293483538295/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/06/krotkie-lekcje_774.html#comment-form" title="Komentarze (2)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/3029367293483538295" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/3029367293483538295" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/W_1r6z177D8/krotkie-lekcje_774.html" title="Krótkie lekcje" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/06/krotkie-lekcje_774.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-4782981620644831943.post-8923979330710691489</id><published>2007-06-05T08:59:00.006-07:00</published><updated>2012-01-19T08:50:57.478-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="unsorted ramblings" /><title type="text">hi5 - kolejny spammer</title><content type="html">&lt;p&gt;Po niedawnej historii z automatycznym rozsyłaniem zaproszeń przez &lt;a href="http://en.wikipedia.org/wiki/Netlog"&gt;Netlog&lt;/a&gt;, ta sama taktyka stosowana jest przez stronę &lt;abbr title="nie linkuję spammerów"&gt;hi5&lt;/abbr&gt;. Zachęcam do przeczytania przestróg &lt;a href="http://blog.konieczny.be/2007/04/04/uwazajcie-na-spamerow-z-facebox-com/"&gt;Piotra Koniecznego&lt;/a&gt; odnośnie poprzedniego przypadku.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Jeśli dałeś/aś się złapać, koniecznie &lt;a href="https://www.google.com/accounts/EditPasswd"&gt;zmień hasło do GMail'a&lt;/a&gt;. A na przyszłość pamiętaj, że regulamin google (i większości innych serwisów) &lt;a href="http://mail.google.com/mail/help/program_policies.html"&gt;zabrania ujawniania hasła&lt;/a&gt;.&lt;p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4782981620644831943-8923979330710691489?l=skolima.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://skolima.blogspot.com/feeds/8923979330710691489/comments/default" title="Komentarze do posta" /><link rel="replies" type="text/html" href="http://skolima.blogspot.com/2007/06/hi5-kolejny-spammer_5803.html#comment-form" title="Komentarze (0)" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/8923979330710691489" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4782981620644831943/posts/default/8923979330710691489" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/skolima_headers/~3/n63UJhgIz90/hi5-kolejny-spammer_5803.html" title="hi5 - kolejny spammer" /><author><name>Leszek Ciesielski</name><uri>https://profiles.google.com/108191791336716408378</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-TkOOiU4cWMA/AAAAAAAAAAI/AAAAAAAABjM/hw_zlSUqRAM/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://skolima.blogspot.com/2007/06/hi5-kolejny-spammer_5803.html</feedburner:origLink></entry></feed>

