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

Tags: , , , ,

niedziela, Marzec 25th, 2012 doctrine, symfony, Symfony 1.4, Webdevelopment Brak komentarzy

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.

› Continue reading

Tags: ,

niedziela, Marzec 25th, 2012 bez kategorii, symfony, Symfony2, TWIG Brak komentarzy

PHP Tips n’ Tricks

Doskonała prezentacja Radosława Benkela dotyczą trików, które można wykorzystać w codziennej pracy z kodem php.

Tags: ,

niedziela, Styczeń 22nd, 2012 php, Symfony2, Webdevelopment Brak komentarzy

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.

Tags: , , , , , ,

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: utf8

Options pozwala na ustalenie silnika MyISAM / InnoDB oraz metody porównań i kodowania znaków, o które nam chodzi.

Tags: , ,

czwartek, Listopad 10th, 2011 bez kategorii Brak komentarzy

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

czwartek, Listopad 10th, 2011 czas wolny, Webdevelopment Brak komentarzy

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.

› Continue reading

Tags: , ,

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.

› Continue reading

Tags: , , ,

wtorek, Luty 22nd, 2011 doctrine, MySql, php, symfony, Webdevelopment 2 komentarzy

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("---------------");
	}
}

Tags: , , ,

niedziela, Luty 13th, 2011 java, kryptografia, uczelnia Brak komentarzy

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("---------------");
	}
}

Tags: , , ,

niedziela, Luty 13th, 2011 java, kryptografia, uczelnia Brak komentarzy
 

Enter your email address to subscribe to this blog and receive notifications of new posts by email.