<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Łukasz Dywicki</title><link>https://dywicki.pl/</link><description>Recent content on Łukasz Dywicki</description><generator>Hugo -- 0.154.0</generator><language>en-US</language><lastBuildDate>Thu, 09 May 2024 09:33:41 +0000</lastBuildDate><atom:link href="https://dywicki.pl/feed.xml" rel="self" type="application/rss+xml"/><item><title>Persistent serial identifiers with udev</title><link>https://dywicki.pl/2024/05/persistent-serial-identifiers-with-udev/</link><pubDate>Thu, 09 May 2024 09:33:41 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1044</guid><description>It is not a secret that Linux can juggle USB serial ports between restarts. This is something which doesn&amp;rsquo;t happen on linux, but if you ever looked at internet forums on how to fix issue, you for sure found advice to use custom udev rules.</description></item><item><title>Felix Config Admin with Fileinstall and array values</title><link>https://dywicki.pl/2024/02/felix-config-admin-with-fileinstall-and-array-values/</link><pubDate>Tue, 20 Feb 2024 00:13:27 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1040</guid><description>The Felix Fileinstall and Config Admin are two essential components of Apache Karaf runtime. I wrote about issues with array/list handling already twice. In 2015 and 2022. While earlier post was about syntax, later was about troubles with parsing of stored entries. Turns out, I&amp;rsquo;ve found a reason.</description></item><item><title>TwinCAT/BSD with insecure ADS connection</title><link>https://dywicki.pl/2023/10/twincat-bsd-with-insecure-ads-connection/</link><pubDate>Wed, 04 Oct 2023 11:43:56 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1034</guid><description>The TwinCAT is automation software - both runtime and engineering environment from Beckhoff Automation. Since its early days it embedded &amp;ldquo;win&amp;rdquo;, which was a shortcut from windows. Today I&amp;rsquo;ve finally got a TwinCAT/BSD working within VM and had to enable old fashion ADS connection to integration developed within &lt;a href="https://plc4x.apache.org"&gt;Apache PLC4X&lt;/a&gt; library and embedded in &lt;a href="https://connectorio.com/industrial-and-building-automation-monitoring-agent/"&gt;ConnectorIO Agent&lt;/a&gt; software.</description></item><item><title>Gohugo and nginx config generator</title><link>https://dywicki.pl/2023/08/gohugo-and-nginx-config-generator/</link><pubDate>Wed, 30 Aug 2023 23:04:29 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1027</guid><description>The gohugo is being called a content management system, because&amp;hellip; it allows to manage a content. As someone who used wordpress for far too long I found that gohugo was missed my expectations a bit. One of areas where I found it shortcomings are redirects and aliases.</description></item><item><title>Kubernets TLS secret with ca.crt field for mtls</title><link>https://dywicki.pl/2023/05/ingress-nginx-and-tls-secret-with-ca-crt-field/</link><pubDate>Fri, 12 May 2023 08:39:00 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1020</guid><description>By default kubernetes tls secret must consist two fields a &lt;code&gt;tls.key&lt;/code&gt; and &lt;code&gt;tls.crt&lt;/code&gt;. It works perfectly fine in most of the cases, but not when we need mutual tls which is handled by ingress-nginx. This kind of ingress requires a secret with a &amp;ldquo;ca.crt&amp;rdquo; field to validate client certs. Obviously it tricks a kubectl which can&amp;rsquo;t append more than standard.</description></item><item><title>One shot retrieval of TLS certificates from Kubernetes</title><link>https://dywicki.pl/2023/05/one-shot-retrieval-of-tls-certificates-from-kubernetes/</link><pubDate>Wed, 03 May 2023 07:41:00 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1015</guid><description>I believe that I am not only one who needed to get a secret value out of kubernetes. Usual advice focus on use of &lt;code&gt;kubectl&lt;/code&gt; with json output and/or jsonpath. Problem is - the &lt;code&gt;kubectl&lt;/code&gt; jsonpath is limited thus result needs to be scanned further by jq. It works, but jq is not part of everyone&amp;rsquo;s working environment.</description></item><item><title>Apache Felix Configuration Admin and collections</title><link>https://dywicki.pl/2022/02/apache-felix-configuration-admin-and-collections/</link><pubDate>Wed, 16 Feb 2022 12:51:04 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1011</guid><description>A long time ago I wrote an post about &lt;a href="https://dywicki.pl/2015/02/apache-felix-configuration-admin-with-array-values/"&gt;Configuration Admin and Arrays&lt;/a&gt;. Recently I attempted to use this feature with openHAB and I found that it doesn&amp;rsquo;t work with its configuration framework.</description></item><item><title>Nginx: verify OIDC token before rewrite</title><link>https://dywicki.pl/2020/11/nginx-verify-oidc-token-before-rewrite/</link><pubDate>Sun, 08 Nov 2020 22:26:42 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1004</guid><description>A while ago I managed to get Nginx and OpenID Connect working together. Obviously, there is a commercial plugin provided by Nginx authors, but for simpler cases we can use a a simpler way with &lt;code&gt;auth_request&lt;/code&gt; which works nicely with OIDC token introspection served by for example Keycloak.</description></item><item><title>Maven deploy plugin 3.0.0-M1</title><link>https://dywicki.pl/2020/10/maven-deploy-plugin-3-0-0-m1/</link><pubDate>Tue, 27 Oct 2020 22:07:47 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=1000</guid><description>Remote repositories are one of fundamental concepts promoted by Maven. Its use is quite common. It is handled by &lt;a href="https://maven.apache.org/plugins/maven-deploy-plugin/"&gt;maven-deploy-plugin&lt;/a&gt;, so its migration is something you will probably notice sooner or later. This short post will explain changes in new version of plugin which you need to take care of when moving from 2.8 or earlier releases.</description></item><item><title>Gitlab CI for github fork</title><link>https://dywicki.pl/2020/10/gitlab-ci-for-github-fork/</link><pubDate>Mon, 26 Oct 2020 21:09:27 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=994</guid><description>One of most annoying things these days is managing CI/CD with multiple repositories. For quite long time github didn&amp;rsquo;t offer private repositories while gitlab did. This lead to situation where people been asking gitlab for additional features. One of these is support for mirroring git repositories from github to gitlab just to run pipelines. I happened to have the same requirement.</description></item><item><title>Releasing forked Maven projects with ease</title><link>https://dywicki.pl/2020/10/releasing-forked-maven-projects-with-ease/</link><pubDate>Fri, 23 Oct 2020 23:54:11 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=989</guid><description>In this pretty short introduction I am going to describe you a trick which I learned recently while doing new CI/CD configuration for one of open source projects I work with.</description></item><item><title>Using Wireshark with CAN and CANopen</title><link>https://dywicki.pl/2020/09/using-wireshark-with-can-and-canopen/</link><pubDate>Fri, 04 Sep 2020 23:19:44 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=972</guid><description>&lt;a href="http://wireshark.org/"&gt;Wireshark&lt;/a&gt; is outstanding piece of software. I had few chances to make use of it, early in my IT days, then in one of bigger projects I worked on, and finally now - when I began working on industrial integration protocols.{{ double-space-with-newline }}This blog post will describe a journey I had with Wireshark over last couple of weeks and tell you why clicking couple of times everywhere you &lt;em&gt;CAN&lt;/em&gt; is sometimes better.</description></item><item><title>Maven mirros and gitlab ci</title><link>https://dywicki.pl/2020/07/multiple-maven-mirros-gitlab-ci/</link><pubDate>Thu, 30 Jul 2020 12:23:37 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=963</guid><description>Over past couple of months I&amp;rsquo;ve been playing with gitlab ci as it brings a bit of refreshing breeze after years of struggle with Jenkins. Don&amp;rsquo;t get me wrong, I value what Jenkins did for us over past decade. I just think that maintenance of it is a bit of nightmare. Yet, I&amp;rsquo;ve reached a place where I had to adjust some more stuff for gitlab in order to get my builds straight.</description></item><item><title>Mocking builders with Mockito answers</title><link>https://dywicki.pl/2020/04/mocking-builders-with-mockito-answers/</link><pubDate>Wed, 29 Apr 2020 11:58:55 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=952</guid><description>I&amp;rsquo;ve been looking for some ways to use Mockito to with builder pattern using fluent calls. There are couple of articles online, however none of these addressed my case, a builder which receives calls and returns fully working object after a final &amp;lsquo;&amp;lsquo;build&amp;rsquo;&amp;rsquo; call without the need for further setup.</description></item><item><title>7 lat później</title><link>https://dywicki.pl/2018/09/27/blog-7-lat-pozniej/</link><pubDate>Thu, 27 Sep 2018 11:09:21 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=301</guid><description>Ostatni wpis na tym blogu miał miejsce ponad 7 lat temu. W sumie nic dziwnego, ponieważ w poprzedniej notce pojawiła się informacja o jego przeniesieniu. Martwi mnie ilość linków dodanych nie tylko w postach, ale przede wszystkim w komentarzach, które są od bardzo dawna nieaktualne.</description></item><item><title>Migration from OSX to Arch Linux</title><link>https://dywicki.pl/2018/08/migration-from-osx-to-arch-linux/</link><pubDate>Tue, 28 Aug 2018 20:22:49 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=904</guid><description>&lt;p&gt;It is already 12 months since I started using my (first since very long time) desktop PC. In my previous blog post I&amp;rsquo;ve described reasons why I decided to resign from Apple hardware. In this one I will tell you how I managed to drop OSX and its ecosystem with minor pains.&lt;/p&gt;
&lt;p&gt;I feel that I owe you also some insights - which applications I had to swap and which I was lucky to keep. Because I work with Java on daily basis I do not have any major troubles with portability of my software, however just few out many programs is actually written in Java.&lt;/p&gt;</description></item><item><title>Why I abandoned Apple and OSX for Linux</title><link>https://dywicki.pl/2018/01/why-i-abandoned-apple-and-osx-for-linux/</link><pubDate>Thu, 25 Jan 2018 20:53:50 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=890</guid><description>I must start from small confession. I am not an computer kido. My first computer was AMD K6 with 266 Hz clock I got for Christmas back in 1999. I&amp;rsquo;ve seen in my life Amiga, but I wasn&amp;rsquo;t part of long standing battle between platforms. I&amp;rsquo;ve seen Norton Commander on my friend PC who got his Pentium in 95, but I never had to run such tool on my own. Point of bringing whole history of myself coming to computers is to show you that I am relatively fresh to it.</description></item><item><title>Testing a staged release of project dependency</title><link>https://dywicki.pl/2017/12/testing-a-staged-release/</link><pubDate>Tue, 26 Dec 2017 23:56:41 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=879</guid><description>&lt;p&gt;One of most important things, if not the most important in software, is release process. There are whole books written about &amp;ldquo;shipping software&amp;rdquo; and software release is one of key parts which needs to happen in order to deliver our programs to end users. In this very short post I will give you a short tip about how to do a test drive of a release which is not published yet. One of main principles of maven central is &amp;ldquo;what goes there, stays there&amp;rdquo;, meaning that anything which becomes public will stay public. For that reason we, as software developers, want to deploy things which are free of any major issues at release time.
&lt;a href="https://maven.apache.org/guides/development/guide-testing-releases.html"&gt;Staged release&lt;/a&gt; is one of things which are supported by maven-release-plugin. Overall idea behind this is to let people have a test drive before deploying artifacts to public repositories from which they can not be removed. Of course this might be seen as completely unnecessary step if you release a small library, but could be extremely useful for bigger projects, avoiding something I would call a quick fix hiccup.&lt;/p&gt;</description></item><item><title>Apache Felix Configuration Admin with array values</title><link>https://dywicki.pl/2015/02/apache-felix-configuration-admin-with-array-values/</link><pubDate>Tue, 17 Feb 2015 10:47:48 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=857</guid><description>&lt;p&gt;Apache Felix Configuration Admin (CM) is widely used component which is responsible for provisioning of one of most common OSGi services. Main responsibility of it is to bring configurations stored in property files to services.&lt;/p&gt;
&lt;p&gt;While digging into Felix CM code I have found that it is able to create scalar values of certain type ie. Long, but also more complex structures such Array or Vector. The biggest issue was that I couldn’t find any way to force it to create array from string representation. Thanks to google ( &lt;a href="https://issues.apache.org/jira/browse/FELIX-4431"&gt;FELIX-4431&lt;/a&gt; found on 4th page of results) and debugger goodnes I finally managed to do it. Here is recipe how to proceed.&lt;/p&gt;</description></item><item><title>Improve eclipse juno look and feel</title><link>https://dywicki.pl/2013/02/improve-eclipse-juno-look-and-feel/</link><pubDate>Tue, 12 Feb 2013 14:42:42 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=861</guid><description>&lt;p&gt;I use Eclipse since years. Some of you may say that I’m a masochist. Well, people have different preferences. :-) I prefer Eclipse over other editors.&lt;/p&gt;
&lt;h3 id="whats-the-pain"&gt;What’s the pain?&lt;/h3&gt;
&lt;p&gt;Eclipse had same look and feel since years. I used to have the same appearance under Windows/Linux/OSX. Everything was the same except fonts. I was very unhappy with default Juno look and feel which looks like few widgets deployed in browser. Even web-based IDEs looks better than Juno! There was &lt;a href="http://stackoverflow.com/a/11359663"&gt;some posts&lt;/a&gt; about that and &lt;a href="http://www.vogella.com/blog/2012/07/11/eclipse-4-is-beautiful-create-your-own-eclipse-4-theme/"&gt;some solutions&lt;/a&gt;. However nobody told how to get older look and feel in place.&lt;/p&gt;</description></item><item><title>Apache Karaf - pierwszy projekt z OSGi</title><link>https://dywicki.pl/2013/02/apache-karaf-pierwszy-projekt-z-osgi/</link><pubDate>Mon, 11 Feb 2013 17:36:57 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=762</guid><description>&lt;p&gt;Piątego lutego miałem niekłamaną przyjemność podziwiać &lt;a href="http://jlaskowski.blogspot.com"&gt;Jacka Laskowskiego&lt;/a&gt; prezentującego temat &lt;a href="http://warszawa.jug.pl/spotkania/20130205-osgi"&gt;Praktyczne wprowadzenie do OSGi i Enterprise OSGi&lt;/a&gt;. Link do filmiku z prezentacją Jacka znajdziecie na &lt;a href="http://jlaskowski.blogspot.com/2013/02/nagranie-z-mojej-prezentacji-o.html"&gt;Jego blogu&lt;/a&gt;. Tymczasem, poniżej wideo z Karafem. :-)&lt;/p&gt;</description></item><item><title>Advanced Apache Camel logging and best practices</title><link>https://dywicki.pl/2012/02/advanced-apache-camel-logging-and-best-practices/</link><pubDate>Tue, 28 Feb 2012 00:09:14 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=756</guid><description>Apache Camel supports a &lt;a href="http://camel.apache.org/mdc-logging.html"&gt;mapped diagnostic context&lt;/a&gt; which can be used to improve log entries, but also there is a &lt;a href="http://camel.apache.org/log"&gt;log component&lt;/a&gt; which makes it easier to create log entries. Together they can be used to create foundations of activity monitoring without need to deploy another tool or database.</description></item><item><title>Apache Aries under Apache Tomcat</title><link>https://dywicki.pl/2012/01/apache-aries-under-apache-tomcat/</link><pubDate>Tue, 24 Jan 2012 20:51:40 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=754</guid><description>Few months ago I&amp;rsquo;ve read an article written by my friend &lt;a href="http://jlaskowski.blogspot.com"&gt;Jacek Laskowski&lt;/a&gt; - &lt;a href="http://www.jaceklaskowski.pl/wiki/Enterprise_OSGi_runtime_setup_with_Apache_Aries_Blueprint" title="Enterprise OSGi runtime setup with Apache Aries Blueprint"&gt;Enterprise OSGi runtime setup with Apache Aries Blueprint&lt;/a&gt;. In his article Jacek describes which bundles should be installed to get the blueprint working. As IBM employee Jacek can always promote IBM WebSphere in version X or Y which started (or will start) supporting blueprint as dependency injection mechanism. That&amp;rsquo;s not fine for these who do not run IBM producs and want something light. As you know, Aries and OSGi Blueprint is an alternative for old-fashion Spring approach.</description></item><item><title>Running aspects under OSGi 4.2 with Karaf</title><link>https://dywicki.pl/2011/11/running-aspects-under-osgi-4-2-with-karaf/</link><pubDate>Thu, 24 Nov 2011 19:23:46 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=707</guid><description>One of bigest benefits of Java is byte code manipulation. You can change everything you want in your application without touching source code. That&amp;rsquo;s usefull for many cases, starting from legacy code, where we can&amp;rsquo;t simply modify and recompile library up to modern applications where aspects can be used to handle runtime exceptions. The most popular project is &lt;a href="http://eclipse.org/aspectj/"&gt;AspectJ&lt;/a&gt; which is part of &lt;a href="http://eclipse.org"&gt;Eclipse&lt;/a&gt; ecosystem, in this post I going to show you how to use AspectJ with Karaf.</description></item><item><title>Preserving message order in ActiveMQ</title><link>https://dywicki.pl/2011/11/preserving-message-order/</link><pubDate>Fri, 18 Nov 2011 10:36:52 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=699</guid><description>&lt;p&gt;Few hours ago I&amp;rsquo;ve found an usefull &lt;a href="http://marcelojabali.blogspot.com/2011/11/preserving-message-order-with-apache.html"&gt;post&lt;/a&gt; about preserving message order with &lt;a href="http://activemq.apache.org"&gt;ActiveMQ&lt;/a&gt; written by &lt;a href="http://marcelojabali.blogspot.com/"&gt;Marcelo Jabali&lt;/a&gt; from &lt;a href="http://www.fusesource.com/"&gt;FUSE Source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In his example Marcelo used broker feature called &lt;a href="http://activemq.apache.org/exclusive-consumer.html"&gt;Exclusive Consumers&lt;/a&gt;. It lets send messages only to one consumer and if it fails then second consumer gets all messages. I think it is not the best idea if we have many messages to process. Why we wouldn&amp;rsquo;t use few consumers with preserved message order? Well, I was sure it is not possible, but during last training I&amp;rsquo;ve found solution.&lt;/p&gt;</description></item><item><title>Introduction to Karaf WebConsole</title><link>https://dywicki.pl/2011/11/introduction-to-karaf-webconsole/</link><pubDate>Wed, 16 Nov 2011 23:02:22 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=682</guid><description>&lt;p&gt;Management of OSGi - let&amp;rsquo;s face it - is not very hard. The OSGi environment is clearly defined and that gives programmers many mechanisms to create administrative tools. The problem begins when we would like to use only one tool to manage few projects or artifacts of different types. I know this from personal experience because when I run Camel, ActiveMQ and CXF every from them provides own administration console. Every of them requires own security configuration, looks differently, have own dependencies and so on.&lt;/p&gt;</description></item><item><title>Building sample middleware - producer</title><link>https://dywicki.pl/2011/06/building-sample-middleware-producer/</link><pubDate>Sat, 18 Jun 2011 12:40:30 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=633</guid><description>&lt;p&gt;Last two days I&amp;rsquo;ve spent hacking Swing code. I decided to run standalone producer application to show real interaction with broker. You may treat this Swing app like entry point for people to our middleware system. Users simply do &amp;ldquo;transfers&amp;rdquo; from this application and don&amp;rsquo;t know anything about technical details. I added text area to main window to show structure of message sent to broker.&lt;/p&gt;
&lt;h2 id="producing-messages-with-jms"&gt;Producing messages with JMS&lt;/h2&gt;
&lt;p&gt;Most of communication systems, whanever you will go have two different kinds of values, first - main and mainly used is body, second is typical metadata named headers or properties or parameters. JMS is not different, you can create different kinds of messages and set headers to them (in JMS world they&amp;rsquo;re named property, but I preffer header).
Let check messaging code we have:&lt;/p&gt;</description></item><item><title>XML Schema Design Patterns</title><link>https://dywicki.pl/2011/06/xml-schema-design-patterns/</link><pubDate>Tue, 14 Jun 2011 14:22:54 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=230</guid><description>&lt;p&gt;XML Schema jest bodajże najlepszym sposobem walidacji dokumentów XML. Model zastosowany w przypadku tego meta-języka pozwala na tworzenie złożonych konstrukcji. W oparciu o niego można budować własne rozszerzenia czy też zagnieżdżać w sekcjach xsd:appinfo dodatkowe metadane. Dzisiaj jednak nie o tym, a o wzorcach projektowych. Sam się zdziwiłem gdy trafiłem na artykuł &lt;a href="http://developers.sun.com/jsenterprise/archive/nb_enterprise_pack/reference/techart/design_patterns.html"&gt;Introducing Design Patterns in XML Schemas&lt;/a&gt;. W życiu się nie zastanawiałem czy to co piszę w XSD ma coś wspólnego z wzorcami czy nie. Sun wyprzedził w tym momencie chyba wszystkich. :-)&lt;/p&gt;</description></item><item><title>Building sample middleware – data structures</title><link>https://dywicki.pl/2011/06/building-sample-middleware-data-structures/</link><pubDate>Mon, 13 Jun 2011 12:54:18 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=590</guid><description>&lt;h2 id="data-with-middleware"&gt;Data with middleware&lt;/h2&gt;
&lt;p&gt;The data structures are very important in middleware world. Because we often connect multiple systems we need to define an &amp;ldquo;domain model&amp;rdquo; for integration. The domain model means that objects we share between all systems are &lt;strong&gt;well known&lt;/strong&gt;, &lt;strong&gt;well defined&lt;/strong&gt;, &lt;strong&gt;well understand&lt;/strong&gt; in multiple teams often provided by multiple vendors. Let see what does it means in practice.&lt;/p&gt;
&lt;h4 id="well-known"&gt;Well known&lt;/h4&gt;
&lt;p&gt;If you talk with business guys you have to use same terms with programmers. You might be mediator but not the translator. As integration team member mediate correct shape of solution but don&amp;rsquo;t became a translator between business divisions and developers (unless you are business analitic). All people should use same terms to minimalise problems with number of definitions. That&amp;rsquo;s first step of multiple projects, not only integration. If you look for deeper knowledge of domain definitions check a &amp;quot; &lt;a href="http://domaindrivendesign.org/books/evans_2003"&gt;Domain Driven Design&lt;/a&gt;&amp;quot; book written by &lt;a href="http://domaindrivendesign.org/about#eric"&gt;Eric Evans&lt;/a&gt; and published in 2003. Ok, maybe business is not always part of integration project, but you communicate systems used by people, isn&amp;rsquo;t?&lt;/p&gt;</description></item><item><title>Building sample middleware - broker</title><link>https://dywicki.pl/2011/06/building-sample-middleware-broker/</link><pubDate>Fri, 10 Jun 2011 16:45:30 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=560</guid><description>&lt;p&gt;At end of the May I had great time in United Kingdom providing consulting. After this I started thinking about sharing an idea of middleware application based on ActiveMQ and Camel features. I&amp;rsquo;ve spent few days to create sufficient example.&lt;/p&gt;
&lt;h1 id="what-middleware-is"&gt;What middleware is?&lt;/h1&gt;
&lt;p&gt;Middleware is a general term, about some software which is some kind of proxy between other systems. What for? - you could ask. Generally because communication from point to point is not the best to build bigger applications, and some components in middle of communication allows us to inject new logic without changing source systems. Could you imagine situation where you have a number of system producing messages and an number of consumers of these messages written in different languages? That&amp;rsquo;s typical case where middleware is going to be usefull.
There is number of middleware tools from various categories, in this post we&amp;rsquo;ll learn how to use ActiveMQ to build message oriented middleware. What does the MOM means? Generally that we have asynchronous communication without direct method invocations. Producer don&amp;rsquo;t know anything about consumer and vice versa. If you are interested in MOM - pick up &amp;quot; &lt;a href="http://manning.com/snyder/"&gt;ActiveMQ in Action&lt;/a&gt;&amp;quot; book (written by commiters of ActiveMQ) from &lt;a href="http://manning.com"&gt;Manning Publications Co.&lt;/a&gt; where this term is described in greater detail.&lt;/p&gt;</description></item><item><title>Budowanie przykładowego middleware - broker</title><link>https://dywicki.pl/2011/06/budowanie-przykladowego-middleware-broker/</link><pubDate>Fri, 10 Jun 2011 16:45:13 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?p=581</guid><description>&lt;p&gt;Pod koniec maja świetnie spędziłem czas w Wielkiej Brytanii dostarczając consulting. Tuż po nim zacząłem myśleć o podzieleniu się ideą aplikacji middleware zbudowanej na ActiveMQ z funkcjami Camela. Spędziłem kilka dni tworząc wystarczający przykład.&lt;/p&gt;
&lt;h1 id="czym-jest-middleware"&gt;Czym jest middleware?&lt;/h1&gt;
&lt;p&gt;Middleware jest ogólnym terminem traktującym o oprogramowaniu które jest pewnego rodzaju pośrednikiem między systemami. Po cóż? - możesz zapytać. Generalnie ponieważ komunikacja pomiędzy punktami nie jest najlepsza do budowania większych aplikacji, co więcej niektóre komponenty pomiędzy komunikującymi pozwalają wstrzykiwać nową logikę bez zmieniania systemów komunikujących się. Czy możesz wyobrazić sobie sytuację gdzie wiele systemów tworzy komunikaty i wielu konsumentów tych komunikatów stworzonych w różnych językach? To jest typowy scenariusz gdzie middleware będzie użyteczne.
Istnieje wiele narzędzi middleware i kilka ich kategorii, w tym wpisie dowiemy się jak używać ActiveMQ do budowania message oriented middleware. Co oznacza termin MOM? To, że mamy asynchroniczną komunikację bez bezpośrednich wywołań metod. Producent nic nie wie o konsumencie i na odwrót. Jeśli jesteś zainteresowany MOM-ami - zajrzyj do książki &lt;a href="http://manning.com/snyder/"&gt;&amp;ldquo;ActiveMQ in Action&amp;rdquo;&lt;/a&gt; (napisanej przez commiterów ActiveMQ) z &lt;a href="http://manning.com"&gt;wydawnictwa Manning&lt;/a&gt;, w której termin ten jest opisany szerzej.&lt;/p&gt;</description></item><item><title>About me</title><link>https://dywicki.pl/about-me/</link><pubDate>Fri, 10 Jun 2011 14:59:40 +0000</pubDate><guid isPermaLink="false">http://dywicki.pl/?page_id=4</guid><description>&lt;p&gt;I’m a software developer from Poland with over 20 years of experience, focused on integration, middleware, and distributed systems.&lt;/p&gt;
&lt;p&gt;I started my professional work around 2005 with PHP, though by that time I was already an experienced programmer, experimenting with different languages, frameworks, and design patterns. PHP was simply the first technology I used commercially. Around mid-2006 to early 2007, I transitioned to Java, which became my primary ecosystem and the foundation for most of my work going forward.&lt;/p&gt;</description></item><item><title>Przeprowadzka</title><link>https://dywicki.pl/2011/06/10/przeprowadzka/</link><pubDate>Fri, 10 Jun 2011 14:30:55 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=247</guid><description>&lt;p&gt;Po dłuższym czasie braku aktywności na tym blogu - postanowiłem przenieść część z postów, które zostały na nim opublikowane do nowego blogu, który tyczy się kwestii java, middleware itd. pod adresem &lt;a href="http://dywicki.pl"&gt;dywicki.pl&lt;/a&gt;. Być może zawitają tam inne języki :), kto wie może i PHP? Wszystkie pozostałe posty są i nadal będą dostępne. Przy okazji zwijania tego bloga raz jeszcze chciałbym podziękować wszystkim tym, którzy dorzucili się do odzyskania zrzutu bazy danych z OVH w &lt;a href="https://dywicki.pl/2006/11/22/powrot/"&gt;2006 roku&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Apache Karaf commands rediscovered</title><link>https://dywicki.pl/2010/12/apache-karaf-commands-rediscovered/</link><pubDate>Wed, 15 Dec 2010 12:05:49 +0000</pubDate><guid isPermaLink="false">http://blog.code-house.org/?p=308</guid><description>I work with Apache Karaf almost every day. There is a lot of commands provided by default and most of them are a bit anonymous. In this post I would like introduce these commands.</description></item><item><title>OSGi-fikacja oraz nowe bundle w repozytorium ServiceMix</title><link>https://dywicki.pl/2010/03/osgi-new-bundles-servicemix-repository/</link><pubDate>Wed, 24 Mar 2010 16:26:52 +0000</pubDate><guid isPermaLink="false">http://blog.code-house.org/?p=249</guid><description>W tym wpisie zostanie omówiony proces OSGi-fikacji artefaktów, który przechodziłem gdy uruchamiałem prostą usługę na ServiceMix, która miała śledzić zewnętrzny RSS i pobierać z niego wpisy. Postanowiłem skorzystać z camel-rss. Przykłady które były do niego załączone są wystarczające by stworzyć odpowiedniego konsumenta&amp;hellip;</description></item><item><title>Enterprise OSGi</title><link>https://dywicki.pl/2010/03/enterprise-osgi/</link><pubDate>Tue, 23 Mar 2010 12:26:18 +0000</pubDate><guid isPermaLink="false">http://blog.code-house.org/?p=233</guid><description>&lt;p&gt;Do opublikowania tego postu zachęcił mnie &lt;a href="http://jlaskowski.blogspot.com/"&gt;Jacek Laskowski&lt;/a&gt; swym postem pod tytułem &lt;a href="http://jlaskowski.blogspot.com/2010/03/w-piatek-4developers-ze-mna-z.html"&gt;W piątek 4Developers ze mną z Enterprise OSGi i in&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bardzo się cieszę że na 4Developers (na którym niestety mnie nie będzie) temat Enterprise OSGi będzie poruszony, ponieważ jak się zdaje jest to nieuchronny kierunek rozwoju Javy. Pod wpływem słów Jacka zacząłem się zastanawiać nad długofalowymi efektami jakie OSGi ma wnieść do developmentu.&lt;/p&gt;
&lt;p&gt;Hałas który obecnie jest wokół OSGi w przybiera konkretne kształty w postaci projektów takich jak &lt;a href="http://incubator.apache.org/aries/"&gt;Aries&lt;/a&gt; czy &lt;a href="http://www.eclipse.org/gemini/"&gt;Gemini&lt;/a&gt;. Obydwa projekty skupiają się nad ostatnimi draftami OSGi R4 V4.2 i mają na celu udostępnienie technologii takich jak JNDI, JPA i JMX wewnątrz kontenerów OSGi. Zacznijmy jednak od początku..&lt;/p&gt;</description></item><item><title>Wprowadzenie do Apache ServiceMix 4 cz. 1</title><link>https://dywicki.pl/2010/03/introduction-to-apache-servicemix4-part-1/</link><pubDate>Mon, 22 Mar 2010 12:19:50 +0000</pubDate><guid isPermaLink="false">http://blog.code-house.org/?p=179</guid><description>&lt;p&gt;Dnia 23 lutego w ramach Warszawa JUG miałem przyjemność wraz z &lt;a href="http://nurkiewicz.blogspot.com/"&gt;Tomkiem Nurkiewiczem&lt;/a&gt; prezentować narzędzia integracyjne z otwartym kodem źródłowym. Tomek przedstawił Mule ESB, podczas gdy ja zająłem się Apache ServiceMix i Apache Camel. Ze względu na objętość przykładu ten wpis będzie jedynie wprowadzeniem do konsoli.&lt;/p&gt;
&lt;p&gt;Niestety podczas prezentacji nie udało mi się uruchomić przykładu na &amp;ldquo;szynie&amp;rdquo; - ponieważ uniemożliwiły to zależności do bibliotek których nie miałem zapisanych lokalnie. Drugim mym przeciwnikiem był czas - nie było wielu chętnych by słuchać po 2h tłumaczeń dlaczego się nie udało :-) Na problem z zależnościami stworzyłem rozwiązanie i zgłosiłem je do Karaf-a ( &lt;a href="https://issues.apache.org/jira/browse/FELIX-2141"&gt;FELIX 2141&lt;/a&gt;). W przyszłej wersji - 1.6 - wszyscy będą mogli skorzystać z polecenia &lt;code&gt;features:info -t&lt;/code&gt; które wyświetli całe drzewko zależności potrzebnych do zainstalowania nowych funkcjonalności.&lt;/p&gt;</description></item><item><title>Parę słów o tym co się dzieje</title><link>https://dywicki.pl/2009/06/05/pare-slow-o-tym-co-sie-dzieje/</link><pubDate>Fri, 05 Jun 2009 06:00:05 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=244</guid><description>Bardzo dużo czasu minęło od ostatniej noty, tym czasem ja w dalszym ciągu nie mam kiedy publikować not technicznych a tym bardziej &amp;ldquo;prywatnych&amp;rdquo;. Wynika to między innymi z tego, że rozpocząłem działalność gospodarczą. Moja firma nazywa się &lt;a href="http://code-house.org/"&gt;Code-House&lt;/a&gt; i zajmuje się doradztwem, szkoleniami jak i wytwarzaniem oprogramowania. Szczegóły oferty znajdziecie na stronie firmowej jeśli zostanie w końcu uruchomiona. ;) No a tak na co dzień jestem pracownikiem kontraktowym.</description></item><item><title>Java Servlet API 3.0</title><link>https://dywicki.pl/2008/12/22/java-servlet-api-3/</link><pubDate>Mon, 22 Dec 2008 10:35:47 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=243</guid><description>Dnia wczorajszego na &lt;a href="http://infoq.com"&gt;InfoQ&lt;/a&gt; o tym, że został udostępniony &lt;a href="http://www.infoq.com/news/2008/12/servlet3_debate"&gt;szkic specyfikacji&lt;/a&gt; Servlet API 3.0. Największe nowości to&amp;hellip; adnotacje, które będą mogły być użyte w miejsce interfejsów i dziedziczenia.</description></item><item><title>Typ wyliczeniowy TimeUnit w Javie oraz klasa w PHP</title><link>https://dywicki.pl/2008/12/09/timeunit-enum-in-java-and-class-inphp/</link><pubDate>Tue, 09 Dec 2008 16:10:00 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=242</guid><description>Java od wersji 5.0 zawiera możliwość definiowania typów wyliczeniowych. Jednym z praktycznych przykładów zastosowania tego mechanizmu jest &lt;a href="http://www.docjar.com/docs/api/java/util/concurrent/TimeUnit.html"&gt;TimeUnit&lt;/a&gt;. Enum ten służy do konwertowania jednostek czasu pomiędzy różnymi wielkościami - na przykład z minut na sekundy.</description></item><item><title>EasyMock i IAnswer, recepta na zachowanie metod</title><link>https://dywicki.pl/2008/12/03/easymock-inaswer-as-method-behaviour-recipe/</link><pubDate>Wed, 03 Dec 2008 16:06:42 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=240</guid><description>Złym zwyczajem jest modyfikowanie argumentów zamiast zwracania nowej wartości, jakkolwiek trafiają się sytuacje gdy testowany kod powinien weryfikować takie wywołania. W EasyMock mamy do dyspozycji w takim przypadku interfejs IAnswer. Jego użycie jest w miarę proste - dobieramy się do tablicy argumentów i robimy z nią co potrzeba.</description></item><item><title>Testowanie tablic argumentów z EasyMock</title><link>https://dywicki.pl/2008/11/26/testing-array-parameters-with-easymock/</link><pubDate>Wed, 26 Nov 2008 06:00:02 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=239</guid><description>Często zdarza się że metody, które piszemy i później testujemy mają argumenty w postaci tablic. EasyMock wówczas potrafi zgłosić wyjątek, że przekazana tablica jest różna od oczekiwanej mimo, że zawartość tablic jest identyczna.</description></item><item><title>Uruchom inny język w Javie</title><link>https://dywicki.pl/2008/11/24/scripting-inside-java/</link><pubDate>Mon, 24 Nov 2008 06:00:02 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=236</guid><description>Do Javy 6.0 zostało dołączone API ( &lt;a href="http://www.jcp.org/en/jsr/detail?id=223"&gt;JSR 223&lt;/a&gt;) umożliwiające wywoływanie różnych języków wewnątrz wirtualnej maszyny. Można w ten sposób przesunąć chociażby moment kompilowania kodu na później bądź od razu podpiąć język interpretowany.</description></item><item><title>Interfejs InitializingBean</title><link>https://dywicki.pl/2008/11/21/interfejs-initializingbean/</link><pubDate>Fri, 21 Nov 2008 06:00:27 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=235</guid><description>Każdy z obiektów który jest konfigurowany w kontekście Springa ma szansę zweryfikować swój stan tuż po zainicjowaniu wszystkich wartości, które zostały mu przekazane. Wynika to z tego, że czasami obiekty potrafią działać na kilku różnych zasobach i można wstrzyknąć do nich tylko jeden rodzaj tegoż. Czasami po prostu potrzebujemy sprawdzić czy są przekazane wszystkie ustawienia konfiguracyjne bądź zainicjować połączenie do bazy danych na podstawie przekazanych parametrów.</description></item><item><title>Odwołanie do klasy Properties w kontekście springa</title><link>https://dywicki.pl/2008/11/20/odwolanie-do-klasy-properties-w-kontekscie-springa/</link><pubDate>Thu, 20 Nov 2008 06:00:46 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=233</guid><description>&lt;em&gt;Jako, że nie zawsze mam czas pisać dłuższe noty, a nie wszyscy znają Springa postanowiłem publikować krótkie porady, które mogą kiedyś komuś się przydać.&lt;/em&gt;</description></item><item><title>Jeśli coś nie jest komercyjne nie jest też profesjonalne</title><link>https://dywicki.pl/2008/11/19/jesli-cos-nie-jest-komercyjne-nie-jest-tez-profesjonalne/</link><pubDate>Wed, 19 Nov 2008 09:22:43 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=232</guid><description>&lt;p&gt;Ostatnimi czasy odbyłem kilka spotkań w większych i mniejszych firmach. To co mnie zastanowiło po jednej z ostatniej rozmów to zdanie:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Korzystamy z profesjonalnych narzędzi takich jak &lt;a href="http://www.tibco.com/"&gt;Tibco&lt;/a&gt;, &lt;a href="http://www.softwareag.com/Corporate/products/wm/default.asp"&gt;WebMethods&lt;/a&gt;, czasami &lt;a href="http://www.bea.com/framework.jsp?CNT=index.htm&amp;amp;FP=/content/products/aqualogic/service_bus/"&gt;Bea&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Co łączy wymienione produkty? Otóż wszystkie są rozwiązaniami z klasy EAI i &amp;hellip; są płatne. Zdanie to usłyszałem w odniesieniu do &lt;a href="http://servicemix.apache.org"&gt;Apache Service Mix&lt;/a&gt;, którym się interesuję. Wniosek z tej wypowiedzi jaki udało mi się wysnuć od razu stał się tematem tej noty, czyli jeśli coś nie jest komercyjne nie jest też profesjonalne. Tak jakby OSS był gorszym rozwiązaniem od kupienia licencji na pudełkowe rozwiązanie od jakiegoś producenta.&lt;/p&gt;</description></item><item><title>Log4j, przejrzyste komunikaty</title><link>https://dywicki.pl/2008/10/15/log4j-przejrzyste-komunikaty/</link><pubDate>Wed, 15 Oct 2008 08:00:10 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=229</guid><description>&lt;a href="http://logging.apache.org/log4j/"&gt;Log4j&lt;/a&gt; jest najpopularniejszą biblioteką do logowania dla Javy. Została ona wydana już jakiś czas temu i w chwili obecnej rozwija się znacznie wolniej niż kiedyś, warto jednak nadmienić że społeczność wciąż dostarcza nowych możliwości. Może najpierw o samej strukturze log4j.</description></item><item><title>Spring "Commercial" Source zastępuje Open Source</title><link>https://dywicki.pl/2008/09/28/spring-commercial-source-replaces-open-source/</link><pubDate>Sun, 28 Sep 2008 19:59:10 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=227</guid><description>&lt;p&gt;Pamiętam, jak jakiś już czas temu, kiedy pracowałem w &lt;a href="http://pzu.pl"&gt;PZU&lt;/a&gt; dyskutowałem z kolegą na temat &lt;a href="http://www.springframework.org/"&gt;Springa&lt;/a&gt;. Obaj podziwialiśmy wówczas jego jakość. Chyba wszyscy ludzie którzy mieli styczność z tym narzędziem przyznają, że jest to na prawdę porządnie napisany kawałek kodu. Połączenie bardzo dobrej dokumentacji oraz duża społeczność sprzyjały cały czas Springowi w odnoszeniu kolejnych sukcesów.&lt;/p&gt;
&lt;p&gt;Do dnia 17 września, kiedy to &lt;a href="http://springsource.com"&gt;SpringSource&lt;/a&gt; ogłosiło zmianę zasad - i poniekąd &lt;a href="http://www.springsource.com/node/558"&gt;konieczność wykupywania subskrypcji&lt;/a&gt;. Wiadomość ta zaiste zelektryzowała społeczność.&lt;/p&gt;</description></item><item><title>Budowanie klienta usługi sieciowej w oparciu o Apache CXF</title><link>https://dywicki.pl/2008/09/03/budowanie-klienta-uslugi-sieciowej-w-oparciu-o-apache-cxf/</link><pubDate>Wed, 03 Sep 2008 07:28:27 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=223</guid><description>&lt;p&gt;W nawiązaniu do &lt;a href="http://blog.dywicki.pl/2008/07/23/budowanie-uslugi-sieciowej-w-oparciu-o-apache-cxf/"&gt;poprzedniej noty o CXFie&lt;/a&gt;, którą napisałem jakiś czas temu, gonię aby uzupełnić brak konfiguracji klienta. Sam proces jest bardzo zbliżony do tworzenia klienta w oparciu o XFire. Nie jest wymagana duża ilość kodu Javy, a w zasadzie tylko dwa pliki XML (client.xml, &lt;em&gt;myservice.xml&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Pierwszy z nich odpowiada za wczytanie wymaganych rozszerzeń CXFa oraz definicję bazowej konfiguracji fabryki z interceptorami. W interceptorach możemy skonfigurować logowanie, obsługę załączników czy standardów WS-Security etc. Wszystkie te ustawienia będą dziedziczone, a fabryki docelowych usług będą dodawać tylko adres, do odpytywania. Na koniec bean klienta będzie miał określony &lt;strong&gt;autowire&lt;/strong&gt; by nie przekazywać mu wszystkich własności.&lt;/p&gt;</description></item><item><title>JUnit. Pragmatyczne testy jednostkowe w Javie</title><link>https://dywicki.pl/2008/09/02/junit-pragmatyczne-testy-jednostkowe-w-javie/</link><pubDate>Tue, 02 Sep 2008 16:51:50 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=129</guid><description>&lt;p&gt;&lt;a href="http://blog.dywicki.pl/wp-content/uploads/2008/09/junit.jpg"&gt;&lt;img src="http://blog.dywicki.pl/wp-content/uploads/2008/09/junit-209x300.jpg" alt="Okładka książki"&gt;&lt;/a&gt;
Temat testów jednostkowych nie pojawiał się na tym blogu tak często jak &lt;a href="http://blog.dywicki.pl/category/php"&gt;PHP&lt;/a&gt; czy &lt;a href="http://blog.dywicki.pl/category/jaxb"&gt;JAXB&lt;/a&gt;, jakkolwiek temat ten poruszałem w 2 notach - &lt;a href="http://blog.dywicki.pl/2007/04/22/testy-jednostkowe/"&gt;o testach&lt;/a&gt; oraz &lt;a href="http://blog.dywicki.pl/2007/02/01/singleton/"&gt;o singletonie&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tych, którzy chcieliby dowiedzieć się więcej o testach na przykładzie &lt;a href="http://junit.org"&gt;JUnit&lt;/a&gt; i Javy zapraszam się do zapoznania z bardzo dobrą pozycją na temat testów jednostkowych, z którą miałem przyjemność się zetknąć.&lt;/p&gt;</description></item><item><title>Budowanie usługi sieciowej w oparciu o Apache CXF</title><link>https://dywicki.pl/2008/07/23/budowanie-uslugi-sieciowej-w-oparciu-o-apache-cxf/</link><pubDate>Wed, 23 Jul 2008 06:27:55 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=219</guid><description>&lt;p&gt;Od jakiegoś czasu w pracy do tworzenia usług sieciowych korzystam z &lt;a href="http://cxf.apache.org"&gt;Apache CXF&lt;/a&gt;. Jako że biblioteka jest stosunkowo nowa i nie najlepiej udokumentowana postanowiłem przedstawić na blogu jak wygląda proces tworzenia.&lt;/p&gt;
&lt;p&gt;CXF jest połączeniem kilku bibliotek - &lt;a href="http://cwiki.apache.org/YOKO/"&gt;YOKO&lt;/a&gt;, &lt;a href="http://celtix.objectweb.org/"&gt;Celtixa&lt;/a&gt; oraz &lt;a href="http://xfire.codehaus.org/"&gt;XFire&lt;/a&gt;. Każda z nich wcześniej realizowała pewien fragment obecnej funkcjonalności CXF - YOKO obsługuje Corbę a XFire usługi sieciowe. Obecne CXF jest gotowy do używania &amp;ldquo;produkcyjnego&amp;rdquo;, ponieważ niedawno wyszedł z fazy inkubacji. :)&lt;/p&gt;</description></item><item><title>Apache ServiceMix, Open Source ESB</title><link>https://dywicki.pl/2008/06/22/apache-servicemix-open-source-es/</link><pubDate>Sun, 22 Jun 2008 18:23:35 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=215</guid><description>Jakiś czas temu, jeszcze podczas pracy w poprzedniej firmie przypadło mi zadanie podpięcia się pod magistralę usług opartą o &lt;a href="http://servicemix.apache.org"&gt;Apache Service Mix&lt;/a&gt; (SMX). Był to wówczas dla mnie temat zupełnie nowy, ba nawet nie wiedziałem z czym to się je. :) Koniec końców jednak podpięcie pod ESB (Enterprises Service Bus) nie było w ogóle trudne. Po jakimś czasie i drobnych przetasowaniach na płaszczyźnie zawodowej zająłem się SMX-em nie jako klient magistrali a osoba implementująca usługi na szynie a ten wpis jest drobną przeróbką prezentacji, którą przygotowałem w pracy.</description></item><item><title>JAXB 2, zabawy z datą i konwersją typów</title><link>https://dywicki.pl/2008/05/17/jaxb-2-zabawy-z-data-i-konwersja-typow/</link><pubDate>Sat, 17 May 2008 09:10:27 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2008/05/17/jaxb-2-zabawy-z-data-i-konwersja-typow/</guid><description>Jedną z bolączek JAXB jest problematyczna obsługa dat i czasów. Przypomnijmy sobie schemat użyty &lt;a href="http://blog.dywicki.pl/?p=190"&gt;w jednej z wcześniejszych not&lt;/a&gt;.</description></item><item><title>Kolorowanie składni w SyntaxHighlighter - Eclipse.</title><link>https://dywicki.pl/2008/02/09/kolorowanie-skladni-w-syntaxhighlighter-eclipse/</link><pubDate>Sat, 09 Feb 2008 19:46:43 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2008/02/09/kolorowanie-skladni-w-syntaxhighlighter-eclipse/</guid><description>Jakiś czas temu zmieniłem narzędzie do kolorowania składni z &lt;a href="http://qbnz.com/highlighter/"&gt;GeSHI&lt;/a&gt; na &lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;SyntaxHighlighter&lt;/a&gt;. Największa różnica to wykonanie. Starsza biblioteka parsuje wszystko po stronie serwera i pakuje to w HTML, nowsza jest uruchamiana z poziomu przeglądarki i kolorowanie odbywa się tuż po załadowaniu strony.</description></item><item><title>Aktualizacja sterowników dla kart ATI</title><link>https://dywicki.pl/2008/02/02/aktualizacja-sterownikow-dla-kart-ati/</link><pubDate>Sat, 02 Feb 2008 20:34:20 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2008/02/02/aktualizacja-sterownikow-dla-kart-ati/</guid><description>Jakiś czas temu nieszczęśliwym zbiegiem okoliczności straciłem możliwość uruchomienia swojego systemu (XP). Winny całej sytuacji był partition magick, który nie poradził sobie z przeskalowaniem partycji. Koniec końców spod suse zrobiłem backup danych i postanowiłem zainstalować XP raz jeszcze. Niestety płytka, na której był nagrany (wersja z MSDNAA), nie podnosiła się. Byłem zmuszony do skorzystania z instalki Visty. Kosztowała mnie ona 30 zł i to w cale nie na, zamkniętym już wtedy, stadionie dziesięciolecia! Asus organizował coś takiego jak Visa upgrade i rozdawał płytki za darmo. Swoją dostałem w maju.
Koniec końców nowe dziecko MS wylądowało na moim twardym dysku. Kolorki kolorkami, zasoby zasobami, ale najgorsze było to, że straciłem możliwość grania w Enemy Territory. Ta stara gra chodziła mi na XP bardzo płynnie, niestety na Viście nie osiągałem więcej niż 30 fps. Zrozpaczony tym zrezygnowałem z pogrywania. Jakiś czas później naszła mnie chęć na aktualizację sterowników do karty graficznej, ponieważ wszystko co było oparte o OpenGL chodziło tak jak by chciało a nie mogło. Udałem się na stronę &lt;a href="http://ati.amd.com/"&gt;ATI&lt;/a&gt; by pobrać sterowniki. Jakież było moje zdziwienie, gdy producent oznajmił, że do kart OEM sterowniki powinni zapewnić ich producenci. W tym momencie praktycznie wszystkie układy zbudowane w oparciu o kości Radeon montowane w laptopach zatrzymują się na wersji sprzed roku, jeśli nie starszej.
Zaintrygowany tym zacząłem szperać i znalazłem rozwiązanie. :)</description></item><item><title>Adnotacje w Javie i w PHP</title><link>https://dywicki.pl/2008/01/20/adnotacje-w-javie-i-w-php/</link><pubDate>Sun, 20 Jan 2008 21:55:28 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2008/01/20/adnotacje-w-javie-i-w-php/</guid><description>Parę dni wstecz trafiłem na ciekawe rozszerzenie &lt;a href="http://pl2.php.net/manual/en/language.oop5.reflection.php"&gt;Reflection API&lt;/a&gt; do PHP. Umożliwia ono używanie tagów &lt;a href="http://phpdoc.org"&gt;phpdoc&lt;/a&gt; w charakterze adnotacji. Rozwiązanie te jest zbliżone do znanego mi z Javy &lt;a href="http://xdoclet.sourceforge.net/"&gt;xdocleta&lt;/a&gt;. Drobną, aczkolwiek zauważalną, różnicą jest fakt, że xdoclet był odpalany przed kompilacją kodu ponieważ bytecode nie zawierał adnotacji. Oczywiście po wejściu Javy 5 xdoclet podupadł, jako coś co wyparły właśnie adnotacje. Może dla tych, którzy nie mieli okazji spotkania sie z takim rozwiązaniem drobny przykład kodu w Javie:</description></item><item><title>Przeboje z J2EE</title><link>https://dywicki.pl/2007/12/29/przeboje-z-j2ee/</link><pubDate>Sat, 29 Dec 2007 20:52:15 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=208</guid><description>&lt;p&gt;Nigdy bym nie pomyślał, że stworzenie nowej aplikacji w oparciu o J2EE będzie tak trudne. A jednak, mimo wszystko, jest!&lt;/p&gt;
&lt;p&gt;Zachwycony prostotą rozwiązania wbudowanego w standard, mianowicie roli i mapowania adresów, postanowiłem je wykorzystać. JSF mimo całej swej wspaniałości, mechanizmu autoryzacji nie dostarcza.&lt;/p&gt;</description></item><item><title>Agavi IDE, prace trwają</title><link>https://dywicki.pl/2007/12/02/agavi-ide-prace-trwaja/</link><pubDate>Sat, 01 Dec 2007 23:54:39 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=203</guid><description>&lt;a href="http://blog.dywicki.pl/wp-content/uploads/2007/12/manager.PNG" title="Stored agavi project :)"&gt;&lt;img src="http://blog.dywicki.pl/wp-content/uploads/2007/12/manager.thumbnail.PNG" alt="Stored agavi project :)"&gt;&lt;/a&gt; Cały dzisiejszy dzień poświęciłem na zbudowanie szkieletu modelu pod Agavi IDE. W trakcie dnia zaszło kilka nagłych zwrotów akcji na miarę dobrego filmu sensacyjnego ;). Początkowo pragnąłem wykorzystać &lt;a href="http://www.eclipse.org/modeling/"&gt;Eclipse Modeling Framework&lt;/a&gt; do zarządzania obiektami. Wszystko szło gładko, dopóki nie spróbowałem wygenerować kodu wolnego od zależności EMF. Koniec końców dowiedziałem się, że z EMF nie da się wygenerować zwykłych Java Beanów. Niestety, ale zarządzanie wszystkim poprzez otoczkę EMF niezbyt mi się uśmiechało. Model trzymany w pamięci nie potrzebuje wodotrysków, mogą to być zwykle &lt;a href="http://en.wikipedia.org/wiki/POJO"&gt;POJO&lt;/a&gt;.
Przepisałem więc cały kod sam, na nowo. Diagram, który początkowo ilustrował całą strukturę, troszkę się zmienił, nie mniej wersję bazową załączam na obrazku.</description></item><item><title>Agavi IDE, db4o 7.0, ObjectNotStorableException i Ant :)</title><link>https://dywicki.pl/2007/11/30/agavi-ide-db4o-70-objectnotstorableexception-i-ant/</link><pubDate>Thu, 29 Nov 2007 23:21:25 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=201</guid><description>&lt;p&gt;Dnia dzisiejszego zmobilizowałem się by nieco popracować nad modelem dla Agavi IDE. Jest to podstawa bez której ciężko budować kolejne edytory. Trzeba w końcu wiedzieć jakie akcje, widoki etc są w projekcie by sugerować użytkownikowi poprawne wartości.
Jak donosi &lt;a href="http://michalmech.pl"&gt;Michał Mech&lt;/a&gt; na &lt;a href="http://michalmech.pl/index.php/2007/11/29/symfoclipse-wsparcie-dla-symfony-na-platformie-eclipse/"&gt;swoim blogu&lt;/a&gt;, konkurencja nie śpi i wszczęła prace nad integracją Eclipse i Symfony - tak też narodziło się &lt;a href="http://"&gt;Symfoclipse&lt;/a&gt;. Stąd straciłem już palmę pierwszeństwa i pozostaje mi walczyć na polu jakości i funkcjonalności. &lt;a href="http://zend.com"&gt;Zend&lt;/a&gt; również serwuje wsparcie dla &lt;a href="http://framework.zend.com/"&gt;Zend Framework&lt;/a&gt;, aczkolwiek po &lt;a href="http://www.zend.com/webinar/studio/EN_11_Zend_Studio_Neon_Zend_Framework_Support/"&gt;prezentacji&lt;/a&gt; miałem mieszane uczucia. Przede wszystkim lektor mówiący z paskudnym angielskim akcentem. Nie wiem, może jestem wyczulony, ale gdy słyszę te fonetyczne wygibasy to mnie to mierzi, może dla jednych to plus, ale dla mnie lepszym sprzedawcą produktu jest ktoś kto mówi o swoim projekcie chociażby z francuskim akcentem niż wynajęty lektor, który ma pomnożyć wrażenie &amp;ldquo;powagi&amp;rdquo; przedsięwzięcia. Na drugim miejscu jakość &amp;ldquo;wsparcia&amp;rdquo;, bo inaczej jak w cudzysłowach tego nie mogę określić, jest po prostu żenująca. Czy mi się wydaje czy oni każą sobie płacić za dodanie kreatora (wizzarda)? ;) Coś mi się wydaje, że załoga &lt;a href="http://phpeclipse.de/"&gt;PHP Eclipse&lt;/a&gt; dobrze robi ponownie zwierając szyki!&lt;/p&gt;</description></item><item><title>Rozszerzanie JAXB</title><link>https://dywicki.pl/2007/11/28/rozszezanie-jaxb/</link><pubDate>Wed, 28 Nov 2007 14:12:33 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=200</guid><description>Z ostatnich not zebrało mi się kilka obietnic. Jedną z nich było omówienie pluginów w wydaniu JAXB. Jako, że dzisiaj urządziłem sobie wolny dzień postanowiłem wywiązać się przynajmniej z części obowiązków z tym i z tych blogowych.</description></item><item><title>WarsJava</title><link>https://dywicki.pl/2007/11/20/warsjava/</link><pubDate>Mon, 19 Nov 2007 23:16:47 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=199</guid><description>W sobotę 17 listopada odbyła się &lt;a href="http://warsjava.pl"&gt;WarsJava&lt;/a&gt;. Seria warsztatów realizowana przez &lt;a href="http://groups.google.com/group/warszawa-jug"&gt;Warszawski JUG&lt;/a&gt;, a dokładniej przez dwie osoby (kolejność losowa) Jacka Laskowskiego i Łukasza Świerczyńskiego.</description></item><item><title>Nowa wersje db4o</title><link>https://dywicki.pl/2007/11/15/nowa-wersje-db4o/</link><pubDate>Wed, 14 Nov 2007 23:07:48 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=198</guid><description>Wczoraj do mojej skrzynki trafił newsletter z db4o, w którym trafiłem na dwie informacje. Pierwsza głosi, że db4o w wersji 6.4 jest gotowe do zastosowań produkcyjnych. Druga, że dostępna jest beta wersji 7.0 z nowym mechanizmem o nazwie &amp;rsquo;transparent activation&amp;rsquo;. Postanowiłem &lt;a href="http://developer.db4o.com/blogs/product_news/archive/2007/11/12/the-7th-dimension.aspx"&gt;zajrzeć do szczegółów&lt;/a&gt;, które tyczą się najnowszej wersji. Wynikiem czego jest to dosyć luźne tłumaczenie.</description></item><item><title>Weź do Javy to co chcesz z PHP!</title><link>https://dywicki.pl/2007/11/09/wez-do-javy-to-co-chcesz-z-php/</link><pubDate>Thu, 08 Nov 2007 23:52:05 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=197</guid><description>Integracja między językami czy też platformami to kwestia poruszana nie od dzisiaj. Na poziomie platform funkcjonuje od dłuższego czasu CORBA i Web Services z trio SOAP + WSDL + XML Schema na czele. Integracja systemów napisanych w tym samym języku sprowadza się zwykle do wykorzystania serializacji, która jest najszybsza i najwygodniejsza. Gorzej jeśli idzie o połączenie dwóch języków - w moim przypadku PHP i Javy.
Zend ma swój mostek, który umożliwia na zintegrowanie Javy i PHP, jest też dodatkowe rozszerzenie do PHP, które pozwala na wykorzystanie Javy w PHP, jednakże moje oczekiwania nie był aż tak wielkie. Potrzebowałem po prostu odczytać dane specyficzne dla PHP - powiedzmy informacje o jakiejś klasie. Standardowo taka operacja wymagała stworzenia parsera, co jest zadaniem powiedzmy, nie na moje siły i umiejętności.. stąd też postanowiłem sobie nieco uprościć pracę. :)</description></item><item><title>Mój pierwszy edytor...</title><link>https://dywicki.pl/2007/11/07/moj-pierwszy-edytor/</link><pubDate>Tue, 06 Nov 2007 22:44:39 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=196</guid><description>&lt;p&gt;&lt;a href="https://dywicki.pl/wp-content/uploads/2007/11/agavi-editor.JPG" title="Agavi module configuration editor"&gt;&lt;img src="https://dywicki.pl/wp-content/uploads/2007/11/agavi-editor.thumbnail.JPG" alt="Agavi module configuration editor"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Czas jakiś temu udało mi się stworzyć pierwszy działający edytor w oparciu o Eclipse.
Kilka informacji co pod spodem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SharedHeaderFormEditor - ładny tekstowy nagłówek oraz możliwość dodawania zakładek&lt;/li&gt;
&lt;li&gt;FormPage i FormToolkit - użyte do stworzenia układu, który widać na załączonym obrazku&lt;/li&gt;
&lt;li&gt;JFace Databinding - zapewnia propagowanie zmian z formularza do obiektów&lt;/li&gt;
&lt;li&gt;JAXB 2 - mapowanie plików XML do odpowiednich klas&lt;/li&gt;
&lt;li&gt;JFace - table viewer i parę innych dodatków&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Całość ogólnie jest prosta niczym konstrukcja cepa, w działaniu sprawia się dobrze. Jak tylko ogarnę kod postaram się opisać krok po kroku jak można coś podobnego stworzyć na własny użytek.&lt;/p&gt;</description></item><item><title>Czy ktoś mówił, że istnieją środowiska idealne?</title><link>https://dywicki.pl/2007/10/25/czy-ktos-mowil-ze-istnieja-srodowiska-idealne/</link><pubDate>Thu, 25 Oct 2007 06:32:58 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=194</guid><description>&lt;p&gt;&lt;img src="https://dywicki.pl/wp-content/uploads/2007/10/internal-internal.jpg" alt="Internal error^2"&gt;&lt;/p&gt;</description></item><item><title>JAXB 2, Wprowadzenie</title><link>https://dywicki.pl/2007/10/14/jaxb-2-wprowadzenie/</link><pubDate>Sun, 14 Oct 2007 17:29:57 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=190</guid><description>W ramach &lt;a href="http://groups.google.com/group/warszawa-jug/web/warsjava"&gt;WarsJava&lt;/a&gt;, konferencji/warsztatów organizowanych przez &lt;a href="http://warszawa.jug.pl/"&gt;Warszawski JUG&lt;/a&gt;, będę miał szansę przedstawić publiczności &lt;a href="https://jaxb.dev.java.net/"&gt;Java Architecture for XML Binding&lt;/a&gt; w wersji drugiej. Swoje boje z JAXB postanowiłem opisać na blogu, być może dla kogoś temat wyda się interesujący.. :)</description></item><item><title>Używanie JDT</title><link>https://dywicki.pl/2007/10/06/uzywanie-jdt/</link><pubDate>Sat, 06 Oct 2007 19:57:45 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=188</guid><description>&lt;p&gt;Dla osób, które chciały by przejrzeć opcje JDT jak również utrwalić jakieś ciekawsze skróty klawiaturowe zachęcam do odwiedzenia &lt;a href="http://www.vogella.de/articles/Eclipse/article.html"&gt;Using Eclipse Europa - A Tutorial&lt;/a&gt; [źródło &lt;a href="http://www.dzone.com/rsslinks/using_eclipse_as_java_ide_tutorial.html"&gt;dzone&lt;/a&gt;] :)&lt;/p&gt;</description></item><item><title>Prezentacja - Eclipse GMF</title><link>https://dywicki.pl/2007/09/17/prezentacja-eclipse-gmf/</link><pubDate>Mon, 17 Sep 2007 20:45:29 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=187</guid><description>&lt;p&gt;Jak stworzyć edytor diagramów z użyciem tandemu technologi &lt;a href="http://www.eclipse.org/emf/"&gt;EMF&lt;/a&gt; + &lt;a href="http://www.eclipse.org/gmf/"&gt;GMF&lt;/a&gt;? Otóż bardzo prosto - jak pokazuje prezentacja, którą znalazłem w jednym z kanałów RSS, prowadzącym do &lt;a href="http://eclipser-blog.blogspot.com/2007/09/nice-gmf-video-for-newcomers.html"&gt;eclipser-blog&lt;/a&gt;. Szkoda, że nie wszystko w praktyce bywa takie proste jak na prezentacjach! ;)
Bezpośredni &lt;a href="http://mirrors.ibiblio.org/pub/mirrors/eclipse/technology/phoenix/demos/gmf-orgchart/"&gt;link do prezentacji&lt;/a&gt; (długo się wczytuje).&lt;/p&gt;</description></item><item><title>Eclipse Ganymede</title><link>https://dywicki.pl/2007/08/17/eclipse-ganymede/</link><pubDate>Thu, 16 Aug 2007 22:04:12 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=185</guid><description>&lt;p&gt;Znamy już nazwę przyszłej dystrybucji Eclipse, będzie nią &lt;a href="http://pl.wikipedia.org/wiki/Ganimedes_%28ksi%C4%99%C5%BCyc%29"&gt;Ganimedes&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Wiadomo, że ten release wyjdzie, podobnie jak Europa, 29 czerwca. Pojawiły się &lt;a href="http://download.eclipse.org/eclipse/downloads/drops/S-3.4M1-200708091105/eclipse-news-M1.html"&gt;pierwsze zmiany&lt;/a&gt;, które wejdą w skład nowej dystrybucji. Na tą chwilę jeszcze nie wiadomo ile projektów będzie obejmować Ganimedes, póki co &lt;a href="http://wiki.eclipse.org/index.php/Ganymede_Simultaneous_Release"&gt;jest ich kilka&lt;/a&gt;, miejmy nadzieję, że przynajmniej tyle co Europa!&lt;/p&gt;</description></item><item><title>Wygodny edytor do konfiguracji XML</title><link>https://dywicki.pl/2007/08/02/wygodny-edytor-do-konfiguracji-xml/</link><pubDate>Thu, 02 Aug 2007 21:46:17 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=176</guid><description>&lt;a href="http://blog.dywicki.pl/wp-content/uploads/2007/08/xml-catalog.PNG" title="Zdefiniowany katalog ze schematami XML"&gt;&lt;img src="http://blog.dywicki.pl/wp-content/uploads/2007/08/xml-catalog.thumbnail.PNG" alt="Zdefiniowany katalog ze schematami XML"&gt;&lt;/a&gt; Konfiguracja w XMLu ma swoje plusy jak i minusy. Nie jest tak banalna w obsłudze jak zapisana w PHP czy w .ini, ale daje dość spore możliwości. Troszkę dywagacji na ten temat było jakiś czas temu w poście pod tytułem &amp;quot; &lt;a href="http://blog.dywicki.pl/?p=101"&gt;Dlaczego konfiguracja w XML&lt;/a&gt;&amp;quot;.</description></item><item><title>Eclipse Europa, krótki przegląd</title><link>https://dywicki.pl/2007/07/30/eclipse-europa-review/</link><pubDate>Mon, 30 Jul 2007 19:53:05 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=150</guid><description>&lt;h2 id="odyseja-kosmiczna-2007"&gt;Odyseja kosmiczna 2007&lt;/h2&gt;
&lt;p&gt;Zastanawiałem się kiedyś skąd twórcy Eclipse biorą nazwy dla kolejnych wydań. O ile samo &lt;a href="http://www.eclipse.org/callisto/"&gt;Callisto&lt;/a&gt; ma wiele znaczeń ( &lt;a href="http://en.wikipedia.org/wiki/Callisto_%28mythology%29"&gt;mitologiczna kochanka Zeusa&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Callisto_%28Xena%29"&gt;postać filmowa&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Callisto_%28moon%29"&gt;księżyc Jowisza&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Callisto_%28comics%29"&gt;komiks&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Cadillac_Allant%C3%A9"&gt;model samochodu&lt;/a&gt; czy też &lt;a href="http://en.wikipedia.org/wiki/Callisto_%28band%29"&gt;kapela&lt;/a&gt;) o tyle w parze z &lt;a href="http://www.eclipse.org/europa/"&gt;Europą&lt;/a&gt;, najnowszym wydaniem kwestia staje się jasna. Bez wątpienia chodzi tu o &lt;a href="http://pl.wikipedia.org/wiki/Galileuszowe_ksi%C4%99%C5%BCyce_Jowisza"&gt;księżyce Jowisza&lt;/a&gt;. Troszkę zadziwiający jest fakt, że dobór nazw nie zbiega się z kolejnością księżyców (największy jest &lt;a href="http://pl.wikipedia.org/wiki/Ganimedes_%28ksi%C4%99%C5%BCyc%29"&gt;Ganimedes&lt;/a&gt;, następnie &lt;a href="http://pl.wikipedia.org/wiki/Kallisto_%28ksi%C4%99%C5%BCyc%29"&gt;Callisto&lt;/a&gt;, &lt;a href="http://pl.wikipedia.org/wiki/Io_%28ksi%C4%99%C5%BCyc%29"&gt;Io&lt;/a&gt; i na samym końcu &lt;a href="http://pl.wikipedia.org/wiki/Europa_%28ksi%C4%99%C5%BCyc%29"&gt;Europa&lt;/a&gt;). No, może dywagacje na temat nazw i pochodzenia pozostawimy, chociaż &amp;ldquo;astronomiczny&amp;rdquo; akcent Eclipse nas na długo nie opuści, bowiem w notce tej zamierzam przedstawić wcześniej wymienione, najświeższe, wydanie - Europę.&lt;/p&gt;</description></item><item><title>Mała rocznica.</title><link>https://dywicki.pl/2007/06/26/mala-rocznica/</link><pubDate>Tue, 26 Jun 2007 20:17:45 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=147</guid><description>Ze względu na to, że za parę dni mija drugi rok mojej pracy zawodowej postanowiłem się pokusić o małe podsumowanie tego co przez ten czas się działo na blogu.
Obecnie najstarsza nota pochodzi z &lt;a href="http://blog.dywicki.pl/?m=200503"&gt;Marca 2005&lt;/a&gt;, chociaż nie jest to ogólnie pierwsza nota jaką napisałem. Pierwszy &amp;ldquo;deblog&amp;rdquo; jak i backupy przepadły podczas jednego z padów serwera. Jak widać perypetie z utratą danych powtarzają się co jakiś czas (ostatni taki problem odnotowaliśmy w minionym listopadzie). Tematem dominującym na blogu do tej pory było PHP (aż &lt;a href="http://blog.dywicki.pl/?cat=4"&gt;50 wpisów&lt;/a&gt;!), chociaż w przyszłości będzie pojawiać się stopniowo coraz więcej Javy (do tej pory tylko &lt;a href="http://blog.dywicki.pl/?cat=12"&gt;12 wpisów&lt;/a&gt;).</description></item><item><title>Agavi 0.11 RC5</title><link>https://dywicki.pl/2007/06/18/agavi-011-rc5/</link><pubDate>Mon, 18 Jun 2007 21:41:11 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=146</guid><description>Dzisiaj rano światło dzienne ukazało się Agavi 0.11 RC5, oprócz poprawek błędów z wersji RC4 doszło parę nowości:</description></item><item><title>Eclipse Persistence Services Project</title><link>https://dywicki.pl/2007/06/13/eclipse-persistence-services-project/</link><pubDate>Tue, 12 Jun 2007 23:11:19 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=144</guid><description>Dzisiaj (w zasadzie wczoraj) w otchłani skrzynki odbiorczej &lt;a href="http://rssowl.org/"&gt;RSSOwl&lt;/a&gt; znalazłem &lt;a href="http://www.eclipse.org/proposals/eclipselink/"&gt;link do propozycji&lt;/a&gt; wspomnianego projektu.</description></item><item><title>Europa nadchodzi..</title><link>https://dywicki.pl/2007/06/09/europa-nadchodzi/</link><pubDate>Sat, 09 Jun 2007 08:22:15 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=142</guid><description>Od jakiegoś czasu &lt;a href="http://eclipse.org"&gt;na stronie Eclipse&lt;/a&gt; możemy spotkać bardzo miły button sygnalizujący nadejście nowego zbiorczego wydania Eclipse i narzędzi zależnych. &lt;a href="http://www.eclipse.org/europa/"&gt;Europa&lt;/a&gt; to potomek &lt;a href="http://www.eclipse.org/callisto/"&gt;Callisto&lt;/a&gt;, z jedną drobną różnicą.. Europa obejmuje 21 projektów podczas gdy Callisto obejmowało ich 10.</description></item><item><title>Form Layout</title><link>https://dywicki.pl/2007/06/07/swt-jface-form-layout/</link><pubDate>Thu, 07 Jun 2007 08:58:34 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/?p=139</guid><description>Jakiś czas temu &lt;a href="http://michalmech.pl"&gt;Michał Mech&lt;/a&gt; &lt;a href="http://michalmech.pl/index.php/2007/05/23/manager-layoutu-grouplayout-w-java/"&gt;pisał&lt;/a&gt; o tym jak można rozkładać komponenty w &lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/index.html"&gt;Swingu&lt;/a&gt; przy pomocy &lt;a href="http://java.sun.com/javase/6/docs/api/javax/swing/GroupLayout.html"&gt;Group Layoutu&lt;/a&gt;. Dzisiejszego dnia mam zamiar pokazać Wam drugą stronę medalu - mianowicie &lt;a href="http://help.eclipse.org/help31/nftopic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/layout/FormLayout.html"&gt;Form Layout&lt;/a&gt;, który można wykorzystać przy tworzeniu aplikacji w &lt;a href="http://eclipse.org/swt/"&gt;SWT&lt;/a&gt;.</description></item><item><title>Praca, rutyna i walka z zawodową codziennością</title><link>https://dywicki.pl/2007/05/04/praca-rutyna-i-walka-z-zawodowa-codziennoscia/</link><pubDate>Thu, 03 May 2007 22:28:12 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/05/04/praca-rutyna-i-walka-z-zawodowa-codziennoscia/</guid><description>Chciałbym dzisiaj poruszyć dość ważną kwestię, jaką bez wątpienia jest rutyna i frajda z pracy. Motorem dla mnie była głównie rozmowa, którą odbyłem dzisiaj z kolegami, gdy siedząc przy piwie dyskutowaliśmy na temat alternatyw i sposobów wzbudzania w sobie entuzjazmu.
Może na początku kilka definicji zaciągniętych ze &lt;a href="http://sjp.pwn.pl"&gt;słownik języka polskiego&lt;/a&gt; wydawnictwa PWN.</description></item><item><title>Testy jednostkowe</title><link>https://dywicki.pl/2007/04/22/testy-jednostkowe/</link><pubDate>Sat, 21 Apr 2007 22:34:15 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/04/22/testy-jednostkowe/</guid><description>&lt;h2 id="praktyka"&gt;Praktyka&lt;/h2&gt;
&lt;p&gt;W tym miejscu bazuję na swoim bądź co bądź skromnym doświadczeniu, które nabyłem pracując w &lt;a href="http://autoguard.pl"&gt;AGI&lt;/a&gt;. Była to pierwsza firma, w której spotkałem się z wykorzystaniem testów jednostkowych. Pamiętam do dzisiaj walki o 70% pokrycie kodu testami. :).
Nie mniej, nie robiliśmy tego tylko po to by zobaczyć zielone słupki w raporcie wygenerowanym przez &lt;a href="http://phpunit.de"&gt;PHP Unit&lt;/a&gt;. Takie pokrycie kodu testami gwarantuje znaczne ograniczenie błędów wychodzących z czasem, głównie dlatego, że znajduje się już podczas pisania testów.&lt;/p&gt;</description></item><item><title>Pragmatyzm kontrolowany</title><link>https://dywicki.pl/2007/04/16/pragmatyzm-kontrolowany/</link><pubDate>Mon, 16 Apr 2007 18:42:07 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/04/16/pragmatyzm-kontrolowany/</guid><description>Jakiś czas temu postanowiłem zmienić myśl przewodnią bloga. Zapewne nikt nie zauważył tego, że zniknął tekst &amp;ldquo;żubr powstaje z jęczmienia&amp;rdquo; na rzecz &amp;ldquo;Pragmatyzmu kontrolowanego&amp;rdquo;. Czym było to podyktowane? Ano tym by tą gromadę różnych not, nie zawsze łączących się ze sobą tematycznie, podeprzeć myślą, jaką jest poszerzanie horyzontów i dzielenie się zdobytymi z biegiem czasu doświadczeniami.</description></item><item><title>O abstrakcji klas i interfejsów</title><link>https://dywicki.pl/2007/04/04/o-abstrakcji-klas-i-interfejsow/</link><pubDate>Tue, 03 Apr 2007 22:01:47 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/04/04/o-abstrakcji-klas-i-interfejsow/</guid><description>&lt;p&gt;Od jakiegoś czasu na &lt;a href="http://forum.php.pl/"&gt;forum.php.pl&lt;/a&gt; spotykam się z różnymi zdaniami na temat interfejsów i klas abstrakcyjnych. Argumenty, które czasami się trafiają są chybione.&lt;/p&gt;
&lt;p&gt;Zacznijmy od tego, że trzeba potrafić rozróżnić interfejs od klasy abstrakcyjnej, &lt;strong&gt;to nie to samo&lt;/strong&gt;!
Interfejs jest najwyższym poziomem abstrakcji, który definiuje nowy, wolny od implementacji typ. Bez jakiejkolwiek linii kodu, tylko sygnatury metod publicznych.
Klasa abstrakcyjna jest już początkiem konkretnej implementacji, zawiera kod ogólny i wymusza w klasach dziedziczących dorzucenie konkretnych metod, które są specyficzne, inne, różne. Mogą trafić się takie przypadki, że klasa abstrakcyjna zawiera 5 metod, a jej pochodne tylko jedną. Czy jest to uzasadnione? Oczywiście. Ta jedna metoda determinuje nowy typ, który jest jawną specjalizacją.&lt;/p&gt;</description></item><item><title>Obiekty biznesowe w aplikacji.</title><link>https://dywicki.pl/2007/03/18/obiekty-biznesowe-w-aplikacji/</link><pubDate>Sun, 18 Mar 2007 21:57:05 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/03/18/obiekty-biznesowe-w-aplikacji/</guid><description>&lt;h3 id="pierwsze-błędy"&gt;Pierwsze błędy&lt;/h3&gt;
&lt;p&gt;Pamiętam swoje pierwsze implementacje MVC, w czasach gdy słowo framework nie było jeszcze trendy a wiele osób, w tym i ja, nawet go nie używało. W owych pierwszych implementacjach MVC model był pewnego rodzaju fasadą, która zapewniała dostęp do danych.
Problem polegał na tym, że kod np klasy User wyglądał następująco:&lt;/p&gt;</description></item><item><title>Agavi 0.11 RC3, flow</title><link>https://dywicki.pl/2007/02/24/agavi-011-rc3-flow/</link><pubDate>Fri, 23 Feb 2007 22:48:53 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/02/24/agavi-011-rc3-flow/</guid><description>&lt;p&gt;Mam niebywałą przyjemność oznajmić, że dnia &lt;a href="http://trac.agavi.org/log/tags/0.11.0RC3"&gt;23 lutego&lt;/a&gt; zostało wydane, jak sam tytuł posta wskazuje, Agavi 0.11 RC3. Do pierwszej, w pełni stabilnej wersji jest już coraz bliżej.
Zgodnie z rozkładem jazdy został otwarty &lt;a href="http://trac.agavi.org/ticket/340"&gt;jeden ticket&lt;/a&gt;, którego realizacja została odsunięta na sam koniec. Mianowicie, opis migracji z wersji 0.10 do 0.11. Ogrom zmian, które przetaczały się przez trunk repozytorium mógł przyprawić o zawrót głowy. Zmiany z rewizji na rewizję potrafiły w jednym momencie zniszczyć skrzętnie budowane narzędzia, które opierały się na zmieniających się wciąż mechanizmach.
Co zyskało Agavi o wersji 0.10? Przede wszystkim developerzy uwolnili projekt od niezręcznej i nieporęcznej konfiguracji w plikach INI, która poza łatwością odczytu nastręczała przede wszystkim problemów&amp;hellip; a to brak hierarchiczności, brak możliwości łączenia konfiguracji, w końcu brak narzędzia do walidacji zapisanych danych. W poście &amp;quot; &lt;a href="https://dywicki.pl/2006/09/07/dlaczego-konfiguracja-w-xml/"&gt;Dlaczego konfiguracja w XML&lt;/a&gt;&amp;quot; porównywałem XML również do YAMLa.
Sporą zmianą, naturalnie, na lepsze było zrezygnowanie z tradycyjnego flowu Mojavi 3. Do tej pory wyglądało to w ten sposób, że każda akcja miała metodę getRequestMethods, która zwracała informacje o tym w jaki sposób dostępna jest akcja. Czy to GET, POST, bądź cokolwiek (odpowiednie stałę w klasie Request - GET, POST, NONE). Teraz o sposób dostępu do akcji determinuje nazw akcji. Akcja o nazwie executeRead będzie wykonana w chwili żądania typu GET. Metoda o nazwie executeWrite będzie wykonana w chwili gdy otrzymamy formularz via POST. Metoda execute będzie wykonywana zawsze (o ile walidacja przebiegnie bez zakłuceń). Zysk z tego jest taki, że implementacja różnych kontrolerów nie wpływa na kształt akcji. W chwili gdy wiązały się z tym stałe GET/POST implementacja wywołań z poziomu konsoli była ciężka. W zapowiedziach pojawia się ConsoleRequest, ponieważ z Agavi 0.11 wyleciały kontrolery zależne od kontekstu. Jest jeden &lt;a href="http://trac.agavi.org/browser/tags/0.11.0RC3/src/controller/AgaviController.class.php"&gt;Controller&lt;/a&gt;, różne są implementacje requestu vide &lt;a href="http://trac.agavi.org/browser/tags/0.11.0RC3/src/request/AgaviConsoleRequest.class.php"&gt;ConsoleRequest&lt;/a&gt; (jeszcze niegotowy, będzie w 1.0), &lt;a href="http://trac.agavi.org/browser/tags/0.11.0RC3/src/request/AgaviWebRequest.class.php"&gt;WebRequest&lt;/a&gt; oraz &lt;a href="http://trac.agavi.org/browser/tags/0.11.0RC3/src/request/AgaviSecureWebRequest.class.php"&gt;SecureWebRequest&lt;/a&gt;.
W międzyczasie pożegnaliśmy również stałe View::SUCCESS, ERROR, INPUT, ALERT, a metoda &lt;a href="http://trac.agavi.org/browser/tags/0.11.0RC3/samples/app/modules/Default/actions/IndexAction.class.php#L69"&gt;getDefaultViewName&lt;/a&gt; każdej akcji zwraca po prostu suffix do nazwy widoku (np. metoda akcji &amp;ldquo;Cart&amp;rdquo; zwraca wartość &amp;ldquo;Product&amp;rdquo;, stąd klasa widoku to CartProductView).
Co więcej w połączeniu z innym mechanizmem &lt;a href="https://dywicki.pl/2007/02/22/agavi-output-types/"&gt;Agavi, Output types&lt;/a&gt;, zmiany formatu widoku oraz języka nie wiążą się z implementacją bądź powielaniem logiki biznesowej. Implementujemy tylko logikę związaną z widokiem.
Warto również wspomnieć, że od tej chwili &lt;strong&gt;metoda Controller::forward(module, action) jak i samo używanie powiązanych akcji jest odradzane&lt;/strong&gt;, jako źródło potencjalnych problemów (dlaczego widok nie jest uruchamiany) tym bardziej, że tworzenie widoków i akcji załatwia samo Agavi przez taski dla &lt;a href="http://phing.info"&gt;Phinga&lt;/a&gt;. W chwili, gdy chcemy użyć innego widoku, spoza tych, które dostarcza sama akca po prostu zwracamy array(module, view name, parameters). Zniknęła również możliwości zrobienia forwarda z widoku (ogólnie problemy z request methods, to co było post-only nie szło przy fowardzie przy żądaniu otrzymanym via get), co wydaje się jak najbardziej uzasadnione.
Widok nie jest organem decyzyjnym, który powinien wskazywać na wykonanie logiki biznesowej. Nie mniej jest możliwość przekierowania do widoku innej akcji.. poprzez redirect bądź poprzez zwrócenie array(module, view name, parameters).&lt;/p&gt;</description></item><item><title>Agavi, Output types</title><link>https://dywicki.pl/2007/02/22/agavi-output-types/</link><pubDate>Thu, 22 Feb 2007 20:41:37 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/02/22/agavi-output-types/</guid><description>&lt;p&gt;Jedną z nowości jaką niesie Agavi w wersji &amp;gt; 0.10 jest mechanizm output types. Jest to bardzo proste rozwiązanie, które umożliwia uniknięcie gimnastyki z tworzeniem widoków w różnych technologiach, z którymi wiąże się różna logika. Banalny przykład. Te same dane prezentujemy w postaci HTML jak i PDF a do tego możemy je pobierać przez XmlHttpRequest. Dane są praktycznie identyczne, różny jest format wynikowy i proces jego tworzenia. Dla zwykłej strony wskazujemy szablon, dorzucamy dane i koniec, dla XmlHttp zwracamy JSONa. Stworzenie outputu w formacie PDF nie będzie tak proste jak pozostałych, ponieważ konieczne będzie stworzenie układu strony, dorzucenie fontów etc. Ogólnie w żaden sposób nie da się połączyć tych formatów w jednym widoku bez sporej ilości warunków i &amp;ldquo;protez&amp;rdquo;. By uniknąć zakopania się w tym wszystkim zwykle tworzy się dodatkową akcję, która w sporej części pokrywała się z pierwotną a różni się tylko widokiem i szablonami. Począwszy od Agavi 0.11 problem przestaje istnieć.&lt;/p&gt;</description></item><item><title>Propel 1.2 a istniejąca baza danych</title><link>https://dywicki.pl/2007/02/11/propel-12-a-istniejaca-baza-danych/</link><pubDate>Sun, 11 Feb 2007 19:41:36 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/02/11/propel-12-a-istniejaca-baza-danych/</guid><description>&lt;p&gt;Wiele razy spotykałem się z negatywnymi opiniami na temat Propela. Przyznaję, nie jest to narzędzie doskonałe, ale bez wątpienia, w tej chwili jest to wiodący ORM dla PHP.&lt;/p&gt;
&lt;p&gt;Jedną z wad Propela, która pojawia się chyba najczęściej jest XML i definiowanie tabel w pliku XML. Otóż drodzy moi, nie jest to konieczność. Schemat z istniejącej bazy danych można bez problemu przenieść do XMLa a następnie bez najmniejszego problemu wygenerować z niego klasy. Możemy zrobić to dwoma poleceniami. Pierwsze jest dostępne po instalacji przy pomocy PEARa, drugie przy korzystaniu z Phinga:&lt;/p&gt;</description></item><item><title>Singleton</title><link>https://dywicki.pl/2007/02/01/singleton/</link><pubDate>Thu, 01 Feb 2007 00:35:33 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2007/02/01/singleton/</guid><description>&lt;p&gt;Singleton jest chyba pierwszym z &amp;ldquo;wzorców projektowych&amp;rdquo; jaki wszyscy poznaliśmy. Prosty w implementacji, jeszcze łatwiejszy w użyciu, ale pociągający za sobą stos negatywnych konsekwencji.&lt;/p&gt;
&lt;p&gt;W poszukiwaniu informacji i zdań o singletonie w polskim internecie trafiłem na &lt;a href="http://pl.wikipedia.org/wiki/Wzorzec_singletonu"&gt;Wikipedię&lt;/a&gt;, gdzie znalazłem zdanie, które podsumowało to czym jest tenże &amp;ldquo;wzorzec&amp;rdquo;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Singleton jest też uznawany za &lt;a href="http://pl.wikipedia.org/wiki/Antywzorzec" title="Antywzorzec"&gt;antywzorzec&lt;/a&gt;, gdyż często jest tylko eufemizmem dla &lt;a href="http://pl.wikipedia.org/wiki/Zmienna_globalna" title="Zmienna globalna"&gt;zmiennej globalnej&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;W książce &amp;quot; &lt;a href="http://helion.pl/ksiazki/refawp.htm"&gt;Refaktoryzacja do wzorców projektowych&lt;/a&gt;&amp;quot; padają kolejne dwa ważne zdania:&lt;/p&gt;</description></item><item><title>Powrót</title><link>https://dywicki.pl/2006/11/22/powrot/</link><pubDate>Wed, 22 Nov 2006 16:26:26 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/11/22/powrot/</guid><description>&lt;p&gt;No.. kolejny powrót. :) Dzięki serdeczne wszystkim za pomoc w odzyskaniu backupu, mam nadzieję, że to był ostatni raz, kiedy doszło do takiej sytuacji.
Na deser kawałek kodu, który kiedyś wyprodukowałem mylnie przekonany, że będzie szybszy niż explode&amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;* Funkcja zwracajaca prawa i lewa strone ciagu z kropka
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;* @param string $string ciag z kropka
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;* @return array lewa strona, prawa strona kropki
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;* @author Lukasz Dywicki
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;**/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;explodedot&lt;/span&gt;($string) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$dotpos &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;strpos&lt;/span&gt;($string, &lt;span style="color:#e6db74"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;($dotpos &lt;span style="color:#f92672"&gt;!==&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;substr&lt;/span&gt;($string, &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, $dotpos),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;substr&lt;/span&gt;($string, $dotpos&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;($string, $string);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Zend Framework i inni</title><link>https://dywicki.pl/2006/10/03/zend-framework-and-others/</link><pubDate>Tue, 03 Oct 2006 18:54:39 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/10/03/zend-framework-i-inni/</guid><description>&lt;p&gt;Zend od jakiegoś czasu rozwija z powodzeniem swój framework. Szturmuje on rynek dzięki wsparciu firmy i dobrej dokumentacji. Zastanawia mnie jednak, dlaczego inni zaczęli kopiować to co w ZF jest. Rozumiem konwencję nazewniczą, ok - to może komuś się podobać, rozumiem strukturę katalogów, może ktoś uzna ją za logiczną.. Nie mniej nazewnictwo i struktura prawdę mówiąc nie różni się niczym od tego co było standardem w PEAR.&lt;/p&gt;
&lt;p&gt;Co więcej, niektórzy po prostu przepisują spore fragmenty kodu, które są w ZF na swoje. Zapytam po co? Skoro jest coś podobnego w Zendzie to jaki sens jest w powielaniu praktycznie tego samego (Zend::loadClass, ZendRegistry, Zend_Router_Rewrite itp.)? Pomijam fakt, że &lt;a href="http://framework.zend.com/wiki/display/ZFDEV/Home"&gt;Zend jest otwarty w tej chwili i na pomysły i na ludzi&lt;/a&gt; i zapytam, czy to ma jakiś sens?&lt;/p&gt;</description></item><item><title>PHP Unit 3 i Mock Objects</title><link>https://dywicki.pl/2006/09/27/php-unit-3-i-mock-objects-2/</link><pubDate>Wed, 27 Sep 2006 21:05:41 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/27/php-unit-3-i-mock-objects-2/</guid><description>&lt;p&gt;Dzisiejszego dnia skończyłem opisywać implementację techniki &lt;a href="http://en.wikipedia.org/wiki/Mock_object"&gt;Mock Objects&lt;/a&gt; przy użyciu &lt;a href="http://phpunit.de"&gt;PHP Unit&lt;/a&gt;. Zapraszam do zapoznania się z &lt;a href="http://code-house.net/PHPUnit3MockObjects"&gt;tekstem&lt;/a&gt; i wyrażania opinii na jego temat.&lt;/p&gt;</description></item><item><title>Propel 1.2 - konfiguracja generatora</title><link>https://dywicki.pl/2006/09/24/propel-12-konfiguracja-generatora/</link><pubDate>Sat, 23 Sep 2006 22:29:57 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/24/propel-12-konfiguracja-generatora/</guid><description>&lt;p&gt;Dzisiaj &lt;a href="http://code-house.net/Propel12GeneratorConfiguration"&gt;na wiki opisałem&lt;/a&gt; wszystkie znane &lt;a href="http://propel.phpdb.org/trac/browser/branches/1.2/generator/default.properties"&gt;dyrektywy konfiguracyjne generatora&lt;/a&gt; dla Propela 1.2 (wygląda na to, że &lt;a href="http://propel.phpdb.org/trac/browser/trunk/generator/default.properties"&gt;pokrywają się one&lt;/a&gt; w dużej mierze z dyrektywami Propela 2.0). W najbliższym czasie opis &lt;a href="http://code-house.net/Propel12ProjectConfiguration"&gt;konfiguracji projektu&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Cache w Smarty</title><link>https://dywicki.pl/2006/09/24/cache-w-smarty/</link><pubDate>Sat, 23 Sep 2006 22:01:27 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/23/cache-w-smarty/</guid><description>&lt;p&gt;Wiem, że Smarty ma równie wielu przeciwników co zwolenników, ale odcinając się od dyskusji postanowiłem polecić zarówno tym pierwszym jak i drugim artykuł na temat obsługi &lt;a href="http://www.mao.pl/art-cache-smarty.php"&gt;cache w Smarty&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Propel 1.2 - przyśpieszamy</title><link>https://dywicki.pl/2006/09/23/propel-12-przyspieszamy/</link><pubDate>Fri, 22 Sep 2006 22:38:27 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/23/propel-12-przyspieszamy/</guid><description>&lt;p&gt;Zachęcony &lt;a href="https://dywicki.pl/2006/09/21/propel-12-przyspiesz-go-nawet-do-2-razy/#comment-1094"&gt;komentarzem&lt;/a&gt; do &lt;a href="https://dywicki.pl/2006/09/21/propel-12-przyspiesz-go-nawet-do-2-razy"&gt;poprzedniego posta&lt;/a&gt; postanowiłem zoptymalizować cały builder dla Propela. Zasada działania jest taka sama jak wcześniej - usunięcie zbędnych iteracji. Kod generowany przez moje poprawki nie należy do najszybszych, ale z &lt;a href="http://www.phpfi.com/155990"&gt;moich testów&lt;/a&gt; wynika jednoznacznie - jest szybszy.
Szybki sposób instalacji &lt;a href="http://delta.dywicki.pl/propel/FasterPHP5ComplexPeerBuilder.php"&gt;FasterPHP5ComplexPeerBuilder.php&lt;/a&gt;:
pobrać plik &lt;a href="http://delta.dywicki.pl/propel/FasterPHP5ComplexPeerBuilder.php"&gt;http://delta.dywicki.pl/propel/FasterPHP5ComplexPeerBuilder.php&lt;/a&gt;
skopiować do folderu propel/engine/builder/om/php5.
w build.properties dla projektu ustawić dyrektywę:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;propel.builder.peer.class = propel.engine.builder.om.php5.FasterPHP5ComplexPeerBuilder
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Wskazuje ona na nazwę klasy której obiekt będzie odpowiedzialny za wygenerowanie kodu dla klasy tabeli (*Peer).
Po tym wszystkim odpalamy generator z targetem om poleceniem:&lt;/p&gt;</description></item><item><title>Propel 1.2 - przyśpiesz go nawet do 2 razy!</title><link>https://dywicki.pl/2006/09/21/propel-12-przyspiesz-go-nawet-do-2-razy/</link><pubDate>Thu, 21 Sep 2006 18:16:02 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/21/propel-12-przyspiesz-go-nawet-do-2-razy/</guid><description>&lt;p&gt;Jak wiadomo szybkość nie jest domeną Propela. Dzisiejszego popołudnia na oficjalnym kanale Propela odbyłem rozmowę z osobą która twierdziła, że można przyśpieszyć propela o 3 razy (a przymajmniej metodę doSelectJoinAll). Nie zdziwcie się - miała ona rację! :)&lt;/p&gt;
&lt;p&gt;Problem w doSelectJoinAll polega na tym, że są wykonywane zbędne iteracje mające na celu sprawdzenie czy element zawiera obiekt dołączanej encji. Można je z powodzeniem zastąpić odpowiednią mapą, która zawiera identyfikatory tych encji, które już są dodane do obiektu. Osoba, która to twierdziła miała odpowiedni kod, który zgadnijcie - zadziałał.
Aby zamiana była uniwersalna - zmieniłem co trzeba w generatorze. Sama metoda działa dwa i pół raza szybciej! Dla zainteresowanych - plik zmieniony przeze mnie - &lt;a href="http://delta.dywicki.pl/propel/PHP5ComplexPeerBuilder.php"&gt;PHP5ComplexPeerBuilder.php&lt;/a&gt;. Sprawdź czy Twoje doSelectJoinAll przyśpieszy. :)&lt;/p&gt;</description></item><item><title>Gotowe rozwiązania</title><link>https://dywicki.pl/2006/09/20/gotowe-rozwiazania/</link><pubDate>Tue, 19 Sep 2006 22:41:08 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/20/gotowe-rozwiazania/</guid><description>&lt;p&gt;Zapraszam do zapoznania się z tekstem &lt;a href="http://code-house.net/Frameworks"&gt;odnośnie użycia frameworków&lt;/a&gt;, który opublikowałem wczoraj na wiki.&lt;/p&gt;</description></item><item><title>Kilka słów na temat Creole</title><link>https://dywicki.pl/2006/09/17/kilka-slow-na-temat-creole/</link><pubDate>Sat, 16 Sep 2006 22:57:41 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/17/kilka-slow-na-temat-creole/</guid><description>&lt;p&gt;Dzisiejszego popołudnia udało mi się napisać kilka zdań na temat Creole. Zaintereoswanych zapraszam do odpowiedniej kategorii na moim &lt;a href="http://code-house.net/CreoleCategory"&gt;prywatnym wiki&lt;/a&gt;. Komentarze proszę umieszczać pod tym postem.&lt;/p&gt;</description></item><item><title>Pomyłki i ja.</title><link>https://dywicki.pl/2006/09/11/pomylki-i-ja/</link><pubDate>Sun, 10 Sep 2006 22:05:24 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/11/pomylki-i-ja/</guid><description>&lt;p&gt;Od jakiegoś czasu zastanawiam się nad tym, czy rzeczywiście mam rację. Chodzi mi o moje przekonania. Ostatnio, druzgodzący upadek Mojavi 4 dał mi sporo do myślenia.&lt;/p&gt;
&lt;p&gt;Mam taki sposób bycia, że gdy się do czegoś przekonam staram się to poznać jak najlepiej oraz.. promuję? Nie wiem jak to dokładnie nazwać.
Czasami angażuję się w dyskusje, które przeradzają się w typowe walki. Nie chcę mówić, że narzucam swoje zdanie, bo staram się by nigdy tego nie robić.
Udało mi się kilka osób przekonać do Propela/Mojavi, ale czy zrobiłem to słusznie? Mam na myśli to, czy moje podejście jest &amp;ldquo;w porządku&amp;rdquo;? Czy w swym przekonaniu o nieomylności w stosunku do pewnych rzeczy nie przekraczam granic?&lt;/p&gt;</description></item><item><title>Propel 2.0, co nowego</title><link>https://dywicki.pl/2006/09/10/propel-20-co-nowego/</link><pubDate>Sun, 10 Sep 2006 20:22:54 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/10/propel-20-co-nowego/</guid><description>&lt;p&gt;Od jakiegoś czasu &lt;a href="http://propel.phpdb.org/trac/milestone/2.0"&gt;trwają prace&lt;/a&gt; nad drugą wersją propela. Do najważniejszych zmian należy przejście na PDO. Jest to fakt, który najbardziej mnie smuci. Koszt zwiazany z wykorzystaniem Creole był zbyt wysoki jak na ORM i autorzy przeszli na znacznie szybsze PDO. W tej chwili dla każdej bazy danych jest stworzony odpowiedni, prosty adapter. Ilość obsługiwanych baz danych nie wzrośnie. W dalszym ciągu będzie to MySQL, PostgreSQL, Oracle, Microsoft SQL Server (Sybase), SQLite.
Niewątpliwą nowością jest cache, który będzie prawdopodobnie funkcjonował jako kolejny adapter. Mam nadzieję, że dodanie cache przyśpieszy nieco Propela, ponieważ część obiektów, mimo, że nie jest zmieniana (jest to fragment złączenia) zawsze jest pobierana i transformowana.
Spore zmiany zajdą w Criterii. W drugiej wersji budowanie złożonych warunków &lt;a href="http://propel.phpdb.org/trac/wiki/Development/Criteria"&gt;stanie się banalne&lt;/a&gt;, a to za sprawą całkiem nowej implementacji. Doczekamy się w końcu obsługi &lt;a href="http://www.martinfowler.com/eaaCatalog/identityMap.html"&gt;idenity map&lt;/a&gt;, dzięki czemu klucz główny zawsze będzie wskazywał ten sam obiekt.&lt;/p&gt;</description></item><item><title>Dlaczego konfiguracja w XML.</title><link>https://dywicki.pl/2006/09/07/dlaczego-konfiguracja-w-xml/</link><pubDate>Thu, 07 Sep 2006 20:39:15 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/07/dlaczego-konfiguracja-w-xml/</guid><description>&lt;p&gt;W czasach kiedy najbardziej trendy jest YAML twierdzę, że jest on niczym w porównaniu do tego, co oferuje XML. DLaczego?&lt;/p&gt;
&lt;p&gt;Dlatego, że tworząc dowolny dokument XML mogę go w bardzo prosty sposób rozszeżyć. Jak? Poprzez XInclude. Jego obsługa jest nawet w PHP więc nie ma z tym jakichkolwiek problemów. Definiuję tylko odnośnik i mam dołączony ten XML [po wykonaniu $DOMDocument-&amp;gt;xinclude();].&lt;/p&gt;
&lt;p&gt;Kolejna sprawa. Walidacja. Nie muszę tworzyć żadnego kodu w PHP by sprawdzić poprawność XMLa. Wystarczy, że stworzę dobry schemat w XSD i mam walidację załatwioną bez jakiegokolwiek warunku. Do tego dochodzą ograniczenia takie jak rekurencja. W PHP  muszę to załatwiać poprzez wielokrotne wywołanie funkcji, które za każdym razem wydłuża czas. Normalnie załatwi mi to DOM XML, który jest napisany w C i będzie znacznie szybszy.&lt;/p&gt;</description></item><item><title>Ajax i wiele domen</title><link>https://dywicki.pl/2006/09/07/ajax-i-wiele-domen/</link><pubDate>Thu, 07 Sep 2006 20:08:41 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/09/07/ajax-i-wiele-domen/</guid><description>&lt;p&gt;Jakiś czas temu w pracy dostałem troszkę inne zadanie. Mianowicie, poprawić konfigurację Apache. Konfiguracja jak konfiguracja, to nie był problem - schody zaczęły się z dodaniem virtual hostów. Zawsze miałem z tym problem, teraz do tego dochodziło skonfigurowanie tego wszystkiego z użyciem SSLa. Jak już sobie z tym poradziłem - doszło kolejne zadanie, czyli konfiguracja proxy! Problem polegał na tym, że nasza kontrolka webowa komunikuje się z serwerem, z tym, że serwer może stać na dowolnej maszynie.
Przyznam, że po tym co przeszedłem z tym SSLem i vhostami miałem serdecznie dość wszystkiego co było z httpd.conf związane. ;)&lt;/p&gt;</description></item><item><title>Mojavi 4. Dlaczego nie?</title><link>https://dywicki.pl/2006/08/30/mojavi-4-dlaczego-nie/</link><pubDate>Wed, 30 Aug 2006 21:14:57 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/08/30/mojavi-4-dlaczego-nie/</guid><description>&lt;p&gt;Od publikacji ostatniej noty parę osób proponowało mi podjęcie prac nad Mojavi 4. Chcę wyjaśnić, dlaczego Mojavi 4 nie będę się zajmował.&lt;/p&gt;
&lt;p&gt;1. Nie ma nikogo kto byłby w stanie pomóc mi przy projekcie. Obaj byli developerzy zakończyli swoją przygodę z PHP. Nie ma również żadnej społeczności, która jest w stanie zająć się forum, wyłapywaniem błędów - jednym słowem - to by było to samo co robiłem wcześniej przy własnym frameworku.&lt;/p&gt;</description></item><item><title>Pożegnanie.</title><link>https://dywicki.pl/2006/08/27/pozegnanie/</link><pubDate>Sun, 27 Aug 2006 21:14:42 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/08/27/pozegnanie/</guid><description>&lt;p&gt;Dzisiejszego dnia chciałem napisać coś o Creole by pokazać, że ten sterownik oferuje ciekawą funkcjonalność, ale nie będzie o tym.&lt;/p&gt;
&lt;p&gt;To co zmieniło moje zamiary to rozmowa z Tylerem Tomphinsem, osobą prowadzącą od dłuższego czasu projekt Mojavi.&lt;/p&gt;
&lt;p&gt;Kontakt z Tylerem jest ciężki, ponieważ on mieszka po drugiej stronie globu. Nasze rozmowy do tej pory wyglądały inaczej, niestety ta, którą zakończyłem przed chwilą zmienia wszystko.&lt;/p&gt;
&lt;p&gt;Dowiedziałem się, że Mojavi 4 zostaje zawieszone. Framework, w którym pokładałem ogromne nadzieje, który miał szanse zmienić nieco oblicze aplikacji pisanych w PHP umiera. Można powiedzieć, że historia się powtórzyła, jest to samo co z trójką (mike_mech wykrakał), która została zawieszona dawno, dawno temu. Ówczesny lider projektu - Sean Kerr zrezygnował z jego prowadzenia na rzecz Tylera..&lt;/p&gt;</description></item><item><title>Exception? Just log it!</title><link>https://dywicki.pl/2006/07/31/exception-just-log-it/</link><pubDate>Mon, 31 Jul 2006 21:19:18 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/07/31/exception-just-log-it/</guid><description>&lt;p&gt;Zgodnie z tym, co &lt;a href="http://forum.php.pl/index.php?showtopic=50887"&gt;napisałem na forum php.pl&lt;/a&gt; zapraszam do ocen, bądź w temacie bądź tu, w zależności od sympatii. ;)&lt;/p&gt;</description></item><item><title>7 grzechów głównych PHP, XML</title><link>https://dywicki.pl/2006/07/18/7-grzechow-glownych-php-xml/</link><pubDate>Mon, 17 Jul 2006 22:21:10 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/07/18/7-grzechow-glownych-php-xml/</guid><description>&lt;p&gt;&lt;strong&gt;Na początku odpowiedź na post, który napisał &lt;a href="http://www.zyxist.com/pokaz.php/7_grzechow_php_komentarz"&gt;Zyx&lt;/a&gt;.&lt;/strong&gt; &lt;em&gt;Aktualnie każdy, kto chce napisać nowe rozszerzenie do PHP, musi tylko znać język C, znać cel swej pracy oraz przeczytać rozdział 46 dokumentacji PHP zatytułowany &amp;ldquo;Zend API: Hacking the Core of PHP&amp;rdquo; i poświęcony właśnie tworzeniu modułów.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Zend API to nie wszystko. Moduły kompilowane nie są wyjściem super-uniwersalnym. Na co drugim serwerze nie ma opcji by dorzucić własne rozszerzenie. Wiele modułów z PECLa leży tam od lat, są one praktycznie nie rozwijane, także ich ilość niewiele może poświadczyć.&lt;/p&gt;</description></item><item><title>7 grzechów głównych PHP, inwokacja.</title><link>https://dywicki.pl/2006/07/15/7-grzechow-glownych-php-inwokacja/</link><pubDate>Sat, 15 Jul 2006 18:37:49 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/07/15/7-grzechow-glownych-php-inwokacja/</guid><description>&lt;p&gt;Postami w tej kategorii chcę pokazać jak dalekie PHP jest od ideału. Mam nadzieję, że większość z tego co piszę kiedyś zostanie poprawiona, nie mniej póki co, są to grzechy ciężkie, które pokazują słabości PHP.&lt;/p&gt;
&lt;h3 id="zend"&gt;Zend&lt;/h3&gt;
&lt;p&gt;Zend jest firmą, która bez wątpienia ma największy wpływ na PHP. To Zend tworzy najważniejszy element PHP jakim jest Zend Engine.&lt;/p&gt;
&lt;p&gt;To co mam do zarzucenia Zendowi to nieumiejętność wykorzystania swojej pozycji. Nie potrafi on wykorzystać swojej pozycji by ugrać coś na rzecz PHP. Być może dlatego, że jako firma jest zbyt mały by cokolwiek znaczyć. Od jakiegoś czasu Zend powoli produkuje papkę marketingową, którą wciska, że PHP jest enterprise podczas gdy samemu PHP jest do tego bardzo daleko. To, że został zmieniony silnik obsługujący obiekty, upodobniono składnię do Javy, wydano nową (piątą) wersję PHP nie czyni go enterprise.&lt;/p&gt;</description></item><item><title>Zend Framework-MVC dalekie jest mu</title><link>https://dywicki.pl/2006/07/12/zend-framework-mvc-dalekie-jest-mu/</link><pubDate>Wed, 12 Jul 2006 21:23:41 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/07/12/zend-framework-mvc-dalekie-jest-mu/</guid><description>&lt;p&gt;Zaprawdę, zaprawdę powiadam Wam drodzy czytelnicy Zend Framework do pełnej implementacji MVC ma jeszcze bardzo duży kwał drogi.&lt;/p&gt;
&lt;p&gt;Dzisiejszego dnia postanowiłem poświęcić parę minut na bliższe spotkanie z ZF. Jak się szybko okazało nie był to czas spędzony bezowocnie. Utrwaliłem się w przekonaniu, że ZF to nie jest to czego szukam oraz znalazłem buga i to dość niewygodnego.. ;)&lt;/p&gt;
&lt;p&gt;Dlaczego moje uprzedzenie do ZF nie zmalało a tylko wzrosło? Dlatego, że to co w sumie zobaczyłem odbiega od znanego mi (z innych frameworków) MVC. Może potraktuję Was tutaj odrobiną kodu:&lt;/p&gt;</description></item><item><title>Magiczne namespace..</title><link>https://dywicki.pl/2006/07/09/magiczne-namespace/</link><pubDate>Sun, 09 Jul 2006 13:41:02 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/07/09/magiczne-namespace/</guid><description>&lt;p&gt;I oto się stało. Pierwszy raz użyłem przestrzeni nazw w PHP! Nie do wiary? A jednak. Nie było jakichkolwiek problemów z samą instalacją, ponieważ do pobrania jest paczka (pod Win ;)), która zachowuje się jak wszystkie inne pobrane z &lt;a href="http://php.net"&gt;php.net&lt;/a&gt;. Przykłady podane na necie działają, więc nie pozostaje nic innego jak zabrać się za używanie przestrzeni nazw. :)&lt;/p&gt;
&lt;p&gt;Oto listingi, które działają:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;import&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;a&lt;/span&gt;&lt;span style="color:#f92672"&gt;:::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;AFactory&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;import&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;a&lt;/span&gt;&lt;span style="color:#f92672"&gt;:::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;A&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;a&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;AFactory&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;create&lt;/span&gt;() {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;A&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;A&lt;/span&gt; {}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// works perfectly:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;AFactory&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;create&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// fails with &amp;#39;Fatal error: Cannot use class &amp;#39;a:::A&amp;#39; outside of its namespace, as it is private&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// new A;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oraz:&lt;/p&gt;</description></item><item><title>Patterns For PHP</title><link>https://dywicki.pl/2006/07/06/patterns-for-php/</link><pubDate>Thu, 06 Jul 2006 20:11:32 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/07/06/patterns-for-php/</guid><description>&lt;p&gt;Przedruk z devzone - wiki z przykładowymi implementacjami wzorców projektowych w PHP.
&lt;a href="http://patterns.quantum-star.com/index.php/Main_Page"&gt;http://patterns.quantum-star.com/index.php/Main_Page&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Zmiana kluczy, na małe litery</title><link>https://dywicki.pl/2006/07/05/zmiana-kluczy-na-male-litery/</link><pubDate>Wed, 05 Jul 2006 19:22:49 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/07/05/zmiana-kluczy-na-male-litery/</guid><description>&lt;p&gt;Bez żadnej pętli. :) Czy ktoś zna krótszy zapis nie korzystający z zewnętrznych funkcji?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$target &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;array_combine&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;array_map&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;strtolower&amp;#39;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;array_keys&lt;/span&gt;($target)), &lt;span style="color:#a6e22e"&gt;array_values&lt;/span&gt;($target));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Pobieranie różnych wartości z tablicy bez pętli</title><link>https://dywicki.pl/2006/07/03/pobieranie-roznych-wartosci-z-tablicy-bez-petli/</link><pubDate>Mon, 03 Jul 2006 16:47:52 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/07/03/pobieranie-roznych-wartosci-z-tablicy-bez-petli/</guid><description>&lt;p&gt;Zwykle, kiedy potrzebujemy zmienną ilość wartości, które są w tablicy używamy pętli. Da się jednak obejść. Dzisiejszego dnia trafiłem na zadanie, które polegało na pobraniu fragmentu tablicy. Tablica była wierszem z bazy danych, który był wynikiem złączenia kilku tabel a ja chciałem pobrać wartości tylko dla określonej tabeli. Informacje o tym, jakie klucze mnie interesują miałem zapisane w obiektach metadanych, potrzebowałem tylko odpowiednio okroić wiersz do potrzebnych mi rozmiarów.&lt;/p&gt;
&lt;p&gt;Problem rozwiązałem przy użyciu 4 funkcji, w tym 3 funkcji wbudowanych w PHP. Potrzebne były &lt;a href="http://pl.php.net/array_uintersect_uassoc"&gt;array_uintersect_uassoc&lt;/a&gt;, &lt;a href="http://pl.php.net/array_flip"&gt;array_flip&lt;/a&gt;, &lt;a href="http://pl.php.net/strcasecmp"&gt;strcasecmp&lt;/a&gt;. Dodatkowo musiałem zdefiniować 1 funkcje, która dla 2 argumentów zawsze zwraca zero. Musi ona być zgodna z wymaganiami stawianymi przez &amp;ldquo;comparatory&amp;rdquo;. Zero musi być zwracane by nie porównywać wartości (wg porównywaczy zero oznacza, że obie wartości są sobie równe).&lt;/p&gt;</description></item><item><title>Podpowiadanie typów prostych w PHP5</title><link>https://dywicki.pl/2006/06/29/podpowiadanie-typow-prostych-w-php5/</link><pubDate>Thu, 29 Jun 2006 07:40:19 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/06/29/podpowiadanie-typow-prostych-w-php5/</guid><description>&lt;p&gt;Oto wpis, wykopany przez kolegę z pracy, na blogu pewnego programisty. Autor piesze, że stworzył łatkę do PHP która pozwala korzystać z podpowiadania dla typów prostych. Więcej :
&lt;a href="http://www.derickrethans.nl/typehints_for_scalar_types.php" title="Typehints for scalar types"&gt;http://www.derickrethans.nl/typehints_for_scalar_types.php&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Jak się dobrać do stałej klasy</title><link>https://dywicki.pl/2006/06/28/jak-sie-dobrac-do-stalej-klasy/</link><pubDate>Tue, 27 Jun 2006 22:20:05 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/06/28/jak-sie-dobrac-do-stalej-klasy/</guid><description>&lt;p&gt;Mały konkursik - jak pobrać stałą z klasy..? Kod jest, jedyny problem to to, że nazwa stałej może się zmienić&amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Foo&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TAK&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;prawda&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NIE&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;fałsz&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;CHGW&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;a kto go tam wie&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;($_GET[&lt;span style="color:#e6db74"&gt;&amp;#39;imie&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Bolek&amp;#39;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// $constant = &amp;#39;TAK&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} &lt;span style="color:#66d9ef"&gt;elseif&lt;/span&gt;(&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;empty&lt;/span&gt;($_GET)) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// $constant = &amp;#39;NIE&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// $constant = &amp;#39;CHGW&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;... wlasnie co ? ..&amp;#39;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>MySQL i PostgreSQL - testy wydajności</title><link>https://dywicki.pl/2006/06/27/mysql-i-postgresql-testy-wydajnosci/</link><pubDate>Tue, 27 Jun 2006 15:16:25 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/06/27/mysql-i-postgresql-testy-wydajnosci/</guid><description>&lt;p&gt;Witam, jakiś czas temu w pracy staneliśmy przed dylematem - którą bazę danych użyć? Dyskusja była długa, w końcu postanowiliśmy przetestować wydajność każdego rozwiązania. Niestety testy niejasności tylko jeszcze bardziej naświetliły.&lt;/p&gt;
&lt;p&gt;Pierwszy test, jaki przeprowadziliśmy polegał na wstawieniu 3 milionów rekordów do tabeli, która składała się z 5 kolumn.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;-- pgsql
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;TABLE&lt;/span&gt; users
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;user_id serial &lt;span style="color:#66d9ef"&gt;NOT&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;NULL&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;user_name varchar(&lt;span style="color:#ae81ff"&gt;45&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;user_password varchar(&lt;span style="color:#ae81ff"&gt;32&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;user_first_name varchar(&lt;span style="color:#ae81ff"&gt;15&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;user_last_name varchar(&lt;span style="color:#ae81ff"&gt;15&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CONSTRAINT&lt;/span&gt; users_pkey &lt;span style="color:#66d9ef"&gt;PRIMARY&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;KEY&lt;/span&gt; (user_id)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://dywicki.pl/wp-content/uploads/2006/06/my_pg.png" title="MySQL i PostgreSQL"&gt;&lt;img src="https://dywicki.pl/wp-content/uploads/2006/06/my_pg.thumbnail.png" alt="MySQL i PostgreSQL"&gt;&lt;/a&gt; Identyfikator był numerem iteracji, nie wykorzystałem ani autoincrement w MySQL ani sekwencji w PgSQL. Niestety, troszkę się zagapiłem i nie mam czasów dla MySQL do 1.5 mln wstawień i dla PgSQL do 150 tys. Obrazek prezentujący wyniki po lewej. Czerwony - PgSQL, niebieski MySQL. Na dole powinna być ilość rekordów, które są już w bazie, ale ze względu, że zaczęły one na siebie zachodzić powstawiałem zera. W każdym razie im bliżej prawej tym mniej brakuje do 3 mln. Duże skoki w wykonywaniu insertów były spowodowane wykonaniem zapytania z &lt;em&gt;SELECT COUNT(user_id) FROM users&lt;/em&gt;.
Jak widać MySQL wyraźnie wygrywa w tym teście z PgSQL. Średnio czas, który MySQL potrzebuje na wstawienie 10 tys rekordów to 12.2204 s. Gdybym dysponował czasami sprzed 1.5 mln rekordów czas ten mógłby ulce zmniejszeniu. PostgreSQL na wstawienie 10 tys rekordów potrzebuje średnio 14.7962 s.&lt;/p&gt;</description></item><item><title>Polska, dziwny kraj</title><link>https://dywicki.pl/2006/06/26/polska-dziwny-kraj/</link><pubDate>Mon, 26 Jun 2006 21:21:52 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/06/26/polska-dziwny-kraj/</guid><description>&lt;p&gt;Nie da się ukryć, że żyjemy w dziwnym kraju. Nie chcę już pić do tego kto nami rządzi bo to świadomy wybór tej większości, która przeważyła w wyborach, ale do tego jak wyglądają u nas zarobki.&lt;/p&gt;
&lt;p&gt;Prawda jest taka, że jeśli chcesz pracować a masz pecha to pozostają 3 wyjścia:
- pracujesz na umowę o dzieło i pracodawca ewentualnie płaci Twoją zaliczkę na podatek dochodowy
- pracujesz po zaniżonych kosztach - to znaczy, masz umowę na 1/4 etatu, zarabiasz 700 zł a resztę otrzymujesz pod stołem.
- pracujesz na czarno i modlisz się o to by nic Ci się nie stało oraz by stosunki z pracodawcą były zawsze jak najlepsze&lt;/p&gt;</description></item><item><title>Oracle XE</title><link>https://dywicki.pl/2006/06/25/oracle-xe/</link><pubDate>Sun, 25 Jun 2006 08:08:50 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/06/25/oracle-xe/</guid><description>&lt;p&gt;&lt;img src="https://dywicki.pl/wp-content/uploads/2006/06/ora4.thumbnail.JPG" alt="Oracle #4"&gt;Niedawno postanowiłem zaryzykować i ściągnąć Oracle XE. Samo ściągnięcie nie trwało dość długo (w międzyczasie sobie jadłem kolację), w końcu to tylko 150 MB. Zapewne niektórym w tym miejscu trudno uwierzyć, że tylko tyle. Tak tylko tyle! ;) Fakt, w porównaniu z MySQL/PgSQL to naprawdę wiele, ale nie w porównaniu do pełnego pakietu Oracle, który waży znacznie więcej. Tak więc w mych rękach wylądowała wersja express Oracle 10, która była gotowa do instalacji. Procesu instalacji nie opisywałbym gdyby nie to, że minimalna ilość pamięci to ponad 256 MB. Zatem niestety, albo i stety nie mogłem zainstalować bazy na laptopie. Nie mniej, podczas pobytu w domu z powodzeniem instalację udało mi się zakończyć. Co mnie zaskoczyło – nie zmuliło mi od razu systemu, jak to ongi bywało. Pamiętam, że gdy pierwszy raz instalowałem Oracle (rozmiar ~500 MB) to system dosłownie stawał w miejscu. Dlaczego? Ponieważ przy normalnej instalacji Oracle używa kilku i więcej procesów pomocniczych, także nie jest to tak jak w przypadku MySQL jeden proces. Dzięki temu baza o wiele lepiej sprawuje się na maszynach wieloprocesorowych.
Podstawowe procesy pomocnicze to:
- dbw – proces zapisujący do plików danych – procesów tych może być do 9 (dbwr0.. dbwr9)
- pmon – monitor procesów
- smon – monitor systemu
- lgwr – proces zapisujący do plików dziennika powtórzeń
- ckpt – proces punktu kontrolnego
- reco – odtwarzacz
- arc0 – archiwizacja danych
&lt;img src="https://dywicki.pl/wp-content/uploads/2006/06/ora3.thumbnail.JPG" alt="Oracle #3"&gt;W przypadku wersji express tych procesów nie ma, jest jeden główny, który sobie spokojnie radzi ze wszystkim. Nie mam pojęcia jak to jest realizowane, ale na systemie XP, który ma ponad pół roku, gdzie dysk naprawdę jest zawalony po brzegi i gdyby nie zakładki na tychże to by się z niego wylewało baza działała szybko a co najważniejsze nie destabilizowała systemu jak i pracy innych aplikacji. Dla mnie bomba, proces nie zżerał całej dostępnej pamięci, tak że spokojnie mogłem przy 768 MB pamięci pracować jeszcze na Eclipse. Nie do wiary? A jednak, dało radę. W tym przypadku śmiem twierdzić, że gadanie &amp;ldquo;Oracle zmula&amp;rdquo; są mocno nieaktualne. Nie zmula! Oczywiście wciąż mówimy cały czas o wersji express, która w sam raz nadaje się do testów a nie o instalacji w pełni funkcjonalnej.
&lt;img src="https://dywicki.pl/wp-content/uploads/2006/06/ora2.thumbnail.JPG" alt="Oracle #2"&gt;Cóż takiego ciekawego jest w tym oprogramowaniu?
1. Po pierwsze, dlaczego powstają książki rozmiarowo przewyższające encyklopedie na jego temat.
2. Po drugie czy nie jest to wodolejstwo.
3. Po trzecie czy możliwości są adekwatne do ceny.&lt;/p&gt;</description></item><item><title>Zgadnij jaki to język</title><link>https://dywicki.pl/2006/06/16/zgadnij-jaki-to-jezyk/</link><pubDate>Fri, 16 Jun 2006 19:59:24 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/06/16/zgadnij-jaki-to-jezyk/</guid><description>&lt;p&gt;Kilka listingów. W czym to jest napisane?&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;list = [1: &amp;#34;a&amp;#34;, 2: &amp;#34;b&amp;#34;, 3: &amp;#34;C&amp;#34;, 6: &amp;#34;asdf&amp;#34;]
list.each() {
key, value | println &amp;#34;${key} = ${value}&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;add = { x -&amp;gt; { y -&amp;gt; x + y }}
println add(2)(4)
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;def power(n) {
{ base -&amp;gt; base**n }
}
square = power(2)
cube = power(3)
a = square(4)
println a // =&amp;gt; 16
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Nowe miasto, nowa praca.</title><link>https://dywicki.pl/2006/06/11/nowe-miasto-nowa-praca/</link><pubDate>Sat, 10 Jun 2006 22:21:26 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/06/11/nowe-miasto-nowa-praca/</guid><description>&lt;p&gt;&lt;strong&gt;Nowe miasto.&lt;/strong&gt;
Po 11 miesiącach w Bydgoszczy przeprowadzka. W Bydgoszczy bądź co bądź zostaje prawie rok mojego życia. Wiele nowych osób, wiele nowych rzeczy. Przyznam, że ciężko było rezygnować z wszystkiego by zaczynać znowu od zera. Same miasto nie było złe, poza niektórymi rejonami dało się w nim żyć. Owszem, nie było tam gromady studentów tak jak w Toruniu, nie było porządku jak w moim rodzimym mieście, ale byli mili ludzie. Nikt na ulicy nie oklepał mi twarzy, nie zostałem napadnięty ani okradziony, zatem, bilans jak najbardziej dodatni. Poznałem w Bydgoszczy wiele nowych osób, nie mówiąc już o nowych miejscach. Zanim przeprowadziłem się do Bydgoszczy słyszałem o tym mieście wiele złego, nigdy nie usłyszałem zdania pozytywnego. Tak, ktokolwiek mówił o nim, mówił: szare, brudne, niemiłe. Nie przeczę - takie jest każde większe miasto, ale nie wszędzie, nie całe.
Dzielnica w której mieszkałem a później i pracowałem była czysta i zadbana, nie spotykałem się tam z żadnymi problemami.
Dość nostalgii. Teraz pora na Warszawę.
&lt;strong&gt;Nowa praca.&lt;/strong&gt;
W Bydgoszczy były dwie firmy z którymi współpracowałem - IRTI oraz Front Studios. Obie wspominam miło, chociaż zmiany żadnej nie żałuję, ponieważ w każdej zmianie jest coś dobrego. Obie firmy zajmowały się PHP. W pierwszej był to głównie hosting + wykonywanie zleceń w drugiej gry + erp + zlecenia.
Nowa praca, nowe możliwości. Cytat ze strony mojego obecnego pracodawcy:
&lt;em&gt;&lt;strong&gt;System AutoControl©&lt;/strong&gt; umożliwia ciągłą analizę i optymalizację wykorzystania taboru transportowego w dowolnym przedsiębiorstwie przewozowym. Użytkownik ma zapewniony dostęp do danych z dowolnego miejsca korzystając z internetowego systemu AutoControl©.&lt;/em&gt;
&lt;em&gt;Inteligentna aplikacja dostarcza użytkownikowi zdefiniowane przez niego raporty o charakterystyce pracy poszczególnych pojazdów, pozwalając optymalizować wykorzystanie taboru. Zasięg działania systemu AutoControl© obejmuje całą Europę.&lt;/em&gt;
Życzcie mi powodzenia. W krótce więcej o PHP Unit 3. :)&lt;/p&gt;</description></item><item><title>Link</title><link>https://dywicki.pl/2006/06/06/link/</link><pubDate>Tue, 06 Jun 2006 07:15:17 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/06/06/link/</guid><description>&lt;p&gt;Jeśli używasz dużo Java Scriptu w swoich projektach - zapamiętaj adres:
&lt;a href="http://www.getelementsby.com/"&gt;http://www.getelementsby.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Za czas jakiś wracam do pisania..&lt;/p&gt;</description></item><item><title>forum.mojavi.org</title><link>https://dywicki.pl/2006/05/19/forummojaviorg/</link><pubDate>Fri, 19 May 2006 07:27:36 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/05/19/forummojaviorg/</guid><description>&lt;p&gt;Halo, jeśli korzystasz z IE, wystrzegaj się for opartych na Invision Power Board. Dzisiaj padło na forum Mojavi. W każdej chwili możesz trafić na malware. Śmieć ten powoduje poważne problemy.. chyba pora zmienić przeglądarkę na lepszą? ;]&lt;/p&gt;</description></item><item><title>Zlot #PHP.PL</title><link>https://dywicki.pl/2006/05/14/zlot-phppl/</link><pubDate>Sun, 14 May 2006 18:06:56 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/05/14/zlot-phppl/</guid><description>&lt;p&gt;I odbył się z dawna oczekiwany przez stołeczne miasto (Warszawę) oraz jego obywatelki zjazd markowany logiem #PHP.PL a organizowany przez FanFataLa. Pragnę podać tutaj link do drugiej galerii wykonywanej przy pomocy aparatu vipa, którego to nie ma u Anakina.&lt;/p&gt;
&lt;p&gt;[komentarze zablokowane z powodu spamu]&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chimera.one.pl/gallery/main.php?g2_itemId=7837"&gt;http://chimera.one.pl/gallery/main.php?g2_itemId=7837&lt;/a&gt; &lt;a href="https://dywicki.pl/wp-content/uploads/2006/05/100_4177,2.jpg" title="Eskapada po plastik."&gt;&lt;img src="https://dywicki.pl/wp-content/uploads/2006/05/100_4177,2.thumbnail.jpg" alt="Eskapada po plastik."&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Rapid application development for PHP</title><link>https://dywicki.pl/2006/05/08/rapid-application-development-for-php/</link><pubDate>Sun, 07 May 2006 22:19:21 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/05/08/rapid-application-development-for-php/</guid><description>&lt;p&gt;Dzisiaj, przed chwilą, całkiem przypadkowo zajrzałem na devzone (chyba najwyższa pora zacząć subskrybować rss) - a tam, na stronie bardzo ciekawy tekst, który tylko przejrzałem, a pod którym rozgorzała dyskusja. Dziewięć komentarzy na devzone to rzadkość tak samo jak na tym blogu ;).&lt;/p&gt;
&lt;p&gt;Oto rzecz, która sprowokowała dyskusję:
&lt;a href="http://devzone.zend.com/node/view/id/216"&gt;Dipping a toe into rapid application development for PHP&lt;/a&gt;
a tyczy się ona prezentacji możliwości pewnego programu:
&lt;a href="http://devzone.zend.com/content/samples/editor/phpblox2/phpblox2.html"&gt;PHP Blox demo&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Pierwsze kroki z Mojavi 4</title><link>https://dywicki.pl/2006/05/07/pierwsze-kroki-z-mojavi-4/</link><pubDate>Sun, 07 May 2006 21:49:14 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/05/07/pierwsze-kroki-z-mojavi-4/</guid><description>&lt;h3 id="pierwsze-kroki-z-mojavi-4"&gt;Pierwsze kroki z Mojavi 4&lt;/h3&gt;
&lt;p&gt;Tradycyjnie już Mojavi jest dość trudnym frameworkiem do opanowania dla początkujących. Wiele razy, podczas rozwiązywania zawiłych problemów które pojawiają się na samym początku padają przekleństwa. By tego uniknąć powstał ten oto artykuł który zakłada, że znasz MVC oraz podstawy Mojavi (wiesz czym jest web framework).&lt;/p&gt;
&lt;h3 id="wchodzimy-wprowadzenie"&gt;Wchodzimy, wprowadzenie&lt;/h3&gt;
&lt;p&gt;By zacząć pisać aplikacje przy użyciu Mojavi 4 będziesz potrzebował komputer z zainstalowanym &lt;a href="http://httpd.apache.org/"&gt;serverem http&lt;/a&gt; oraz &lt;a href="http://php.net/"&gt;PHP5&lt;/a&gt;. Jeśli masz już działający serwer, będziesz potrzebował &lt;a href="http://subversion.tigris.org/"&gt;subversion&lt;/a&gt;, by pobrać przy jego pomocy kopię Mojavi na swój serwer.&lt;/p&gt;</description></item><item><title>Osiągi i marzenia</title><link>https://dywicki.pl/2006/05/06/osiagi-i-marzenia/</link><pubDate>Sat, 06 May 2006 00:44:08 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/05/06/osiagi-i-marzenia/</guid><description>&lt;p&gt;Mojavi 4 przeszło długą drogę - od &lt;a href="http://forum.mojavi.org/index.php?showtopic=1236"&gt;początkowych diagramów uml&lt;/a&gt;. Obecnie oferuje pełną oraz elastyczną konfigurację XML, modularną architekturę, komponenty, buforowanie, obsługę datasource&amp;rsquo;ów, wstrzykiwanie zależności, walidację oraz wiele, wiele innych. Wszystko to przechodzi na końcu przez lekkie &lt;a href="http://www.lastcraft.com/simple_test.php"&gt;TDD (test driven design)&lt;/a&gt; testy sprawdzające. Wsród innych zamiarów bądź zaimplementowanych możliwości/podstawowych aspektów Mojavi 4 jest:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/MVC"&gt;Model View Controller&lt;/a&gt; - Najważniejsza część architektury, podstawa poprzednich frameworków Mojavi.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Mutliproject"&gt;Multi-project support&lt;/a&gt; - Posiadanie różnych projektów działających na tym samym kodzie bazowym.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/EndUserFilters"&gt;End-user controlled filters&lt;/a&gt; - Zawiera konfigurowalną obsługę wyjątków.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/GlobalAndForwardFilters"&gt;Global and Forward Filters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/ApplicationControllers"&gt;Application Controllers&lt;/a&gt; - Używane do obsługi wielu następujących po sobie stron do skomplikowanych formularzy bądź wizzardów &lt;em&gt;(kreatorów)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Autoloader"&gt;Sophisticated autoload support&lt;/a&gt; - bardzo, bardzo przydatny mechanizm do automatczynego dołączania klas/interfejsów, również z Twoich własnych bibliotek!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Validators"&gt;Easy Validation?&lt;/a&gt; - Walidacja zawsze jest trudnym elementem do wprowadzenia w aplikacji. Myślimy, że mamy za sobą pracę, która sprawia, że ten częsty i niemiły element staje się łatwy do oprogramowania.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Helpers"&gt;Helpers&lt;/a&gt; - Pomocnicy są zbiorem szybkich bibliotek do użytku w całym frameworku (częston ich użycie oczyszcza logikę aplikacji).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Renderers"&gt;Renderers?&lt;/a&gt; - Wspólny interfejs dla silników szablonów. Renderery umożliwiają zmiany pomiędzy silnikami w prosty sposób.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Logging"&gt;Logger?&lt;/a&gt; - Tak jak wszystko, aplikacje w Mojavi potrzebują logowania!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Datastructures"&gt;Datastructures?&lt;/a&gt; - Średniej wielkości zbiór klas, które dostarczają implementacji wspólnych wzorców struktór danych, takich jak stack &lt;em&gt;stos&lt;/em&gt;, queue &lt;em&gt;kolejka&lt;/em&gt; lub &lt;em&gt;chain&lt;/em&gt; łańcuch.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/ServiceLocator"&gt;Service Locator&lt;/a&gt; - Wstrzykiwanie zależności jest gorącym tematem. W skrócie, domyślny Service Locator z Mojavi 4 jest stworzony na bazie wstrzykiwania zależności. Można z niego korzystać w całej aplikacji bez żadnych zobowiązań w kodzie.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Containers"&gt;Containers&lt;/a&gt; - Wszyscy potrzebujemy kontenerów. &lt;em&gt;;)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Module"&gt;Modules?&lt;/a&gt; - the Module series classes provide a programmic way to interface with the various pieces of your application. &lt;em&gt;tego nie jestem w stanie przetłumaczyć.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/Layouts"&gt;Easy Layouts?&lt;/a&gt; - layouty umożliwiają stworzenie wspólnego wyglądu i wykorzystanie go na wielu stronach &lt;em&gt;w wielu widokach&lt;/em&gt; bez kopiowania kodu.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://trac.mojavi.org/wiki/Mojavi4/i18n"&gt;Internationalization&lt;/a&gt; - Internationalization, otherwise known as i18n, or l10n, is a term used to refer to a process revolving around the end goal of creating an application which can be easily ported to a new audience in terms of content language and data formatting. &lt;em&gt;tego również nie jestem w stanie przetłumaczyć.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Oryginał &lt;a href="http://trac.mojavi.org/wiki/"&gt;http://trac.mojavi.org/wiki/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Czym będzie Mojavi 4</title><link>https://dywicki.pl/2006/05/06/czy-bedzie-mojavi-4/</link><pubDate>Fri, 05 May 2006 23:23:45 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/05/06/czy-bedzie-mojavi-4/</guid><description>&lt;p&gt;Mojavi 4 jest najnowszą generacją tego projektu, wiodącego frameworka MVC w PHP przez wiele lat. Wydanie te następuje po długiej histori frameworków pisanych wyłącznie przez &lt;a href="http://trac.mojavi.org/wiki/People/SeanKerr"&gt;Seana Kerra&lt;/a&gt;. Pod koniec 2005 Sean zrezygnował z prowadzenia Mojavi przekazując swoją dotychczasową funkcję &lt;a href="http://trac.mojavi.org/wiki/People/TylerTompkins"&gt;Tylerowi Tompkinsowi&lt;/a&gt;, który został głównym architektem Mojavi 4.&lt;/p&gt;
&lt;p&gt;Mojavi 4 jest bardzo ambitnym projektem, który ma na celu stworzenie dla PHP odpowiednika tego czym jest jądro linuksa przy tworzeniu systemów operacyjnych. Maksymlna elastyczność, zastosowania lekkie bądź ciężke, delikatne oraz trwałe dzięki zastosowanemu frameworkowi. Domyślnie Mojavi 4 powinno być spójnym frameworkiem który nie zawiera warstwy dostępu do danych (data access layer) , chociaż oczywiście będzie obsługiwać rzeczy takie jak połączenia z bazą, ftp i tym podobne. &lt;em&gt;Czyt&lt;/em&gt;
&lt;em&gt;aj - twórcy Mojavi nie zamierzają tworzyć kolejnego Ado DB tudzież Creole.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>View Layout i Agavi</title><link>https://dywicki.pl/2006/05/05/view-layout-i-agavi/</link><pubDate>Fri, 05 May 2006 11:17:54 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/05/05/view-layout-i-agavi/</guid><description>Zainspirowany ideą Layotów w M4 postanowiłem stworzyć małą wtyczkę do agavi, która umożliwi mi korzystanie z tego rozwiązania. Jest ona bardzo prosta i ułatwia masową zmianę szablonu głównego oraz slotów (o slotach jeszcze będę pisał).</description></item><item><title>Wolne</title><link>https://dywicki.pl/2006/04/30/wolne/</link><pubDate>Sun, 30 Apr 2006 00:06:10 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/04/30/wolne/</guid><description>&lt;p&gt;Skorzystałem z nadzarzającej się okazji i wziąłem trzydniowy urlop. W wyniku poświęcenia tychże 3 dni mam cały tydzień wolny. Czyż to nie cudownie? :)&lt;/p&gt;
&lt;p&gt;Z planów na urlop: recenzja  &lt;a href="http://helion.pl/ksiazki/jv2te2.htm"&gt;Java 2. Techniki zaawansowane&lt;/a&gt;, komponent walidacji do Mojavi 4, zrobienie pewnego systemu, który winien być zrobiony dawno temu.&lt;/p&gt;
&lt;p&gt;Co byście powiedzieli na omówienie poszczególnych elementów/paczek Mojavi 4?&lt;/p&gt;</description></item><item><title>Zend Framework i Propel</title><link>https://dywicki.pl/2006/04/27/zend-framework-i-propel-2/</link><pubDate>Thu, 27 Apr 2006 19:08:42 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/04/27/zend-framework-i-propel-2/</guid><description>&lt;p&gt;Zend nabiera tempa. Po wpinaniu do ZF smarty przyszła kolej i na Propela. Artykuł o tym znajdziecie na &lt;a href="http://devzone.zend.com/node/view/id/184"&gt;Zend Developer Zone&lt;/a&gt;. Zainteresowani zapewne się znajdą. :)&lt;/p&gt;</description></item><item><title>Mojavi 4, z bliska.</title><link>https://dywicki.pl/2006/04/25/mojavi-4-z-bliska/</link><pubDate>Tue, 25 Apr 2006 21:22:08 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/04/25/mojavi-4-z-bliska/</guid><description>Tak jak obiecałem informacje na temat zmian w Mojavi 4.
Mojavi jest jednym ze starszych frameworków dla PHP. Swoje korzenie ma jeszcze w PHP4 kiedy to powstała pierwsza (na chwilę obecną), ostatnia stabilna wersja – Mojavi 2.0. Po wejściu PHP5 okazało się, że M2 nie jest kompatybilne z nowym interpreterem. Zaczęło powstawać Mojavi 3. Istnieje również Yuma – Mojavi 2 zgodne z PHP5. W pewnym momencie grupa (a właściwie jedyna osoba) tworząca Mojavi zdecydowała, że projekt jest nienajlepszy. Mimo wszystko była to tylko kontynuacja M2, bez wykorzystania możliwości PHP5, oparta na klasach. M3 zostało wstrzymane a Sean Kerr (na forum illusina) zaczął tworzyć Mojavi 4. M3 utkęło w fazie DEV. Mimo wszystko framework jest bardzo stabilny, sam z niego korzystałem kilka razy i nie było problemów. Wszystko czego potrzeba było to tylko kilka komponentów, które można pobrać z sieci (między innymi SmartyView). Aby praca włożona w M3 nie poszła na daremne projekt przejął Tyler Tompkins. Tak powstało Agavi. Agavi oferuje dodatkową funkcjonalność, usuwa niektóre problemy z Mojavi (min. problem z nazwami klas), oferuje również wbudowane komponenty, których brakowało Mojavi:
- SmartyView
- XSLTView
- CreoleDatabase
- PropelDatabase
- AdoDBDatabase
- PDODatabase
- ukończony mechanizm logowania
- zaczątki modelu (na forum Agavi jest do pobrania ActiveRecord rodem z Cake/Rails)
- ReturnArrayConfigHandler
- ConsoleController
- ConsoleRequest
- HTTPSRequest
- CreoleStorage
- wsparcie dla Phinga – taski do tworzenia projektu, modulu, akcji, widoku, unit-testów).
- bodajże DateValidator
- FormPHPView (ma być w krótce usunięty).</description></item><item><title>Zend Manual.</title><link>https://dywicki.pl/2006/04/24/zend-manual/</link><pubDate>Mon, 24 Apr 2006 05:51:09 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/04/24/zend-manual/</guid><description>&lt;p&gt;Manual do Zend Frameworka, zajrzałem tam dopiero dzisiaj, ale dobrze wiedzieć, że jest jakaś biblioteka do PDF, która ma dokumentacje na dobrym poziomie.
Jeśli zend będzie prowadził dokumentacje w taki sposób ma spore szanse na to by pobić konkurencje.
Manual znajdziecie pod adresem &lt;a href="http://framework.zend.com/manual" title="ZF"&gt;http://framework.zend.com/manual&lt;/a&gt;
Dokumentacja do &lt;a href="http://framework.zend.com/manual/en/zend.pdf.html" title="ZF_PDF"&gt;Zend_PDF&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Wracam.</title><link>https://dywicki.pl/2006/04/23/wracam/</link><pubDate>Sun, 23 Apr 2006 20:19:14 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2006/04/23/wracam/</guid><description>&lt;p&gt;Sporo czasu minęło od ostatniej notki typowo technicznej.. mam nadzieję, że zmiana designu na troszkę lżejszy Wam się spodoba. :)
Moja nieobecność wynikła poniekąd sama z siebie, blog przez dłuższy czas zszedł na dalszy plan. Nie robiłem również nic wielkiego także nie miałem nawet o czym zbytnio pisać.
W najbliższym tygodniu postaram się opublikować sporą notkę na temat Mojavi 4.&lt;/p&gt;</description></item><item><title>Co sie w tym kraju dzieje?</title><link>https://dywicki.pl/2006/03/17/co-sie-w-tym-kraju-dzieje/</link><pubDate>Fri, 17 Mar 2006 00:35:52 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/03/17/co-sie-w-tym-kraju-dzieje/</guid><description>&lt;p&gt;Trudno mi opisać to, co czuję, ale postaram się. Nie podoba mi się to. Nie podoba mi się sytuacja na polskiej scenie politycznej. Obserwując to, co serwuje mi czasami odbiornik telewizyjny mam wrażenie, że ten kraj zmierza do nikąd, a jeśli nie w tą stronę, to w inną, ale tak samo niebezpieczną - w stronę radykalizmu, ksenofobii czy też szowinizmu. Wiem, że w dużej mierze powtarzam, to co jest faktem, ale chyba mam do tego prawo? Mam prawo do niezadowolenia z tego, że rządzi tym krajem partia, na która nie głosowałem, która robi to źle i kosztem społeczeństwa.
W tej chwili jestem już wrogiem mniej więcej 50% polaków. Jak stworzyć sobie taką potęgę (wszak o wielkości człowieka świadczy wielkość jego wrogów, ale ich liczba również ma ogromne znaczenie)? Po prostu - sprzeciwić się woli PiSu. Znowu powtarzam utarty schemat, który wykreowały media.. notabene część układu, ale czyż tak nie jest? Czy PiS na jakąś krytykę zareagował inaczej niźli agresją?
Nie podoba mi się to, że dla nich wszędzie jest układ. Układy są - i mniejsze, lokalne i większe jak słoneczny. Ale nie ma ich wszędzie. Nie ma ich pod moim łóżkiem, nie ma ich w mojej pracy, nie spotkałem się też z nimi w urzędach, które odwiedzałem (mimo wieku kilka już odwiedziłem). Czyż nie jest to wystarczający dowód, że miejsca bez skaz są?
Dla wielkich, chociaż w zasadzie małych, braci to jest za mało. Uczciwi są Ci, któzy wierzą w to co oni, wyznają zasady te co oni, zgadzają się z tym co mówią tylko oni. A zatem nie jestem ucziwy, ponieważ nie wierzę w to co oni, ani w IV RP, ani w to, że oni zmienią nas na lepsze swoimi spodobami. Nie wyznaję ich zasad. Dla mnie, jeśli ktoś ma inne zdanie nie jest kłamcą, jeśli jest homoseksualistą ma prawo żyć, jest pacyfistą - ma prawo w to wierzyć. W przeciwieństwie do kaczyńskich mogę się mylić w swych przekonaniach. Jestem tego świadom i się tego nie boję. Dobrze mi z tym, ponieważ mam do tego pełne prawo. Wyznaję inne zasady - zasadę równouprawnienia bez względu na wiarę czy jej brak, przekonania polityczne, preferencje seksualne i inne. Wyznaję pluralizm, są inne partie, z którymi się zgadzam, one również powinny mieć udział w parlamencie. Nie jestem również ucziwy ponieważ nie zgadzam się z tym co mówią (to udowadniam pisząc ten tekst).
Kiedy kaczyńscy &amp;ldquo;wyzwalali&amp;rdquo; sami Polskę, a reszta na nich tylko donosiła bądź się zajmowała czymś mniej poeważnym niż oni nie było mnie na świecie. Niewiele pamiętam z tego co się działo przed 89. Wiem, że kiedyś stałem z mamą w kolejce przed sklepem, gdzie sprzedawano AGD po lodówkę. Pamiętam, że tata pracował w PBRol-ach. Nie pamiętam jak mi się żyło w tedy, ale nie narzekam. O wiele więcej mogę powiedzieć o czasach, kiedy to już byliśmy wyzwoleni. W bogactwie nie żyłem i nie żyję. Nie dlatego, że nie jestem częścią żadnego układu, a dlatego, że moi rodzice pochodzili z biednych rodzin i musieli ciężko pracować na to co teraz mają. Mimo wszystko nie wierzę w to, że bogaci to tylko złodzieje i układy. Wiem, że można dorobić się nie tylko na konszachtach i oszustwach.
Nie mam recepty na naprawę tego co się dzieje. Nie ma jej prawdopodobnie większość społeczeństwa. Nie mniej, nie chcę by wyznacznikiem tego, czy mam się z kimś spotykać jest jego stosunek do PiSu, tego czy mogę czytać jakieś czasopismo jest jego stosunek do PiSu, a przede wszystkim nie chcę by o wartości i uczciwości człowieka świadczył jego stosunek do PiSu.&lt;/p&gt;</description></item><item><title>Eclipse PHP IDE, bez udzialu PHP Eclipse</title><link>https://dywicki.pl/2006/03/10/eclipse-php-ide-bez-udzialu-php-eclipse/</link><pubDate>Fri, 10 Mar 2006 23:18:59 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/03/10/eclipse-php-ide-bez-udzialu-php-eclipse/</guid><description>&lt;p&gt;Przeczytałem właśnie, że Zend nie dogadał się ze społecznością tworzącą PHP Eclipse i cały projekt będzie rozwijany od nowa. Jak napisał Lester Caine:
Jedynym powodem dla ktorego PHP Eclipse nie moze stac sie podstawa jest fakt, ze nie mamy czasu ani zasobow by zaglebiac sie w dokumentacje.
Nie zdołalismy przekonać społeczności PHPEclipse że podejście Zenda bylo lepsze. Powiedzieli, że powinniśmy się dołączyć do ich projektu. Wygląda to bardziej na zagarnięcie niż konstruktywne programowanie.
Dziękuję Tasmanowi za pomoc w tłumaczeniu. :)&lt;/p&gt;</description></item><item><title>Eclipse PHP IDE</title><link>https://dywicki.pl/2006/03/09/eclipse-php-ide/</link><pubDate>Thu, 09 Mar 2006 13:32:34 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/03/09/eclipse-php-ide/</guid><description>&lt;p&gt;Warto zaznaczyć, że projekt jest już zatwierdzony, i chyba będzie tworzony w ramach IDE, które miało powstać dla ZF. &lt;strong&gt;Jak niosą wieści&lt;/strong&gt;:
Jest idea stworzenia open-source&amp;rsquo;owego IDE dla PHP opartego na platformie Eclipse Tools.
Dalej - PHP zaczęto rozwijać 10 lat temu jako projekt open-source. W ciągu 10 lat PHP zyskało popularność. Obecnie ponad 23 miliony domen korzysta z PHP. Prostota PHP oraz fakt iż jest bezpłatne sprzyja jego adaptowaniu.
Projekt powinien być rozwijany jako wstępny plugin. Z czasem powinny powstawać kolejne pluginy wykorzystujące API Eclipse by rozszerzać funkcjonalność IDE. Projekt powinien być wpięty w rozszerzenia, docelowa funkcjonalność to tworzenie (developing), rozwijanie (deploying), dokumentowanie, debugging oraz testowanie.&lt;/p&gt;</description></item><item><title>db4o in Action!</title><link>https://dywicki.pl/2006/03/08/db4o-in-action/</link><pubDate>Wed, 08 Mar 2006 00:04:59 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/03/08/db4o-in-action/</guid><description>&lt;p&gt;Dzisiaj zainspirowany rozmową na ircu i ciekawym zapytaniem postanowiłem zaintersować się db4o. Muszę przyznać, że całość jest dość prosta, właściwie banalna. Wykorzystanie db4o sprowadza się do zaimportowania kilku klas.. i gotowe. Koniec męczenia się z SQLem, z korzystaniem z ORMów i tak dalej.. koniec! :) Wrzucasz obiekt, dostajesz z powrotem obiekt. Jestem zachwycony możliwościami db4o, chociaż odkryłem dopiero ich nieznaczną część.. zachęcam do spojrzenia &lt;a href="http://jacekolszak.blogspot.com/2005/09/odbms-vs-rdbms-czyli-wydajno-i-wygoda.html"&gt;na notkę z innego bloga&lt;/a&gt;.
Dla przykładu załączam źródła: &lt;a href="http://img.dywicki.pl/db4o.zip"&gt;db4o.test&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Troszkę "Inne" MVC</title><link>https://dywicki.pl/2006/03/02/troszk-inne-mvc/</link><pubDate>Thu, 02 Mar 2006 01:08:36 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/03/02/troszk-inne-mvc/</guid><description>&lt;p&gt;Jakiś czas temu, gdy walczyłem ze swoimi pierwszymi servletami dzięki koledze zetknąłem się ze springiem. Wiedziałem, że ten framework istnieje, ale dopiero z jego pomocą stworzyłem pierwszą akcję. Idea jest bardzo prosta - na podstawie pliku beans.xml kontener IoC dopasowywuje klasę do adresu. Może być też tak, że mapowane są nazwy beanów do adresu - np. &lt;bean id="/foo.html" /&gt;&amp;gt;.
To co mnie oczarowało w springu to świetne rozwiązania. Bardzo spodobały mi się zróżnicowane akcje. To już nie jest Cake PHP, gdzie nazwa ApplicationController ma znaczenie bardziej symboliczne niż praktyczne czy Struts ze swoimi biernym akcjami. Przy potencjale jaki oferują kontrolery Springa wiele frameworków wymięka. Poniżej prezentuje diagram klas wykonany w programie Dia obrazujący powiązania kontrolerów we wcześniej zachwalanym frameworku.
&lt;img src="http://img.dywicki.pl/Diagram1.dia.png" alt="Diagram klas"&gt;&lt;/p&gt;</description></item><item><title>Jak widzę kod?</title><link>https://dywicki.pl/2006/02/28/jak-widzie-kod/</link><pubDate>Tue, 28 Feb 2006 00:56:03 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/02/28/jak-widzie-kod/</guid><description>&lt;p&gt;Tak pod wpływem natchnienia publikuję przykład diagramu klas reprezentujący kompozycje (zawieranie).
Diagram wykonany w programie Visual Paradigm. Komentarz usunięty ponieważ zachodził na klasy. :) &lt;img src="http://img.dywicki.pl/kompozycja.jpg" alt="diagram klas"&gt;
Kod (PHP):&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;php class Jablon { /** *@var Jablko owoce znajdujace sie na drzewie **/ protected $owoce = array(); } class Jablko { /** *@var mixed smak owocu **/ protected $smak; } &amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Związek jest określony - jedna instancja klasy Jablon może zawierać wiele owowców, ale może tych owoców nie być wcale. Zapis można sprecyzować: Jablon: 1..n, Jablko 1 oznacza, że jedna instancja klasy Jablko moze znajdowac się tylko w jednym obiekcie Jablon.
Jeśli się mylę, proszę o sprostowanie. Za jakiś czas kod w wersji dla Javy. ;)&lt;/p&gt;</description></item><item><title>Tworzenie nowej instancji klasy...</title><link>https://dywicki.pl/2006/02/27/tworzenie-nowej-instancji-klasy/</link><pubDate>Mon, 27 Feb 2006 00:56:08 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/02/27/tworzenie-nowej-instancji-klasy/</guid><description>&lt;p&gt;Nie wiem jak Wy, ale ja kilka razy spotkałem się z sytuacją, że chciałem przekazać do konstuktora kilka argumentów, ale niestety urocze call_user_func_array nie daje takiej możliwości. Dlatego też w PSF musiałem wynaleść takie coś jak interfejs LazyService by móc tworzyć usługi doiero w chwili ich wywołania. Sam sposób nie jest najleszy.&lt;/p&gt;
&lt;p&gt;Teraz, po niewczasie znalazłem sosób na to, sposób bardzo prosty, który nie wymusza użycie eval - swoją drogą kolejny dowód na to, że bez eval da się żyć :) - oto on:&lt;br&gt;
&lt;code&gt;$r = new ReflectionClass('ClassName'); $r-&amp;gt;newInstance(1,2,3);&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Why not Zend Framework?</title><link>https://dywicki.pl/2006/02/23/why-not-zend-framework/</link><pubDate>Thu, 23 Feb 2006 00:40:14 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/02/23/why-not-zend-framework/</guid><description>&lt;p&gt;Patrząc na to co się dzieje wokół ZFa odnoszę bardzo negatywne wrażenie. Dlaczego? Dlatego, że jest to powielanie tego, co już powstało dla PHP. Nie widzę w tym, co proponuje Zend nowości, świerzości. Wiem, że trudno o to przy implementacji MVC, ale ZF nic nie wnosi do tematu, do tego bardzo skromne informacje jakie są na temat ZF nie napawają optymizmem.&lt;/p&gt;
&lt;p&gt;Powody dla których Zend tworzy kolejnego frameworka:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;zachowanie konkurencyjności względem innych języków i platform .NET, J2EE, Ruby&lt;/li&gt;
&lt;li&gt;brak prostego frameworka dla PHP&lt;/li&gt;
&lt;li&gt;swobodne użycie dla zastosowań e-commerce&lt;/li&gt;
&lt;li&gt;pełne wykorzystanie możliwości PHP5&lt;/li&gt;
&lt;li&gt;wsparcie dla nowoczesnych technologii - Web Services, RSS, wsparcie dla AJAXa&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Moje uwagi&lt;/p&gt;</description></item><item><title>mod_rewrite plus zmienne z GET</title><link>https://dywicki.pl/2006/02/21/mod_rewrite-plus-zmienne-z-get/</link><pubDate>Tue, 21 Feb 2006 13:26:56 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/02/21/mod_rewrite-plus-zmienne-z-get/</guid><description>&lt;p&gt;Dzisiaj miałem nietypowy problem - chciałem stworzyć sobie obsługę mod_rewrite ale nie babrać się z wyciąganiem zmiennych które był w żądanym adresie, dlatego też udałem się do google.pl w poszukiwaniu dodatkowych flag, które można ustawiać. Znalazłem bardzo fajną stronkę z kartą podręczną do mod_rewrite - &lt;a href="http://www.ilovejackdaniels.com/cheat-sheets/mod"&gt;http://www.ilovejackdaniels.com/cheat-sheets/mod&lt;/a&gt;_rewrite-cheat-sheet/ jest ich tam więcej - css, php, javascript, html, mysql. A moje rozwiązanie wygląda w następujący sposób:
&lt;code&gt;RewriteEngine On&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;RewriteBase /z-tego-adresu/
RewriteCond %{REQUEST_URI} !^.*\.(css|png|gif|jpe?g|php|js)$
RewriteRule ^.*$ /z-tego-adresu/index.php?%{REQUEST_URI} [QSA,L]
Oczywiście wymaga dotarcia i obsługi w kodzie, ale GET jest bez zmian.. i to najważniejsze :)&lt;/p&gt;</description></item><item><title>PHPOutOfRangeException</title><link>https://dywicki.pl/2006/02/20/phpoutofrangeexception/</link><pubDate>Mon, 20 Feb 2006 18:41:10 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/02/20/phpoutofrangeexception/</guid><description>&lt;p&gt;Po dłuższym zastanowieniu - zdecydowałem się na zrezygnowanie z prowadzonych do tej pory projektów, także framework i draft templatów można uznać za zawieszone na czas nieokreślony.
Chcę spróbować czegoś nowego, czegoś lepszego - biorę się za javę.&lt;/p&gt;</description></item><item><title>WACT żyje!</title><link>https://dywicki.pl/2006/02/19/wact-yje/</link><pubDate>Sun, 19 Feb 2006 14:47:39 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/02/19/wact-yje/</guid><description>&lt;p&gt;Dzisiaj postanowiłem przyjrzeć się bliżej szablonom z WACTa. Pamiętam, że jakiś czas temu przyglądałem się kompilatorowi, ale.. było to kilka tygodni temu. Aby nie być w tyle postanowiłem zaciągnąć zmiany z CVSa. Jakież było moje zdziwienie kiedy zobaczyłem w kodzie interfejsy! Od razu powędrowałem do webloga. Byłem ogromnie zaskoczony tym, co się dzieje z WACTem, byłem święcie przekonany, że ten projekt jest martwy - tym bardziej, że są pliki i katalogi nie ruszane od 2 lat. Najnowsze zmiany jakie udało mi się znaleść są sprzed dwóch dni..
WACT ze względu na świetne, komponentowe szablony to dla mnie obok Mojavi jeden z lepszych frameworków. Panowie, czyżby WACT miał odżyć? :)&lt;/p&gt;</description></item><item><title>Proste testy:</title><link>https://dywicki.pl/2006/02/14/proste-testy/</link><pubDate>Tue, 14 Feb 2006 01:26:54 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/02/14/proste-testy/</guid><description>&lt;p&gt;Rozmawiałem wczoraj z Zyxem na temat testów czasowych i dowiedziałem się, że korzysta on do tego celu z apache benchmark - nie zwlekając również wykonałem testy&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pomiary wykonane przy użyciu apache benchmark (apache 2.0.53, php 5.1.1) dla 500 requestów.
Odczyt pliku 70 KB
file+implode: 5.640589 s
file_get_contents: 2.562484 s&lt;/p&gt;
&lt;p&gt;Frameworki:
CakePHP (z warrningiem dot. połączenia mysql): 76.421385 s
Mojavi 3.0-dev (debug_mode = off): 63.155846 s
Agavi 0.10-stable (debug_mode = off): 51.187172 s
PSF: 46.390328 s (bez cache configa etc)
Prado 2.0.1 (też Hangman): 169.14543 s
Prado 3.0-alpha (Samples.Hangman.Home): 196.279994 s
Odin: 28.499818 s
Phiend: 11.359303 s (gołe hello world)
Daeron: 1.156242 s
Pinky: 53.843750 s&lt;/p&gt;</description></item><item><title>Pustka</title><link>https://dywicki.pl/2006/01/23/pustka/</link><pubDate>Mon, 23 Jan 2006 22:55:58 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2006/01/23/pustka/</guid><description>&lt;p&gt;Tak.. minął miesiąc od ostatniego wpisu. Jak ten czas leci. Już 1/12 roku za nami.. Czym jest spowodowany brak notek na blogu od miesiąca? Rozterkami. Mam poważny dylemat czy dalej skupić się na PHP czy przejść na javę? PSF stoi w miejscu, no może nie - rozgrzebałem kod próbując zaimplementować akcje jako ApplicationController-y i mechanizm View Resolverów (obydwie idee zaczerpnięte ze springa, acz uproszczone na potrzeby PHP). W chwili obecnej wiszę w próżni niepewności szarpany uczuciami - miłością do pierwszego języka i porządaniem możliwości jakie daje Java. Które z nich zwycięży? Co do PSF - powiem tak. Nie piszę go tylko dla siebie, chcę by to był nie za duży, szybki framework do małych, ewentualnie średnich zastosowań i dlatego zwracam się z prośbą do osób, które to miejsce odwiedzają a chciałby wspomóc przy tworzeniu projektu (PSF = Personal Site Framework). Mam do dyspozycji repozytorium SVN, Traca oraz konto na którym można zaparkować domenę (tą z kolei skłonny jestem zakupić..). Po prostu - szukam osób które chcą się dołączyć do projektu i stworzyć na prawdę dobry kawałek kodu. Jeśli ktoś jest zainteresowany współpracą mój numer gg to &amp;ldquo;8 5 6.3,4.2:4&amp;rdquo; (zostaw same cyfry) a jid &lt;a href="mailto:splatch@wafel.com"&gt;splatch@wafel.com&lt;/a&gt;. Mail &amp;ldquo;lukasz@d y w i c k i . pl&amp;rdquo;&lt;/p&gt;</description></item><item><title>Repozytorium SVN</title><link>https://dywicki.pl/2005/12/23/repozytorium-svn/</link><pubDate>Fri, 23 Dec 2005 14:57:38 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/12/23/repozytorium-svn/</guid><description>&lt;p&gt;Framework, który usiłuję pisać można pobrać z &lt;strong&gt;svn://ivpro.net/PSF&lt;/strong&gt;. Kod jest przepisywany na nowo, ponieważ zmieniła się nieco koncepcja :).
Lista zmian:
- Przesunięcie tablicy z mapą ConfigManager::$map do oddzielnej klasy ConfigMapper (dziedziczącej klasy abstrakcyjnej Mapper, pakiet Mapper) opartej na singletonie.
- Dodanie nowej klasy konkretnej - ConfigProperties, która parsuje config przy pomocy &lt;strong&gt;parse_ini_file&lt;/strong&gt;. Zastosowanie w sam raz do tworzenia plików językowych. Z tego rodzaju configu nie można uzyskać struktury takiej jak w pliku XML.
- Przesunięcie funkcji do obsługi tablic do klasy ArrayUtil w pakiecie Util.
- Zlikwidowanie pakietu AutoLoad i przeniesienie go częściowo do pakietu Util (część AutoLoad powędrowała do pl.splatch.BuildTool jako task Phinga).
- Nowy pakiet - Dispatcher (jak narazie bez wyraźnego podziału na klasy do obsługi widoku, requestu) służący do wykonywania forwardów jak i redirectów.
- Dodanie &amp;ldquo;warstwy usług&amp;rdquo; - nowy pakiet - Service (jeśli zajdzie potrzeba powstanie również Service.Activator).
- Wprowadzenie większej liczby interfejsów w miejsce dziedziczenia z klas abstrakcyjnych.
I jeszcze pare innych kosmetycznych poprawek&amp;hellip;&lt;/p&gt;</description></item><item><title>PHP6 bo miały być wielkie zmiany ...</title><link>https://dywicki.pl/2005/12/20/php6-bo-mialy-byc-wielkie-zmiany/</link><pubDate>Tue, 20 Dec 2005 00:38:07 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/12/20/php6-bo-mialy-byc-wielkie-zmiany/</guid><description>Oto co zrozumiałem z &lt;a href="http://www.php.net/~derick/meeting-notes.html"&gt;http://www.php.net/~derick/meeting-notes.html&lt;/a&gt;. Nie jest to tłumaczenie a moja interpretacja, a jako, że znam angielski gorzej niż źle błędów może być bardzo wiele. W sumie bardzo nawet bym tego chciał, bo z tego co przeczytałem zmian jest na prawde mniej niż można by było się spodziewać.</description></item><item><title>PHP6 - krok 1</title><link>https://dywicki.pl/2005/12/13/php6-krok-1/</link><pubDate>Tue, 13 Dec 2005 22:31:11 +0000</pubDate><guid isPermaLink="false">http://blog.dywicki.pl/2005/12/13/php6-krok-1/</guid><description>&lt;p&gt;No&amp;hellip; rozpoczynamy testowanie &amp;hellip;.&lt;br&gt;
&lt;img src="http://img.dywicki.pl/php-6.0.gif" alt="PHP 6.0"&gt; &amp;hellip; i kończymy, bo namespace {} powoduje parse error&amp;hellip;&lt;/p&gt;</description></item><item><title>Zmiany, oj zmiany!</title><link>https://dywicki.pl/2005/12/08/zmiany-oj-zmiany/</link><pubDate>Thu, 08 Dec 2005 23:30:10 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/12/08/zmiany-oj-zmiany/</guid><description>&lt;p&gt;Planuję w końcu uporządkować swoje sprawy. Mam już dość spóźniania się do pracy – najpóźniejsza godzina, na którą powinienem się zjawić w pracy to dziesiąta i jeszcze zdarza mi się zaspać..&lt;/p&gt;
&lt;p&gt;Dlatego postanawiam wszem i wobec, że od dzisiaj staram się walczyć o to by stać się punktualnym. Postaram się również przestawić swój zegar biologiczny w tryb normalny a nie nocny. Nie mam jeszcze dokładnej koncepcji jak zorganizować sobie popołudnie – to znaczy jak podzielić czas po godzinie siedemnastej.&lt;/p&gt;</description></item><item><title>Nowe nabytki</title><link>https://dywicki.pl/2005/12/08/nowe-nabytki/</link><pubDate>Thu, 08 Dec 2005 23:09:04 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/12/08/nowe-nabytki/</guid><description>&lt;p&gt;&lt;img src="http://splatch.php.org.pl/_img/anobie.jpg" alt="Projektowanie i analiza obiektowa"&gt;&lt;img src="http://splatch.php.org.pl/_img/szabko.jpg" alt="Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe"&gt; W zeszłym tygodniu firma, w której pracuję nabyła za moją namową książkę – &amp;ldquo;Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe&amp;rdquo;[ &lt;a href="#pnote-37-1"&gt;1&lt;/a&gt;]. Tłumaczenie – przyznam nienajlepsze. Szczególnie rozbawiło mnie tłumaczenie słowa widgety na widżety – skojarzenia z bajką o podobnym tytule nasuwają się same.&lt;/p&gt;
&lt;p&gt;Sama treść zapewne byłaby dzięki dobremu tłumaczeniu bardzo dobra, a tak jest tylko średnia. Na naganę zasługuje też polonizowanie diagramów, na których widnieją kwiatki typu getMiasto, getAdres są też Miksy takie jak nazwa tabeli po polsku (Album), po angielsku druga tabela (Track) i wszystkie kolumny łącznie z danymi. Słowem tłumaczenie, co najwyżej mierne. Drugą i trzecią książkę nabyłem samodzielnie.&lt;/p&gt;</description></item><item><title>Parser szablonów</title><link>https://dywicki.pl/2005/12/01/system-szablonow/</link><pubDate>Thu, 01 Dec 2005 10:45:20 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/12/01/system-szablonow/</guid><description>&lt;p&gt;Wczoraj, bądź przedwczoraj wpadłem na pomysł wykorzystania DOM XML i XSL przy tworzeniu szablonów. Zainspirował mnie PHP TAL (Template Attribute Language).&lt;/p&gt;
&lt;p&gt;Z początku szablon miał być stylem XSL, jednak pomysł ten szybko odpadł ze względu na to, że uniemożliwia to tworzenie własnych komponentów, a przynajmniej ja nie wiem jak to zrobić. W tym układzie w pamięci przechowywany byłby obiekt DomDocument z odpowiednią struktórą - odwzorowaniem dodanych zmiennych.
Drugi pomysł wyklucza użycie XSL. Szablon jest parsowany DOM XMLem a następnie rekurencyjnie przeglądany. Na podstawie nazw tagów i zarejestrowanych na początku szablonu rozszeżeń parser tworzy odpowiednie obiekty odpowiadające za komponenty. Ogólnie idea tworzenia własnych rozszeżeń jest rodem z JSP.
Nie wiem co z tego wyjdzie i wogóle czy coś z tego będzie.. ;)&lt;/p&gt;</description></item><item><title>Prosthesis Pattern / Wzorzec protezy</title><link>https://dywicki.pl/2005/11/14/prosthesis-pattern-wzorzec-protezy/</link><pubDate>Mon, 14 Nov 2005 17:42:15 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/11/14/prosthesis-pattern-wzorzec-protezy/</guid><description>&lt;p&gt;W nieoficjalnych notkach GoF często przwija się wspomniana w tytule proteza, oto co udało mi się wywnioskować ze znalezionych materiałów w sieci:&lt;br&gt;
_Zaawansowana technika programowania przeznaczona dla koneserów inżynierii oprogramowania polegająca na zachowaniu rozsądnej granicy pomiędzy warstwą implementacji a logiką biznesową tudzież warstą prezentacyjną. Stosowanie wzorca protezy owocuje znacznym skróceniem czasu implementacji oraz zwiększeniem stopnia powiązań przy jednoczesnym zachwianiu spójności projektu.&lt;br&gt;
_
&lt;em&gt;Proteza jest wzorcem wymagającym idealnego dopasowania do kontekstu. Przy złym zasosowaniu tego wzorca pojawiają się problemy z elastycznością i skalowalnością. Początkujący projektanci powinni unikać protezy ze względu na problemy z późniejszymi zmianami zaprowadzanymi w innych częściach aplikacji&amp;hellip;&amp;rsquo;'&lt;/em&gt;&lt;/p&gt;</description></item><item><title>home@with.net</title><link>https://dywicki.pl/2005/11/06/homewithnet/</link><pubDate>Sun, 06 Nov 2005 01:18:35 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/11/06/homewithnet/</guid><description>&lt;p&gt;Nareszcie jest internet w domu. :) Po 4 miesiącach życia na płytach (CD) wreszcie usłyszałem odgłos przychodzącej wiadomości z PSI, odebrałem pocztę. Ten mały sukces będzie spektakularny jeśli uda mi się zbudować sieć lokalną razem z innymi lokatorami, bo póki co internetem cieszę się tylko ja. No, ale mam nadzieję, że się uda skombinować jakiś AP z routerem i czteroportowym switchem. Jedyny mankament to opłata instalacyjna (200 zł) plus koszt AP (kolejne 200 zł). Ale pokrywamy je wspólnie, więc powinno być ok. :) Abonament 89 zł brutto + 25 zł za zewnętrzny IP. Przepustowość 260/130 kbps. Dziwi mnie jedno - dzierżawiona karta, która ma niby kosztować 300 zł, kiedy podobne na komputroniku są za mniej niż 150 zł.&lt;/p&gt;</description></item><item><title>Zend Framework, PHP5, PHP6</title><link>https://dywicki.pl/2005/11/03/zend-framework-i-php6/</link><pubDate>Thu, 03 Nov 2005 11:37:07 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/11/03/zend-framework-i-php6/</guid><description>&lt;p&gt;Wczoraj podczas rozmowy z Chmolu dowiedziałem się, że podobno są źródła nowego frameworka w CVSie. Nie czekając pobrałem najnowszą wersję (oznaczoną numerkiem 6)&lt;/p&gt;
&lt;p&gt;Troszkę to trwało, zanim pobrały się te wszystkie biblioteki, ale w końcu są.. Rozglądam się po źródłach (teoretycznie wersji 6), ale nic specjalnego tam nie ma, jakiś przykład napisany w C do filtrowania globalsów (moduł main?!), który i tak w praktyce na nic się nie zda, bo kto da możliwość dodawania własnych rozszeżeń na serwie&amp;hellip; ;), w Zend Engine również zmian brak, nic specjalnego nie ma poza bałaganem. Zdaje się, że poza pracami nad wsparciem unicode nic się tam nie dzieje. Owszem są branche do namespaces, ale nic się nie zmienia w samych plikach. Zmiany w zend_objects.h kończą się 3 sierpnia. Rozglądałem się za jakąś wersją pośredniczącą (5.5), ale takiej gałęzi w CVSie nie ma. Po przejrzeniu ChangeLoga stwierdziłem, że tam nic o PHP6 nie ma, jedyne co się pojawia to PHP 5.1. Dodam, że postępowałem zgodnie z instrukcjami na PHP.net. No, ale nic znalazłem moduł php6, zobaczymy co w nim jest.&lt;/p&gt;</description></item><item><title>Była mała przerwa :)</title><link>https://dywicki.pl/2005/10/27/bya-maa-przerwa/</link><pubDate>Thu, 27 Oct 2005 11:31:04 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/10/27/bya-maa-przerwa/</guid><description>&lt;p&gt;Oj tak, mała przerwa. Przez miniony tydzień praktycznie nic nie dopisałem do frameworka, naturalnie z braku czasu. Czasu miałem tylko tyle, żeby zacząć bawić się Strutsem (ebook &amp;ldquo;Struts in action&amp;rdquo;), ściągnąć Springa.. Struts spodobał mi się, na prawdę ciekawy. Zainspirował mnie do nowych przemyśleń.&lt;/p&gt;
&lt;p&gt;Najprawdopodobniej w przyszłym tygodniu będę miał już internet w domu, więc nie będzie problemów z publikowaniem notek. Koszt instalacji i aktywacji to 200 zł, ale dochodzi jeszcze router i dodatkowe okablowanie (tak, będzie sieć domowa) + 200 zł. Mam nadzieje, że całość zamknie się w tych czterystu złotych. ;)&lt;/p&gt;</description></item><item><title>return new Work;</title><link>https://dywicki.pl/2005/10/06/return-new-work/</link><pubDate>Thu, 06 Oct 2005 11:12:34 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/10/06/return-new-work/</guid><description>&lt;p&gt;No.. siedzę właśnie w nowej pracy. Jest super. Ludzie spoko, szef w porządku - słowem pracować i nie odchodzić. Do nowego miejsca pracy mam nieco ponad 10 minut pieszo, więc odchodzi problem z autobusami (ostatnio tyle czasu potrzebowałem na dojście do przystanku). Pojawił się mały problem, bo straciłem hasło do kompa w domu i jak by nie patrzećjestem uziemiony. Prace nad PSF stoją, a ja kwitnę wieczorami przed telewizorem. Ale nie będzie źle &amp;hellip; po reinstalacji systemu pewnie będzie troszkę szybciej działać. W sumie, może w grudniu wezmę laptopa w raty &amp;hellip;&lt;/p&gt;</description></item><item><title>Źródła do pobrania</title><link>https://dywicki.pl/2005/09/29/roda-do-pobrania/</link><pubDate>Thu, 29 Sep 2005 13:56:58 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/09/29/roda-do-pobrania/</guid><description>&lt;p&gt;Źródła mojego frameworka do pobrania &lt;a href="http://splatch.php.org.pl/_img/pl.splatch.zip"&gt;pobierz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Screen z daeronem &lt;a href="http://splatch.php.org.pl/_img/daeron.gif"&gt;zobacz&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Wrześniowa zawierucha</title><link>https://dywicki.pl/2005/09/28/wrzeniowa-zawierucha/</link><pubDate>Wed, 28 Sep 2005 12:43:05 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/09/28/wrzeniowa-zawierucha/</guid><description>&lt;p&gt;Troszkę mało czasu mam, bo zmieniam pracę, ale za jakiś czas opiszę to i owo.&lt;/p&gt;</description></item><item><title>O::ptimization</title><link>https://dywicki.pl/2005/09/22/optimization/</link><pubDate>Thu, 22 Sep 2005 10:48:04 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/09/22/optimization/</guid><description>&lt;p&gt;Jako, że prace nad frameworkiem troszkę się posunęły (doszło uruchamianie akcji) postanowiłem sprawdzić ile czasu zajmuje jedno ządanie. Jakież było moje zaskoczenie, gdy mym oczom ukazał się czas ponad 1 sekundy. Szybko sobie jednak przypomiałem, że autoloader jest do wymiany. Przebudowałem stary tak, aby współpracował z tokenizerem beli. Zmiana – względem poprzedniego czasu – znaczna. Czas spadł do około 0.2 s. Kilka poprawek i zszedłem poniżej – teraz czas jednego rządania wynosi od 0.12 do 0.15 s. Stwierdziłem, że to strasznie długo tym bardziej, że nie ma jeszcze obsługi kilku istotnych rzeczy (FilterChain, Validator, View, ActionForms). Wniosek? Błędy w projekcie. Oto porównanie z innymi skryptami, które udało mi się odanleść na dysku:&lt;/p&gt;</description></item><item><title>Dylematy.</title><link>https://dywicki.pl/2005/09/14/dylematy/</link><pubDate>Wed, 14 Sep 2005 11:09:09 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/09/14/dylematy/</guid><description>&lt;p&gt;&lt;img src="http://splatch.php.org.pl/_img/dev_m.gif" alt="kliknij aby powiększyć"&gt; Tak to już jest, że coraz większość problemów pojawia się przy detalach&amp;hellip; Również i w przypadku tego, co piszę obecnie pojawiła się garść problemów.&lt;/p&gt;
&lt;p&gt;Pierwszy problem to zrezygnowanie z buforowania plików konfiguracyjnych. Do operowania na XMLu wykorzystuję XPatha, a ten jest dostępny poprzez DOM bądź SimpleXML. Podejrzewam, że tak czy owak SimpleXML przerzuca swój obiekt do obiektu DOM, żeby wykonać xpath_eval, ale nie jestem w stanie tego udowodnić. Jak wielkie spowolnienie z tego wyniknie? Nie jestem w stanie powiedzieć. Bez buforu konfiguracji jedno żądanie zajmuje około 0.05s. Gdy tworzona jest mapa klas czas ten wzrasta ponad dziesięciokrotnie.&lt;/p&gt;</description></item><item><title>Komentarz na helion.pl</title><link>https://dywicki.pl/2005/09/09/komentarz-na-helionpl/</link><pubDate>Fri, 09 Sep 2005 08:04:53 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/09/09/komentarz-na-helionpl/</guid><description>Odnośnie książki prezentowanej niżej&amp;hellip; :)</description></item><item><title>Po prostu. XML</title><link>https://dywicki.pl/2005/09/08/po-prostu-xml/</link><pubDate>Thu, 08 Sep 2005 09:46:53 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/09/08/po-prostu-xml/</guid><description>&lt;p&gt;&lt;img src="http://helion.pl/okladki/181x236/ppxml.jpg" alt="Po prostu?"&gt;Chciałem Was ostrzec przed nabywaniem czy nawet zbliżaniem się do tego tytułu. Książka zaczyna od omówienia XMLa, którego nie czytałem, bo jak XML wygląda to wiem. Pożyczając tą książkę chciałem lepiej poznać DTD oraz XSD. Pomimo szczerych chęci nie udało się.{{ double-space-with-newline }}
Autorka tak pokrętnie wyjaśnia wszytko, że nie sposób to zrozumieć. Z wielkimi trudami przyswoiłem wiadomości o DTD, podobnie jak o XSL, ale XSD to męka.. nie wiem, może to zmęczenie po pracy działa na mnie tak otępiająco? Chyba nie, bo komentarze na helionie też nie są zbyt pochlebne. W każdym razie, czekam na kolejną pozycję o XMLu którą, będę miał pożyczoną - mianowicie “XML. Na poważnie”, która zapowiada się świetnie. Jutro to zweryfikuję. Tym czasem powracam do bojów z Propelem i PHPUnit.{{ double-space-with-newline }}
// właśnie mam przed sobą XML na poważnie, za gruba to ona nie jest, ale zobaczymy co ciekawego piszą o XMLu :)&lt;/p&gt;
&lt;p&gt;Linki do plików:{{ double-space-with-newline }}&lt;a href="http://splatch.php.org.pl/_img/config.xml"&gt;config.xml&lt;/a&gt;{{ double-space-with-newline }}&lt;a href="http://splatch.php.org.pl/_img/test.dtd"&gt;test.dtd&lt;/a&gt;{{ double-space-with-newline }}&lt;a href="http://splatch.php.org.pl/_img/test.xsl"&gt;test.xsl&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Garść informacji ;)</title><link>https://dywicki.pl/2005/09/01/gar-informacji/</link><pubDate>Thu, 01 Sep 2005 11:34:40 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/09/01/gar-informacji/</guid><description>&lt;p&gt;Planowałem to zrobić wcześniej, ale dopiero świadectwo Beli mnie ostatecznie zmotywowało :). Byłem pozytywnie zakoczony tym, że jeszcze ktoś mnie odwiedza&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://splatch.php.org.pl/_img/katalogi.gif" alt="katalogi&amp;hellip;"&gt; Obok prezentuję struktóre katalogów. Myślę, że jest ona dośćprzejrzysta, można powiedzieć zapożyczona z Mojavi.&lt;/p&gt;
&lt;p&gt;Troszkę może Was dziwić tak wielkie rozbicie konfiguracji, ale jest to zamierzone, moim zdaniem łatwiej się pracuje w takim rozdrobnieniu, ponieważ każdy moduł posiada oddzielnąkonfigurację i może mieć zgoła inne parametry. W kataloguWebApp znajdują się ustawienia globalne takie jak dostęp do bazy danych oraz zdefiniowane moduły + pluginy, czyli klasy które można zastąpić (rozwiązanie Beli z Odina).&lt;br&gt;
&lt;strong&gt;WebApp/Config.php&lt;/strong&gt; zawiera definicje ścieżek.&lt;br&gt;
&lt;strong&gt;WebApp/Modules/Default/config.xml&lt;/strong&gt; to definicja akcji, jakie znajdują się w module oraz obsługę błędów (404,403,500);&lt;br&gt;
&lt;strong&gt;WebApp/Modules/Config/ActionName.xml&lt;/strong&gt; zawiera szczegółowe dane takie jak używane filtry i akcje odpalane w stosie (można to nazwać blokami). Zastanawiam się czy implementować coś takiego jak Bela – fallbacki, dla tych akcji które zwróciły fałsz.&lt;/p&gt;</description></item><item><title>Pomysł</title><link>https://dywicki.pl/2005/08/23/pomys/</link><pubDate>Tue, 23 Aug 2005 18:12:58 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/08/23/pomys/</guid><description>&lt;p&gt;W głowie mej pojawił się nowy pomysł. :) W krótce więcej detali. Jak na razie powiem tyle, że chodzi o &amp;ldquo;coś&amp;rdquo; co załatwi problem walidacji danych i jednocześnie generowania formularzy. Nie jest to kolejna kopia PEAR::QuickForm, tylko coś innego, w sensie działającego w zgoła inny sposób..&lt;/p&gt;</description></item><item><title>Zafascynowanie</title><link>https://dywicki.pl/2005/08/22/zafascynowanie/</link><pubDate>Mon, 22 Aug 2005 16:23:20 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/08/22/zafascynowanie/</guid><description>&lt;p&gt;Znowu ponad dwutygodniowa przerwa w notach.. Nic dziwnego, że liczba odwiedzin od czerwca ma tendencję spadkową. Dla zainteresowanych (na oko) czerwiec 413, lipiec 387, sierpień 285. Ale wracając do spraw związanych z programowaniem i od razu na wstępie tłumacząc tytuł notki - zafascynowanie narzędziami z Javy. Moje szczególne uznanie zdobył Struts oraz Hibernate. Jedno i drugie ma swój odpowiednik w PHP - Studs oraz Propel. Co do pierwszego: nic ciekawego, bo pod PHP 4, odnośnie drugiego - dopiero poznaję. :] Z tego co widziałem w pracy Hibernate do niektórych zastosowań jest znakomity, jak wypadnie Propel - to się okaże. Jedno co mnie martwi to brak wsparcia dla PDO i brak konkretnej odpowiedzi czy w końcu się ono pojawi. Mam nadzieję, że w końcu zostanie to wymuszone.. Ze Strutsa najbardziej mi się widzi walidacja formularzy poprzez configi, stosunkowo łatwa internacjonalizacja oraz beany. Mam jakieś ebooki odnośnie budowania aplikacji w nim, ale mószę jeszcze raz wrócić do nauki Javy, ponieważ wcześniej czytałem tą książkę bez dostępu do komputera, a wiadomo każdy przykład trzeba sprawdzić. ;) Najgorsze jest to, że wcześniej przerabiając TiJ miałem pomysły/koncepcje rozwiązania niektórych zadań, a teraz mam w głowie same pytajniki - &amp;ldquo;o co tam chodziło???&amp;rdquo;. W pracy, można powiedzieć, zaaklimatyzowałem się, pojawiają się dyskusje odnośnie przeglądarek itp.&lt;/p&gt;</description></item><item><title>Thor omówienie diagramu sekwencji</title><link>https://dywicki.pl/2005/08/02/thor-omowienie-diagramu-sekwencji/</link><pubDate>Tue, 02 Aug 2005 09:33:38 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/08/02/thor-omowienie-diagramu-sekwencji/</guid><description>&lt;p&gt;&lt;strong&gt;Za jakość diagramu przepraszam :)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://splatch.php.org.pl/_img/ds_m.jpg" alt="kliknij aby powiększyć"&gt;Na przedstawionym diagramie widać 4 węzły. Pierwszy to użytkownik, który będzie wywoływał zdarzenia. Myślę, że jego zadań nie trzeba opisywać ;). Celowo operuję na ogólnikach aby nie zawężać Wam jak i sobie pola widzenia.&lt;/p&gt;
&lt;p&gt;Pierwszy element dostarczany przez Thora to komponent. Każdy komponent posiada obiekt JavaScript, który komunikuje się z obserwatorem. Komponent przekazuje informacje o rodzaju zdarzenia. Jako parametr jest przekazywana zdefiniowana wcześniej wartość. Np. OnClick=”KliknietoMnie();” zostaje przekształcone na OnClick=IDentyfikator.call( onClick, KliknietoMnie()) powoduje to, że do obserwatora wędruje OnClick oraz KliknietoMnie.&lt;/p&gt;</description></item><item><title>Nota zbiorcza</title><link>https://dywicki.pl/2005/07/19/nota-zbiorcza/</link><pubDate>Tue, 19 Jul 2005 14:55:59 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/07/19/nota-zbiorcza/</guid><description>&lt;p&gt;Witam po sporej przerwie :).&lt;/p&gt;
&lt;p&gt;Piszę to o 23:23, tuż po ustawieniu budzika na 6:20, wiadomo - kto rano wstaje temu Pan Bóg daje. Wstałem dzisiaj po 5 i jak przystało na rasowego programistę czytałem w autobusie &amp;ldquo;Thinking in Java&amp;rdquo; w wydaniu trzecim. Po kilku dniach spędzonych z tą książką czuję się zagubiony. Przykładów jest sporo, a nie miałem okazji ich nawet uruchomić. Jak na razie nie miałem trudów z przyswojeniem wiadomości, okaże się jak zrozumiałem treść kiedy zacznę robić ćwiczenia. Tak czy siak tak łatwo się nie poddam. :)&lt;/p&gt;</description></item><item><title>Praca</title><link>https://dywicki.pl/2005/06/30/praca/</link><pubDate>Thu, 30 Jun 2005 09:05:23 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/30/praca/</guid><description>&lt;p&gt;Właśnie jestem w pracy. Jest ok, podoba mi się tutaj. Wczoraj pospacerowałem sobie po Bydgoszczy (od PKSu do Czyżówka), kto wie jaki to jest odcinek ten ma wyobrażenie jak bardzo się błąkałem. ;) Znalazłem pokój na poddaszu, normalnie super, prawie jak w domu. Niestety problem jest z netem, bo ulica przy której mieszkam to póki co gruntówka i nie ma jak podciągnąć kabla. Pozostaje mi chyba radiówka&amp;hellip; ale na to trzeba poczekać. Póki co mam internet na miejscu (czyt. w biurze).&lt;/p&gt;</description></item><item><title>Przerwa</title><link>https://dywicki.pl/2005/06/26/przerwa/</link><pubDate>Sun, 26 Jun 2005 22:08:57 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/26/przerwa/</guid><description>&lt;p&gt;Jako, że od tego poniedziałku rozpoczynam pracę nie będę mógł tyle czasu poświęcać Thorowi. Dodatkowym utrudnieniem będzie brak kompa po pracy. To nie koniec trudności. Po zciągnięciu komputera do Bydgoszczy (gdzie znalazłem pracę) będę miał problem z internetem. Ogólnie trudno mi powiedzieć coś więcej niż to, że mam zacząć prace. Poważnie zapowiada się hardokorowy tydzień, nie tylko ze względu na to, że będę wstawać rano. ;)&lt;/p&gt;
&lt;p&gt;Pierwsze wrażenia z biura pozytywne. Nie mogę się doczekać pierwszego zadania, słowem zżera mnie ciekawość&amp;hellip; o tym czy Bydgoszcz zmieni w moich wizerunek z brzydkiego miasta na gorszą lub milszą mieścinę będę pisał&amp;hellip; (za jakiś czas), o wrażeniach z pracy i o pierwszym zadaniu powiem tyle, ile będę mógł (test już miałem!).&lt;/p&gt;</description></item><item><title>Thor, plany i rozterki</title><link>https://dywicki.pl/2005/06/23/thor-plany-i-rozterki/</link><pubDate>Thu, 23 Jun 2005 00:17:51 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/23/thor-plany-i-rozterki/</guid><description>&lt;p&gt;Thor, szczegóły no.2&lt;/p&gt;
&lt;p&gt;Z wpisów zamieszczanych tutaj można wywnioskować, że pracuję tylko nad Thorem. Nie zaprzeczam, że poświęcam mu dużo czasu, można powiedzieć, że aż za wiele.&lt;/p&gt;
&lt;p&gt;Chciałem rzucić garścią informacji – co dodałem.&lt;/p&gt;
&lt;p&gt;Zaaplikowane różne wersje językowe na poziomie wyjątków, czyli przy pojawieniu się jakiegoś problemu wystarczy użyć: &lt;code&gt;throw new Exception( LanguageContainer(‘Blad skladni’, ’JakisTamKominukat’) );&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Myślę nad dodaniem do komponentów źródeł danych, to znaczy – w kodzie dawałoby się tylko: &lt;code&gt;&amp;lt;thor:Komponent datasource=”tutaj_jakies_zrodlo” /&amp;gt;&lt;/code&gt; Dalsze pomysły związane z komponentami to możliwość ustawiania atrybutów HTML takich jak style, border, class aby maksymalnie uprościć ich budowę.&lt;/p&gt;</description></item><item><title>Thor - postępy</title><link>https://dywicki.pl/2005/06/19/thor/</link><pubDate>Sun, 19 Jun 2005 10:19:53 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/19/thor/</guid><description>&lt;p&gt;Prace nad Thorem posunęły się do przodu. Mam teraz podstawowe klasy – TComponent, TParser (parser komponentów), ConfigParser i fabrykę do niego. Przy okazji chciałbym się pochwalić rozwiązaniem, jakie wymyśliłem.&lt;/p&gt;
&lt;p&gt;Podobnie jak w Prado każdy komponent to klasa, która ma określone metody i atrybuty. W We wcześniej wymienionym frameworku w pliku konfiguracyjnym komponentu definiuje się metody do pobierania/ustawiania atrybutów poprzez wpisanie w pliku specyfikacji danego komponentu. U mnie wygląda to nieco inaczej – klasa TComponent, z której dziedziczą wszystkie pozostałe komponenty ma zaaplikowaną metodę __call(), która umożliwia tworzenie ‘wirtualnych metod’. Tzn. metod, które nie istnieją w klasie macierzystej.&lt;/p&gt;</description></item><item><title>Thor, bóstwo w powijkach</title><link>https://dywicki.pl/2005/06/15/thor-bostwo-w-powijkach/</link><pubDate>Wed, 15 Jun 2005 21:27:54 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/15/thor-bostwo-w-powijkach/</guid><description>&lt;p&gt;Projekt, o którym wspomianłem wcześniej został nazwany. Inspiracją nazwy był Odin beli. Sięgnąłem do historii o wikingach i znalazłem tam inne bóstwo - Thora. Silniki swoich poprzednich aplikacji nazywałem imieniem Sachmet - egipskiego bóstwa wojny i płodności. Thor w mitologii nordyckiej jest bogiem burz błyskawic jak również rolnictwa. Thor patronował ognisku domowemu i małżeństwu. [ &lt;a href="#pnote-15-1"&gt;1&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;Projekt postaram się tworzyć przy wykorzystaniu tego, co przeczytałem w książce o wzorcach projektowych. Podstawą będzie ogólny schemat, który pozwoli przejść &lt;strong&gt;od ogółu do szczegółu&lt;/strong&gt;. Na pewno postaram się przed napisaniem czegokolwiek stworzyć diagram UML. &lt;img src="https://dywicki.pl/images/Class_Diagram2_m.png" alt="kliknij aby powiększyć"&gt;Zacząłem pisać, następnie stworzyłem diagram. Dyskutując o zapisanym rozwiązaniu znalazłem w nim nieścisłość. Obiekt LanguageContainter będzie zawierał poszczególne języki (może zajść potrzeba odwołania się do domyślnego języka - np. z angielskiego do polskiego). Całość oparta jest na statycznej tablicy languages. Przy próbie użycia języka trzeba się odwołać do kontenera - LanguageContainer::getLanguage(&amp;lsquo;PL&amp;rsquo;,&amp;lsquo;Main&amp;rsquo;) i następnie operować na zwróconym obiekcie. Gdzie zatem nieścisłość? Po wywołaniu wcześniejszego kodu kontener przy wywołaniu LanguageContainer::getLanguage(&amp;lsquo;PL&amp;rsquo;,&amp;lsquo;User&amp;rsquo;) zwróci obiekt, który utworzył wcześniej, ponieważ w tablicy languages jest już indeks PL. Rozwiązanie te dyskryminuje też nieco jego obszerność.&lt;/p&gt;</description></item><item><title>Piąte zdanie</title><link>https://dywicki.pl/2005/06/12/piate-zdanie/</link><pubDate>Sun, 12 Jun 2005 18:38:22 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/12/piate-zdanie/</guid><description>&lt;ol&gt;
&lt;li&gt;Złap najbliższą książkę.&lt;/li&gt;
&lt;li&gt;Otwórz ją na 123 stronie.&lt;/li&gt;
&lt;li&gt;Znajdź piąte zdanie.&lt;/li&gt;
&lt;li&gt;Opublikuj je na swoim blogu razem z tą instrukcją.&lt;/li&gt;
&lt;li&gt;Nie szukaj najfajniejszej książki jaką można znaleźć. Użyj tej, która faktycznie leży najbliżej Ciebie.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Najbliżej mnie leży książka &lt;strong&gt;Programowanie zorientowane obiektowo. Wzorce projektowe&lt;/strong&gt; autorstwa Alana Shalloway&amp;rsquo;a oraz Jamesa Trotta. Piąte zdanie na 123 stronie wygląda tak:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wzorzec mostu pozwala mi rozumieć przez implementację wszystko to, co istnieje &amp;ldquo;na zewnątrz&amp;rdquo; moich obiektów i jest przez &lt;em&gt;nie używane&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Plany na najbliższy miesiąc</title><link>https://dywicki.pl/2005/06/08/plany-na-najbliszy-miesic/</link><pubDate>Wed, 08 Jun 2005 22:44:44 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/08/plany-na-najbliszy-miesic/</guid><description>&lt;p&gt;Jako, że skończyłem szkołę, zdałem egzamin dyplmowy czeka mnie przekroczenie progu dorosłości i wejście na rynek pracy. Już pojawiła się oferta odbycia stażu absolwenckiego (za śmieszne pieniądze), ale nie rezygnuję i szukam dalej. Być może, ktoś (czyt. jakaś firma) zainwestuje we mnie i rozwój moich zdolności?&lt;/p&gt;
&lt;p&gt;W międzyczasie postaram się zająć planowaniem swojego frameworka (wszycy mają je, mam i ja!), bo CMS skończony/zawieszony. Przyglądałem się bliżej kilku aplikacjom. Moje zainteresowanie wzbudziło Prado. Gdy spojrzałem na przykład loginClicked od razu mi się skojarzyło delphi. Przyglądając się dalej kontrolkom doszedłem do wniosku, że to miks z ASP. Wpływ na mnie zaczyna też wywierać książka o wzorcach. Zaczynam patrzeć na obiekty nie jak na reprezentację klas tylko jak na określone instnienia/byty, które wiedzą co mają zrobić (w jednym rozdziale padło pojęcie &amp;lsquo;inteligentne dane, które mi się bardzo spodobało).&lt;/p&gt;</description></item><item><title>Wykrywanie przeglądarki</title><link>https://dywicki.pl/2005/06/08/wykrywanie-przegldarki/</link><pubDate>Wed, 08 Jun 2005 18:29:10 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/08/wykrywanie-przegldarki/</guid><description>Diziaj znajomy grafik poprosił mnie o stworzenie skryptu, który ma wykrywać przeglądarkę i w zależności od nazwy przekierowywać na odpowiednią stronę. Nieco rozszeżyłem swoje zadanie tworząc obiekt Java Script, który zwraca zarówno nazwę jak i wersję programu, z którego korzysta internauta. Obiekt wykrywa następujące programy: Internet Exploler, Mozilla / Mozilla Firefox, Opera.
Całość opiera się na obiekcie &lt;strong&gt;navigator&lt;/strong&gt; dostarczanym przez JS. Zainteresowanych zapraszam do zapoznania się z kodem.</description></item><item><title>PostgreSQL</title><link>https://dywicki.pl/2005/06/05/postgresql/</link><pubDate>Sun, 05 Jun 2005 19:46:24 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/05/postgresql/</guid><description>&lt;p&gt;&lt;img src="https://dywicki.pl/images/postgresql.gif" alt="PostgrSQL"&gt;Wspominałem wcześniej o książce pod tytułem PostgreSQL, którą pożyczyłem od znajomego. Jak się okazało jej pełny tytuł brzmi &lt;strong&gt;PostgreSQL. Biblioteka problemów.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Po zagłębieniu sięw szczegóły doszedłem do wniosku, że to świetny system bazodanowy. Sam się zacząłem dziwić dlaczego tak mało ludzi. Postgres dostarcza wielu możliwości, które są imponujące. Np. obsługuje widoki, które MySQL dopiero wprowadza od wersji 5.1, ma transakcje, znowu MySQL dopiero to udostępnia w wersji 4.1.&lt;/p&gt;
&lt;p&gt;Słowem świetna baza. Udało mi się stworzyć własny widok, ba nawet kursor! Postanowiłem – przyszłe aplikacje zaczynam przystosowywać do dobrych systemów bazodanowych. Koniec z prostymi zapytaniami SELECT i samymi złączeniami.&lt;/p&gt;</description></item><item><title>Wzorce projektowe i UML</title><link>https://dywicki.pl/2005/06/01/wzorce-projektowe-i-uml/</link><pubDate>Wed, 01 Jun 2005 22:24:05 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/06/01/wzorce-projektowe-i-uml/</guid><description>&lt;p&gt;Cóż za piękny dzień dziecka! Pada od rana, z małymi przerwami, żeby wiatr mógł sobie pohulać bez slalomu pomiędzy kroplami.&lt;br&gt;
&lt;img src="https://dywicki.pl/images/ksiazka.gif" alt="Książka, którą czytałem w autobusie :)"&gt;W taki właśnie dzień wybrałem się w przymusowe odwiedziny do siostry. Oddałem jej tablice matematyczne, które pożyczyła od koleżanki na moją maturę. Podróż nic miłego, ponad 90 minut w autobusie, w którym nie można wygodnie usiąść (mam za długie nogi?). Jako, że siostra udawała się zaraz na wykłady to nie gościłem zbyt długo u niej. 20 minut i kolejny autobus, w którym spędziłem kolejne 90 minut. Szczęście, że nie było tak ciepło jak w piątek, bo bym wyparował z niego. ;)&lt;/p&gt;</description></item><item><title>Visual Studio - pierwsze aplikacje</title><link>https://dywicki.pl/2005/05/30/visual-studio-pierwsze-aplikacje/</link><pubDate>Mon, 30 May 2005 21:22:43 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/05/30/visual-studio-pierwsze-aplikacje/</guid><description>&lt;p&gt;Nadszedł ten czas - pierwsze &amp;ldquo;poważne&amp;rdquo; boje ze studiem. Postanowiłem zacząć od aplikacji konsolowych, ponieważ jest przy nich najmniej problemów, nie ma otoczki graficznej, formularzy, zasobów, jest tylko sam kod. Z resztą trzy miesiące temu udało mi się ściągnąć VS 2005 C# Express i troszkę się nim nacieszyłem (czyt. do formatu). Wtedy to właśnie udało mi się napisać (a bardziej zrobić) program okienkowy który ładował dane do XMLa. Nie było to nic ambitnego, ponieważ wszytko odbywało się poprzez (poniekąd) ręczne wpisanie kodu do pliku (czyli +&amp;ldquo;zmienna+&amp;rdquo; i tak dalej). Słowem nic specjalnego, zakręcony formularz i zero funkcjonalności.&lt;/p&gt;
&lt;p&gt;Tym razem moje ambicje sięgały wyżej niż witaj świecie. Chciałem napisać witaj łukaszu! :) Ten jakże odległy szczyt udało mi się osiągnąć dwiema podobnymi drogami - przy pomocy J# i C#. Podstawy Javy mam (nikłe bo nikłe ale są), jak wyżej pisałem C# to też dla mnie nie pierwszyzna ;) poszło dość szybko. Niestety nie dałem rady zrobić tego w VB i C++, ale jest czas.&lt;/p&gt;
&lt;p&gt;Zacząłem od C#. Pamiętałem, żeby nie używać strzałeczek bo to nie php. Trzeba było się przesiąść na kropeczki. Pamiętałem że interesująca mnie klasa (?) to &lt;strong&gt;System.Console&lt;/strong&gt;. No trudno byłoby zapomnieć - już na samym początku została dołączona. Stąd było już blisko ReadLine, Write i znowu Read. W najbliższym czasie w programie nauczania C# liczenie pola i obwodu prostokąta.&lt;/p&gt;
&lt;p&gt;Z J# poszło mi szybciej niż myślałem. Nazewnictwo metod identyczne, jedyna różnica to początek programu. W dalszej części do oglądnięcia kody programów.&lt;/p&gt;
&lt;p&gt;Książkę do ASP mam.. tylko, że ASP Kompendium to nie jest tytuł pierwszej świeżości. Będzie trzeba odłożyć na jakiś porządny tytuł (ostatnie pieniądze poszły na świętowanie z okazji zdania matury).&lt;/p&gt;</description></item><item><title>Robi się gorąco</title><link>https://dywicki.pl/2005/05/29/robi-si-gorco/</link><pubDate>Sun, 29 May 2005 14:34:37 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/05/29/robi-si-gorco/</guid><description>&lt;p&gt;Jakiś czas temu na PHP.pl ukazał się news na temat techniki AJAX. Na forum zauważyłem temat w którym autor pytał o opinie na temat strony wykonanej w SAJAX-ie (zobacz temat[1], i stronę[2]).&lt;/p&gt;
&lt;p&gt;Nie mniej zainteresował mnie bardziej JPSPAN, który umożliwia odwoływanie się do klas PHP. Jako, że ja mam zawsze spóźnioną reakcję dopiero w zeszłym tygodniu zacząłem się bawić.&lt;/p&gt;
&lt;p&gt;Pierwsze co zrobiłem to alert tekstu zwróconego z klasy Hello. Następnie sprawdzenie jak wygląda tablica z serwera w przeglądarce. Okazało się, że identycznie.. jedyny problem jaki powstaje to wyjątki. Trzeba je zwracać poprzez specjalną klasę/funkcję.&lt;/p&gt;</description></item><item><title>Visual Studio</title><link>https://dywicki.pl/2005/05/24/visual-studio/</link><pubDate>Tue, 24 May 2005 13:52:05 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/05/24/visual-studio/</guid><description>&lt;p&gt;Jakiś czas temu postanowiłem zamówić Visual Studio. Nie musiałem długo czekać aby je dostać.&lt;/p&gt;
&lt;p&gt;Muszę przyznać, że byłem mile zaskoczony. Kurier dostarcza przesyłkę prosto do domu, wszystko co trzeba zrobić to (najpierw) się zarejestrować a potem podpisać potwierdzenie odbioru.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://dywicki.pl/images/vs2k5.jpg" alt="Pudełko jakie otrzymałem :)"&gt;Wewnątrz koperty znalazłem bardzo ładne pudełko. Muszę przyznać, że wywiera ono bardzo dobre wrażenie. Ciemna zieleń mile się komponuje z białym napisem &lt;strong&gt;Visual Studio 2005 Beta 2&lt;/strong&gt;. W środku znajdują się 4 krążki DVD, które już tak estetyczne nie są. Srebrne z czarnymi napisami i zielonymi puzzlami. Srebrne z czarnymi napisami i zielonymi puzzlami. Za to na pocieszenie estetów dodano dwie ulotki w kolorze okładki (w tym jedna ze świetną larwą). Krążki zawierają kolejno &lt;strong&gt;Visual Studio Team Suite&lt;/strong&gt;, &lt;strong&gt;Visual Studio Team Fundation Server&lt;/strong&gt; oraz &lt;strong&gt;SQL Server 2005 Developer Edition&lt;/strong&gt; (dla Windows Server 2003). Ostatni z wymienionych krążków jest najbrzydszy - białe, przechodzące w szare tło i czarne napisy. Fuj! Dodatkowo w pudełku jest jeszcze jedno DVD zatytułowane &lt;strong&gt;wefly247.net&lt;/strong&gt;. Nadruk na płytce głosi, że znajduje się na niej &amp;ldquo;Wszystko czek potrzebuje developer do tworzenia aplikacji w Visual Studio&amp;rdquo; (możliwe że skłamałem bo to moje tłumaczenie).&lt;/p&gt;</description></item><item><title>256+512 = 756?</title><link>https://dywicki.pl/2005/05/20/256512-756/</link><pubDate>Fri, 20 May 2005 15:09:21 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/05/20/256512-756/</guid><description>&lt;p&gt;&lt;img src="https://dywicki.pl/images/ram.jpg" alt="Wilk Electronics ;)"&gt;Drugim nabytkiem jest pamięć. Byłem bardzo zawiedzony gdy nawet na najniższych detalach SWAT 4 perfidnie rwał. Nie pozostało nic innego jak dokupić ramu. Do obecnej kości Kingstone’a 256 MB / 400 MHz doszła kolejna, już nie markowa, 512 MB. Łączenie 768. SWAT od tej pory chodzi płynnie tak, że można spokojnie grać. Nie mogę się doczekać aż dostanę w swoje łapska Undergrounda 2. Jedyne, co mnie smuci to, to że system dalej uruchamia się bardzo wolno. Najwyraźniej nie pozostaje mi nic innego jak ponowna instalacja. Ale z tym chyba poczekam, ponieważ nie chce mi się na nowo instalować tego wszystkiego.&lt;/p&gt;</description></item><item><title>Znowu razem :-)</title><link>https://dywicki.pl/2005/05/18/znowu-razem/</link><pubDate>Wed, 18 May 2005 14:40:06 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/05/18/znowu-razem/</guid><description>&lt;p&gt;I kolejny powrót&amp;hellip; po kilkutygodniowej przerwie wracamy do sieci. Niestety, są straty.. w wyniku awarii poprzedniego serwera (na który już nie zamierzam wracać) straciłem wszystkie dane na nim zapisane, łącznie z wpisami z bazy danych. Tak więc część postów przestała istnieć, a ja znowu zaczynam &lt;a href="niemal"&gt;niemal&lt;/a&gt; od zera. Przykra sprawa, ale cóż, nic sie nie poradzi.&lt;/p&gt;</description></item><item><title>Nagrywarka DVD</title><link>https://dywicki.pl/2005/05/12/nagrywarka-dvd/</link><pubDate>Thu, 12 May 2005 14:38:58 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/05/12/nagrywarka-dvd/</guid><description>&lt;p&gt;&lt;img src="https://dywicki.pl/images/dvd.jpg" alt="Nowa nagrywarka"&gt;Całkiem niedawno kupiłem sobie nowy napęd. Stary CD-ROM sprzedałem razem z komputerem kuzyna tak, że przez ponad dwa miesiące nie miałem możliwości zainstalowania czegokolwiek z płyty. Jako, że udało mi się zarobić parę groszy zainwestowałem w nowy napęd … DVD+/-RW. Pierwsze co zrobiłem gdy już go zainstalowałem to było nagranie filmów, które zajmują zbyt wiele miejsca. Do tego parę plików ISO pobranych z sieci i na dysku przybyło 10 GB wolnego miejsca. Nagrałem też na krążek dvd obraz Half Life’a 2, zajmujący ponad 3 GB. Z napędu jestem bardzo zadowolony. Fakt, że najszybszy nie jest (maksymalna prędkość nagrywania CD to 40x, a DVD 12x) i nie przegrywa szybciej niż Gołota, ale nie zależy mi aż tak bardzo na czasie. Zapłaciłem za ten napęd w sumie 250 zł, ale przy okazji odwiedzin w zaprzyjaźnionym sklepie nabyłem kilkanaście płyt CD i dwie DVD.&lt;/p&gt;</description></item><item><title>Nowa myszka</title><link>https://dywicki.pl/2005/05/06/nowa-myszka/</link><pubDate>Fri, 06 May 2005 15:04:37 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/05/06/nowa-myszka/</guid><description>&lt;p&gt;&lt;img src="https://dywicki.pl/images/mysz.jpg" alt="Mysz w ujęciu pierwszym"&gt;Po bardzo długim czasie użytkowania myszy bez rolki zatrzymałem sobie staruszkę kuzyna (moja myszka powędrowała za 2 zł do kolegi).&lt;/p&gt;
&lt;p&gt;Mysz sprawowała się dość dobrze, ale miała jedną wadę. Czasami gdy kursor stał chwilkę w miejscu zaczynał drgać. Wierzcie mi gdy się pisze na klawiaturze to drgający kursor bardzo przykuwa uwagę.&lt;br&gt;
&lt;img src="https://dywicki.pl/images/mysz2.jpg" alt="Zadanie-znajdź PPM"&gt;Po pewnym czasie podczas odwiedzin zaprzyjaźnionego sklepu komputerowego dowiedziałem się, że w zamian za wprowadzone niegdyś modyfikację w Os Commerce otrzymam mysz. Jak to mówi przysłowie lepszy rydz niż nic. Po kilku dniach zostałem wezwany do zaprzyjaźnionego sklepu. Czekała tam na mnie nowiutka mysz. Model był mi znany nie tylko z widzenia, ponieważ używałem identycznego podczas pracy na komputerze kuzyna. Dość spora bryła leży dobrze w dłoni. Optyka też się dobrze sprawuje dlatego też stara podkładka powędrowała do szuflady (nie wyrzuciłem jej ze względu na sentyment).&lt;/p&gt;</description></item><item><title>Pythonowe potyczki</title><link>https://dywicki.pl/2005/04/08/pythonowe-potyczki/</link><pubDate>Fri, 08 Apr 2005 14:42:22 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/04/08/pythonowe-potyczki/</guid><description>&lt;p&gt;W dalszej części posta kod bota napisanego przeze mnie w pythonie (wspomagałem się kodem beli).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; sys
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; socket
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; time
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; re &lt;span style="color:#75715e"&gt;#wyrazenia regularne! ;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#ustawienia :)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MyIrcConfig&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; server &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;ircnet&lt;span style="color:#f92672"&gt;.&lt;/span&gt;pl&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; port &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;6667&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; nick &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;tete&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ident &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;MyIrc&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; realname &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;bot&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; channel &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;splatch&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#klasa do wyswietlania tekstow #TODO: mozliwosc blokowania komunikatow (tryb cichy)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Output&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__init__&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;printer(&lt;span style="color:#960050;background-color:#1e0010"&gt;’&lt;/span&gt;Test wyjscia &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;printer&lt;/span&gt;(self,x):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print x &lt;span style="color:#75715e"&gt;#klasa do komunikacji bot&amp;lt;&amp;gt;irc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MyIrc&lt;/span&gt;(MyIrcConfig):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; socket &lt;span style="color:#f92672"&gt;=&lt;/span&gt; socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;socket(socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;AF_INET, socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SOCK_STREAM)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; output &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Output()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;connect&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#probuj sie polaczyc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;connect((self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;server, self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;port))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;except&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;output&lt;span style="color:#f92672"&gt;.&lt;/span&gt;printer( &lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;Nie moge sie polaczyc z serweremn&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#powiedz serwerowi kim jestes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;send(&lt;span style="color:#960050;background-color:#1e0010"&gt;’&lt;/span&gt;NICK &lt;span style="color:#f92672"&gt;%&lt;/span&gt;srn&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;nick)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;send(&lt;span style="color:#960050;background-color:#1e0010"&gt;’&lt;/span&gt;USER &lt;span style="color:#f92672"&gt;%&lt;/span&gt;s &lt;span style="color:#f92672"&gt;%&lt;/span&gt;s bla: &lt;span style="color:#f92672"&gt;%&lt;/span&gt;srn&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt; (self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ident, self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;server, self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;realname))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;output&lt;span style="color:#f92672"&gt;.&lt;/span&gt;printer(&lt;span style="color:#960050;background-color:#1e0010"&gt;’&lt;/span&gt;Connected to irc servern&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;output&lt;span style="color:#f92672"&gt;.&lt;/span&gt;printer(&lt;span style="color:#960050;background-color:#1e0010"&gt;’&lt;/span&gt;user &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;%s&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; (&lt;span style="color:#f92672"&gt;%&lt;/span&gt;s&lt;span style="color:#f92672"&gt;@%&lt;/span&gt;s &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt;s)&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt; &lt;span style="color:#f92672"&gt;%&lt;/span&gt; (self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;nick, self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ident, self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;server, self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;realname))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#odczyt serwera&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;read&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;recv(&lt;span style="color:#ae81ff"&gt;1024&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;output&lt;span style="color:#f92672"&gt;.&lt;/span&gt;printer(data)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; data
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#wejdz na kanal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;join&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;send(&lt;span style="color:#960050;background-color:#1e0010"&gt;’&lt;/span&gt;JOIN &lt;span style="color:#75715e"&gt;#%srn ‘ % self.channel )&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#wykonaj&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;write&lt;/span&gt;(self,msg):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;output&lt;span style="color:#f92672"&gt;.&lt;/span&gt;printer(msg)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;socket&lt;span style="color:#f92672"&gt;.&lt;/span&gt;send(msg) &lt;span style="color:#75715e"&gt;#klasa zasadnicza&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;PyAeewe&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; MyIrc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; MyIrc()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;start&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;MyIrc&lt;span style="color:#f92672"&gt;.&lt;/span&gt;connect()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;MyIrc&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#tutaj odbieranie MOTD itp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#jesli wszystko ok&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;break&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;MyIrc&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join() &lt;span style="color:#75715e"&gt;#wskocz na kanal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; data &lt;span style="color:#f92672"&gt;=&lt;/span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;MyIrc&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#daj mozliwosc wykonywania komend&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#data = raw_input(’Komenda: ‘)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#self.MyIrc.write(data)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;MyIrc&lt;span style="color:#f92672"&gt;.&lt;/span&gt;output&lt;span style="color:#f92672"&gt;.&lt;/span&gt;printer(data)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;except&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;MyIrc&lt;span style="color:#f92672"&gt;.&lt;/span&gt;output&lt;span style="color:#f92672"&gt;.&lt;/span&gt;printer(&lt;span style="color:#960050;background-color:#1e0010"&gt;’&lt;/span&gt;Blad&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aeewe &lt;span style="color:#f92672"&gt;=&lt;/span&gt; PyAeewe()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;aeewe&lt;span style="color:#f92672"&gt;.&lt;/span&gt;start()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Wyrażenia regularne</title><link>https://dywicki.pl/2005/03/16/first-post/</link><pubDate>Wed, 16 Mar 2005 14:30:27 +0000</pubDate><guid isPermaLink="false">http://blog2.dywicki.pl/2005/03/16/first-post/</guid><description>&lt;p&gt;Od niechcenia spojrzałem dzisiaj na forum. I co widzę? Temat &lt;strong&gt;(php) Problem - regexy&lt;/strong&gt;. Jako, że mam jako-takie pojęcie na temat regexpów to zobaczyłem o co chodzi. Okazało się, że to nic wielkiego, problem ze zmianą [[link]] na wersję zdatną do klikania. Jedynym problemem było to, że drugi parametr jest opcjonalny. Zacząłem myśleć, już po chwili miałem gotowy wzór, który pasował do [[link]] oraz [[link|opis]]. Zastanawiało mnie jedno - czy da się wykorzystać w &lt;strong&gt;preg_replace&lt;/strong&gt;; ten wzór.. Niestety nie udało mi się do tego dojść mimo lektury bardzo dobrego &lt;a href="http://thebat.pl/podrecznik/TB_regx.php"&gt;poradnika&lt;/a&gt; na temat wyrażeń. Udało mi się w końcu zrodzić drugi wzór, znacznie bardziej skomplikowany, na zasadzie &lt;a href="http://thebat.pl/podrecznik/TB_regx_advsy_cnd.php"&gt;pod-wyrażeń warunkowych&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>