środa, stycznia 30, 2013

GlusterFS z replikacją

Na zimno:
[root@eai1 global]# dd if=/dev/zero of=/global/bigfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 295.38 s, 3.6 MB/s

[root@eai1 global]# dd if=/dev/zero of=/localg/bigfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 34.3767 s, 31.2 MB/s
[root@eai1 global]#

Na ciepło:
[root@eai1 global]# dd if=/dev/zero of=/global/bigfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 41.9188 s, 25.6 MB/s

[root@eai1 global]# dd if=/dev/zero of=/localg/bigfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.46651 s, 435 MB/s

Lokalny system plików to ext4, globalny to fuse.glusterfs (rw,default_permissions,allow_other,max_read=131072).

poniedziałek, stycznia 28, 2013

Cała prawda o problemach z silnikiem D4D

Branie oleju i przegrzewanie się silnika. Problemy z nowymi egzemplarzami skończyły się w 2009 roku. Samochód z wadliwym konstrukcyjnie silnikiem powinien przejść jego wymianę. Powinien to być nowy silnik, a nie Optifit (części regenerowane). Jeśli dealer Toyoty podczas naprawy gwarancyjnej starej RAVki używa części niezgodnych z instrukcja, to problem za jakiś czas powróci. Na mało profesjonalną obsługę serwisową pojazdu natknąłem się w Toyocie Chodzeń.

Czy Gowin miał rację?

Art. 18 Konstytucji Rzeczypospolitej Polskie stanowi: 'Małżeństwo jako związek kobiety i mężczyzny, rodzina, macierzyństwo i rodzicielstwo znajdują się pod ochroną i opieką Rzeczypospolitej Polskiej.' Nie trzeba być wybitnym socjologiem ani prawnikiem, żeby dojść do wniosku, że instytucja związku partnerskiego w oczywisty sposób deprecjonuje i degraduje instytucję małżeństwa. Stwierdzenie pary "Mamy związek partnerski nie musimy brać ślubu" przy jednoczesnym założeniu ustawodawcy, że trwanie związku zgłasza się w USC, a jego zakończenie już nie, zagraża małżeństwu. Małżeństwo jest zaś chronione w ustawie zasadniczej. Żeby sądzić inaczej trzeba być dyletantem, ignorantem i populistą jak Tusk.

czwartek, stycznia 24, 2013

Yyy


środa, stycznia 23, 2013

Anatomia Upadku 1/5

OS Vendors

Według badań analityków Goldman Sachs rynkowy udział producentów systemów operacyjnych dla elektroniki użytkowej (pecet, tablety, telefony) za rok 2012 prezentuje się następująco:
  • Microsoft: 20%
  • Apple: 24%
  • Google: 42%

Wyniki są ciekawe, bo badanie pokazuje cały szeroki rynek, do którego nie tylko należą komputery PC. 

Pewne wnioski: 
  1. Mainstreamowa komórka używa Androida. 
  2. Microsoft utracił monopolistyczną pozycję w IT.
  3. Urządzenia Apple-a nie są już niczym niezwykłym przy takiej dużej bazie użytkowników.
  4. Microsoft przespał mobilną rewolucję. 
  5. Steve Ballmer nie jest wizjonerem i nie sprawdza się w roli szefa Microsoftu.
  6. Tort jest podzielony na 3 części, ale tylko całościowo, nie we wszystkich segmentach rynku.

Jira database schema

https://developer.atlassian.com/display/JIRADEV/Database+Schema

W szczególności encja użytkownika może być zamodelowana jako:
  • id
  • fullName (=displayName)
  • email+
  • directoryId* (complex: id, type)
  • firstName
  • lastName
  • createdDate
  • updatedDate
  • credential* (type, value)
  • primaryGroupId
Grupa:
  • id
  • commonName
  • distinguishedName
  • path

niedziela, stycznia 20, 2013

OBYWATELE DECYDUJĄ

piątek, stycznia 18, 2013

HornetQ's Context Factory for Tibco BW

HornetQ 2.3 supports data replication. Detecting servers can be via JGroups UDP or explict TCP/IP list.
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;

import javax.naming.Binding;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NameClassPair;
import javax.naming.NameParser;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.spi.InitialContextFactory;

import org.hornetq.api.core.TransportConfiguration;
import org.hornetq.api.jms.HornetQJMSClient;
import org.hornetq.api.jms.JMSFactoryType;
import org.hornetq.core.remoting.impl.netty.NettyConnectorFactory;
import org.hornetq.jms.client.HornetQConnectionFactory;


public class HQContextFactory implements InitialContextFactory, Context {
 
 private String url = null;
 private Hashtable params = null;

 @Override
 public Context getInitialContext(Hashtable params)
   throws NamingException {
  this.url = (String) params.get(PROVIDER_URL);
  this.params = params;
  return this;
 }
 
 @Override
 public Object addToEnvironment(String arg0, Object arg1)
   throws NamingException {
  throw new RuntimeException("Not implemented");
 }
 @Override
 
 @Override
 public void close() throws NamingException {}

 @Override
 public Hashtable getEnvironment() throws NamingException {
  return params;
 } 

 /**************************************/
 @Override
 public Object lookup(String name) throws NamingException {
  List servers = new LinkedList();
  for (String server : url.split("\\,")) {
   String hp[] = server.split("\\:");
   if (hp.length == 1 || hp.length == 2 && hp[1].trim().length() == 0) {
    hp = new String[] { hp[0], "5445" };
   }
   HashMap map = new HashMap();
   map.put("host", hp[0].trim());
   map.put("port", hp[1].trim());
   servers.add(new TransportConfiguration(NettyConnectorFactory.class.getName(), map));
  }
  name = name.toLowerCase();
  if (name.contains("connectionfactory")) {
   HornetQConnectionFactory cf = null;
   if (name.contains("queue")) {
    cf = HornetQJMSClient.createConnectionFactoryWithHA(JMSFactoryType.QUEUE_XA_CF, servers.toArray(new TransportConfiguration[0]));
   }
   else if (name.contains("topic")) {
    cf = HornetQJMSClient.createConnectionFactoryWithHA(JMSFactoryType.TOPIC_XA_CF, servers.toArray(new TransportConfiguration[0]));
   }
   else {
    cf = HornetQJMSClient.createConnectionFactoryWithHA(JMSFactoryType.XA_CF, servers.toArray(new TransportConfiguration[0]));
   }
   return cf;
  }
  throw new NamingException("Name '"+name+"' is not supported");
 }
 /**************************************/

 @Override
 public Object lookup(Name name) throws NamingException {
  return lookup(name.toString());
 }
 @Override
 public Object lookupLink(Name name) throws NamingException {
  return lookup(name.toString());
 }
 @Override
 public Object lookupLink(String name) throws NamingException {
  return lookup(name);
 } 
}

czwartek, stycznia 17, 2013

Smog w Pekinie


Czujniki w ambasadzie USA w Pekinie wykryły spore zanieczyszczenie powietrza. Zdjęcia zrobiło NASA.

środa, stycznia 16, 2013

Grails table with inputs workaround


Domyślnie body ma wypełniać 100% szerokości, ale overflow jest ustawiony na auto co powoduje, że po wstawieniu kontrolek input tabelka zaczyna wyjeżdżać poza zdefiniowany zakres body. Obejście: skalowanie kontrolek input do rozmiaru kontenera i wyłączenie wspomnianych dwóch atrybutów body. Grailsy najlepiej wyglądają w Google Chrome i Apple Safari.

poniedziałek, stycznia 14, 2013

Implementacja parametryzowanego list() w Grailsach



Grails GSP params

Tworząc w Grailsach formularz podłączony do wyszukiwania w ramach klasy domenowej należy pamiętać o uaktualnieniu atrybutu params we wszystkich możliwych kontrolkach. Dla spójności formularz powinien zawierać wbudowane standardowe parametry wyszukiwania GORM (czyli max, offset, sort, order).




niedziela, stycznia 13, 2013

Auris 2013


Zegary przy kierownicy w stylu Volkswagena, miłe białe i niebieskie podświetlenie. Deska rozdzielcza ma prawie pionowy kąt nachylenia, jest w jednej płaszczyźnie. Drążek skrzyni biegów jest w normalnym miejscu, nie jest podniesiony, konsola środkowa nie oddziela już kierowcy od pasażera, przez co prawe kolano nie jest w nią wciśnięte. W nowym Aurisie z przodu jest odczuwalnie więcej miejsca. Materiały są dobrej jakości. Opcje wyposażenia doganiają Volkswagena.


Bagażnik ma 6 litrów więcej, ale wizualnie wydaje się być mniejszy przez to, że ma półkę do przykrycia rzeczy, które nie muszą być widoczne codziennie. Linia okien jest pociągnięta wysoko, bagażnik nie ma dużej głębokości, jest łatwiejszy do załadowania i wyładowania.


Automatyczne lusterko fotochromatyczne dostępne jest tylko w najwyższej wersji wyposażenia za ponad 80 tysięcy złotych. Tylna szyba jest mała, co skutkuje słabą widocznością do tyłu. Lusterka boczne są małe. Koniecznością będzie używanie czujników parkowania (przód + tył) lub kamery cofania (obraz wyświetlany na ekranie radia/nawigacji). Tylna kanapa jest duża i wygodnie się na niej siedzi.



Samochód nie ma nowych silników, jedynie są one dotuningowane tak, aby zmniejszyć zużycie paliwa. Silnik benzynowy 1,6 litra 132KM nie poraża dynamiką, ciąg przyśpieszenia czuć właściwie tylko na trójce. Przełożenia skrzyni biegów są dobrze dobrane, silnik jest elastyczny. Nowy Auris jest odrobinę lepiej wygłuszony od poprzednika, ale nadal nie jest to wysoki standard Volkswagena Golfa. Modele z topowymi silnikami mają tylne zawieszenie wielowahaczowe i daje się to odczuć - jazda jest komfortowa, nie czuć bujania, zawieszenie nie jest też za sztywne. Auris ma dobre hamulce. Wspomaganie kierownicy działa przyjemnie, auto jest bardzo skrętne. Bardzo udany samochód rodzinny. Czekamy na premierę hybrydy w kwietniu 2013, która ma mieć tryb sportowy - aż żal, że samochód o takim dynamicznym wyglądzie nie ma odpowiednio żwawego silnika.

Nowy Auris jest produkowany w Wielkiej Brytanii. Stary nadal będzie wytwarzany w Turcji i sprzedawany z silnikiem benzynowym 1,33l jako Auris Classic.

Premiera Aurisa 2013

poniedziałek, stycznia 07, 2013

Inwerter LCD

Ekran LCD jest zasilany prądem zmiennym, w przeciwieństwie do reszty podzespołów laptopa wymagających napięcia stałego. Objawy problemów z tym układem to gaśnięcie matrycy, miganie ekranu, czy też fluktuacje w podświetleniu. Układ wymaga dobrego chłodzenia. Może być na tyle niefortunnie zamocowany, że po długim okresie zamykania i otwierania laptopa styki przestają łączyć - wtedy należy go przełożyć i wyczyścić. Laptop ma drugie życie.




czwartek, stycznia 03, 2013

Ubuntu na telefony

Canonical próbuje rozszerzyć strefę wpływów o rynek mobilny. Trzeba pamiętać, że w wytwarzaniu oprogramowania mają inne podejście niż Google - w projektach niekoniecznie rządzą "techniczni". Canonical ma dobrych specjalistów od UX/HCI i bardzo solidnie podchodzi do kwestii używalności, prototypy sprawdzane są na grupach testowych. Łatwość użycia, odkrywania funkcjonalności i zapamiętywania, różne sposoby na wykonanie tej samej akcji - czyli de facto najważniejsze heurystyki Nielsena - są priorytetem. Parę spostrzeżeń:
  • Ubuntu można zainstalować na telefonie obok Androida - będzie używało istniejącego jądra linuksowego
  • do telefonu można podłączyć monitor i mieć prawdziwy pulpit
  • można mieć komórkę i desktop w jednym, pracować zdalnie, zapisywać pliki w chmurze
  • komórka z Ubuntu ma szansę być podstawowym narzędziem pracy

środa, stycznia 02, 2013

Menu Start dla Windows 8

Pokki to sklep z aplikacjami, który próbuje zdobyć popularność implementując menu start dla Windows 8. Standardowe linki (dokumenty, muzyka, obrazki, komputer, ostatnio używane aplikacje) oraz lista zainstalowanych programów i aplikacji panelu sterownia z możliwością wyszukiwania z powodzeniem zastępują brakującą w ósemce funkcjonalność. Oprócz tego dostajemy aplikacje HTML 5 ze sklepu. Pokki to silnik WebKit/Chromium + napisane pod niego programy.