Skip to content
sty 25 12

Moja prezentacja o Node.JS z Meet.JS i GTUG Wrocław

by Piotrek Reinmar Koszuliński

W listopadzie zapraszałem Was na pierwsze wrocławskie edycje Meet.JS i GTUG. Dzisiaj jesteśmy już po drugiej edycji każdej z imprez. Na obu – Meet.JS Wrocław i GTUG Wrocław przedstawiałem ten sam temat – Node.JS. Na szczęście okazało się, że zbiór wspólny uczestników był bardzo mały i chyba nawet nikt nie przysnął :). Poniżej link do prezentacji.

Prezentacja o Node.JS

Dodatkowo zapraszam (w szczególności uczestników GTUG-a, na którym było więcej kodu) do projektu na Githubie, gdzie wgrałem źródła.

Na koniec chciałem jeszcze podziękować organizatorom za trud włożony w dogranie tych spotkań i Wam, uczestnikom, za przybycie i zadawanie ciekawych pytań :). Do zobaczenia na następnych imprezach.

lis 26 11

PostgreSQL: Reset wszystkich sekwencji

by zergu

Problem

Czasami udaje się nam doprowadzić swoją niemałą bazę danych do takiego stanu, w którym część sekwencji będzie źle ustawiona, a tym samym nie będzie możliwe dodawanie nowych danych w standardowy sposób, gdyż kolejnym id wg sekwencji, będzie takie, które już w bazie istnieje.

Możemy wtedy ręcznie naprawić daną sekwencję, zgodnie z manualem:

ALTER SEQUENCE serial RESTART WITH 105;

Gdzie serial to nazwa sekwencji. Co jednak, gdy mamy kilkaset popsutych tabelek?

Rozwiązanie — teoria

Na szczęście PostgreSQL udostępnia nam duuużo informacji o każdej swojej bazie danych w schemie information_schema, która to zawiera zestaw zawsze dostępnych widoków. My tutaj wykorzystamy dwa:

  • columns — informacje o wszystkich kolumnach i widokach w bazie
  • constraint_column_usage — informacje o kolumnach, które są obłożone jakimś constraintem

To co chcemy zrobić to:

  1. Znaleźć wszystkie zestawy tabela-kolumna-sekwencja (bazując na tym, że definicja sekwencji jest stała, zawiera wywołanie nextval().
  2. Dla każdej kolumny znaleźć największą wartość identyfikatora.
  3. Zrestartować każdą sekwencję z wartością znalezioną w poprzednim kroku i zwiększoną o 1.

Rozwiązanie — praktyka

W praktyce wystarczy wykonać poniższy kod w swojej bazie danych. Tworzy on funkcję naprawiającą sekwencje, wykonuje ją raz i a następnie ją kasuje. Należy pamiętać, że działanie jest ograniczone do schemy public. Jeśli chcemy naprawić inną, trzeba sobie kod lekko zmodyfikować (np. dodając nazwę schemy jako paramert).

CREATE OR REPLACE FUNCTION rebuild_sequences() RETURNS INTEGER AS
$body$
DECLARE
	sequencedefs RECORD;
	c INTEGER;
BEGIN
	-- Find sequence name and primary key column for every table
	FOR sequencedefs IN
	SELECT DISTINCT
		constraint_column_usage.TABLE_NAME AS TABLE_NAME,
		constraint_column_usage.column_name AS column_name,
		REPLACE(REPLACE(COLUMNS.column_default,'''::regclass)',''),'nextval(''','') AS sequence_name
		FROM
			information_schema.constraint_column_usage, information_schema.COLUMNS
		WHERE
			constraint_column_usage.table_schema = 'public' AND 
			COLUMNS.table_schema = 'public' AND
			COLUMNS.TABLE_NAME = constraint_column_usage.TABLE_NAME AND
			constraint_column_usage.column_name = COLUMNS.column_name AND
			COLUMNS.column_default IS NOT NULL AND
			COLUMNS.column_default LIKE ('nextval%')
	LOOP
		-- Find current max PK value
		EXECUTE 'SELECT max('||sequencedefs.column_name||') FROM ' || sequencedefs.TABLE_NAME INTO c;
 
		IF c IS NULL THEN
			c = 1;
		ELSE
			c = c + 1;
		END IF;
 
		-- Rebuild sequence
		EXECUTE 'ALTER SEQUENCE ' || sequencedefs.sequence_name ||' RESTART WITH ' || c;
	END LOOP;
 
	RETURN 1;
END;
$body$ LANGUAGE plpgsql;
 
SELECT rebuild_sequences();
 
DROP FUNCTION rebuild_sequences();

Pierwsza wersja funkcji została napisana przez Klausa ze StackOverflow. Wersja powyżej zawiera poprawki błędów, niedociągnięć oraz formatowania.

lis 17 11

Wrocław wita JavaScript – Meet.JS i Wrocław GTUG

by Piotrek Reinmar Koszuliński

Ku mej rozpaczy, od maja tego roku, kiedy to odbyło się szkolenie z SSJS by DevMeetings, żaden JavaScriptowy event nie zawitał do Wrocławia. Co więcej – mam wrażenie, że w ogóle nie wydarzyło się nic związanego z szeroko pojętym frontendem. Na szczęście dwie niezależne ekipy postanowiły to zmienić i tak 24 i 29 listopada odbędą się Meet.JS i Wrocław GTUG.

Meet.JS

Żeby się nie powtarzać, za Damianem Wielgosikiem:

Meet.js jako społeczna i darmowa platforma dzielenia się wiedzą o technologiach front-endowych rozwija się w niesamowitym tempie. Dzięki chłopakom z firmy Monterail.com spotkania meet.js będą organizowane również – obok Poznania, Warszawy i Krakowa – we Wrocławiu.

Pierwszy event odbędzie się w najbliższy czwartek 24.11.2011 w siedzibie Monterail. Start od 18!

Jednocześnie poszukiwani są prelegenci do tego ekscytującego wydarzenia. Jeśli chcesz podzielić się czymś o HTML5, CSS3 czy JS nie zastanawiaj się! Bartek Pietrzak, organizator meet.js, czeka na zgłoszenia wszystkich chętnych pod bartosz@monterail.com.

Więcej informacji na Facebooku, @meetjs i u Damiana.

Wrocław GTUG – Wrocław Google Technology User Group

Z braku weny, również cytat, tym razem z oficjalnej strony wydarzenia:

Zapraszamy serdecznie na pierwsze spotkanie wrocławskiej grupy GTUG.

Zaczniemy krótkim wprowadzeniem na temat działalności naszej grupy. Jednakże tematem wiodącym spotkania będą aplikacje dla platformy Chrome. Poruszone zostaną zagadnienia związane z możliwościami jakie daje ta platforma. Postaramy się zaprezentować przykładowe aplikacje oraz technologie wykorzystane do ich stworzenia.

Na koniec przedstawimy pomysły na kolejne eventy i ewentualne tematy kolejnych spotkań.

Po spotkaniu proponujemy wspólne wyjście na piwo :)

Spotkanie odbędzie się we wrocławskim biurze Google (Bema Plaza) we wtorek, 29 listopada, o godzinie 19:00. Możliwe są jeszcze drobne korekty dotyczące miejsca i na pewno pojawi się formularz rejestracyjny. Tak więc polecam śledzić WroGTUG-a, do wyboru – Facebook, Google+, @wroclawgtug.

Do zobaczenia!

Ja okazji nie przegapię i jeśli studia nie przeszkodzą, to pojawię się na obu spotkaniach. Sam niestety, ze względu na napięty czas przed obroną pracy inżynierskiej, nic nie powiem, ale prelegentów nigdy dość, więc chętni niech się zgłaszają :).

Przy okazji dowiedziałem się, że nie tylko ja uważam, że we Wrocławiu firm zajmujących się frontendem na poziomie praktycznie nie ma. Mamy setki korporacyjnych miejsc pracy dla programistów Javy i C#, ale związanych z webem prawie nie widać. Najgorzej wypada JavaScript, w związku z czym swój wzrok musiałem skierować na Poznań, Kraków, czy Warszawę. Trochę szkoda będzie wyjeżdżać :).

paź 17 11

Walka Dart vs JavaScript – nokaut podczas ważenia

by Piotrek Reinmar Koszuliński

Myślałem, że nie napiszę nic o Darcie, bo cała historia z nim związana z początku nie wywoływała we mnie żadnych specjalnie negatywnych czy pozytywnych emocji. Dzięki Zbyszkowi Branieckiemu i Markowi Stępniowi trochę szerzej spojrzałem na temat, biorąc pod uwagę też historie o których, czy to z racji mojego krótkiego życia, czy braku wiedzy o pracach komitetów i producentów przeglądarek, nie wiedziałem i… sami przeczytajcie. Załączam poniżej coś co miało stać się przydługim komentarzem na forum Goldenline.

Pożal się Google

To co zrobiło Google, to żart. Cała historia z wewnętrznymi, nie do końca miłymi mailami z Google’a, które wyszły na światło dzienne, sam Dart i otoczka PR-owa jaką ma, to jedno wielkie nieporozumienie. Google się nie popisało i, moim skronym zdaniem, wyjdzie to tylko na dobre open webowi.

Wyobraźmy sobie, co by się stało gdyby Dart rzeczywiście powalał na kolana i miałby świetnie zaimplementowaną, super wydajną i dostępną out of the box w Chrome maszynę. Szybko znalazłoby się grono fan boy’ów, którzy bez zastanowienia zaczęliby pisać aplikacje „only for Chrome”, bądź „works best with Chrome”, z ewentualną, wątpliwej jakości, kompilacją do powolnego i starego JavaScriptu dla „gorszych przeglądarek”. (BTW. hello world w Dartcie skompilowany do JS to 17000 linii kodu :D).

read more…

paź 9 11

Moje prezentacje z DevMeetings i MeetJS

by Piotrek Reinmar Koszuliński

Trzy tygodnie temu zapraszałem Was na warsztaty DevMeetings z middle-endu, które prowadziłem. Dodatkowo, czego jeszcze wtedy nie wiedziałem, zostałem zaproszony jako speaker na MeetJS do Krakowa, gdzie zdecydowałem się opowiedzieć o jednym wątku z DevMeetingu – asynchronicznej pułapce. Poniżej zamieszczam linki do tych prezentacji.

Middle-end w oparciu o NodeJS @ DevMeetings by Piotrek Koszuliński

Asynchroniczna pułapka @ MeetJS by Piotrek Koszuliński