How can I send mail or HTTP request from database?

This question happens every now and then in one of PostgreSQL support places.

Whenever it happens, I just suggest to not try, as interacting with outside world from database can be problematic, and instead use LISTEN/NOTIFY.

But it occurred to me, that while I know how to do it, I don't think I actually did it. It being: handle listen/notify in real life code. So let's try. I will not be writing actual email sending or http requesting, but will make sure that my program will get, from database, information when NOTIFY happens. How hard could it be?

Continue reading How can I send mail or HTTP request from database?

pg_terminator released

I just released first version of pg_terminator.

It's a tool that is supposed to be run on PostgreSQL db server, monitor a database, and cancel or terminate offending queries/connections.

It can be used, for example to:

  • kill leftover psql sessions that are not doing anything
  • cancel too long queries on production servers
  • kill connections that have long idle-in-transaction state
  • make sure that some application will not use transactions longer than “x"
  • and more …

Basically – if you can write a where condition, that operates on pg_stat_activity view, that can list backends to cancel/terminate – you can make pg_terminate do it for you.

To work, it requires Ruby, and its Pg library.

Usage is free, and it's fully open-source (BSD license).

The hard math of killing zombies in Zombicide

I happen to play Zombicide. It's cooperative board game set in some kind of post-apocalyptic, zombie-infested, world.

Despite the general theme, lots of people like it, so we play it quite a lot.

One thing that bugged us, was : in given scenario, which weapon it's best to use?

Continue reading The hard math of killing zombies in Zombicide

porównanie implementacji ruby’ego

dzięki znajomemu (hi tmarc) dowiedziałem się o ciekawym tekście. autor porównał w nim wydajność kilku (41) testów w różnych implementacjach języka ruby.

udział wzięły kanony:

  • ruby 1.8 (na linuksie i na windows vista
  • ruby 1.9

ale także wersje mniej standardowe:

  • jruby
  • gardens point ruby .net (wersja beta, na windows vista)
  • rubinius
  • cardinal

porównano wydajność każdej z implementacji w stosunkdu do złotego wzorca – czyli 1.8 na linuksie.

efekt? no cóż. 1.9 zdecydowanie rządzi. ruby 1.8 na linuksie ma drugie miejsce. wersja na windowsach jest trochę wolniejsza, ale (co ważniejsze) wywala się na 2 testach!

pozostałe implementacje: wolno i kiepsko. “hitem" jest cardinal – większość testów zakończona błędem, dwa trwały powyżej  15 minut i zostały ręcznie ubite (te testy były “zrobione" przez 1.8 w czasach 9.5 i 0.5 sekundy!). choć trzeba przyznać, że w 3 testach cardinal osiągnął najlepszy wynik. wydajnościowo gorszy był rubinius, ale on miał mniej errorów (“ledwie" koło połowy).

można spojrzeć by rozwiać złudzenia, lub nauczyć się czegoś z testów.

programowanie w ruby – po polsku

z pewnym opóźnieniem, ale przeczytałem, że helion wydał polskie tłumaczenie klasyki dla programistów ruby'ego – "programowanie w języku ruby".
cieszy mnie to, bo może dzięki temu kilka kolejnych osób przekona się do tego języka.
co prawda panowie z helionu dali cenę która dla niektórych może być zaporowa (99 pln), ale w/g mnie warto przyoszczędzić na czym innym i tę książkę kupić. ruby jest świetnym językiem, a ta książka to absolutny klasyk i podstawa.

eclipse – ide dla twardzieli

ogólnie nie lubię javy. natomiast jest dla niej coś co mi się podoba – ide eclipse. ma sporo plusów, i mimo, że nabijam się z niego w firmie, dostrzegam w nim sporo plusów.

niestety. ide to jest mocno modularne i aby miało sensowną funkcjonalność trzeba naściągać pluginy, testować czy działają i ogólnie bawić się z tym.

do teraz.

istnieje taki projekt który nazywa się “easy eclipse“.

idea projektu jest prosta: wybierzemy zastosowanie, pod to zastosowanie spaczkujmy to co trzeba. i udostępnijmy gotowe do działania, skonfigurowane, o-pluginowane środowisko.

przykłady zastosowań:

  • expert java
  • desktop java
  • server java
  • mobile java
  • plugin warrior
  • lamp
  • php
  • ruby on rails
  • python
  • c/c++

każde z zastosowań generuje trochę inną paczkę, np. paczka “lamp" zawiera:

  • eclipse jako taki
  • eclipse tools
  • java jre
  • eclipse java development tools
  • anyedit tools
  • eclipse util plugins
  • color editor
  • web tools editors
  • html tidy
  • amateras html and xml editor
  • quantumdb
  • php eclipse
  • simple test for php
  • pydev
  • ruby development toold
  • radrails
  • eclipse perl integration

całośc w paczkach dla windows, macos'a i linuksa. gotowe. tylko podgrzać (rozpakować) i używać.

skalowanie ruby on rails

na blogu jarka zabiełło pojawił się post nt. skalowania railsów. omawia użycie lighttpd + pound + mongrel.

artykuł przystępny i treściwy. polecam przejrzenie zainteresowanym railsami.