Doctrine: behaviour NestedSet – jak to się je krok po kroku
Przy zarządzaniu listą kategori lub stron/podstron przydaje się bardzo relacja zagnieżdżona. Doctrine 1.2 pozwala na wykorzystanie zagnieżdżonego zbioru(NestedSet), dostępnego jako behaviour.
› Continue reading
Zmienne globalne w plikach TWIG
Jedną przydatną rzeczą przy tworzeniu widoku naszej aplikacji we frameworku symfony2, są zmienne globalne dostępne w TWIG’u.
Przydają się one do wyśwetlania aktualnie zalogowanego użytkownika.
PHP Tips n’ Tricks
Doskonała prezentacja Radosława Benkela dotyczą trików, które można wykorzystać w codziennej pracy z kodem php.
Symfony 1.4 w chmurze
Znalazłem doskonałą prezentacje autorstwa Krisa Wallsmitha dotyczącą uruchamiania symfony 1.4 w chmurze Amazonu. Opisuje ona:
- implementacje doctrine 1.2 na Amazon RDS,
- zarządzanie sesją na Amazon EC2,
- Upload Plików na Amazon S3,
- konfigurację środowiska na lokalne środowisko developerskie,
- deployment projektu do cloud’a.
W sieci nie ma wiele przykładów co do tego typu implementacji symfony 1.4. Więc uważam tę prezentacje jako cenne znalezisko.
Doctrine: Tworzenie tabel w utf-8
Problem:
Po zbudowaniu projektu symfony nie wyświetlają się na stronie polskie znaki znaki diakrytyczne.
Diagnoza:
Gdy serwer MySQL ma w domyślnej konfiiguracji charset Latin-2 oraz porównywanie jest również domyślnie ustalone na Latin-2, a my wykonamy
php symfony doctrine:build --all --and-load --no-confirmation
To dostaniemy piękną bazę danych na domyślnych ustawieniach. I przy wyświetlaniu polskich znaków diakrytycznych będą wyskakiwały krzaki. By uchronić się przed taką sytuacją.
Rozwiązanie:
Należy zmodyfikować wszystkie tabele w schemacie (schema.yml) o dodatkowe opcje:
Tabela:
columns:
kolumna_1: {type: string(255)}
kolumna_2: {type: clob}
options:
type: MyISAM
collate: utf8_unicode_ci
charset: utf8Options pozwala na ustalenie silnika MyISAM / InnoDB oraz metody porównań i kodowania znaków, o które nam chodzi.
Mały fail po migracji.
Od 22.10 blog był niedostępny dla czytelników. Ponieważ miała miejsce przeprowadzka na nowy serwer (linuxpl.com). Generator subdomen w panelu zostawił mi index.html w głównym katalogu Vhosta i tak oto ruch nie był kierowany na index.php
W produkcji są 4 wpisy na tematy związane z Doctrine:
- Doctrine: behaviour NestedSet
- Doctrine: Tworzenie tabel w utf-8
- Doctrine: uruchamianie dodatkowych zapytań po build
- Doctrine: behaviour geographical
Optymalizowanie ilości Http requestów
Jednym ze sposobów na optymalizacje ilości requestów do strony, oraz zmniejszenie ilości przesyłanych danych z serwera jest łączenie i kompresowanie plików ze skryptami java script. Jest to możliwe gdy przeglądarka obsługuje taki format skompresowanych plików js.
SQLSTATE[HY000]: General error: 1005 Can’t create table
Jeżeli przy próbie wywołania polecenia:
$symfony doctrine:insert-sql
Wyskakuje Ci błąd
SQLSTATE[HY000]: General error: 1005 Can't create table 'TwojaBazaDanych.#sql-6c_2d' (errno: 121)
To znaczy że mysql nie może utworzyć relacji między obiektami, z trywialnego powodu pole klucza obcego jest różnego typu od pola powiązanego w lokalnej tabeli.
Java Szyfrowanie DES/ECB/NoPadding
package list1; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class CW1 { public static byte[] getKey(int bytes) throws NoSuchAlgorithmException{ KeyGenerator kGen = KeyGenerator.getInstance("DES"); byte[] key = new byte[bytes]; int i = 0; while(i < bytes){ kGen.init(56); SecretKey sKey = kGen.generateKey(); byte[] rawKey = sKey.getEncoded(); for(int j = 0; (j < rawKey.length)&(j+i < key.length) ; j++){ key[j+i] = rawKey[j]; } i = i + 7; } return key; } public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { /* * długość wiadomość musi być podzielna przez 8 * żeby można było użyć NoPadding */ byte[] input = "WiadomoscDoZakodowania!!".getBytes(); byte[] encrypted = null; byte[] decrypted = null; KeyGenerator kGen = KeyGenerator.getInstance("DES"); SecretKey sKey = kGen.generateKey(); byte[] keyBytes = sKey.getEncoded(); Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "DES")); encrypted = cipher.doFinal(input); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "DES")); decrypted = cipher.doFinal(encrypted); print(input); print(encrypted); print(decrypted); System.out.println(Arrays.equals(input, decrypted)); } public static void print(byte[] b) { System.out.println(new String(b)); System.out.println("Length: " + b.length * 8); System.out.println("---------------"); } }
Java szyfrowanie AES/ECB/PKCS5Padding
package list1; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class CW2 { public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { byte[] input = "Wiadomosc do zakodowania!".getBytes(); KeyGenerator kGen = KeyGenerator.getInstance("AES"); kGen.init(128); SecretKey sKey = kGen.generateKey(); byte[] rawKey = sKey.getEncoded(); SecretKeySpec sKeySpec = new SecretKeySpec(rawKey, "AES"); // algorytm AES, tryb ECB, dopełnianie w PCKS#5 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, sKeySpec); byte[] encrypted = cipher.doFinal(input); cipher.init(Cipher.DECRYPT_MODE, sKeySpec); byte[] decrypted = cipher.doFinal(encrypted); print(input); print(encrypted); print(decrypted); // System.out.println(MessageDigest.isEqual(input, decrypted)); System.out.println(Arrays.equals(input, decrypted)); } public static void print(byte[] b){ System.out.println(new String(b)); System.out.println("Length: " + b.length * 8); System.out.println("---------------"); } }
Search
Moje Twitty
- Saved My Day! jQuery Tab On Return Key Press - JavaScript - Snipplr Social Snippet Repository snipplr.com/view/12643/ via @snipplr 2 days ago
- A new favorite: Daydream in Blue Ft. Lupe Fiasco (Bassex Remix) (Play Me Freebie) by @playmerecords soundcloud.com/playmerecords/… on #SoundCloud 4 weeks ago
- A new favorite: Double Trouble by Datsik & Z-Trip by @dubstep soundcloud.com/dubstep/double… on #SoundCloud 4 weeks ago
- A new favorite: Forekast - Samsonite (Original Mix) -- FREE DOWNLOAD by @forekast soundcloud.com/forekast/samso… on #SoundCloud 4 weeks ago
- dubsteppin my ass of! 4 weeks ago
- Rendering emails with Twig in Symfony2 bit.ly/rPqylL 1 month ago
- Need help with Datetime field with null value stackoverflow.com/q/10176459/107… #symfony2 #doctrine2 1 month ago
- A new favorite: KDrew - Bullseye by @KDrewMusic soundcloud.com/kdrewmusic/kdr… on #SoundCloud 1 month ago
- How foreach actually works stackoverflow.com/q/10057671/107… 1 month ago
- A new favorite: Gotye - Somebody That I Used To Know Ft. Kimbra (KDrew Remix) by @KDrewMusic soundcloud.com/kdrewmusic/got… on #SoundCloud 1 month ago
AdTaily
Najnowsze wpisy
Kategorie
- bez kategorii (39)
- c++ (2)
- czas wolny (28)
- java (3)
- kryptografia (5)
- praca (26)
- projekty (24)
- przemyślenia (15)
- uczelnia (13)
- Webdevelopment (35)
- Adobe AIR (2)
- Adobe Flex (2)
- AJAX (3)
- Apache (1)
- cloud computing (1)
- doctrine (3)
- GoogleMaps (4)
- JavaScript (3)
- jQuery (1)
- MySql (3)
- Optymalizacja (1)
- paypal (1)
- php (14)
- symfony (5)
- Symfony 1.4 (2)
- Symfony2 (2)
- TWIG (1)
- WordPress (4)