Generated by All in One SEO v4.9.10, this is an llms.txt file, used by LLMs to index the site. # Nerdpress.org ...dev, tech problems and solutions. ## Sitemaps - [XML Sitemap](https://nerdpress.org/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [Upgrade workflow for Astro 6 for Agents](https://nerdpress.org/2026/06/26/agent-upgrade-workflow-for-astro-6/) - Astro 7 was released this week.So I thought I share my workflow file for updating Astro 5 to Astro 6.There were some breaking changes that needed to be addressed and took me some time.So it may be useful for anyone upgrading. The upgrade workflow was originally made for Windsurf Editor (now Devin) but will probably - [PHP's serialize_precision hidden danger](https://nerdpress.org/2026/04/16/phps-serialize_precision-hidden-danger/) - The PHP configuration directive serialize_precision can cause hard to debug issues. When deviated from its default value, it can lead to inexpected behavior in common functions like json_encode() and serialize(). The Problem If you change the serialize_precision setting from its default value of -1, the float precision will be more digits than 2 decimal places.If - [A WordPress-like More Tag in Astro](https://nerdpress.org/2026/02/28/a-wordpress-like-more-tag-in-astro/) - When migrating from WordPress to Astro, one encounters various challenges.One is handling the WordPress "More" tag, which originates from the More Element in the WordPress Block Editor. After converting the WordPress export to Markdown, you will find `` tags in your content. These tags serve as delimiters in WordPress, allowing you to define - [Dynamic OpenGraph Images in Astro](https://nerdpress.org/2025/12/23/dynamic-opengraph-images-in-astro/) - If you've ever shared a link on social media, you know how critical OpenGraph (OG) images are. They're the first thing people see - often before they even click.Static OG images are fine as a start, but what if you want custom images for every blog post or content collection item? For Astro there is - [5 Essential Plugins for Yazi File Manager](https://nerdpress.org/2025/11/08/5-essential-plugins-for-yazi-file-manager/) - Yazi is my preferred terminal file manager, and these are my five essential plugins that improve my workflow. The Yazi package manager ya will be used to install the plugins mentioned below, which is shipped with Yazi. For the installation of necessary terminal tools, I will use brew, since I am currently on OSX. For - [Astro component for DarkMode Switcher for PicoCSS](https://nerdpress.org/2024/01/07/astro-component-for-darkmode-switcher-for-picocss/) - I am currently evaluating PicoCss V2 in Astro project. PicoCss is a CSS / SCSS framework I used for some of my projects because it is small and brings sufficient styling for most HTML Elements. It has integrated light and dark mode, but no theme switcher. So i was looking for one and found this - [Symfony HTTP Client default timeout](https://nerdpress.org/2025/08/06/symfony-http-client-default-timeout/) - Small Service Post:The default timeout of the Symfony HTTP Client is 60s (seconds)!Sure, it is mentioned in the Symfony HTTP Client docs, that PHP's default_socket_timeout is taken as default value.So what is the default_socket_timeout then, you might wonder? One click away in PHP Runtime Configuration docs you will find that in the php.ini the default - [From Xubuntu to Lubuntu](https://nerdpress.org/2025/07/26/from-xubuntu-to-lubuntu/) - I have this old, super-cheap laptop: Lenovo E145, which I use as my travel and breakfast laptop. It has 8GB of RAM and a very weak CPU (AMD E1-2500 APU). Any modern mobile phone probably has more resources these days. For surfing the web, checking mails, editing and uploading some fotos it is sufficient and - [Yazi PDF preview not working](https://nerdpress.org/2025/05/31/yazi-pdf-preview-not-working/) - Yazi is a terminal-based file manager (TUI) that I use heavily because it's fast and lets me navigate files and folders without needing a mouse. (...and I really dislike the OSX Finder) Yazi can render previews for images and PDF files, but in my case, PDF previews weren't showing up. Yazi requires Poppler for PDF - [Patch dependencies with composer-patches](https://nerdpress.org/2025/04/11/patch-dependencies-with-composer-patches/) - Sometimes, you may encounter a bug or an unwanted functionality in a PHP vendor dependency, and forking the package and maintaining upstream changes can be too cumbersome. In such cases, using composer-patches is a good solution. Composer-patches is a handy Composer plugin that applies diff patches to specific packages during installation. Basically, you store a - [Typed Arrays with PHPStan types](https://nerdpress.org/2025/01/04/typed-arrays-with-phpstan-types/) - When dealing with legacy data, you often encounter arrays or associative arrays. These arrays are untyped, which PHPStan, of course, does not accept, resulting in numerous PHPStan errors. PHPStan, by the way, is a static analysis tool for PHP that enforces strict typing and checks for compliance with PHPDoc annotations, ensuring code is robust and - [ObfuscateLink Web Component in Astro](https://nerdpress.org/2025/02/07/obfuscatelink-web-component-in-astro/) - Using Web Components in Astro wasn't as straightforward as expected. Here's an example showing how to integrate the obfuscate-link web component into an Astro project. First, add the Obfuscate-Link web component to the project: npm install obfuscate-link-web-component Now register ObfuscateLink with customElements: import { ObfuscateLink } from 'obfuscate-link-web-component'; // Only define - [Doctrine: WHERE IN with array of integers](https://nerdpress.org/2025/01/17/doctrine-where-in-with-array-of-integers/) - Since I stumbled across this the other day, here's how you build an SQL query with a WHERE IN condition for an array of integers. This is surprisingly not intuitive, as you cannot simply pass an array of integers to a prepared statement. Instead, you need to add special binding types to inform Doctrine that - [Deploy local build with Deployer7](https://nerdpress.org/2024/11/08/deploy-local-build-with-deployer7/) - Deployer is a great tool to deploy your PHP Project. Deployer executes a set of commands on the target server to build your project and enable the newly built version. A typical deployment process with Deployer involves SSHing into the target machine, where it performs a Git checkout of the project, installs dependencies via Composer, - [Invalid table or database name mysql.sock](https://nerdpress.org/2024/09/13/invalid-table-or-database-name-mysql-sock/) - In a development Docker setup, I needed to upgrade the MySQL database from version 5.6 to version 8. The data was stored as a Docker volume in a data directory. After the update, I encountered the following error: my_db.mysql | 2024-08-16T09:40:21.463770Z 2 [ERROR] [MY-010520] [Server] Invalid (old?) table or database name 'mysql.sock'my_db.mysql | 2024-08-16T09:40:21.468287Z 2 - [Symfony integration tests custom header is missing](https://nerdpress.org/2024/06/14/symfony-integration-tests-custom-header-is-missing/) - I am writing an integration test in Symfony with a request that includes custom headers. However, the request fails because the custom header is apparently missing. What happened was I forgot to add an HTTP prefix to the custom header. This is a common pitfall when writing integration tests in Symfony and using custom HTTP - [Monorepo with NPM workspaces](https://nerdpress.org/2024/04/12/monorepo-with-npm-workspaces/) - I recently converted a project into a Monorepo.I had a cli part and an Astro StaticSiteGenerator part. At some point I felt like these parts would be entangled too much so I decided to separate them. Since they were still related they should stay in one repo but have their own dependencies and separate processes. - [Obfuscate Web Component](https://nerdpress.org/2023/12/08/obfuscate-web-component/) - Typically, when integrating emails into websites, I obfuscate the email address to prevent spam bots from collecting them. For React, there were already components that handled this task; however, without React, I couldn't find a suitable solution. Therefore, I created a web component: obfuscate-wc that now provides an HTML element capable of obfuscating your email - [Composer bump](https://nerdpress.org/2023/08/21/composer-bump/) - Do you miss that the version numbers of your PHP dependencies are automatically updated in the composer.json file after a composer update?Just like npm or yarn are updating the version numbers in the package.json file. Then upgrade to Composer 2.4 and say hi to composer dump.This version introduced a new command composer bump which will - [Sqlite Administration in IntelliJ IDE](https://nerdpress.org/2021/05/17/sqlite-administration-in-intellij-ide/) - Sometime ago I tried to use Adminer in Docker to administrate a sqlite database, which was not as easy as expected.If you are a happy user of IntelliJ IDE like PHPStorm or IntelliJ Ultimate like me :) then i would nowadays recommend to use the built-in database tool of your IntelliJ IDE for Sqlite administration - [Testing PDF creation with headless chrome and PHP](https://nerdpress.org/2023/07/28/testing-pdf-creation-with-headless-chrome-and-php/) - I had the task the other day to use a headless chrome to generate PDF files from websites in a PHP app. The plan was to use chrome-php with a headless chrome to generate the PDF. Usually you would install chrome/chromium on a linux server via apt and just run chrome from the PATH with - [10 reasons to replace your CMS with Astro](https://nerdpress.org/2023/03/23/10-reasons-to-replace-your-cms-with-astro/) - I replaced another CMS powered site with an Astro powered static site the other day.Here is why: Content changed rarely and when, authors forgot how to do it and asked me anyway. Content is now part of development. The "paid" support time is now rather spent for adding content than for helping the authors adding - [Import data into MySql with docker-compose](https://nerdpress.org/2023/02/24/import-data-into-mysql-with-docker-compose/) - Having a docker-compose setup which involves a Database like Mysql or MariaDB, then at some point you might want to import data into those Databases. There are several ways to import the data in your docker-compose setup. Using a volume for import data Using mysql client from commandline with docker-compose exec Using phpmyadmin in docker-compose - [Nerdpress on Mastodon](https://nerdpress.org/2023/01/06/nerdpress-on-mastodon/) - We follow the PHP community and are now also Mastodon! Yay!Follow us here: https://phpc.social/@nerdpress_orgAll our Blog posts will be announced there as on Twitter. Since we blog a lot about PHP in general and Symfony in particular https://phpc.social seems like a good choice for us as our Mastodon instance. If you are a PHP nerd - [Stream an image from Symfony controller](https://nerdpress.org/2022/12/12/stream-an-image-from-symfony-controller/) - When sending an image/file from a Symfony controller you would usually read the file from filesystem.This you can do by passing the file path to the BinaryFileResponse class and return it in the controller, as described in the docs:https://symfony.com/doc/current/components/http_foundation.html#serving-files use Symfony\Component\HttpFoundation\BinaryFileResponse; $file = 'path/to/file.txt'; $response = new BinaryFileResponse($file); But in some cases you might want - [Doctrine migrations and Postgis](https://nerdpress.org/2022/10/31/doctrine-migrations-and-postgis/) - Using Postgres with the Postgis extension to integrate GeoData / GIS functionality in your project is not natively supported by Doctrine and Doctrine migrations. First you have to add the extension to Postgres, even if you use the Postgis docker image like postgis/postgis:14-3.3-alpine. So add this SQL statement to the up method of your first - [Show kubernetes secrets with k9s](https://nerdpress.org/2022/10/14/show-kubernetes-secrets-with-k9s/) - If you want to show decrypted secrets of your kubernetes (k8s) deployment with k9s try this: First choose the namespace you want to check the secrets in by typing a colon and namespace :namespace Then choose your namespace by navigating with your arrow down key and press return when on the desired namespace. Then type - [Symfony deprecation log channel](https://nerdpress.org/2022/09/13/symfony-deprecation-log-channel/) - Are you annoyed of too many deprecation warnings in you logs of your symfony app?Probably yes because it is really a lot of noise.However deprecation logs are still useful to ensure future compatibility of your app. So since version 5.1 symfony will log deprecations to a dedicated log channel when it exists and ships with - [Twig Extension for Money value object](https://nerdpress.org/2016/03/12/twig-extension-for-money-value-object/) - Update!!sebastianbergmann/money was abbandonend and the extension was ported to use https://github.com/moneyphp/money instead. I just released a twig extension for https://github.com/sebastianbergmann/money The money libary contains a money represention based on the currency's smallest unit to provide a more accurate handling. See the libary's readme for more information. Although the v1.x version of Money brings a Formatter - [Converting umlaute with symfony String component](https://nerdpress.org/2022/07/18/converting-umlaute-with-symfony-string-component/) - There are multiple PHP native ways to convert umlaute and other special characters to ascii save formats, but most of them i experience insufficient in the one or other way. Since i am using symfony anyway i can use the String component which has a handy slugger which converts any characters into safe ascii characters.It - [Silverstripe file credits addon](https://nerdpress.org/2022/07/13/silverstripe-file-credits-addon/) - I released a new small Addon (or Module or Plugin) for SilverStripe CMS which adds a credits tab to the FileAdmin, so you can add f.e. the copyright holder of the image or any file. Useful when you need to name credits, licence and source links for any asset used on your SilverStripe site. https://github.com/ivoba/silverstripe-file-credits - [Disable SilverStripe deprecation warnings in PHP8.1](https://nerdpress.org/2022/04/22/disable-silverstripe-deprecation-warnings-in-php8-1/) - Since SilverStripe 4.10 is not yet fully ready for PHP8.1 you wil receive quite some deprecation warnings in dev mode when you are brave and run it nonetheless on PHP8.1. Deprecated: SilverStripe\Config\Collections\MemoryConfigCollection implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) - [Filter a csv file with nodejs streams](https://nerdpress.org/2022/01/17/filter-a-csv-file-with-nodejs-streams/) - So we have a CSV file with a member list and we want to filter all empty emails. FirstName,LastName,Email Max,Mustermann,max@mustermann.de Maxi,Hasnoemail, With nodejs streams this is almost a one liner. We will use the csv package from the CSV project which has some sophisticated packages to parse and transform csv data with nodejs streams. npm - [Adminer for Sqlite in Docker](https://nerdpress.org/2019/10/23/adminer-for-sqlite-in-docker/) - Recently i wanted to use Sqlite with Adminer in Docker and it turned out to be not so easy. I actually thought i could just declare Adminer in a docker-compose.yml file with a volume mounted, similar as i would do for adminer with mysql. Update: Today i would rather use the IntelliJ Database Tool for - [Testing Deprecations with PHPUnit](https://nerdpress.org/2022/04/04/testing-deprecations-with-phpunit/) - When testing deprecations with PHPUnit greater than 9.5.10 you might encounter this error: Failed asserting that exception of type "PHPUnit\Framework\Error\Deprecated" is thrown. The code in the test is as follows: $this->expectDeprecation(); and the code that should be tested is like this: \trigger_error('foo', \E_USER_DEPRECATED); However PHPUnit does not convert the deprecation to a testable error.By default - [Class "Psr\Log\Test\TestLogger" not found](https://nerdpress.org/2022/03/04/class-psrlogtesttestlogger-not-found/) - The psr/log package used to have not only the Interface for PSR-3 Logger, but also actual implementations of the interface like the TestLogger.The TestLogger could be used as mock for any PSR-3 Logger in your test cases. However from v3 the TestLogger was removed, so that the psr/log package would focus solely on the Interface. - [ImageMagick: unable to read font](https://nerdpress.org/2021/12/21/imagemagick-unable-to-read-font/) - I was about to integrate Github Actions to one of my pet projects but the tests failed with: convert-im6.q16: unable to read font `helvetica' @ error/annotate.c/RenderFreetype/1338. In the project i was using ImageMagick convert command directly as sub process and obviously some fonts where missing.Makes sense because i used convert to add text to an - [Migrating user table from Mysql to Postgres with Symfony and Doctrine](https://nerdpress.org/2021/11/10/migrating-user-table-from-mysql-to-postgres-with-symfony-and-doctrine/) - When using bin/console make:entity on Mysql and then later you switch your application to Postgres and you have a table called user, which you most likely have when using security component of Symfony.Then you will receive an error because user is a reserved word in Postgres! An exception occurred while executing 'INSERT INTO user (id, - [Recreate pruned docker networks with docker-compose](https://nerdpress.org/2021/09/27/recreate-pruned-docker-networks-with-docker-compose/) - So here is nice chain of docker errors and its solution.1. Docker has reached its maximum of created networks and errors like this: ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network The easiest (and most brute though) solution to this is to prune all networks, - [docker-compose network not found](https://nerdpress.org/2020/01/27/docker-compose-network-not-found/) - Recently i more often encounter this strange error in my docker-compose setups while bringing up the containers with docker-compose up: ERROR: for docker_myproject_phpmyadmin_1 Cannot start service mg_myproject_phpmyadmin: network 15dff95a23808fe9d14b3dae71c0daeaa8b274c90566baa5beff37f3738033b6 not found For some reason the networks were deleted and docker-compose doesnt automatically recreate networks unless you tell so by forcing docker to recreate containers: docker-compose - [Migrating from gulp to esbuild](https://nerdpress.org/2021/07/23/migrating-from-gulp-to-esbuild/) - Esbuild is the new cool kid in the bundler world.It is super fast since its written in Go and comes with a lot of builtin features for modern frontend development. So i wanted to try it myself and migrated a former gulp build to esbuild. But as it showed the gulp build was not so - [Passing a boolean to the constructor of "Symfony\Component\Dotenv\Dotenv" is deprecated](https://nerdpress.org/2021/04/12/passing-a-boolean-to-the-constructor-of-symfonycomponentdotenvdotenv-is-deprecated/) - You might encounter this deprecation message after your upgrade to symfony 5.1 in your symfony project: Since symfony/dotenv 5.1: Passing a boolean to the constructor of "Symfony\Component\Dotenv\Dotenv" is deprecated, use "Dotenv::usePutenv() To fix this, go to config/bootstrap.php and remove the false from the Dotenv constructor:(new Dotenv(false))->loadEnv(dirname(DIR).'/.env');to(new Dotenv())->loadEnv(dirname(DIR).'/.env');See: https://github.com/symfony/symfony/issues/37195 Actually the file config/bootstrap.php has been removed - [vServer SPF Spamfilter von Plesk und Thunderbird](https://nerdpress.org/2009/11/19/vserver-spf-spamfilter-von-plesk-und-thunderbird/) - Kauft man einen vServer kommt in der Grundausstattung erstmal viel Spam ungefiltert durch, es sei denn man tut was dagegen. Alles umleiten auf Gmail ist eine Lösung, aber Google muss nicht alle meine Mails haben, daher mal schauen was Plesk einem so bietet. Unter Server -> Mail gibt es eine "SPF spam protection", also die - [EU/VAT - Mehrwertsteuer Madness](https://nerdpress.org/2021/03/30/eu-vat-mehrwertsteuer-monkey-madness/) - How to calculate VAT rates for EU countries the easy way with PHP. A library that conveniently handles all the heavy lifting for you. - [TinyMCE + symfony AdminGenerator + sfAssetsLibraryPlugin](https://nerdpress.org/2009/09/16/tinymce-symfony-admingenerator-sfassetslibraryplugin/) - Die 3 in symfony kombinieren? (K)Ein Problem: Plugin installieren TinyMCE runterladen https://www.tiny.cloud// (da sowieso jquery im Einsatz ist, dort die jquery variante) - TinyMCE kopieren ins Projekt: /web/js/tiny_mce/ - js einbinden in der view.yml - in der generator.yml TinyMCE anmelden Interessant dabei ist, daß die Angabe in der generator.yml reicht, zumindest in Verbindung mit dem - [Silverstripe Complex Fields](https://nerdpress.org/2009/09/13/silverstripe-complex-fields/) - Silverstripe ist ja ein Superding. Problematisch nur hin und wieder, dass die Dokumentation nicht allzuviel hergibt und das Ding intern teils etwas eigenwillig geschrieben ist. So ist der ORMapper eher für Routineaufgaben geeignet, komplexere Anforderungen erfüllt man besser "zu Fuß". Und die DBFields ... tjaja. Nirgends (?) steht geschrieben, wie man denn die magisch überladenen - [mit Jquery eine Form auslesen und mit Ajax Post versenden](https://nerdpress.org/2009/10/02/mit-jquery-eine-form-auslesen-und-mit-ajax-post-versenden/) - Will man die Values einer Form dynamisch holen und mit Ajax verschicken mit Jquery muss man wohl einiges beachten. Eine gescheite -outthebox- Lösung scheints da nicht zu geben bzw. ich hab sie nicht gefunden. 1. Daten holen Die Daten holt man am besten über die Jquery Methode serializeArray(). Damit holt Jquery alle Values in dieser - [Silverstripe Setup Script](https://nerdpress.org/2012/02/09/silverstripe-setup-script/) - We thought we had to improve our SilverStripe setup script for our development environment. So Max and me rewrote it to add submodules and some other improvements. Just run: and you have silverstripe project folder structure the tutorial theme a already filled git repository sapphire as submodule cms as submodule Uploadify as submodule DataObjectManager as - [modulo in Twig](https://nerdpress.org/2012/02/14/modulo-in-twig/) - Ever wondered how to use the modulo operator in twig, the template engine of symfony? Actually its like in PHP: As described here But i guess for most use cases modulus is used to check if a number is divisible by another number. Therefore Twig has the very conveniant divisible by test function. Another modulo - [Docker-compose and Unknown MySQL server host](https://nerdpress.org/2020/12/08/docker-compose-and-unknown-mysql-server-host/) - In case you encounter this error with mysql and your docker-compose setup: Unknown MySQL server host ... and you dont know why because everything seems to be correct. Then you might have an upgrade problem with mysql because you are reusing an old volume that was created for another mysql version.This can happen when - [Umlaut domain problems](https://nerdpress.org/2020/07/17/umlaut-domain-problems/) - Living in an umlaut country like Germany umlaut domains are sometimes requested.But: Umlaut domains resp. Internationalized Domain Names (IDN) are problematic. My main pain points were these: Browsers tend to convert the unicode representations to ASCII Compatible Encoding (ACE) with punycode representations for security reasons when copying the url.So you will get a nice surprise - [Psalm Static Analyzer fails with Symfony's builtin preloading file](https://nerdpress.org/2020/10/20/psalm-static-analyzer-fails-with-symfonys-builtin-preloading-file/) - So i updated a symfony app the other day to version 5.1.6 and suddenly the static code analyzer psalm ran appearently in an hangup loop and never terminated. After some investigation it showed that symfony added a .preload.php file to the src directory to enable the new PHP7.4 preloading feature. Unfortunatly psalm parsed this file - [Updating OXID eShop to 6.2.0](https://nerdpress.org/2020/04/20/updating-oxid-eshop-to-6-2-0/) - Oxid eShop 6.2 is released and its a good step forward to a modernized codebase, embracing best practices and more symfony-like patterns. Since i do a lot of coding with symfony besides OXID i was very exited about this new version. So i gave it a try and updated one of the shops i maintain. - [Disable symfony deprecation warnings in PHPUnit tests](https://nerdpress.org/2019/08/29/disable-symfony-deprecation-warnings-in-phpunit-tests/) - Symfony's deprecation warnings while running tests is a great service to keep track with upcoming changes in newer symfony versions. However these warnings can break your CI/CD pipeline and sometimes you cant fix all deprecation warnings immediatly. To disable them you can set the ENV var SYMFONY_DEPRECATIONS_HELPER=disabled and the warnings will not be displayed anymore - [Hersteller Url umnennen in OXID eShop](https://nerdpress.org/2019/03/27/hersteller-url-umnennen-in-oxid-eshop/) - Hersteller Url umnennen in OXID eShop - [Apache upgrade : Unknown Authz provider: from](https://nerdpress.org/2019/01/18/apache-upgrade-unknown-authz-provider-from/) - For the record: If you ever encounter this error while upgrading Apache webserver 2.2 to 2.4: Unknown Authz provider: from Then you probably made a mistake replacing: allow from all with Require all granted And just replaced allow with Require and not the complete directive, like: Require from all Then its time for a double - [Directories settings in PHPStorm and IntelliJ Ultimate](https://nerdpress.org/2018/12/29/directories-settings-in-phpstorm-and-intellij-ultimate/) - I recently switched from PHPStorm to IntelliJ Ultimate because of some Java. But still i am working a lot on PHP and symfony projects. One thing i usually do on symfony projects in PHPStorm is to edit the "Directories" in the settings to avoid having results from var/cache or var/logs in the search results. Also - [Symfony Cache Component with SncRedisBundle](https://nerdpress.org/2016/08/23/symfony-cache-component-sncredisbundle/) - Since version 3.1 there is a Cache component with a PSR-6 implementation integrated in Symfony. So we do not need to add a 3rd party lib as Doctrine Cache anymore when we need caching these days. Doctrine Cache does the job but by implementing a standard the Symfony Cache seems to have another advantage besides - [mocking APIs with Guzzle](https://nerdpress.org/2017/12/11/mocking-apis-with-guzzle/) - When working with APIs you sometimes cant use the live API in the tests. Because you dont own the API, dont want to spam, cant create entities for testing or various other reasons. Then you need to mock the API and deliever responses from fixtures. Though there is this term of "Don't mock what you - [Splitting Swagger API Documentation yaml files](https://nerdpress.org/2017/10/01/splitting-swagger-api-documentation-yaml-files/) - When documenting your API with Swagger/Swagger-UI, one really cool feature to use is the $ref syntax. As Swagger documentation files tend to get real large und hard too read, splitting the config across multiple files might be a good idea. With $ref you could do this quite easily. For example you could reference a single - [Using forks with composer - late night edition](https://nerdpress.org/2015/01/19/using-forks-composer-late-night-edition/) - Using your forks of certain packages with composer is actually pretty easy: Add the repo of the fork to the repositories block of your composer.json, you might need to change the version to f.e dev-master and thats it. Great. Actually. But there are some traps, especially when you are mentally already weekend bound: When working - [Symfony Workflow Component: Dump workflows as PDF](https://nerdpress.org/2017/11/07/symfony-workflow-component-dump-workflows-pdf/) - One very cool feature of the Symfony Workflow Component is the ability to export workflows via graphviz. Did you know you can also directly render those as PDF files? It's actually quite easy. Like so: - [Symfony development with docker on a mac](https://nerdpress.org/2016/05/07/symfony-development-docker-mac/) - I recently started to do all PHP development with docker, since I was just tired of installing tons of dev libraries on my machine. Most of which i couldn't even remember what they actually were good for. When I first tried docker (docker-toolbox for mac) I was really disappointed how slow symfony apps ran inside - [Symfony and Angular: shared translations](https://nerdpress.org/2017/09/04/symfony-and-angular-shared-translations/) - Angular for frontend with symfony delivering the data have become quite a common setup. When working with this constellation you will sooner or later come across the i18n topic. Most likely you would want to share translations between front- and backend. So that you could keep translations in one single location while using it for - [Not allowed to connect to Mysql error in docker](https://nerdpress.org/2017/09/07/not-allowed-connect-mysql-error-docker/) - From time to time i receive this error while running the official mysql image in docker: An exception occured in driver: SQLSTATE[HY000] [1130] Host '172.17.0.5' is not allowed to connect to this MySQL server The reason for this is not quite clear yet but i usually resolve it like described here. Note that all data - [Caching Data in Symfony2](https://nerdpress.org/2012/07/10/caching-data-in-symfony2/) - Symfony2 has a great Caching Layer based on its HTTP Cache. But this aims mainly on caching the views. In some apps however you need to cache data behind the scenes, f.e. responses from API calls or custom objects sets. Symfony2 itself doesnt have such a functionality on first sight (symfony2 doesnt, but Doctrine, see - [SilverStripe with php built-in server](https://nerdpress.org/2016/06/21/silverstripe-php-built-server/) - Sometimes you just want to check a SilverStripe version, module or theme fast and dont want to setup the whole stack. Then simply use PHPs built-in webserver to serve your SilverStripe site. Now you can call http://localhost:8000 to check your SilverStripe website. Or, a bit more verbose, use https://github.com/assertchris/silverstripe-serve which is a nice wrapper around - [Superleansilexplate Update v3](https://nerdpress.org/2016/02/11/superleansilexplate-update-v3/) - Some news from the Superleansilexplate: v3 now uses symfony3 components Silex 1.3 supports symfony3 so lets use it :) Note: as symfony3 doesnt support php5.4 anymore, we dont either! new ConsoleServiceProvider the one from knplabs that was used before seems to be unmaintained and wasnt matching the dependencies anymore. So i decided to take it - [PHP package generators](https://nerdpress.org/2015/09/10/php-package-generators/) - For creating PHP packages several best practices has been established, like composer support (ofc) and putting the package on packagist, travis integration, directory organisation, tests, documentation and so on. For further information i recommend these slides https://laravel-news.com/2015/08/hannes-van-de-vreken-package-development-slides/ which describe the situation very well. And as we are all lazy, we like generators that scaffold a - [RegExpBuilderPHP - PHP Regular Expression Builder](https://nerdpress.org/2015/02/13/regexpbuilderphp-php-regular-expression-builder/) - There this really useful tool for JS, called RegExpBuilder. It enables you to build regular expressions with a nice human-readable & chainable syntax. (read more about it here and here) As it's not that much lines of code, I decided to do a port for PHP - et voila: https://github.com/gherkins/regexpbuilderphp This is basically regex with - [Symfony and named ParamConverters](https://nerdpress.org/2014/12/15/symfony-named-paramconverters/) - Symfony's ParamConverter is a common way to transform some GET param to an entity before your controllers action. This happens most of the time via type hinting and priority detection kinda magic in the background. But as magic is often obscure sometimes you need a bit of explicitness. F.e. when you have more and different - [Symfony2 "urlize"](https://nerdpress.org/2014/12/01/symfony2-urlize/) - I have often missed the method from Doctrine1 in Symfony2 with Doctrine2. Of course there's the doctrine extensions with the sluggable behaviour, but sometimes it seems a bit overhead for smaller tasks. I just recently discovered Behat Transliterator, which brings just the dearly missed urlize function back. Just do As it's an abstract class, you'll have to create your - [HTML5 - Sammlung von Ressourcen, Dokus und Browser-Fallbacks](https://nerdpress.org/2010/11/27/html5-sammlung-von-ressourcen-dokus-und-browser-fallbacks/) - Hier mal eine anfänglich kleine Sammlung zum Thema HTML 5 generell - grob kategorisiert. Vervollständigungen und Streichungen willkommen. Cross Browser Helper Html 5 Validator (en) http://html5.validator.nu/ Html5 Browser capability test (en) http://html5test.com/ Html readyness - fancy browser comparison (en) http://html5readiness.com/ Modernizr - Cross-Browser Html5 & CSS3 Support (en) http://www.modernizr.com/ Html5Shiv - Html5 for IE (en) - [git deploy with composer install hook](https://nerdpress.org/2014/11/14/git-deploy-composer-install-hook/) - I usually would not recommend deployment via git and running composer on your prod server for several reasons like f.e. the network. I rather believe in builds. But sometimes its just too convenient :) So i have this uncritical smaller API app where the hosting has git, ssh access and i am in full control - [Enable Twig-Extensions in Silex](https://nerdpress.org/2011/11/21/enable-twig-extensions-in-silex/) - UPDATE Please have look here for a updated version. Note: its about Twig-extensions not about the former "Silex Twig Extension", this now called TwigServiceProvider. First fetch the Twig-extensions code and put them in your vendor dir: Then register the autoloader by using registerPrefixes: You will need to register the TwigServiceProvider itself: And eventually enable the - [Enable Twig-Extensions in Silex revisited](https://nerdpress.org/2014/05/05/enable-twig-extensions-silex-revisited/) - As of 2014 things have changed improved a lot in the Symfony / Silex world, compared to 2011, when i first blogged about twig extensions in Silex. Things got more easy, yay! As Composer appeared, installation and autoloading is a breeze nowadays. I presume here, that you have installed your Silex project via composer. If - [SilverStripe LinkField addon](https://nerdpress.org/2014/03/26/silverstripe-linkfield-addon/) - Alright folks, so here is the SilverStripe addon of the month: https://github.com/sheadawson/silverstripe-linkable Its the missing LinkField, you might look for. There are some more addons for a LinkField out there, but this one is the best. No wonder, the author is SilverStripe employee. It features: external links link validation link a page from your site - [bower, require.js, masonry & imagesloaded](https://nerdpress.org/2014/01/28/bower-require-js-masonry-imagesloaded/) - Wanna run masonry with imagesloaded in require.js, powered by bower? Try this gist! First create your bower.json file and run bower install Then configure require.js and then code the app: Its scrabbled together from http://masonry.desandro.com/appendix.html and various StackOverflow posts. - [Using Silverstripe Templates outside Silverstripe](https://nerdpress.org/2013/11/15/silverstripe-templates-outside-silverstripe/) - In a recent website-project i had a Wordpress Blog running next to the main CMS Silverstripe, handling the Blog-part of the site. Integrating the Blog in Silverstripe (which indeed would have made things simpler) was not an option at the time. The usage of loads of Wordpress plugins would've made a rewrite a major task, which - [[Symfony 2][Assetic] Sass, CompassFilter + Foundation Responsive Front-end Framework](https://nerdpress.org/2012/10/26/symfony-2assetic-sass-compassfilter-foundation-responsive-front-end-framework/) - Did you ever wonder how to enable 3rd party plugins (or so called "frameworks") within the great compass toolset managed by assetic in your edgy symfony 2.1 project? (If there is more extensive documentation available concerning assetic + CompassFilter, please stop reading on and let me know!) If you take a look at the filter - [more Silverstripe bookmarklets](https://nerdpress.org/2013/05/31/more-silverstripe-bookmarklets/) - Since the Silverstripe-Developer Bookmarklets on ssbits.com are great, i thought it would be even better to have them as a editable/extendable collection: So here are some more as a JSFiddle: http://jsfiddle.net/HMkad/2/embedded/result/ If you'd like to extend the collection just edit the markup in the fiddle. And add something like this: ...or this: Have fun! - [Rename admin menu items in SilverStripe](https://nerdpress.org/2013/05/28/rename-admin-menu-items-in-silverstripe/) - SilverStripe 3.0.x cheap trick of the week: If you want to rename a menu item in the SilverStripe Admin Area, because f.e. you find "Security" or "Sicherheit"(since we are german ;)) a too harsh wording and you prefer "Members" or "Benutzer": simply override the translation! Add a lang folder in your project folder and add - [JSfiddle Bookmarklet Generator with jQuery & Codemirror](https://nerdpress.org/2013/03/08/jsfiddle-bookmarklet-generator-with-jquery-codemirror/) - This is a little bookmarklet generator i put together this morning: http://jsfiddle.net/QMeuV/1/embedded/result/ Its hosted on jsfiddle.net and enables you to create Bookmarklets which use jQuery based on the code i found here: http://coding.smashingmagazine.com/2010/05/23/make-your-own-bookmarklets-with-jquery/ It also features Javascript Syntax Highlighting using http://codemirror.net/. *UPDATE* this tool now (also) lives on https://github.com/gherkins/bookmarklet-generator - [SilverStripe speed up Portfolio Sites with Static Publisher ](https://nerdpress.org/2013/02/05/silverstripe-speed-up-portfolio-sites-with-static-publisher/) - A common site type that we build are portfolio pages which mostly get filled once in the beginning and then only periodically, rather rarely. They also have almost never User interaction from the Frontend. So we consider them as almost "readonly" sites. These sites you can easily speed up "dramatically" with the SilverStripe builtin StaticPublisher. - [Silverstripe RedirectorPage open external Link in new window](https://nerdpress.org/2012/12/08/silverstripe-redirectorpage-open-external-link-in-new-window/) - Silverstripe Tip of the Week: If you want to open a "Other website URL" Link of a RedirectorPage in a new window with target=_blank, you can use the following snippet: Edit: Or this one: found here: http://www.silverstripe.org/general-questions/show/9600 Hope it Helps! - [Silverstripe remove CustomScript](https://nerdpress.org/2012/12/31/silverstripe-remove-customscript/) - Silverstripe Tip of the week: Sometimes you have to remove a customScript of a module, because you want to script it differently. If the module author was so wise to give his customScript a ID (UserFormsValidation in this case) like they did in UserForms: then you can do the following in the init function of - [Create Google XML (Image) Sitemaps in PHP](https://nerdpress.org/2012/10/20/create-google-xml-image-sitemaps-in-php/) - Ever wanted to create a Google XML Image Sitemap? This is how it could be done with PHP: That's about it. I found it kind of tricky to figure out how to use googles namespaces when working with SimpleXML, so hopefully this might help someone :) - [Symfony2 from YAML to XML configuration](https://nerdpress.org/2012/10/12/symfony2-from-yaml-to-xml-configuration-2/) - Actually i was a fan of YAML regarding the configuration files of Symfony2. This was probably because i was used to it since symfony 1.4 and i also thought its better readable. Its partly still true, but my Netbeans Editor has some problems with using @ in YAML and this breaks my highlighting. So the - [mashcloud.net - mashup soundcloud audio tracks](https://nerdpress.org/2013/01/24/mashcloud-net-mashup-soundcloud-audio-tracks/) - mashcloud.net is an experiment on collaborative realtime audio editing and music creation. I did the project within the frame of my BA thesis in audio production last year. As I moved the code to github this week, I wanted to give a quick overview of the project and its technical underlyings, just in case someone might - [Check if a country is an EU country in Magento](https://nerdpress.org/2012/10/06/check-if-a-country-is-an-eu-country-in-magento/) - I you ever wondered how you can check if a Country, resp. a Country Code, is in the EU, i did the following: Magento has a config value: eu_countries that lists all Countries of the EU. You can find it in the backend under: Configuration -> General -> Country Options. Against this list you can - [Opengraph MetaTags in SilverStripe](https://nerdpress.org/2012/06/14/opengraph-metatags-in-silverstripe/) - First off some general thoughts on how to use opengraph metatags. Since the uprise of Social Media, sharing sites, deeplinking and snippetting content has become a important aspect of SEO and so almost every site has some kind of facebook-like-button to let user easily share the page. Most sharing endpoints, facebook f.e, bring a more - [Symfony2 Starter Tweaks](https://nerdpress.org/2012/05/23/symfony2-starter-tweaks/) - When you start with symfony you probably use the Symfony Standard Edition. This is a quite good start but there are somethings that helped me and might help you aswell. Since every beginning is "schwer" :) So here there are. 1. replace web/app*.dev with the following index.php its much nicer to use the DirectoryIndex in - [Silverstripe Profilable module](https://nerdpress.org/2012/05/03/silverstripe-profilable-module/) - This is a reoccuring requirement: you need a profile for some object in your project. FE you have a company, a member or a location that should get an address, a marker on the map, an icon, homepage etc. So I created a small silverstripe module that adds a profile tab to any object you - [how to add placeholder attributes in Silverstripe Userforms Module](https://nerdpress.org/2012/04/19/how-to-add-placeholder-attributes-in-silverstripe-userforms-module/) - to be honest i didn't find a clean way yet, but i thought this workaround might be worth sharing. ...since Silverstripes' Userforms Module Uses jQuery for Validation you can put these lines of code in your UserDefinedForm.ss Template: This will iterate over the labels in the form , build placeholder attributes from each one and - [Hosting multiple Express (node.js) apps on port 80](https://nerdpress.org/2012/04/20/hosting-multiple-express-node-js-apps-on-port-80/) - In the last days, i was trying to find a solution hosting multiple Express apps on my vServer the same Server. Starting with Apache and mod_proxy, i ended up with a plain node solution, which i really like. Let's take a quick look on some different approaches out there: ---1--- Using apache on port 80 - [javascript benchmarking with jsperf](https://nerdpress.org/2012/04/11/javascript-benchmarking-with-jsperf/) - I might be a bit late (yeaikno it exist over a year now and a bunch of blogs had it covered) but nevertheless i would like to point out a very helpful online tool i recently ran into: jsPerf Its basically a online benchmark tool for testing different approaches in javascript. It covers some important - [Tools for jade template development](https://nerdpress.org/2012/04/09/tools-for-jade-template-development/) - I recently started digging into node.js and the express framework. One thing i like about it is that it comes with the beautiful jade template engine by default. Here are some things that come real hany when you are working with jade. This one really saved my mental health in more than one case. Just - [[Symfony 2] composer.json for a assumed-stable symfony 2 distribution](https://nerdpress.org/2012/04/01/symfony-2-composer-json-for-a-assumed-stable-symfony-2-distribution/) - This small composer.json file is used in a project i am working on atm, feel free to use it at own risk. I will provide non-periodical updates and hopefully soon a full upgrade to symfony 2.1.x including doctrine orm 2.2.x. I still did not get the point regarding dependency resolution, so i simply "composed" the - [Silverstripe - has_many- and many_many-relations when duplicating pages](https://nerdpress.org/2012/03/07/silverstripe-has-many-and-many-many-relations-when-duplicating-pages/) - When you duplicate a page in the Silverstripe Sitetree, related "has_one" Items are automatically copied, which is nice. But if you have, lets say, multiple related images on that Page, those are not copied when you duplicate that Page. After reading this discussion, i found out that it's actually pretty easy to "fix" this. This - [run JavaScript code in PHP 5.3 with the v8js extension](https://nerdpress.org/2012/03/09/run-javascript-code-in-php-5-3-with-the-v8js-extension/) - ...for some reason i needed to get t h i s to work before going to sleep. I'm running OSX 10.7.3 with macports which usually does the job, but Google's V8 Javascript Engine is not available as a port yet. So... homebrew to the rescue: installed it: and installed v8 wait, this seems too easy. - [Silex and MongoDB simply](https://nerdpress.org/2012/01/30/silex-and-mongodb-simply/) - Using MongoDB in your Silex Project is quite easy. I will show this with my Superleansilexplate and will integrate it there as an example. Since i dont want to integrate MongoDB in Superleansilexplate it will just become an additional gist. Given you have some smaller amount of data like a counter that needs to be - [extend SilverStripe memberprofile module](https://nerdpress.org/2012/01/16/extend-silverstripe-memberprofile-module/) - Alright, SilverStripe again, still our CMS of choice. Today i'd like to promote a very helpful module that provides Register and Profile Pages for Members for the Frontend. The memberprofiles module. It comes with a lot of features and customize options for nearly everthing you might need for Frontend Member Handling. Further it is fully - [vim2html](https://nerdpress.org/2010/02/09/vim2html/) - Meinen Lieblingseditor vim brauche ich an dieser Stelle ja nicht en detail vorzustellen. Ein Feature allerdings, über das ich erst nach jahrelanger Nutzung gestolpert bin, passt sehr gut ins nerdpress: 2html. Was dieses Kommando macht? Na, HTML-Code aus dem Inhalt des aktuellen Puffers as is erzeugen - optional mit Zeilennummern und CSS-Code. Und so geht - [thank gawd it’s online #3](https://nerdpress.org/2011/12/30/thank-gawd-it-s-online-3-2/) - A little making of history from duckduckgo search engine. http://www.gabrielweinberg.com/blog/2011/12/duckduckgo-used-to-run-out-of-my-basement.html LinkedIn node.js performance tricks http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performance-tips-linkedin-mobile introducing PHP's composer http://nelm.io/blog/2011/12/composer-part-1-what-why/ promoting PHP's composer http://nelm.io/blog/2011/12/composer-part-2-impact/ node.js and PHP http://bergie.iki.fi/blog/dnode-make_php_and_node-js_talk_to_each_other/ JavaScript API for zooming http://lab.hakim.se/zoom-js/ Gadget: little printer http://vimeo.com/32796535 jQuery Animations with automatic CSS3 transitions when possible http://playground.benbarnett.net/jquery-animate-enhanced/ Batman.js is a framework for building rich web applications with - [Expeditions in the Cloud](https://nerdpress.org/2011/12/17/expeditions-in-the-cloud/) - Caution: Scepticism ahead! So i'd like to share some of my experiences in the cloud since i am still trying to figure out if it its worth for me or if i am better suited with an VPS. Maybe somebody feels like feedbackin. I tried PHPFog for PHP and no.de by joyent for node.js. First i - [Silex and the HTTP_CACHE](https://nerdpress.org/2011/11/29/silex-and-the-http-cache/) - The HTTP_CACHE resp. the reverse proxy of Symfony is a pretty cool thing. And as it is build-in Silex it can speed up the already fast micro framework massivly, wich is good for me, as i am mainly workin with Silex right now. To enable it you have to register it first like its shown - [Sending invalid Unicode via socket.io](https://nerdpress.org/2011/11/16/sending-invalid-unicode-via-socket-io/) - Well you can try to, but it will end up almost probably in an disconnect which is caused by the browser. As i have learned here. Given you have a string which contains invalid unicode like: This will trouble the browser and the socket connection. If you prepare your json with PHP and json_encode the - [OXID eshop routing](https://nerdpress.org/2011/11/14/oxid-eshop-routing/) - If you wonder about routing in OXID eshops or how the URL structure is here are some hints: OXIDs MVC, well thats some kind of different naming and you have to get used to: the M (Model) you find in /core the V you find in in your templates in /out, there the main view - [Silex Starter Stubs](https://nerdpress.org/2011/11/04/silex-starter-stubs/) - There are several preconfigured Silex Apps on github. They let you start your Silex project in no time, which is good. This makes Silex an even more simple rabbithole into the symfony2 world. I started one myself and had a close look on the others, so i thought i share this. They all differ a - [tell redis db to not persist](https://nerdpress.org/2011/10/27/tell-redis-db-to-not-persist/) - redis persists its memory data in snapshot style in every n seconds depending on your configuration. read more here. perhaps you would like to use redis as a pure in-memory db, like f.e. memchache. you can tell redis to not persist and save some bits&miliseconds. this could be the case when using redis as a - [thank gawd it’s online #3](https://nerdpress.org/2011/10/21/thank-gawd-it-s-online-3/) - ... aaaand these are the links: Dynamic "responsive" Texts: http://worrydream.com/Tangle/guide.html via (codediesel) When to use Silex or not!? ...incl. some nice discussions in the comments: http://test.ical.ly/2011/10/11/is-there-a-specific-situation-when-to-use-a-php-micro-framework-like-silex/ Flickrs Push API speech: http://code.flickr.com/blog/2011/10/11/talk-real-time-updates-on-the-cheap-for-fun-and-profit/ The World is my touchscreen http://www.gizmodo.de/2011/10/18/omnitouch-macht-die-welt-zum-touchscreen.html Can I Use... Compatibility tables for support of HTML5, CSS3, SVG and more in desktop and mobile browsers - [[Symfony 2][Twig] - Enabling (native) Twig Extensions](https://nerdpress.org/2011/10/19/symfony-2-twig-enabling-native-twig-extensions/) - Twig Extensions is a tiny official repository for extensions to the Twig templating markup language, the default templating engine in each Symfony 2 (Standard Ed.) project. This short article shows how to purposeful enable them per-environment for your projects. The twig-extension repository is usually fetched by calling into your project´s ./vendor directory (because it is - [[Symfony 2] Security Bundle: Set User Locale on Form Login](https://nerdpress.org/2011/08/14/symfony-2-security-bundle-set-user-locale-on-form-login/) - Anleitung, wie die User-Locale on Login unter anderem über den Symfony Event-Dispatcher zu setzen ist. - [Symfony 2 - Set Default Locale On Form Login #2](https://nerdpress.org/2011/10/13/symfony-2-set-default-locale-on-form-login-2/) - A small update/correction out of sequence: A few weeks ago i described how to hook into the form login process in order to change the user session´s locale. In the meantime a non backwards compatible code modification has been introduced that outdated this article. From now on (Symfony 2.0.4) the locale and default locale settings - [Silex, Twig und HTML5 BoilerPlate](https://nerdpress.org/2011/10/12/silex-twig-und-html5-boilerplate/) - Alright, there is a bundle for H5BP for symfony2 and there is Assetic, you can probably use both with Silex and thats just fine. But in case you want to keep your Silex project lean (since its micro) you can use Twig and H5BP only and build / deploy your app from the outside. With - [thank gawd it’s online #2](https://nerdpress.org/2011/10/07/thank-gawd-it-s-online/) - it has been a nice week and those are the links: today some node.js resources: node, jquery and more http://dailyjs.com some cool tutorials http://howtonode.org/ two pro-firms thatwork with node and blog about it, great! http://blog.nodejitsu.com/ http://www.debuggable.com/blog and furthermore ... Javascript text2speech (!) http://syntensity.com/static/espeak.html this weeks css3 generator looks shopped http://layerstyles.org/ HTML5 insertAdjacentHTML http://updates.html5rocks.com/2011/08/insertAdjacentHTML-Everywhere - [nodejs plugin for netbeans](https://nerdpress.org/2011/10/05/nodejs-plugin-for-netbeans/) - Over the weekend i looked for a plugin for node.js in netbeans and ended up tryin this one: http://timboudreau.com/blog/read/NetBeans_Tools_for_Node_js Actually its all said on the post itself: installation, features and restrictions. So go and read it. Its still a bit early stage and only runs on a nightly-build netbeans but it already has some helpful - [how to not cache the footer in magento](https://nerdpress.org/2011/10/04/how-to-not-cache-the-footer-in-magento/) - With some advanced scheduled-post-voodoo i successfully managed to publish this post already yesterday with some completely unrelated queries and no text. this was not intended - please accept my apologies :P Anyway: In the footer of my magento shop we might have a summary of the shopping cart, which i simply put in the footer.phtml - [thank gawd it's online #1](https://nerdpress.org/2011/09/30/thank-god-it-s-online/) - Welcome to the first episode of our weekly link-list, which will appear every friday most likely on fridays. yet another CSS3 generator http://www.css3.me/ yet another CMS http://www.fork-cms.com/ article about PHP 5.4's traits http://www.phpgangsta.de/der-klasse-neue-kleider-traits 40 SEO Strategies for Ecommerce Websites | Kaiserthesage http://kaiserthesage.com/seo-strategies-for-ecommerce-websites-2/ Deploy your Silex and Twig powered Facebook App using Git onto free Heroku - [2 ways to your offline wikipedia](https://nerdpress.org/2011/09/28/2-ways-to-your-offline-wikipedia/) - ... for whatever reason you might need that ;) For both ways you will need the dumps, you get them here: http://dumps.wikimedia.org/dewiki/latest/ The main dump is the pages-articles.xml.bz2 if you want the categories as well, you need the category.sql.gz and categorylinks.sql.gz too. The pages file is quite huge and will take you probably about 4 - [set up magento in multiple environments](https://nerdpress.org/2011/09/27/set-up-magento-in-multiple-environments/) - I just started digging in the shop software magento for a project and set up the following development environment. In this scenario development is done on two local machines while products and pages beeing already edited on the "Live"-Web-Server. Git is used for version control and deployment. Also FTP SSH. Magento is quite nice when - [Tilt - 3D DOM visualization](https://nerdpress.org/2011/09/23/tilt-3d-dom-visualization/) - someone just +1'd this nice addon for firefox: (thanks, conrad :) Tilt visualizes the DOM in 3D and is a lot faster than i expected. Although it's flagged experimental it's easily installed and works like a charm on my macbook with Firefox 6. Definetly makes you think twice about your markup nesting level ;) - [PHP odds! today: pass by reference traps](https://nerdpress.org/2011/08/25/php-odds-today-pass-by-reference-traps/) - This is dangerous: This works, but now the $value var is in the array by reference which can lateron lead to: Notice: Array to string conversion EDIT: see below in the comments for when... This works better: Using reference, array_walk und lambda functions works: or that (thanks lars): - [Wunderlist client for Linux](https://nerdpress.org/2011/09/21/wunderlist-client-for-linux/) - Hey, today Wunderlist released a Linux Client for the Desktop. That made me curious about the hyped tool. So I gave it a try on my Ubuntu machine! Open the console and: Then back to the Desktop -> right mouse click: Create Launcher -> filled in the fields -> Command: browsed to Clicked on the Icon - [Migrate to Mongolab](https://nerdpress.org/2011/09/26/migrate-to-mongolab/) - Recently i ran into RAM troubles on my vserver for some reasons, i encountered the evil: So first i suspected mongodb to use up loads of memory as top showed. But after some recherche work i learned mongodb only -seems- to use a lot of memory. see here and here and here The actual usage - [nerdpress language switch](https://nerdpress.org/2011/09/16/nerdpress-language-switch/) - As we also have more pageviews from outside germany lately and we're happy about that, we have decided to continue posting in english from now on. Hope some of you might find it easier that way to figure out what the heck we're talking about... Although our english is not quite perfect, we hope to - [OXID eShop manufacturer long description module and fck editor module](https://nerdpress.org/2011/09/15/oxid-eshop-manufacturer-long-description-module-and-fck-editor-module/) - I recently made my first OXID eShop module: OXID-manufacturer-text-mod Which basically adds a long description field to the manufacturer. This comes just as a normal textarea, as usual in OXID CE. If you would like to add an Richtext Editor, you can purchase the fck Editor module and install it, if you did not already. - [Boilerplate Build mit FTP deploy](https://nerdpress.org/2011/09/13/boilerplate-build-mit-ftp-deploy/) - Da habe ich mir letztens die html5 boilerplate angeschaut und musste feststellen, dass die einen ziemlich guten build mitbringt. Dieser optimiert Bilder, konkateniert und komprimiert alles was so geht, mit Hilfe von u.a. dem YUI Kompressor. Was es noch nicht kann ist der Deploy, aber das kann man ihm ja beibringen ;) Nun denn, direkt - [[Symfony 2] Twig - Global Variables](https://nerdpress.org/2011/09/12/symfony-2-twig-global-variables/) - Schon mal gefragt, welche globalen Variablen in der Twig-Extension eines Symfony 2 (Standard Distri)-Projektes zur Verfügung stehen? Schaut man sich die Klasse GlobalVariables im Namespace Symfony\Bundle\FrameworkBundle\Templating an (diese Klasse ist Teil des Framework-Bundles, d.h., Gleiches gilt ebenfalls für PHP als Template-Maschine), wird einiges klarer. Weiter unten eine Liste der Assessoren, die die Klasse bereitstellt: In - [install silverstripe with some modules from GIT](https://nerdpress.org/2011/09/11/install-silverstripe-with-some-modules-from-git/) - This is a small shell script to set up silverstripe CMS along with some modules i often use (as seen in ivo's post) The script has two parameters: - the folder to clone the whole thing into - the branch/tag to checkout afterwards As Silverstripe itself is split up in 3 repositories (the installer/base folder, - [[Symfony 2] AsseticBundle, Less CSS & YUI Compressor unter OSX installieren](https://nerdpress.org/2011/08/25/symfony-2-asseticbundle-less-css-yui-compressor-unter-osx-installieren/) - Less CSS und YUI-Compressor mit Assetic unter OSX installieren und innerhalb Symfony 2 konfigurieren. - [[Symfony 2] Security Bundle - Benutzer mit username oder email anmelden.](https://nerdpress.org/2011/08/12/symfony-2-security-bundle-benutzer-mit-username-oder-email-anmelden/) - Augenscheinlich unterstützt das Security-Modul in der Standard-Konfiguration nur die Authentifizierung via Benutzername und Password. Wie man sich mit einem Benutzernamen ODER der E-Mail-Adresse und einem Passwort authentifiziert, ist ein wenig versteckt. Das ist die Anleitung, wie es funktioniert. - [obsvr.net](https://nerdpress.org/2011/08/02/obsvr-net/) - Just wanted to mention it here: http://obsvr.net A media search aggregator build by Me and Max, as the wonderfulwebsolutions. Its a luckily distributed wolpertinger of symfony, silex, node.js, jquery, isotope, apache and lighty, more to come. Try it! Its neat! - [install ant ftp task on ubuntu](https://nerdpress.org/2011/07/29/install-ant-ftp-task-on-ubuntu/) - Tired of manually uploading your changes via FTP? And no shell because your client cant/wont buy a hosting package for real men? Then go for ant and its ftp task! Install it on ubuntu like so (given you have ant and java already): Butz! Now make your self an build.xml file in your projects root - [jquery pump effect](https://nerdpress.org/2011/07/25/jquery-pump-effect/) - some new loader effect? this is a small jquery plugin that renders something like a pump or glow effect by switching two css classes with jquery UI transitions in an endless loop. the loop can be stopped by applying a stop class to the element. watch the demo on this almost autogenerated github page: Demo - [Synchronous http request in node.js, that you dont want, probably](https://nerdpress.org/2011/06/28/synchronous-http-request-in-node-js-that-you-dont-want-probably/) - Achtung dummy code! ...and so it goes Asynchronous: fire, fire, fire, fire ... and so it dont, Synchronous then: point - shoot, point - shoot, point - shoot well i didnt know that :) - [install lame on debian lenny](https://nerdpress.org/2011/06/20/install-lame-on-debian-lenny/) - If you are going to install the mp3 en/decoder lame on debian lenny, this is how i got it done: choose your package: http://debian-multimedia.org/pool/main/l/lame/ yay! - [Lighttpd, Plesk und PHP](https://nerdpress.org/2011/06/17/lighttpd-plesk-und-php/) - Will man auf seinem Server(debian) Lighttpd paralell zu Plesk's Apache zum laufen kriegen sollte man auf jeden fall PHP als FPM laufen lassen. Das kommt sich nicht mit dem von Plesk und Apache regierten PHPs in die Quere und ist sowieso schneller und kann auch die Prozesse killen und neuladen. Falls man mal was in - [jQuery .scrollToViewPort()](https://nerdpress.org/2011/06/11/jquery-scrolltoviewport/) - yesterday i found this very useful jQuery-script on github: https://gist.github.com/853841 it moves the users' viewport to show the element that it has been called on. I modified it somehow so that it will check now if the element is already in the viewport. So we can avoid auto-scrolling in that case. A offset Parameter has - [SilverStripe Image Gallery installation](https://nerdpress.org/2011/06/06/silverstripe-image-gallery-installation/) - Theres a lot of old, deprecated and now wrong installation guides for the SilverStripe Image Gallery Module on the web that will lead you to where you dont want to. Dont trust them! Unclecheese made some changes to the module dependencies and also moved to git, some time ago. He now uses the new Uploadify - [symfony 1.4 installer](https://nerdpress.org/2011/05/17/symfony-1-4-installer/) - Ich hab mal einen symfony 1.4 installer shell script auf github gepackt. Damit kann man "ruckizucki" auf Ubuntu ein lokales symfony 1.4 Projekt aufsetzen. Es ist ein fork von einem virtualhost create script und macht folgendes: - holt den letzten symfony 1.4 stable release via svn - setzt alle notwendigen rechte zB auf den cache - [Symfony 2 wird super. Oder ...?](https://nerdpress.org/2011/05/11/symfony-2-wird-super-oder/) - Natürlich wird Symfony 2 super. Die Dokumentation ist wie gewohnt zum jetzigen, frühen Zeitpunkt genial, die Architektur durchdacht, die Entwickler-Community steckt sowieso alles in die Tasche, man sieht einfach: Da steckt eine Menge Arbeit, Hirnschmalz und Erfahrung hinter. Aber genug geschleimt ;) Mein Lieblingsthema ist ja zur Zeit der Dependency Injection Container. Und irgendwie stinkt - [Distinct in Doctrine](https://nerdpress.org/2011/04/16/distinct-in-doctrine/) - Wenn man DISTINCT in einem Query und Doctrine nutzen will muss man mit Aliasen arbeiten! Sonst baut Doctrine einem da immer die id mit in den Query und das DISTINCT wird damit ausgehebelt. So gehts nicht: Denn das wird dazu: so gehts: Denn das wird dazu: - [sfGoogleTranslatePlugin](https://nerdpress.org/2011/04/09/sfgoogletranslateplugin/) - Hallo Welt! Ich hab einen kleinen Wrapper für die Google Translate API v1 als symfony 1.4 Plugin auf github gehoben: https://github.com/ivoba/sfGoogleTranslate Einfach Plugin installieren und dann im Model oder wo es gebraucht wird: Das Plugin nutzt den sfWebbrowser, der ist ja ziemlich praktisch, den braucht man also auch noch. Die detect Methode wird auch unterstützt. - [Ajax Deeplinks mit jQuery Address](https://nerdpress.org/2011/04/04/ajax-deeplinks-mit-jquery-address/) - Aus der Reihe: feine jQuery Plugins, um nicht zu sagen essentielle jQuery Plugins, heute: jQuery Address Damit kann man sehr einfach Deeplinks in Ajax getriebenen Seiten realisieren. So lassen sich zum Beispiel verschiedene Zustände in einer Ajax Seite navigierbar machen, wie zum Beispiel einzelne Tabs via Link öffnen oder auch Akkordion Zustände. Oder man kann - [Image Placeholder Services](https://nerdpress.org/2011/04/01/image-placeholder-services/) - cooler Service, wenn man mal neutrale Platzhalter Bilder braucht: http://placehold.it/ und was ähnliches mit Flickr Fotos: http://flickholdr.com/ - [reload CSS in Firefox 4.0](https://nerdpress.org/2011/03/23/reload-css-in-firefox-4-0/) - Firefox 4 ist ja nun draussen: http://www.mozilla-europe.org/de/ Die Addons Firebug und der JSON Viewer sind ja zum Glück auch schon kompatibel. Mein anderes Lieblingsaddon, der CSS reloader leider noch nicht. Coolerweise gibt es aber dieses Bookmarklet: http://david.dojotoolkit.org/recss.html dass genau das tut. Supersache! - [Unfuddle: Repository read access denied](https://nerdpress.org/2011/03/21/unfuddle-repository-read-access-denied/) - Unfuddle: Repository read access denied Ich benutze ja ganz gerne unfuddle für Projekte mit closed source. Dort kann man nämlich mit dem free Account, anders wie bei github, private repositories erstellen. Nun hatte ich aber neulich plötzlich einen Auth Fehler und konnte mich mit meinem key nicht mehr connecten: Ich war mir keiner schuld bewußt. - [[symfony 1.4] Class 'sfLoader' not found](https://nerdpress.org/2011/03/14/symfony-1-4-class-sfloader-not-found/) - Sollte man mal eine symfony 1.2.x Anwendung auf symfony 1.4.x migrieren und man stößt auf diesen Fehler: Dann hat man versucht einen Helper in der Action zu laden zB so: Der sfLoader ist in 1.4 allerdings entfernt worden. Stattdessen sollte man dann sowas schreiben: Dann klappts. - [SilverStripe 3 UI Vorschau](https://nerdpress.org/2011/03/08/silverstripe-3-ui-vorschau/) - Wie im SilverStripe Blog gelesen kann man die Entwicklung der neuen SilverStripe 3 UI auf github verfolgen. Außerdem gibts hier ein Interview mit dem Hauptdesigner. ... und wenn man möchte kann man in der Google Group seine Vorschläge loswerden. Ganz interessante Einblicke, wie ich finde. - [Symfony 2 Standard Edition released](https://nerdpress.org/2011/03/07/symfony-2-standard-edition-released/) - Ab heute, dem 7. 3. 2011, steht auf http://symfony.com die "Standard-Edition" der neuesten Version 2 des populären RAD-Frameworks zum Download bereit. Bereits am vergangenen Wochenende ging die neue Website des Projekts online. Symfony 2 wird als Sammlung loser gekoppelter Komponenten - sog. "Bundles" - in mehreren Ausgaben erhältlich sein. Zum jetzigen Zeitpunkt existiert bereits eine - [[Symfony 2] Sandbox/Standard Edition - bootstrap.php](https://nerdpress.org/2011/03/06/symfony-2-sandboxstandard-edition-bootstrap-php/) - Wer sich wundert, woher die beiden Dateien "app/bootstrap.php" respektive "app/bootstrap_cache.php" im Standard-app-Verzeichnis der Sandbox kommen: Das Script unter bin/build_bootstrap.php generiert eben diese aus existierenden Sourcen. Das Script sollte im Projekt-Rootverzeichnis aufgerufen werden, also etwa so: $ php bin/build_bootstrap.php Das ganze dient schlicht dazu, den PHP-Autoloader zu entlasten (und ersetzt somit die core_compile.yml-Konfiguration aus der Symfony - [i18n-fieldtypes module für Silverstripe](https://nerdpress.org/2011/02/28/i18n-fieldtypes-module-fur-silverstripe/) - Heute möchte ich mal ein Silverstripe Modul von mir vorstellen: silverstripe-i18n-fieldtypes Es ist eigentlich eher ein Work-around für fehlenden oder ungenügenden I18n Support in sapphire. Eigentlich sind wir hier alle Fans von Silverstripe, da es für Coder einfach anzupassen ist, aber speziell beim Umgang mit Datums und Currency Typen in Silverstripe merkt man, dass da - [save as WWF, save a tree](https://nerdpress.org/2011/02/27/save-as-wwf-save-a-tree/) - Dogmatix recommends: .WWF - ein PDF Format, dass sich nicht ausdrucken lässt. Der Umwelt zuliebe. Meine Rechnungen verschicke ich vielleicht trotzdem lieber nicht als .WWF, aber coole Idee. http://www.saveaswwf.com/de/ - [E-Mail Adresse validieren mit PHP5 filter_var](https://nerdpress.org/2011/02/24/e-mail-adresse-validieren-mit-php5-filter_var/) - ...seit längerem mal ohne meine Freunde die Framework Validatoren unterwegs gewesen, das dann gefunden und gefreut wie einfach sowas heutzutage ist. - [3 x YuiCompressor im Deploy](https://nerdpress.org/2011/02/11/3-x-yuicompressor-im-deploy/) - 6 million ways to deploy, choose one Die Aufgabe ist mit dem yuicompressor alle css files einzeln zu komprimieren. Concatenation lasse ich weg. Wir haben zur Auswahl 2 x mal als ant deploy und einmal die gute alte shell. Das yuicompressor jar ist “installiert” und liegt hier: Und es kann losgehen: 1. ant via apply - [Event Tracker mit HTML5 custom data Attributen](https://nerdpress.org/2011/02/04/event-tracker-mit-html5-custom-data-attributen/) - HTML5 bietet die Möglichkeit für custom data Attribute in HTML Elementen. Diese beginnen mit dem Prefix data- und können danach beliebeig benannt werden. Browser sollten diese Attribute ignorieren aber für interne Datenstrukturen sind sie sehr gut geeignet. Zum Beispiel kann man sich in Javascript Paramter-Übergaben sparen und sich die Daten holen, die man braucht. Das - [Bazaar & Eclipse "EOL during negotiation" bei MacOSX](https://nerdpress.org/2011/01/28/bazaar-eclipse-eol-during-negotiation-bei-macosx/) - Wenn bei der Arbeit mit Sourcecodeverwaltungssystemen wie Bazaar mit Passwortabfrage unter MacOSX Leopard ein Verbindungsabbruch mit der Fehlermeldung "EOL during negotiation" gemeldet wird, liegt es an der fehlenden Passwortabfrage. Das entsprechende Fenster zur Eingabe wird nicht angezeigt, da MacOSX hier wohl eher auf seine eigene Keychainabfrage vertraut. Dieses Skript schafft Abhilfe. - [Eclipse Plugin PHP Tool Integration](https://nerdpress.org/2011/01/26/eclipse-plugin-php-tool-integration/) - Ich bin letzte Woche über Eclipse PTI gestolpert und habe es direkt mal ausprobiert. Einfach über den Eclipse installer über die Site: http://www.phpsrc.org/eclipse/pti/ geholt und fertig. Was ist PTI? PTI ist ein Plugin für Eclipse PDT (zumeist), das folgende Tools in Eclipse integriert: * PHP_CodeSniffer * PHPUnit * PHP Depend * PHP Copy/Paste Detector Das - [Symfony command line Farben unter Snow Leopard](https://nerdpress.org/2011/01/19/symfony-command-line-farben-unter-snow-leopard/) - d'oh seit längerem hatte ich erfolglos versucht den Ouput der Symfony Tasks auf meinem Mac farbig dargestellt zu bekommen. Nach Experimenten mit verschiedenen Color Themes und AddOns für die Terminal.app und / oder iTerm hatte ich dann die tollsten Ansi Farben, Prompts und VI-Themes. Nur die Symfony Tasks waren immer noch einfarbig. RTFM.... In dem - [symfony und Google Analytics](https://nerdpress.org/2011/01/12/symfony-und-google-analytics/) - Ich weiss nicht ob Ihr es wußtet: Es gibt ein feines Plugin für Google Analytics für symfony. Kris Wallsmith sei dank. Da kann man sich fragen, warum denn ein Plugin dafür? Die paar Zeilen Code kopier ich doch schnell ins Layout. Über das Plugin kann man jedoch Analytics "environment aware" einbinden. Man will ja nicht - [64mb RAM 400 Mhz Laptop mit Linux](https://nerdpress.org/2010/12/29/64mb-ram-400-mhz-laptop-mit-linux/) - Ich habe die Zeit zwischen den Tagen mal für Quatsch genutzt: Ich habe mal einen alten Laptop mit einem Linux versehen. Der Laptop war ein Fujitsu Siemens mit einem 400 Mhz Celeron, 64 Mb (!) RAM und einer 4 GB Platte drin. Da lief noch eine Windows98 drauf, was es auch tat, Winamp & Word - [Wordpress: eine wp-config.php für lokal und live](https://nerdpress.org/2010/12/16/wordpress-eine-wp-config-php-fur-lokal-und-live/) - Wenn man Wordpress mit dem gleichen Code (also der gleichen wp-config.php Datei) lokal und auch auf einem Web-Server benutzen möchte, ist das ganz einfach machbar indem man etwa sowas in die besagte wp-config.php schreibt: - [Symfony 2 "from scratch" bootstrappen](https://nerdpress.org/2010/12/01/symfony-2-from-scratch-bootstrappen/) - ... machen wir heute mal, weil die Sandbox komisch ist mit den vielen (ärm - 2) redundanten /vendor und /wasweißich-Verzeichnissen. Also, bauen wir die Sandbox mal nach: Wir brauchen: Ein halbwegs aktuelles PHP 5.3.x, MySQL 5.x, Apache 2 und git. Dann erstmal den aktuellen Symfony2-Master ziehen... ... und die Vendor-Scripte installieren: Nun sollte sich folgendes - [Debuggin JSON mit JSON Views](https://nerdpress.org/2010/11/17/debuggin-json-mit-json-views/) - Wer kennt das nicht: man entwickelt mit JSON, will die AJAX Rückgabe kontrollieren und macht, wie gewohnt, im Firefox den Firebug auf und checkt unter Console den AJAX Request und sieht folgendes: Nicht sehr erhellend! Total unübersichtlich! Nicht gut! Wird JSON mit dem richtigen Header ausgeliefert, unter PHP geht der so: Dann kann man ein - [Selenium functional tests mit PHPUnit](https://nerdpress.org/2010/11/14/selenium-functional-tests-mit-phpunit/) - PHPUnit hat coolerweise eine Extension für Selenium Tests. Dafür braucht man noch den PHP Client für die Selenium Remote Control. Bei mir auf Debian Lenny, bzw. Mac OSX musste ich noch den include_path dafür anpassen, damit phpunit Testing/Selenium.php gefunden hat. Damit kann man mit PHP komfortabel einen Selenium Test Server über die Selenium RC ansprechen, - [git prompt](https://nerdpress.org/2010/11/13/git-repository-status-im-shell-prompt/) - gerade gefunden: git prompt - GIT repository status direkt im shell prompt. nützlich und schön bunt. - [symfony 1.4 - automatisierte builds](https://nerdpress.org/2010/11/12/symfony-1-4-automatisierte-builds/) - Hier mal ein Beispiel für einen (via shell script) automatisierten build bei einer PHP, Symfony 1.4 Anwendung mit GIT zur Versionskontrolle. der Einfachkeit halber liegt der zu migrierende sql dump schon im repository. Könnte man natürlich auch jetzt von remote holen. hier sollte keine Handarbeit mehr nötig sein, da man ja alle DB Änderungen per - [Server Monitoring mit Munin](https://nerdpress.org/2010/11/02/server-monitoring-mit-munin/) - Da ich ein Kontrollfreak bin ;) wollte ich mal meinen vServer monitoren. Nach allem was ich so las, scheint wohl Munin das geeignete Tool zu sein. Also aufgemacht und es installiert: Munin ist Server-Client mäßig aufgebaut, ich installiere der Einfachkeit halber mal Server und Client (Node) auf der selben Maschine. Für Debian Lenny geht das - [Schau auf die Error_Log](https://nerdpress.org/2010/10/19/schau-auf-die-error_log/) - Man sollte sich tatsächlich angewöhnen beim Entwickeln immer eine Console offen zu haben und die error_log zu beobachten. Bekommt man nämlich so einen Fehler in der error_log: ... bleibt die Seite meistens ohne Fehlerausgabe trotz E_ALL und es passieren komische Dinge. Dann kann man schonmal eine ganze Weile damit verbringen ganz woanders zu suchen. Mit - [Symfony 2 PR3: doctrine:schema:create liefert "No Metadata Classes to process."](https://nerdpress.org/2010/10/17/symfony-2-pr3-doctrineschemacreate-liefert-no-metadata-classes-to-process/) - Die Doku stellt in Aussicht, dass man den "normalen" Doctrine-Namespace-Shortcut benutzen kann, also bspw. @Entity anstelle von @DoctrineOrmMappingEntity. Funktioniert aber nicht, weil in irgend einer Service-Configuration dieser Namespace auf einen Alias gemapped wird, der da lautet "orm". Die Syntax lautet aber nun auch nicht @ormEntity, sondern @orm:Entity. Schreibt man sein Model also bspw. so: sollten - [ReflectionParameter::isOptional() vs. ReflectionParameter::isDefaultValueAvailable()](https://nerdpress.org/2010/09/28/reflectionparameterisoptional-vs-reflectionparameterisdefaultvalueavailable/) - Während der Bastelei am DI-Container bin ich über die beiden Methoden ReflectionParameter::isOptional() und ReflectionParameter::isDefaultValueAvailable() gestoßen. Der kleine, undokumentierte und feine Unterschied ist folgender: Ein formaler Parameter einer Methode/Funktion ist immer optional, wenn er einen Initialwert zugewiesen bekommt (Fachausdruck "Polymorphie für Arme"). Nun kann es sein, dass eine Methode zwar optional ist, man den DefaultValue aber - [Dependency Injection mit PHP 5.3, Runkit-Erweiterung und Doctrine 2-Annotationen](https://nerdpress.org/2010/09/26/dependency-injection-mit-php-5-3-runkit-erweiterung-und-doctrine-2-annotationen/) - Unter Dependency Injection versteht man heute nicht nur ein einfaches Entwurfsmuster, sondern vor allem Framework-gestützte Mechanismen, die den konkreten Implementierungsaufwand verringern (Entwicklungszeitoptimierung), dem Entwickler bessere Übersicht über Abhängigkeiten zu schaffen (Applicationdesignoptimierung) und die Anzahl der Instanzen gleichen Prototyps zu minimieren (Performanceoptimierung). Heute möchte ich einen alternativen, vielleicht pragmatischeren Ansatz als der andererer populärer Implementierungenn herbeispinnen, - [Persistente Objekte in PHP und redirects](https://nerdpress.org/2010/09/21/persistente-objekte-in-php-und-redirects/) - Achtung Falle! Benutzt man persistente Objekte in PHP, die ungefähr so aufgebaut sind, wie hier beschrieben. In dieser Klasse wird also der Destructor benutzt um das Objekt in die SESSION zu schreiben. Macht man nun ein header() redirect nachdem man das Objekt instanziiert hat, ist auf der nächsten Seite das Objekt nicht in der SESSION. - [Asus N82j, U80, UL30 Series; Touchpad auschalten unter Ubuntu 10.04](https://nerdpress.org/2010/08/05/asus-n82j-u80-ul30-series-touchpad-auschalten-unter-ubuntu-10-04/) - Das für mich als Merkhilfe und eventuell Suchende: Wer sein Touchpad unter Ubuntu via Hotkey abschalten möchte und im Besitz eines neueren Asus-Notebooks ist, wird hier endlich fündig: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/418282 (für mich hat folgender Workaround zuverlässig funktioniert): This problem is also valid for the ASUS UL30A. The touchpad is seen as an "ImPS/2 Logitech Wheel Mouse". - [Grouping & Sorting in MongoDB](https://nerdpress.org/2010/07/24/grouping-sorting-in-mongodb/) - Will man mit PHP und MongoDB soetwas wie "SQL Aggregate Functions" umsetzen muss man sich etwas verbiegen. MongoDb hat zwar eine group() function, die in etwa SQLs GROUP BY entspricht, allerdings kann man dies nicht kombinieren mit SORT oder LIMIT bzw den sort() und limit() Funktionen, da diese keinen Cursor zurückgibt sondern direkt ein Array. - [sqlite VACUUM](https://nerdpress.org/2010/06/23/sqlite-vacuum/) - Mal ein kleines Zauberwort für Zwischendurch: VACUUM; Dieses Kommando räumt eine Sqlite Datenbank auf, killt unnötige Leerzeichen und defragmentiert den Datenbank File. In meinem Fall war die DB nach dem löschen einer relativ großen Table immer noch auf ca 20MB, das hat mich doch stutzig gemacht und zu diesem Kommando geführt. Nachdem ich es ausgeführt - [Tweak Ubuntu](https://nerdpress.org/2010/06/16/teak-ubuntu/) - Mit Ubuntu Tweak (http://ubuntu-tweak.com/): Ubuntu Tweak ist eine Anwendung, die die Konfiguration von Ubuntu für jeden einfacher machen soll. Ubuntu Teak ist das Ubuntu-Äquivalent für die guten, alten PowerToys/PowerTools, die bereits ab und für Windows-XP (*spit*) existieren und es dem Administrator ermöglichen, weitergehende Einstellungen des Betriebssystems, die normalerweise in Konfigurationsdateien oder teils weit verstreuten Mini-Programmen - [Cheat-Sheets für alle(s)](https://nerdpress.org/2010/06/13/cheat-sheets-fur-alles/) - Diesem Mann ist sicher nie langweilig: http://www.addedbytes.com/cheat-sheets/. Hinter diesem Link verbergen sich Cheat Sheets zum Selber-Ausdrucken für alles Denkbare. - [Ajax (Fake) Push: Long Polling mit HTML 5 WebWorker](https://nerdpress.org/2010/06/11/ajax-fake-push-long-polling-mit-html-5-dedicated-worker/) - Push-Mechanismen im Web sind mittlerweile weit verbreitet - die Anforderungen an die Infrastruktur aber recht hoch. Nichts geht ohne Plugins (Flash, Applet, WebSocket) - dann braucht man mindestens einen zweiten Server, der via persistenter Verbindung Nachrichten verteilt. Bedient man sich herkömmlicher JavaScript-Technik, muss man mit aynchronen Ajax-Requests herumkaspern, sich mit Timeouts, Memory-Leaks und Cross-Domain-Sicherheitspolicen herumschlagen. - [Datei-Endungen im Vork Framework ](https://nerdpress.org/2010/06/10/vork-framework-change-filetype-dateityp/) - Von Haus aus kommen im Vork Framework alle MVC Dateien ohne Endung daher. Wer das ändern möchte kann folgende Dinge tun: in der Klasse config in der Datei .config folgendes einfügen: dann erwartet vork im MVC Ordner Dateien mit der Endung .php. Um alle Dateien umzubenennen braucht man eigentlich nur Windows Vista, eine präzise Maus - [Zend_Log pseudo logrotate](https://nerdpress.org/2010/06/08/zend_log-pseudo-logrotate/) - Manchmal wachsen einem die Logfiles ja über den Kopf und drohen den Server zu sprengen. Dann muss man aufräumen, weithin als logrotation bekannt. Unter Linux gibt es ja das praktische logrotate Programm, welches man für seine zwecke vielfältig konfigurieren kann. Es gibt dann aber auch Fälle wo man dies nicht benutzen will/kann, zB weil man - [SlickMap CSS - visuelle Sitemaps in HTML / CSS](https://nerdpress.org/2010/05/30/slickmap-css-visuelle-sitemaps-in-html-css/) - visuelle Sitemaps in XHTML / CSS. Ein Stylesheet um unordered Lists als Sitemap darzustellen. http://astuteo.com/slickmap/ http://astuteo.com/slickmap/demo - [Dependency Injection mit Symfony 1.x](https://nerdpress.org/2010/05/27/dependency-injection-mit-symfony-1-x/) - Beschreibung IoC Pattern anhand Grails Services und Kurze Einführung in die Symfony-Komponente "Dependency Injection". - [PHP Simple HTML DOM Parser](https://nerdpress.org/2010/05/18/php-simple-html-dom-parser/) - Bin neulich über eine nette Klasse gestolpert, die sich lohnt mal anzuschauen: PHP Simple HTML DOM Parser Diese parst HTML und hält es als DOM Baum vor, auf welchem man 'JQuery like' Operationen dürchführen kann. Siehe deren online Beispiel: Kann man schön mit ScreenScrapen oder mal ein CMS neu erfinden! ;) Feine Sache! Ich habe - [Ein symfony Projekt in git](https://nerdpress.org/2010/05/08/ein-symfony-projekt-in-git/) - Neulich habe ich mal ein Projekt von SVN auf git umgezogen. Ähnlich wie bei SVN muss auch hierbei das Projekt ein bißchen vorbereitet werden damit die Versionierung das macht was sie soll. Das Projekt wird in Eclipse bearbeitet, also wird auch hier drauf Rücksicht genommen. Alles was man beachten muss ist eigentlich nur die ignores - [Silverstripe 2.4 release!](https://nerdpress.org/2010/05/05/silverstripe-2-4-release/) - Juhu: http://silverstripe.org/silverstripe-2-4-release-a-significant-step-forward/ - [lokalisiertes time_ago_in_words für symfony](https://nerdpress.org/2010/05/01/lokalisiertes-time_ago_in_words-fur-symfony/) - Eine Funktion für sog. -Pretty Dates- ist im symfony Date Helper ja enthalten. Diese ist aber standardmäßig auf Englisch lokalisiert. Will man die Ausgabe: 2 minutes ago aber lieber zB auf Deutsch haben: vor 2 Minuten muss man das symfony erstmal beibringen. Zunächst einmal muss man in der settings.yml die culture einstellen: Dann im apps/frontend/i18n - [[Jquery]Namespaces via CSS-Selector adressieren](https://nerdpress.org/2010/04/29/jquerynamespaces-via-selector-adressieren/) - Vielleicht braucht es mal jemand, jedenfalls lassen sich "genamespacete" Tags in einer DOM (XML)document Instanz recht einfach mittels \: als Separator adressieren. Ein Beispiel: Ich möchte ein Dublin-Core Metadatum aus einem beliebigen Feed lesen: Dies entspricht wohl rein syntaktisch nicht ganz dem entsprechendem CSS3-Proposal (einzusehen unter http://www.w3.org/TR/css3-selectors/#typenmsp). Ich habe beide Möglichkeiten interessehalber auch einmal in - [generierte Reflexions-Effekte mit Silverstripe bzw jQuery](https://nerdpress.org/2010/04/29/generierte-reflexions-effekte-silverstripe-jquery/) - Musste neulich so einen "Web 2.0 Mirror FX" haben und bin über 2 interessante Lösungen gestolpert: Silverstripe & GD: http://www.ssbits.com/web-2-0-mirrored-images/ jQuery & Canvas: http://www.digitalia.be/software/reflectionjs-for-jquery#demo weitergehende Erklärungen dazu spare ich mir jetzt mal, sind ja beide gut dokumentiert :) - [(My)SQL optimieren](https://nerdpress.org/2010/04/27/mysql-optimieren/) - Ich mag schnoddrig-nerdige Blogposts mit (s/f)uck im Titel, daher heute mal der hier: 10 Tips For Optimizing MySQL Queries That Don't Suck. Sicher nicht brandaktuell, doch Leiderprobte ("Warum dauert der §()!"% das so lange?") möchten sicher hin und wieder daran erinnert werden. - [jQuery hover - Schluss mit Geflimmer](https://nerdpress.org/2010/04/22/jquery-hover-schluss-mit-geflimmer/) - meine Entdeckung des Tages: jQuery hover Intent Plugin. Mit der WebCam wird die Absicht des Users erkannt und nur ein Event getriggert wenn der MouseOver wirklich gewollt ist. Möglicherweise ist es technisch etwas anders gelöst. Aber der Effekt ist gut! - [Silverstripe lokalisierte Dates](https://nerdpress.org/2010/04/21/silverstripe-lokalisierte-dates/) - ... und wieder Silverstripe. Lokalisierte Dates macht Silverstripe nicht out-of-the-box, man muss da ein bißchen was umbauen: In der _config.php Die Silverstripe (2.3.6) Lokalisierung alleine reicht da nicht. Ich nehme an das wird in 2.4 sich ändern. Um im Frontend dann sowas zu bekommen : 12 März 2010 benutzt man statt lieber - [Next Level Javascript Error Tracking](https://nerdpress.org/2010/04/10/next-level-javascript-error-tracking/) - Exceptionhub protokolliert clientseitig auftretende Javascript Fehler. * Logs all JavaScript errors (local or remote) * Provides a stack trace to find the cause in all browsers * Groups errors by cause * Development and Production modes * RSS feeds for errors Einfach einbinden via Javascript im Seitenheader. Dann kriegt man schöne Statistiken über Javascript Fehler - [Fail! Zend Db: Ausgabe eines Update Query](https://nerdpress.org/2010/03/30/fail-zend-db-ausgabe-eines-update-query/) - Heute gibt es mal einen Fail! Vorneweg: das Zend Framework (Version 1.10) wird hier "lose" benutzt, d.h. ohne Bootstrap. (Evtl. kann man da den Query loggen, aber kA) Die simple Ausgabe eines Update Query zu Debug Zwecken ist mit dem Zend Db Packet anscheinend nicht möglich. Man konstruiert den Query: Irgendwas geht schief und man - [Googlemap Zoom-Faktor automatisch berechnen](https://nerdpress.org/2010/03/29/googlemap-zoom-faktor-automatisch-berechnen/) - pushing the boundaries um den ZoomFaktor auf GoogleMaps dynamisch zu setzen, je nachdem wie viele Marker man wo hat, kann man GLatLngBounds benutzen. Mit jedem Marker der dazukommt erweitert man dann einfach die Grenzen: und schon kann man komfortabel Zoom und Center-Punkt rausbekommen. So das alle Marker sichtbar sind. - [X-Sendfile + Apache 2 (Ubuntu)](https://nerdpress.org/2010/03/24/x-sendfile-apache-2-ubuntu/) - Ein recht verstecktes Feature, das neuere Server, bspw. Lighthttpd + FCGI-Modul bereits "out of the box" unterstützen, ist das anwendungsgesteuerte "Durchschleifen" von großen Dateien via X-Sendfile Header. Wozu es gut ist und wie man es benutzt,will ich im Folgenden kurz erläutern: Im Prinzip dasseselbe wie fpassthru(), aber eben ohne dass PHP den auszuliefernden Datenstrom komplett - [Silverstripe und GeoIp](https://nerdpress.org/2010/03/21/silverstripe-und-geoip/) - Silverstripe bzw. das drunterliegende Framework Sapphire hat ja eine GeoIp Komponente, die in dem CMS und auch in einigen Modulen benutzt wird, zB um Länder in Formularen direkt einzustellen. Was allerdings nirgendwo steht ist, dass dafür das Programm geoiplookup benötigt wird. Sapphire ruft das Programm dann über exec auf. Ist das nicht installiert, stehen im - [Die YQL Geo Library](https://nerdpress.org/2010/03/13/die-yql-geo-library/) - dieses erwähnenswerte Tool ist ein Javascript-Wrapper für die Geocoding Services: Yahoo Placemaker, Yahoo GeoPlanet, jsonip.appspot.com, IP location tools, W3C Geo location und Flickr.places.findByLatLon. Die Syntax ist mal denkbar einfach, denn das ganze beschränkt sich auf eine einzige Methode, nämlich: Damit geht neben dem Verorten von Strings à la GooglemapsAPI: ...auch mal eben Verorten von IPs: - [PHP und Sqlite Transaktionen](https://nerdpress.org/2010/03/09/php-und-sqlite-transaktionen/) - Ich bin ja Fan von sqlite, besonders für kleinere Projekte, wo kein hohes paralelles Schreiben zu erwarten ist, also für fast alle kleineren Seiten. Keine Datenbank Administration, einfach loslegen und schnell ist es auch noch. Ein paar Krücken gibts aber schon, zB bei Transaktionen (die MySql im Regelfall gar nicht kann ;)). Ich benutze die - [Upgrade von Etch auf Lenny](https://nerdpress.org/2010/02/27/upgrade-von-etch-auf-lenny/) - Dann habe ich neulich mal meinen vServer upgegradet von Debian Etch auf Lenny, um in den Genuss einer neueren PHP Version zu kommen. Ein paar Problemchen gabs schon aber es hat geklappt! Das lief ab wie folgt: Zunächst einmal Plesk auf neuesten Stand bringen über den Updater von Plesk. Dann das Debian dist upgrade: wie - [Symfony reloaded - Symfony 2.0 preview release](https://nerdpress.org/2010/02/18/symfony-reloaded-symfony-2-0-preview-release/) - Gerade erst gesehen: Symfony 2.0 kommt anscheinend gegen Ende 2010. get the code.:) The repository is updated every 15 minutes. Einiges klingt schon ziemlich vielversprechend. ...die Tage mal genauer reinschauen. It is up to 3 times faster than symfony 1.4 or Zend Framework 1.10 and consumes half the memory. - [The only valid measurement of code quality: WTFs/minute](https://nerdpress.org/2010/02/17/the-only-valid-measurement-of-code-quality-wtfs-minute/) - oder: Doctrine 2 wird wohl ziemlich gut. Hier gibt es ein paar Notizen von Jonathan Wage's Präsentation dazu! Sehr cool klingt unter anderem auch die writeBehind Geschichte und dass Objekte nicht mehr von Doctrine Klassen abgeleitet werden müssen, sondern mit dem "Entity Managers" zB. gespeichert werden. Also keine ->save() methoden mehr. :) “Everything is an - [Ant Ftp Task und NullPointerException](https://nerdpress.org/2010/02/02/ant-ftp-task-und-nullpointerexception/) - Ich benutze ja Ant zum deployen, noch jedenfalls, weil die Installation und Konfiguration mir doch immer mal wieder Kopfzerbrechen bereitet. := Damit hole ich die HEAD Rev oder ein stable tag aus SVN, mach noch ein paar Fileoperations, wie Live Configs reinkopieren, .htaccess vorbereiten etc. und jage die files dann, für die Standard Hosting Packete, - [Symfony und das Dojo Build System](https://nerdpress.org/2010/01/30/symfony-und-das-dojo-build-system/) - Das Dojo Toolkit bietet neben den offensichtlichen Features eines Full-Stack-Frameworks unter anderem mehrere "environment aware" Debug-Modi und eine Sammlung vonBuild-Scripten, die es dem Entwickler erlauben, das Framework zusammen mit den eigenen Frontend-Scripten und Stylesheets zu "kompilieren" und somit Bandbreite zu sparen bzw. Ladezeiten zu minimieren. Dojo Baukausten Standardmäßig lädt der Dojo-Core alle benötigten Pakete, die - [Run Symfony Tasks from Controller](https://nerdpress.org/2010/01/29/running-symfony-tasks-from-controller/) - Symfony Tasks (zB "symfony cc") aus dem Controller oder Model aufrufen kann man folgendermaßen: und den Cache dann zB so löschen: [code: Dheeraj Kumar Aggarwal, via googleGroups] - [Juitter prettyDate](https://nerdpress.org/2010/01/27/juitter-prettydate/) - Juitter ist ein Twitter Widget basierend auf jQuery. Damit kann man Twitter nach gewissen Keywords durchsuchen und die Anzeige als Widget mit wenig Code auf seiner Seite einbinden. Das alles ist rein clientseitig, was es noch einfacher macht. Das geht so: Juitter (1.0) runterladen, in sein Projekt kopieren. Javascript einbinden: Container in die Seite einbinden: - [Rationale Argumente für den Einsatz vom Apple Mac](https://nerdpress.org/2010/01/26/rationale-argumente-fur-den-einsatz-vom-apple-mac/) - liebe leserinnen und leser, mich beschäftigt seit einigen tagen die nicht ganz unwesentliche frage, was es für rationale argumente für den einsatz des macs gibt. die alten domänen wie grafik, audio u.ä. sind schon lange abgegrast. klar gibt es offensichtliche vorteile wie die architektur oder die unix integration und den daraus resultierenden tools. aber schaut - [Textarea mit Code Highlighting](https://nerdpress.org/2010/01/18/textarea-mit-code-highlighting/) - Um eine HTML Textarea mit Code Highlighting zu versehen muss man ein bißchen tricksen. Zum Glück gibts ja da schon fertige Libs, die das erledigen. Sucht man mit Google, findet man schnell dieses hier: http://codepress.sourceforge.net/ Dies wird aber scheinbar nicht weiterentwickelt und hat zudem einige Bugs. Weiterhin gibts dann http://sourcepad.org. Das sieht ganz gut aus, - [Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions](https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/) - Wenn man versucht mit Symfony/Doctrine/Generator Bordmitteln "related" Objekte in Formularen darzustellen, wird das schnell schwierig bei etwas mehr Daten. "Ein Projekt wird mehreren Mitarbeitern zugewiesen. Es gibt aber 500.000 Mitarbeiter." Schon rendert sich das generierte multi-select im Projekt-Formular den sprichwörtlichen Wolf. Hier braucht man eigentlich schon was mit Ajax/Pagination. Hier ein Entwurf für ein FormWidget, - [Etherpad auf Ubuntu installieren](https://nerdpress.org/2010/01/15/etherpad-auf-ubuntu-installieren/) - Etherpad ist ja jetzt coolerweise open-source. Wie man das Ding auf Ubuntu ans laufen bekommt steht nicht hier, sondern vielmehr hier! (drauf achten aus welchem Verzeichnis heraus man die skripte nachher aufruft...) nice one, lincoln loop! Wenn man nämlich den Ubuntu Wiki Anweisungen hinterherläuft, verrennt man sich evtl. mit der veralteten Scala Version, die man - [Eclipse Galieo mit Aptana und PDT](https://nerdpress.org/2010/01/12/eclipse-galieo-mit-aptana-und-pdt/) - Aptana hatte sich ja in den letzten Versionen am PHP Support versucht. Was mir als großem Fan von PDT garnicht so gut gepasst hat. Damit war nämlich die Variante Aptana (als Eclipse Plugin) mit PDT zu kombinieren eher schwierig, soweit ich mich erinnern kann. Jetzt hat Aptana das Vorhaben aber an den Nagel gehängt. Und - [Nützliche Eclipse PDT Templates zum Debuggen](https://nerdpress.org/2009/12/20/nutzliche-eclipse-pdt-templates-zum-debuggen/) - Als kleines vorweihnachtliches Geschenk hier meine meistgebrauchten Eclipse PDT shortcuts, die leider nicht Bestandteil von PDT sind. type: du -> Strg Space und schon gibts das gute alte: Mit vd -> Strg Space gibts Besonders praktisch in Verbindung mit XDebug. So bekommt man die: Folgendes abspeichern: dann importieren, so: Window-> Perferences PHP -> Editor -> - [DOJO 1.4 final](https://nerdpress.org/2009/12/11/dojo-1-4-final/) - Dojo 1.4 ist 'raus. Fast ein Jahr wurde darauf verwendet, die bestehende Version 1.3 zu härten und schneller zu machen. Daher erwarten den Benutzer zwar keine großen Neuerungen, dafür aber volle Abwärtskompatiblität zur Version 1.3 und eine menge Bugfixes. Alle Änderungen und Verbesserungen sind den Release Notes zu entnehmen. Ich habe direkt mal ein größeres - [symfony 1.2.9 auf 1.4 upgraden](https://nerdpress.org/2009/12/07/symfony-1-2-9-auf-1-4-upgraden/) - Den upgrade haben die Entwickler von symfony schon gut durchdacht und sollte dank der guten Anleitung auch ohne Probleme klappen. Vorneweg: symfony 1.3 und 1.4 haben den selben Funktionsumfang und unterscheiden sich i.G. nur dadurch, dass 1.3 ein Abwärtskompatibilätslayer hat. Daher sollte man erst auf 1.3 upgraden und -wenn man mutig ist- dann auf 1.4. - [Advent Advent...](https://nerdpress.org/2009/12/02/advent-advent/) - ... ein Lichtlein brennt. Da kommt der Fabien natürlich wieder so richtig in Vorweihnachtsstimmung und beschließt einen Adventskalender zu basteln. Und zwar in Form von periodisch erscheinenden Artikeln vollgepackt mit Schokolade und Insiderwissen über Symfony-Routes, E-Mail-Konfiguration und -Versand, Widgets und Validatoren und noch viel, viel mehr. Nun kann man sich das gespannte Warten auf das - [Symfony: Doctrine Validation abschalten](https://nerdpress.org/2009/12/01/symfony-doctrine-validation-abschalten/) - Doctrine bringt ab Werk ein paar sehr mächtige Attribut-Validatoren auf Anwendungsebene mit, die aber im Symfony-Kontext nur für zusätzlichen Overhead sorgen und gleichzeitig nicht ganz so fein granuliert sind wie bspw. ein entsprechender sfValidator. Wie man Doctrine auf Projektebene konfigurieren und bspw. das Validation-Feature abschalten kann, zeigt das folgende Listing. config/ProjectConfiguration.class.php: Das funktioniert nur, weil sfDoctrinePluginConfiguration - [Audio auf Webseiten mit SoundManager 2](https://nerdpress.org/2009/11/29/audio-auf-webseiten-mit-soundmanager-2/) - Audio auf Webseiten ist ja immer so ein Thema. Die "nativen" HTML "Möglichkeiten" lassen wir mal lieber aussen vor. Des Rätsels Lösung ist ja eigentlich meistens Flash - so auch bei Soundmanager 2. Nur bleibt Flash hier komplett im Hintergrund und wird nur als "Ausgabegerät" missbraucht. Sounds lassen sich dann mittles einer wirklich mal sehr - [lawnchair - a client side JSON document store](https://nerdpress.org/2009/11/25/lawnchair-a-client-side-json-document-store/) - Sorta like a couch except smaller and outside JSON Daten clientseitig speichern und verfügbar halten. "stores" nennt Lawnchair das dann. Eigentlich ähnlich wie bei Propel und co. Nur halt ohne DB. ich würde sagen die Syntax spricht in dem Fall für sich selbst: - [Zen-coding mit Eclipse PDT](https://nerdpress.org/2009/11/23/zen-coding-mit-eclipse-pdt/) - So kann man zencoding auch mit Eclipse PDT ohne das Aptana Plugin ans laufen kriegen. Dafür braucht man Eclipse Dash (vormals Monkey). - benutzt Aptana i.ü. auch, soweit ich das richtig gesehen habe - Das installiert man sich wie gewohnt, mit dieser URL: Eclipse neu starten und schon ist mighty Eclipse macro-fähig. Nun holt man - [Zen-Coding: Doping fürs Markup-Tippen](https://nerdpress.org/2009/11/22/zen-coding-doping-furs-markup-tippen/) - Tim hat recht, das ist 'ne nette Idee. Das Video angucken! - [Kleines Addon, große Wirkung.](https://nerdpress.org/2009/11/21/kleines-addon-grose-wirkung/) - Check das aus. Dieses kleine, aber feine Addon erlaubt es, alle Stylesheets via Kontextmenu-Auswahl oder F9-Taste zu aktualisieren. Der Clou dabei: Das ganze geschieht on-the-fly, ohne dass ein Page-Reload nötig wäre. Jeder leidgeplagte RIA-Entwickler wird angesichts der offensichtlichen Macht dieses Addons in Ehrfurcht erstarren. Denn dadurch lässt sich der Zeitaufwand fürs CSS-Styling um mindestens 90% verringern, - [XMLHttpRequest: Spezifikation abgeschlossen](https://nerdpress.org/2009/11/20/xmlhttprequest-spezifikation-abgeschlossen/) - Zumindest laut W³C - da kann man sich ja freuen, dass das Objekt der AJAX/S-Begierde 10 Jahre nach der Implementation im IE5 endgültig spezifiziert wurde — wenn der Last Call des W³Cs unbeantwortet bleibt .-) [ via ] - [symfony-check.org/](https://nerdpress.org/2009/11/16/symfony-check-org/) - Heute mal ein webtip: http://symfony-check.org/ Eine sehr nützliche Seite, die eigentlich nur eine Checklist ist. Check if your symfony application is ready for deployment Aber schön gemacht und sehr nützlich. Wie oft hab ich schon vergessen die ErrorPages zu customizen. Oder schön ist auch wenn man ne Email kriegt "Du benutzt symfony, richtig?", weil man vergessen - [Etwas untergegangen: Propel 1.4 is raus](https://nerdpress.org/2009/11/12/etwas-untergegangen-propel-1-4-is-raus/) - ... und hier gibt's ein Changelog: http://propel.phpdb.org/trac/wiki/Users/Documentation/1.4/WhatsNew Erst in den nächsten Monaten wird sich wohl herausstellen, ob der neue Maintainer da auch langfristig Böcke drauf hat. Ich glaube, ich bleibe nach dem ganzen Lernaufwand jetzt erstmal bei Doctrine, da tut sich ja auch noch einiges (Obwohl ich stiller Fan der Criteria-API bin, und Doctrine mit - [Strato, Wordpress, Umleitungsschleife...](https://nerdpress.org/2009/11/12/strato-wordpress-umleitungsschleife/) - Um "duplicate content" Missverständnissen vorzubeugen hat ja Wordpress diese canonical URL redirects. Klingt komplizierter als es ist. Im einfachsten Fall wird jemand der aufruft, auf umgeleitet. Klappt auch ganz hervorragend. ... Ausser wenn nach dem redirect das "www." aus irgendeinem Grund zwar aus der URL, aber nicht aus dem http-Header verschwinden möchte Dann wird Wordpress - [symfony und multiple inserts](https://nerdpress.org/2009/11/11/symfony-und-multiple-inserts/) - Manchmal sollte man multiple Inserts machen, ist doch performanter als in jedem Schleifendurchlauf die Database Engine zu bemühen. Falls man sich mal fragt wie man multiple Inserts mit symfony hinkriegt, fängt man an zu googlen und stößt schnell auf dieses Snippet. Und bevor man da rumeiert und das auf zB Sqlite umschreibt, einfach mal Propel - [sunrise, sunset, sunrise, sunset, sunrise, sunset](https://nerdpress.org/2009/11/11/sunrise-sunset-sunrise-sunset/) - Ist doch schön wenn einen die Lieblings Programmiersprache nach all den Jahren noch überraschen kann. ...nein, die Rede ist nicht von JS. Dass PHP Sonnenauf- bzw. untergangszeiten ausgeben kann wusste ich bisher nicht. date_sunrise und date_sunset heissen die beiden Funktionen. coole Sache, wie ich finde. - [Symfony 1.2 Admin Generator Features](https://nerdpress.org/2009/11/10/symfony-1-2-admin-generator-features/) - Nur ein persönliches Lesezeichen. - [A propos Tags - Symfony 1.2](https://nerdpress.org/2009/11/08/a-propos-tags-symfony-1-2/) - Ich schlage mich im Moment mit Tags & Behaviors herum. Eigentlich soll das BETA Plugin sfPropelActAsTaggableBehaviorPlugin auch unter symfony 1.2 laufen: symfony propel-build-all >> propel generating form classes Cannot fetch TableMap for undefined table: sf_tag. Make sure you have the static MapBuilder registration code after your peer stub class definition. Das Problem ist in den - [Doctrine - Accessoren & Mutatoren](https://nerdpress.org/2009/11/07/doctrine-accessoren-mutatoren/) - Also erstens, damit man die Doku versteht: Mutatoren sind natürlich "Setter" (setFirstname(string name)), Accessoren "Getter" (getFirstname()). Doctrine ermöglicht es auf vielfältige Weise, Attribute eines OR-Objekts programmatisch zu erfragen bzw. zu verändern. Da jede Instanz von Doctrine_Record letztlich die abstrakte Elternklasse Doctrine_Access implementiert, wird der Zugriff und alle Änderungen durch die (magischen) PHP-Methoden __get(), __set() und __call() - [Google's closure Tools jetzt opensource](https://nerdpress.org/2009/11/06/googles-closure-tools-jetzt-opensource/) - Google wirft seine Closure Tools in den open source Topf. Das ist einmal die Closure Library, ein JS Framework. Wenn ich das auf den ersten Blick richtig erkannt habe, geht das in eine ähnliche Richtung wie zb. jQuery UI. Der Closure Compiler ist ein Javascript Optimizer der Code viel viel viel schneller machen soll. Um - [The item has not been saved due to some errors.](https://nerdpress.org/2009/11/04/the-item-has-not-been-saved-due-to-some-errors/) - Falls symfony und der Admin Generator einem diese Fehlermeldung anzeigt: "The item has not been saved due to some errors." und sonst weiter schweigt und man schon den halben Core debugt hat und auch sonst der Auffassung ist man hat alles richtig gemacht . Dann nicht durchdrehen, sondern cool bleiben und mal checken ob man - [Javascript Code Quality Checker](https://nerdpress.org/2009/11/04/javascript-code-quality-checker/) - JSLint ist ein Tool zur statischen Codeanalyse wie bspw. Checkstyle, den einem die Javaprofs gerne mal im ersten Semester OOP aufzwingen. JSLint prüft, wie der Name schon sagt - Javascript-Code. Aber Vorsicht: JSLint will hurt your feelings! Kleine Randnotiz: Der hier muss natürlich wieder rumstänkern, aber das gehört wohl zu jedem guten Nerd-Blogger, der etwas - [symfony 1.2. Admin Generator mit Datepicker](https://nerdpress.org/2009/11/01/symfony-1-2-admin-generator-mit-datepicker/) - Eigentlich hatte ich gedacht, dass das irgendwie einfacher gehen würde, aber hat mich dann doch einiges an Recherche gekostet. Nachdem ich irgendwann mal das "My First Project" durchgespielt hatte, war ich der Auffasung, dass der Datepicker immer benutzt wird beim Admin Generator. Doch nachdem ich dann mal eine andere Anleitung benutzt hatte mußte ich feststellen: - [Ein Projekt mit Zend Framework anlegen via USVN und Subclipse](https://nerdpress.org/2009/10/27/ein-projekt-mit-zend-framework-anlegen-via-usvn-und-subclipse/) - Mal wieder ein neues Projekt anlegen, wird Zeit, dass das mal automatisch geht. Diesmal aber noch manuell und zwar so: USVN benutzen wir um bequem unsere Repos zu verwalten, hat sich bisher bewährt im manuellen Betrieb. Für den automatisierten Betrieb kann ich es allerdings nicht empfehlen. Der Text hier gilt für USVN Version 0.7.2, es - [Simple Tags](https://nerdpress.org/2009/10/27/simple-tags/) - Eines meiner persönlichen Lieblingsplugins - wer die Tagsammlung meines persönlichen Blogs, kleinski.de gesehen hat, weiß auch warum - ist Simple Tags von Amaury Balmer. Denn dank des Plugins ist die Verschlagwortung von Artikeln binnen kürzester Zeit erledigt und, via Zugriff auf die Yahoo terms extractions API und den Service Tag The Net, werden bekannte Personen, - [Netbeans 6.8 kommt mit PHP 5.3 & Symfony-Support](https://nerdpress.org/2009/10/23/netbeans-6-8-kommt-mit-symfony-unterstutzung/) - [...] Die PHP-Integration schließt jetzt das Symfony-Framework und Version 5.3 der Skriptsprache ein. Verbesserungen soll es unter anderem bei den Werkzeugen für Ruby, Groovy und C/C++ geben. Die Beta von Netbeans 6.8 steht auf der Website des Projekts für Windows, Linux, Solaris, OS X und als plattformunabhängige Variante zur Verfügung. Ende Dezember 2009 soll die Software fertig - [CouchDB E-Book](https://nerdpress.org/2009/10/22/couchdb-e-book/) - Eine dieser neumodischen dokumentenbasierenten Datenbanken. Ich bin über eine ausführliche Dokumentation gestolpert, nämlich gibt es das ziemlich brandneue Buch "CouchDB - The Definitive Guide" (J. Anderson, Noah Slater, Jan Lehnard, CouchDB - The Definitive Guide, ISBN 978-0-596-15589-6) von O'Reilly als E-Book zum im-Internet-angucken und umsonst. Unter dieser Adresse. Schon die ersten Kapitel machen Lust, in - [crossplatform HTML Preview mit Adobe Browser Lab](https://nerdpress.org/2009/10/19/crossplatform-html-preview-mit-adobes-browser-labs/) - Adobe hat mit Browser Lab ein Tool auf den Markt geworfen (eigentlich ist es ein online Tool und gratis, sofern man keinen Dreamweaver Plugin haben will, was ich mal voraussetze) mit dem man Webseiten durch die Renderengines verschiedener Browser auf verschiedenen Betriebssystemen anschauen kann. Allerdings auch nur als eine Art Screenshots. Also auch nicht unbedingt - [Behave, baby!](https://nerdpress.org/2009/10/16/behave-baby/) - Doctrine macht es dem Entwickler leicht, seine Object-Models mit Businesslogic anzureichern. Entsprechende Methoden an der Doctrine_Record- - oder allgemeiner - an einer entsprechenden Doctrine_Table-Kindklasse zu verdrahten ist ein Kinderspiel. Irgendwann trifft man dann auf einen Anwendungsfall, der eine entsprechende Zusatzfunktionalität erfordert, ohne dass das "Tätigkeitsfeld" dieser Funktionalität auf nur eine Gruppe von Entitäten zu begrenzen - [Tiny URLs mit PHP und der tinyurl API](https://nerdpress.org/2009/10/15/tiny-urls-mit-php-und-de-tinyurl-api/) - für den Fall dass ich nicht der einzige bin, der das bis vorhin nicht wusste: tinyurl.com hat auch eine API. Die ist zwar unglaublich simpel, aber das ist doch auch mal schön. und vice versa (hackish): und noch die CURL variante von ersterem (via davidwalsh) - [Feednapi Media Browser](https://nerdpress.org/2009/10/14/feednapi/) - So mal ein bißchen Werbung in eigener Sache: Mein Freizeit Projekt ist online: http://feednapi.net Was macht es? Es durchsucht verschiedene (viele) MedienSites nach bestimmten Keywords und stellt die neuesten Ergebnisse (schön) dar. Wie gehts? Es benutzt ganz brav die APIs der Sites. Was soll das? Das Web ist vielfältig und die Resourcen zu gewissen Interessengebiete - [PHP debug Ausgaben in Ajax Responses mit FirePHP](https://nerdpress.org/2009/10/03/php-debug-ausgaben-in-ajax-responses-mit-firephp/) - eine weitere Supererweiterung für Firebug ist meiner Meinung nach FirePHP. Das Tool ermöglicht PHP (debug)Ausgaben direkt an die Firebug Konsole zu schicken: installieren lässt sich das Ding beqeum via pear: einbinden dann so: dann solche Dinge tun: auch sehr schön. Logging in Tabellenform: oder auch Tracing: Traces You can send a backtrace showing File, Line, - [Den Scope betrügen - wenn der Berg mal zum Propheten kommt](https://nerdpress.org/2009/10/03/den-scope-betrugen-wenn-der-berg-mal-zum-propheten-kommt/) - Javascript und der Scope (dt. "Sichtbarkeitsbereich") einer Variablen ist so eine Sache. Durch eine klitzekleine Fehlkonzeption - wenn man es denn so nennen kann - in ECMAScript (die Sache mit dem Schlüsselwort "this" und dessen änderbarer Referenz in "self") fällt es hin und wieder schwer zu erkennen, in welchem Scope man sich gerade "herumtreibt", also - [JS Unit Testing mit FireUnit - JavaScript Unit Testing Extension](https://nerdpress.org/2009/10/02/js-unit-testing-mit-fireunit-javascript-unit-testing-extension/) - FireUnit ist eine Extension für eine Extension. Für Firebug nämlich. Damit lassen sich dann ziemlich komfortabel Javascript Unit Tests machen. Der Funktionsumfang ist überschaubar, was mir das Ding auf Anhieb sympathisch macht. true / false Tests und String compare: Regex String Compare: und die Ergebnisse in der Firebug Konsole anzeigen: ... was dann so aussieht: - [Symfony flying with Lighttpd on Mac OS X 10.6](https://nerdpress.org/2009/09/27/symfony-flying-with-lighttpd-on-mac-os-x-10-6/) - This guide aims to Mac OS X 10.6 users who intend to run their Symfony 1.2 projects on Lighttpd with PHP 5.3 and MySQL5. Steps described in this article refer to a development machine setup and do not consider any security related configurations necessary for a production setup. Why? Why would I want to use - [Google gegen IE](https://nerdpress.org/2009/09/25/google-gegen-ie/) - Wer an der erweiterten Beta-Testphase von Wave teilnehmen will, die in der nächsten Woche beginnt, wird auf Chrome, Safari oder Firefox umsteigen oder Chrome Frame installieren müssen. Viele Stunden, die man in der Vergangenheit mit Wave-Anpassungen für den Internet Explorer verbracht hat, will man in Zukunft in die Verbesserung von Wave für alle Nutzer stecken. http://www.heise.de/newsticker/Microsoft-warnt-vor-Googles-Chrome-Plugin--/meldung/145891 - [Die Konkurrenz ist immer noch wach](https://nerdpress.org/2009/09/16/die-konkurrenz-ist-immer-noch-wach/) - Ich weiß, das hab' ich bereits des öfteren gepostet. Aber nun hat Hr. Suckow abermals den Vogel abgeschossen, zu sehen in seinem neuen Teaser auf webmaster-4you.de. Irgendwie funktioniert das! Interessant zu wissen, ob das Ernst gemeint ist - denn wenn es so ist, muss der Mann mittlerweile unermesslich reich sein. - [vim scp://user@server//path/to/the/file [EOP]](https://nerdpress.org/2009/09/11/vim-scpuserserverpathtothefile-eop/) - Remote vim. Remote Mate? Haaallooooo?? ;-) - [the notepod](https://nerdpress.org/2009/09/11/the-notepod/) - Zur abwechslung mal was analoges: the Notepod falls wir mal in die iPhone entwicklung einsteigen... get it here - [sfAMFPlugin & Propel Custom Properties](https://nerdpress.org/2009/09/10/sfamfplugin-and-custom-properties/) - Das SfAmfPlugin ist ein Symfony-Plugin, welches auf SabreAMF aufsetzt, einer PHP-Bibliothek, die - yessir! - zur Kommunikation mit einem Flash/Flex Remote Client via AMF-Protokoll konzipiert wurde. Nun bietet SabreAMF ab Werk "nur" Serialisierungen für primitive Typen sowie Bytestreams (Flash-Pendant "ByteArray") und PHP-Array ("ArrayCollection") an. Natürlich kann man auch Objekte per Class-Mapping auf ein Äquivalent im Flash-Player abbilden. Das Symfony-Plugin - [Textbausteine auf der Shell ersetzen / löschen](https://nerdpress.org/2009/09/10/textbausteine-auf-der-shell-ersetzen-loschen/) - Wie kann ich in beliebig vielen Textdateien einen bestimmten Satz löschen? Ganz konkret ging es um 420 Dateien in verschiedenen Ordnern. Ein klarer Fall für den Shell Guru (Lukas). Da mir so schwindelig geworden ist als er mir die Instruktionen diktierte, beschloss ich dies gleich mal hier festzuhalten. Wir benutzen "ed" - ed ist der - [Icons für Lau](https://nerdpress.org/2009/09/10/icons-fur-lau/) - “Silk” is a smooth, free icon set, containing over 700 16-by-16 pixel icons in strokably-soft PNG format. Containing a large variety of icons, you're sure to find something that tickles your fancy. And all for a low low price of $0.00. You can't say fairer than that. http://www.famfamfam.com/lab/icons/silk/ - [Symfony, Propel und SQL Aggregate Functions](https://nerdpress.org/2009/09/08/symfony-propel-und-sql-aggregate-functions/) - Da ich jetzt fast zwei Stunden gebraucht habe um einen GROUP BY und COUNT query in Symfony hinzukriegen, hier mal die Erklärung dazu. Bei Google hab ich auch nichts sonderlich hilfreiches gefunden, bis auf einen Beitrag: hier ... und da die letzte Antwort. Will man also einen Query wie folgt mit Propel bauen: macht man - [Web FTP / web based Filemanager tools im überblick](https://nerdpress.org/2009/09/08/web-ftp-web-based-filemanager-tools-im-uberblick/) - Eine Übersicht über 6 webFTP / Filemanager Tools verspricht dieser Artikel hier: http://www.dreamcss.com/2009/07/file-managers-based-on-jquery-ajax-php.html if you looking for Free and powerful File Managers Based on jQuery , Ajax and php ready to use in your web projects and easy to customize , take a look at this list with Free and powerful File Managers using jQuery/Ajax/php - [Symfony Day Cologne - Ein paar Slides](https://nerdpress.org/2009/09/07/symfony-day-cologne-ein-paar-slides/) - Für den, der gerade nicht in Köln war, habe ich hier höchstselbst mühsamst die dazugehörigen Slides zusammengesucht und -redaktioniert. Jaja... : Jonathan Wage on “Symfony 1.3 & Doctrine 1.2“ Bernhard Schussek on “Best Practices with Lime 2“ Nicolas Perriault, "30 symfony best practices" Xavier Lacot, "Symfony vs. integrating products" (pdf) Lesenswert sind definitiv die ersten - [Googlemaps Marker Clustering](https://nerdpress.org/2009/09/07/googlemaps-marker-clustering/) - Wer schonmal mehr als 50 Marker auf einer Googlemap unterzubringen hatte wird wissen, wie das auf die Performance gehen kann. Um das Clustering Thema kommt man also früher oder später nicht herum. Neben kommerziellen Lösungen (zB. mapToolKit) gibt es auch, unscheinbar versteckt in den Weiten von GoogleCode, den opensource MarkerClusterer. Anhand eines definierbaren Rasters werden - [Javascript Loop Benchmark](https://nerdpress.org/2009/09/06/javascript-loop-benchmark/) - Manche Menschen sind komisch, liefern aber hin und wieder interessante Beiträge zu Themen, mit denen sich Normalsterbliche höchstens einmal während eines längeren Krankenhausaufenthalts befassen würden. Und das auch nur in Ermangelung jeglicher Beschäftigung. Zum Beispiel, wenn einem nicht nur die heimlich geschmuggelten Kippen ausgegangen sind, sondern auch die ARD-ZDF-Fernsehgarten-DVD nicht mehr zum Sitz-Tanzen animiert. Und - [Lime (functional) tests aufzeichnen](https://nerdpress.org/2009/09/06/lime-functional-tests-aufzeichnen/) - Ein vielversprechendes viel versprechendes Symfony-Plugin ist das swFunctionalTestGeneration-Plugin, welches es einem erlaubt, Funktionstests sozusagen als Macros aufzuzeichnen und wiederum als Lime-Test abzuspeichern. Als IDE dient ein handelsüblicher Webbrowser, weitere Voraussetzung ist ein Symfony-Projekt mit aktivierter Debug-Toolbar, in die sich die Erweiterung via symfony-Filter ein-hakt. Dann genügt ein Button um die Aufzeichnung eines Anwendungsfalls zu starten - [Upgrade Eclipse Ganymede to Galileo on Ubuntu](https://nerdpress.org/2009/09/06/upgrade-eclipse-ganymede-to-galileo-on-ubuntu/) - erstmal den galileo holen: also das pdt-eclipse, ich mach ja in php ;) dann da liegt dann schon der eclipse ordner von ganymede das archiv holen entpacken und zack kopiert der sich einfach über ganymede und fertig ist der galileo da ich ja alle verknüpfungen schon hatte kann ich die alle weiterbenutzen und muss da - [Snippet APP für den mac](https://nerdpress.org/2009/09/06/snippet-app-mac/) - Snippet ist so eine Art betriebssystemweite Codeschnipselverwaltung. Praktisch wenn man auch mal außerhalb der Lieblings IDE unterwegs ist und / oder wenn man gerade nicht die O'Reilly RegEx Eule auf der Schulter sitzen hat. Das gibt es außerdem als kostenlose Web Version hier: http://google.de. hier: http://snipt.net/. - [CSS rounded corners feat. DD_roundies](https://nerdpress.org/2009/09/05/css-rounded-corners-feat-dd_roundies/) - runde Ecken lassen sich ja in einigen Browsern mittels der entsprechenden proprietären border-radius CSS Eigenschaft gut realisieren. zB: Klar, dass der feine IE da von Haus aus nicht mithalten kann. Zum Glück für ihn gibt es aber Drew Dillers' DD_roundies. Das Skript fixed diese IE'sche Unzulänglichkeit und man kann runde Ecken auch da ohne zusätzliches ## Pages - [Impressum](https://nerdpress.org/impressum/) - Angaben gemäß § 5 TMG:Ivo Bathke Postanschrift:Orsbeckstr. 450354 Hürth Kontakt:Telefon: +49 2233 7130751E-Mail: info@nerdpress.org Hinweise zur WebsiteVerantwortlich für journalistisch-redaktionelle Inhalte ist:Blogposts: Der jeweilige Autor des Posts Information gemäß § 36 VSBGGemäß § 36 VSBG (Verbraucherstreitbeilegungsgesetz - Gesetz über die alternative Streitbeilegung in Verbrauchersachen) erklärt der Betreiber dieser Website: Wir sind weder bereit noch verpflichtet, an - [Datenschutz](https://nerdpress.org/datenschutz/) - Wir speichern selbst keine Daten über unsere Nutzer.Als Blog sind wir aber auf diverse technische Dienste angewiesen, die ihrerseits Daten speichern und die wir im folgenden auflisten: Personenbezogene Daten in Server-Log-Files Der Provider der Seiten erhebt und speichert automatisch Informationen in so genannten Server-Log-Files, die Ihr Browser automatisch übermittelt. Dies sind: Browsertyp/ Browserversionverwendetes BetriebssystemReferrer URLHostname ## Categories - [Uncategorized](https://nerdpress.org/category/uncategorized/) - [Admin](https://nerdpress.org/category/admin/) - [API](https://nerdpress.org/category/api/) - [CMS](https://nerdpress.org/category/content-management/) - [CSS](https://nerdpress.org/category/frontend-engineering/css/) - [DB](https://nerdpress.org/category/db/) - [Deployment](https://nerdpress.org/category/project-setup/deployment/) - [IDE](https://nerdpress.org/category/tools-2/ide/) - [JS](https://nerdpress.org/category/js/) - [MongoDB](https://nerdpress.org/category/db/mongodb-db/) - [MySQL](https://nerdpress.org/category/db/mysql/) - [node.js](https://nerdpress.org/category/js/node-js/) - [PHP](https://nerdpress.org/category/php/) - [Project Setup](https://nerdpress.org/category/project-setup/) - [Silverstripe](https://nerdpress.org/category/content-management/silverstripe/) - Beiträge zum Silverstripe CMS - [Software engineering](https://nerdpress.org/category/swe/) - [Symfony](https://nerdpress.org/category/php/symfony-framework/) - [Tools](https://nerdpress.org/category/tools-2/) - [vServer](https://nerdpress.org/category/admin/vserver/) - [Wordpress](https://nerdpress.org/category/content-management/wordpress/) - [AJAX](https://nerdpress.org/category/js/ajax-js/) - [Doctrine ORM](https://nerdpress.org/category/php/doctrine-orm/) - [Dojo Toolkit](https://nerdpress.org/category/js/dojo-toolkit/) - [jQuery](https://nerdpress.org/category/js/jquery-js/) - [Twig](https://nerdpress.org/category/php/twig/) - [eCommerce](https://nerdpress.org/category/ecommerce/) - [magento](https://nerdpress.org/category/ecommerce/magento/) - [OXID](https://nerdpress.org/category/ecommerce/oxid/) - [Frontend](https://nerdpress.org/category/frontend-engineering/) - [Silex](https://nerdpress.org/category/php/silex/) - [socket.io](https://nerdpress.org/category/js/socket-io/) - [Express](https://nerdpress.org/category/js/node-js/express/) - [Weekend Projects](https://nerdpress.org/category/weekend-projects/) - [Composer](https://nerdpress.org/category/php/composer-php/) - [docker](https://nerdpress.org/category/docker/) - [docker](https://nerdpress.org/category/project-setup/docker-project-setup/) - [Documentation](https://nerdpress.org/category/api/documentation/) - [Apache](https://nerdpress.org/category/admin/apache/) - [Sqlite](https://nerdpress.org/category/db/sqlite/) - [SSH](https://nerdpress.org/category/ssh/) - [docker-compose](https://nerdpress.org/category/project-setup/docker-compose/) - [PHPUnit](https://nerdpress.org/category/php/phpunit/) - [Kubernetes](https://nerdpress.org/category/project-setup/kubernetes/) - [Astro](https://nerdpress.org/category/frontend-engineering/astro/) - [Web components](https://nerdpress.org/category/frontend-engineering/web-components/) - [NPM](https://nerdpress.org/category/js/npm/) - [TUI](https://nerdpress.org/category/tools-2/tui/) - [Linux](https://nerdpress.org/category/linux/) ## Tags - [Sqlite](https://nerdpress.org/tag/sqlite/) - [Zend](https://nerdpress.org/tag/zend-php/) - [10 jahre](https://nerdpress.org/tag/10-jahre/) - [active entity](https://nerdpress.org/tag/active-entity/) - [ActiveRecord](https://nerdpress.org/tag/activerecord/) - [Addon](https://nerdpress.org/tag/addon/) - [Admin Generator](https://nerdpress.org/tag/admin-generator/) - [AdminGenerator](https://nerdpress.org/tag/admingenerator/) - [administration](https://nerdpress.org/tag/administration/) - [adobe](https://nerdpress.org/tag/adobe/) - [Ajax](https://nerdpress.org/tag/ajax/) - [Amf](https://nerdpress.org/tag/amf/) - [analytics](https://nerdpress.org/tag/analytics/) - [Annotations](https://nerdpress.org/tag/annotations/) - [Ant](https://nerdpress.org/tag/ant/) - [Apache](https://nerdpress.org/tag/apache/) - [Apache 2](https://nerdpress.org/tag/apache-2/) - [app](https://nerdpress.org/tag/app/) - [Aptana](https://nerdpress.org/tag/aptana/) - [articles](https://nerdpress.org/tag/articles/) - [Assetic](https://nerdpress.org/tag/assetic/) - [async](https://nerdpress.org/tag/async/) - [Audio](https://nerdpress.org/tag/audio/) - [authoring](https://nerdpress.org/tag/authoring/) - [Behaviours](https://nerdpress.org/tag/behaviours/) - [bookmarklet](https://nerdpress.org/tag/bookmarklet/) - [Bookmarks](https://nerdpress.org/tag/bookmarks/) - [Bootstrap](https://nerdpress.org/tag/bootstrap/) - [boundaries](https://nerdpress.org/tag/boundaries/) - [build](https://nerdpress.org/tag/build/) - [Bundle](https://nerdpress.org/tag/bundle/) - [cache](https://nerdpress.org/tag/cache/) - [Call](https://nerdpress.org/tag/call/) - [canvas](https://nerdpress.org/tag/canvas/) - [Cheat-Sheet](https://nerdpress.org/tag/cheat-sheet/) - [cli](https://nerdpress.org/tag/cli/) - [closure](https://nerdpress.org/tag/closure/) - [cms](https://nerdpress.org/tag/cms/) - [code-completion](https://nerdpress.org/tag/code-completion/) - [CodeMirror](https://nerdpress.org/tag/codemirror/) - [CodeSniffer](https://nerdpress.org/tag/codesniffer/) - [coding conventions](https://nerdpress.org/tag/coding-conventions/) - [Comet](https://nerdpress.org/tag/comet/) - [continuous integration](https://nerdpress.org/tag/continuous-integration/) - [couch](https://nerdpress.org/tag/couch/) - [CouchDB](https://nerdpress.org/tag/couchdb/) - [css code](https://nerdpress.org/tag/css-code/) - [css3](https://nerdpress.org/tag/css3/) - [Custom Property](https://nerdpress.org/tag/custom-property/) - [damnsmalllinux](https://nerdpress.org/tag/damnsmalllinux/) - [Dash](https://nerdpress.org/tag/dash/) - [DataObject](https://nerdpress.org/tag/dataobject/) - [Datepicker](https://nerdpress.org/tag/datepicker/) - [DBField](https://nerdpress.org/tag/dbfield/) - [Debian](https://nerdpress.org/tag/debian/) - [debian lenny](https://nerdpress.org/tag/debian-lenny/) - [Dependency Injection](https://nerdpress.org/tag/dependency-injection/) - [deploy](https://nerdpress.org/tag/deploy/) - [Design](https://nerdpress.org/tag/design/) - [Design Pattern](https://nerdpress.org/tag/design-pattern/) - [Development](https://nerdpress.org/tag/development/) - [DIC](https://nerdpress.org/tag/dic/) - [Doctrine](https://nerdpress.org/tag/doctrine/) - [Doctrine 1.1](https://nerdpress.org/tag/doctrine-1-1/) - [Doctrine 2](https://nerdpress.org/tag/doctrine-2/) - [Document Oriented Database](https://nerdpress.org/tag/document-oriented-database/) - [Dojo](https://nerdpress.org/tag/dojo/) - [Dojo 1.4](https://nerdpress.org/tag/dojo-1-4/) - [Dokumentation](https://nerdpress.org/tag/dokumentation/) - [Draft](https://nerdpress.org/tag/draft/) - [eclipse](https://nerdpress.org/tag/eclipse/) - [editor](https://nerdpress.org/tag/editor/) - [Einstellungen](https://nerdpress.org/tag/einstellungen/) - [Endlosschleife](https://nerdpress.org/tag/endlosschleife/) - [EntityManager](https://nerdpress.org/tag/entitymanager/) - [Error](https://nerdpress.org/tag/error/) - [etherpad](https://nerdpress.org/tag/etherpad/) - [EventListener](https://nerdpress.org/tag/eventlistener/) - [Exceptionhub](https://nerdpress.org/tag/exceptionhub/) - [Facebook](https://nerdpress.org/tag/facebook/) - [filter](https://nerdpress.org/tag/filter/) - [filter_var](https://nerdpress.org/tag/filter_var/) - [Firebug](https://nerdpress.org/tag/firebug/) - [Firefox](https://nerdpress.org/tag/firefox/) - [firefox4](https://nerdpress.org/tag/firefox4/) - [Flickr](https://nerdpress.org/tag/flickr/) - [font tags](https://nerdpress.org/tag/font-tags/) - [FormFramework](https://nerdpress.org/tag/formframework/) - [framework](https://nerdpress.org/tag/framework/) - [Free Icons](https://nerdpress.org/tag/free-icons/) - [Frontend](https://nerdpress.org/tag/frontend/) - [ftp](https://nerdpress.org/tag/ftp/) - [gadgets](https://nerdpress.org/tag/gadgets/) - [geo library](https://nerdpress.org/tag/geo-library/) - [geocoding services](https://nerdpress.org/tag/geocoding-services/) - [GeoIp](https://nerdpress.org/tag/geoip/) - [geolocation](https://nerdpress.org/tag/geolocation/) - [Gfx](https://nerdpress.org/tag/gfx/) - [Git](https://nerdpress.org/tag/git/) - [github](https://nerdpress.org/tag/github/) - [google](https://nerdpress.org/tag/google/) - [Google Analytics](https://nerdpress.org/tag/google-analytics/) - [google translate](https://nerdpress.org/tag/google-translate/) - [googleMaps](https://nerdpress.org/tag/googlemaps/) - [Grails](https://nerdpress.org/tag/grails/) - [Highlighting](https://nerdpress.org/tag/highlighting/) - [HTML](https://nerdpress.org/tag/html/) - [Html5](https://nerdpress.org/tag/html5/) - [i18n](https://nerdpress.org/tag/i18n/) - [IE](https://nerdpress.org/tag/ie/) - [implementation](https://nerdpress.org/tag/implementation/) - [Install](https://nerdpress.org/tag/install/) - [Internet Explorer](https://nerdpress.org/tag/internet-explorer/) - [Introspektion](https://nerdpress.org/tag/introspektion/) - [Inversion of Control](https://nerdpress.org/tag/inversion-of-control/) - [IoC](https://nerdpress.org/tag/ioc/) - [Javascript](https://nerdpress.org/tag/javascript/) - [jQuery](https://nerdpress.org/tag/jquery/) - [JSON](https://nerdpress.org/tag/json/) - [Kernel](https://nerdpress.org/tag/kernel/) - [lame](https://nerdpress.org/tag/lame/) - [latitude 38](https://nerdpress.org/tag/latitude-38/) - [Lawnchair](https://nerdpress.org/tag/lawnchair/) - [less](https://nerdpress.org/tag/less/) - [Lighttpd](https://nerdpress.org/tag/lighttpd/) - [Lime](https://nerdpress.org/tag/lime/) - [links](https://nerdpress.org/tag/links-2/) - [linux](https://nerdpress.org/tag/linux/) - [localstorage](https://nerdpress.org/tag/localstorage/) - [lokal](https://nerdpress.org/tag/lokal/) - [Long Poll](https://nerdpress.org/tag/long-poll/) - [mac](https://nerdpress.org/tag/mac/) - [mirror-fx](https://nerdpress.org/tag/mirror-fx/) - [mod_xsendfile](https://nerdpress.org/tag/mod_xsendfile/) - [mongodb](https://nerdpress.org/tag/mongodb/) - [Munin](https://nerdpress.org/tag/munin/) - [mvc](https://nerdpress.org/tag/mvc/) - [mySound](https://nerdpress.org/tag/mysound/) - [mySoundObject](https://nerdpress.org/tag/mysoundobject/) - [nachhaltig](https://nerdpress.org/tag/nachhaltig/) - [Netbeans](https://nerdpress.org/tag/netbeans/) - [nodejs](https://nerdpress.org/tag/nodejs/) - [November](https://nerdpress.org/tag/november/) - [Object Relational Mapping](https://nerdpress.org/tag/object-relational-mapping/) - [Objekt](https://nerdpress.org/tag/objekt/) - [online tool](https://nerdpress.org/tag/online-tool/) - [open source](https://nerdpress.org/tag/open-source/) - [optimization](https://nerdpress.org/tag/optimization/) - [ORM](https://nerdpress.org/tag/orm/) - [outline](https://nerdpress.org/tag/outline/) - [pdf](https://nerdpress.org/tag/pdf/) - [PDT](https://nerdpress.org/tag/pdt/) - [peakData](https://nerdpress.org/tag/peakdata/) - [Performance](https://nerdpress.org/tag/performance/) - [PHP 5.3](https://nerdpress.org/tag/php-5-3/) - [php5](https://nerdpress.org/tag/php5/) - [phpdepend](https://nerdpress.org/tag/phpdepend/) - [PHPUnit](https://nerdpress.org/tag/phpunit/) - [Plesk](https://nerdpress.org/tag/plesk/) - [Plugin](https://nerdpress.org/tag/plugin/) - [plugins](https://nerdpress.org/tag/plugins/) - [posix](https://nerdpress.org/tag/posix/) - [Project](https://nerdpress.org/tag/project/) - [propel](https://nerdpress.org/tag/propel/) - [Propel 1.4](https://nerdpress.org/tag/propel-1-4/) - [Push](https://nerdpress.org/tag/push/) - [qs](https://nerdpress.org/tag/qs/) - [qualitätssicherung](https://nerdpress.org/tag/qualitatssicherung/) - [Refactoring](https://nerdpress.org/tag/refactoring/) - [Referenz](https://nerdpress.org/tag/referenz/) - [Reflection](https://nerdpress.org/tag/reflection/) - [RegEx](https://nerdpress.org/tag/regex/) - [reload css](https://nerdpress.org/tag/reload-css/) - [remote](https://nerdpress.org/tag/remote/) - [ressources](https://nerdpress.org/tag/ressources/) - [rss](https://nerdpress.org/tag/rss/) - [Runkit](https://nerdpress.org/tag/runkit/) - [sapphire](https://nerdpress.org/tag/sapphire/) - [Schnurpsel](https://nerdpress.org/tag/schnurpsel/) - [Security](https://nerdpress.org/tag/security/) - [SecurityBundle](https://nerdpress.org/tag/securitybundle/) - [Selektor](https://nerdpress.org/tag/selektor/) - [selenium](https://nerdpress.org/tag/selenium/) - [Service](https://nerdpress.org/tag/service/) - [Services](https://nerdpress.org/tag/services/) - [Setup](https://nerdpress.org/tag/setup/) - [sfAmfPlugin](https://nerdpress.org/tag/sfamfplugin/) - [sfdaycgn](https://nerdpress.org/tag/sfdaycgn/) - [sfDependencyInjectionContainerPlugin](https://nerdpress.org/tag/sfdependencyinjectioncontainerplugin/) - [sfPhpunitPlugin](https://nerdpress.org/tag/sfphpunitplugin/) - [Shell](https://nerdpress.org/tag/shell/) - [simple tags](https://nerdpress.org/tag/simple-tags/) - [sitemap](https://nerdpress.org/tag/sitemap/) - [Smugmug](https://nerdpress.org/tag/smugmug/) - [Software Architecture](https://nerdpress.org/tag/software-architecture/) - [Sonnenaufgang](https://nerdpress.org/tag/sonnenaufgang/) - [Sonnenuntergang](https://nerdpress.org/tag/sonnenuntergang/) - [soundManager](https://nerdpress.org/tag/soundmanager/) - [Sounds](https://nerdpress.org/tag/sounds/) - [Spam](https://nerdpress.org/tag/spam/) - [Spezifikation](https://nerdpress.org/tag/spezifikation/) - [SPF](https://nerdpress.org/tag/spf/) - [Sql](https://nerdpress.org/tag/sql/) - [Standard Edition](https://nerdpress.org/tag/standard-edition/) - [Strato](https://nerdpress.org/tag/strato/) - [subclipse](https://nerdpress.org/tag/subclipse/) - [suhosin](https://nerdpress.org/tag/suhosin/) - [sunset time](https://nerdpress.org/tag/sunset-time/) - [SVN](https://nerdpress.org/tag/svn/) - [symfony 1.4](https://nerdpress.org/tag/symfony-1-4/) - [symfony 2](https://nerdpress.org/tag/symfony-2/) - [Symfony 2 Sandbox](https://nerdpress.org/tag/symfony-2-sandbox/) - [Symfony Components](https://nerdpress.org/tag/symfony-components/) - [Symfony Standard Edition](https://nerdpress.org/tag/symfony-standard-edition/) - [syntax](https://nerdpress.org/tag/syntax/) - [tags](https://nerdpress.org/tag/tags/) - [tasks](https://nerdpress.org/tag/tasks/) - [test driven developement](https://nerdpress.org/tag/test-driven-developement/) - [test driven development](https://nerdpress.org/tag/test-driven-development/) - [testing](https://nerdpress.org/tag/testing/) - [Textmanipulation](https://nerdpress.org/tag/textmanipulation/) - [Threads](https://nerdpress.org/tag/threads/) - [Thunderbird](https://nerdpress.org/tag/thunderbird/) - [tinyMCE](https://nerdpress.org/tag/tinymce/) - [tinyurl](https://nerdpress.org/tag/tinyurl/) - [Tool](https://nerdpress.org/tag/tool/) - [tools](https://nerdpress.org/tag/tools/) - [Tracking](https://nerdpress.org/tag/tracking/) - [tutorial](https://nerdpress.org/tag/tutorial/) - [tutorials](https://nerdpress.org/tag/tutorials/) - [Tweak](https://nerdpress.org/tag/tweak/) - [Twitter](https://nerdpress.org/tag/twitter/) - [ubuntu](https://nerdpress.org/tag/ubuntu/) - [Ubuntu Tweak](https://nerdpress.org/tag/ubuntu-tweak/) - [Umleitungsschleife](https://nerdpress.org/tag/umleitungsschleife/) - [unfuddle](https://nerdpress.org/tag/unfuddle/) - [untergangszeiten](https://nerdpress.org/tag/untergangszeiten/) - [USVN](https://nerdpress.org/tag/usvn/) - [validator](https://nerdpress.org/tag/validator/) - [vim](https://nerdpress.org/tag/vim/) - [Vimeo](https://nerdpress.org/tag/vimeo/) - [visual](https://nerdpress.org/tag/visual/) - [vork](https://nerdpress.org/tag/vork/) - [waveform](https://nerdpress.org/tag/waveform/) - [webftp](https://nerdpress.org/tag/webftp/) - [Webmaster](https://nerdpress.org/tag/webmaster/) - [Webserver](https://nerdpress.org/tag/webserver/) - [Webservice](https://nerdpress.org/tag/webservice/) - [WebWorker](https://nerdpress.org/tag/webworker/) - [Werkzeug](https://nerdpress.org/tag/werkzeug/) - [Widget](https://nerdpress.org/tag/widget/) - [Worker](https://nerdpress.org/tag/worker/) - [Working](https://nerdpress.org/tag/working/) - [wp-config.php](https://nerdpress.org/tag/wp-config-php/) - [writeBehind](https://nerdpress.org/tag/writebehind/) - [WTFs](https://nerdpress.org/tag/wtfs/) - [wwf](https://nerdpress.org/tag/wwf/) - [wwf-file](https://nerdpress.org/tag/wwf-file/) - [www domain](https://nerdpress.org/tag/www-domain/) - [X-Sendfile](https://nerdpress.org/tag/x-sendfile/) - [xml](https://nerdpress.org/tag/xml/) - [xmlhttprequest](https://nerdpress.org/tag/xmlhttprequest/) - [YAML](https://nerdpress.org/tag/yaml/) - [Youtube](https://nerdpress.org/tag/youtube/) - [YQL](https://nerdpress.org/tag/yql/) - [yui-compressor](https://nerdpress.org/tag/yui-compressor/) - [yuicompressor](https://nerdpress.org/tag/yuicompressor/) - [Zen-Coding](https://nerdpress.org/tag/zen-coding/) - [Zenfolio](https://nerdpress.org/tag/zenfolio/) - [zenith](https://nerdpress.org/tag/zenith/) - [zoom](https://nerdpress.org/tag/zoom/) - [Zooomr](https://nerdpress.org/tag/zooomr/) - [installer](https://nerdpress.org/tag/installer/) - [Global Variables](https://nerdpress.org/tag/global-variables/) - [boilerplate](https://nerdpress.org/tag/boilerplate/) - [environments](https://nerdpress.org/tag/environments/) - [tilt](https://nerdpress.org/tag/tilt/) - [3D](https://nerdpress.org/tag/3d/) - [DOM](https://nerdpress.org/tag/dom/) - [wunderlist](https://nerdpress.org/tag/wunderlist/) - [linus](https://nerdpress.org/tag/linus/) - [client](https://nerdpress.org/tag/client/) - [foreach](https://nerdpress.org/tag/foreach/) - [reference](https://nerdpress.org/tag/reference/) - [wikipedia](https://nerdpress.org/tag/wikipedia/) - [tgio](https://nerdpress.org/tag/tgio/) - [linklist](https://nerdpress.org/tag/linklist/) - [footer](https://nerdpress.org/tag/footer/) - [resources](https://nerdpress.org/tag/resources/) - [Locale](https://nerdpress.org/tag/locale/) - [Session](https://nerdpress.org/tag/session/) - [Request](https://nerdpress.org/tag/request/) - [Extensions](https://nerdpress.org/tag/extensions/) - [Twig Extension](https://nerdpress.org/tag/twig-extension/) - [redis](https://nerdpress.org/tag/redis/) - [silex](https://nerdpress.org/tag/silex-2/) - [h5bp](https://nerdpress.org/tag/h5bp/) - [skeleton](https://nerdpress.org/tag/skeleton/) - [cloud](https://nerdpress.org/tag/cloud/) - [duplicate pages](https://nerdpress.org/tag/duplicate-pages/) - [has_many](https://nerdpress.org/tag/has-many/) - [many_many](https://nerdpress.org/tag/many-many/) - [v8js.so](https://nerdpress.org/tag/v8js-so/) - [pecl](https://nerdpress.org/tag/pecl/) - [homebrew](https://nerdpress.org/tag/homebrew/) - [composer.phar](https://nerdpress.org/tag/composer-phar/) - [packagist](https://nerdpress.org/tag/packagist/) - [dependency management](https://nerdpress.org/tag/dependency-management/) - [express](https://nerdpress.org/tag/express-2/) - [jade](https://nerdpress.org/tag/jade-2/) - [UserForm](https://nerdpress.org/tag/userform/) - [placeholder](https://nerdpress.org/tag/placeholder/) - [proxy](https://nerdpress.org/tag/proxy/) - [sockets](https://nerdpress.org/tag/sockets/) - [Symfony2](https://nerdpress.org/tag/symfony2/) - [OpenGraph](https://nerdpress.org/tag/opengraph/) - [xml sitemaps](https://nerdpress.org/tag/xml-sitemaps/) - [soundcloud](https://nerdpress.org/tag/soundcloud/) - [jsfiddle](https://nerdpress.org/tag/jsfiddle/) - [templates](https://nerdpress.org/tag/templates/) - [requirejs](https://nerdpress.org/tag/requirejs/) - [masonry](https://nerdpress.org/tag/masonry/) - [bower](https://nerdpress.org/tag/bower/) - [composer](https://nerdpress.org/tag/composer/) - [bash](https://nerdpress.org/tag/bash/) - [ParamConverter](https://nerdpress.org/tag/paramconverter/) - [package](https://nerdpress.org/tag/package/) - [yeoman](https://nerdpress.org/tag/yeoman/) - [grunt](https://nerdpress.org/tag/grunt/) - [API](https://nerdpress.org/tag/api/) - [CSS](https://nerdpress.org/tag/css/) - [Deployment](https://nerdpress.org/tag/deployment/) - [MySQL](https://nerdpress.org/tag/mysql/) - [node.js](https://nerdpress.org/tag/node-js/) - [PHP](https://nerdpress.org/tag/php/) - [Silverstripe](https://nerdpress.org/tag/silverstripe/) - [Software engineering](https://nerdpress.org/tag/swe/) - [Symfony](https://nerdpress.org/tag/symfony-framework/) - [vServer](https://nerdpress.org/tag/vserver/) - [Wordpress](https://nerdpress.org/tag/wordpress/) - [Twig](https://nerdpress.org/tag/twig/) - [magento](https://nerdpress.org/tag/magento/) - [OXID](https://nerdpress.org/tag/oxid/) - [superleansilexplate](https://nerdpress.org/tag/superleansilexplate/) - [docker](https://nerdpress.org/tag/docker/) - [Angular.js](https://nerdpress.org/tag/angular-js/) - [swagger](https://nerdpress.org/tag/swagger/) - [Documentation](https://nerdpress.org/tag/documentation/) - [graphviz](https://nerdpress.org/tag/graphviz/) - [workflow](https://nerdpress.org/tag/workflow/) - [guzzle](https://nerdpress.org/tag/guzzle/) - [mocks](https://nerdpress.org/tag/mocks/) - [PHPStorm](https://nerdpress.org/tag/phpstorm/) - [IntelliJ Ultimate](https://nerdpress.org/tag/intellij-ultimate/) - [IDE](https://nerdpress.org/tag/ide/) - [facepalm](https://nerdpress.org/tag/facepalm/) - [adminer](https://nerdpress.org/tag/adminer/) - [docker-compose](https://nerdpress.org/tag/docker-compose/) - [domains](https://nerdpress.org/tag/domains/) - [ssh](https://nerdpress.org/tag/ssh/) - [gulp](https://nerdpress.org/tag/gulp/) - [esbuild](https://nerdpress.org/tag/esbuild/) - [sass](https://nerdpress.org/tag/sass/) - [Postgres](https://nerdpress.org/tag/postgres/) - [csv](https://nerdpress.org/tag/csv/) - [streams](https://nerdpress.org/tag/streams/) - [logger](https://nerdpress.org/tag/logger/) - [psr-3](https://nerdpress.org/tag/psr-3/) - [umlaut](https://nerdpress.org/tag/umlaut/) - [Monolog](https://nerdpress.org/tag/monolog/) - [Logging](https://nerdpress.org/tag/logging/) - [kubernetes](https://nerdpress.org/tag/kubernetes/) - [k9s](https://nerdpress.org/tag/k9s/) - [Postgis](https://nerdpress.org/tag/postgis/) - [Mastodon](https://nerdpress.org/tag/mastodon/) - [static site generator](https://nerdpress.org/tag/static-site-generator/) - [Astro](https://nerdpress.org/tag/astro/) - [Minicli](https://nerdpress.org/tag/minicli/) - [Web components](https://nerdpress.org/tag/web-components/) - [PicoCSS](https://nerdpress.org/tag/picocss/) - [NPM](https://nerdpress.org/tag/npm/) - [Monorepo](https://nerdpress.org/tag/monorepo/) - [Deployer](https://nerdpress.org/tag/deployer/) - [PHPStan](https://nerdpress.org/tag/phpstan/) - [yazi](https://nerdpress.org/tag/yazi/) - [tui](https://nerdpress.org/tag/tui/) - [permacomputing](https://nerdpress.org/tag/permacomputing/) - [Debugging](https://nerdpress.org/tag/debugging/)