Wpisy

Część wpisów wciąż znaleźć można na starej stronie. Nie wszystko jest przeniesione i nie wiem, czy kiedyś będzie 😉.

Move files between git repositories with history

From time to time it may happen usuful to move files in the project from one git repository to the other one. The simplest way to do that is of course deleting it from one repository and adding in the other one. But with such move all history of edits of such files is lost. If the classes are of a bigger size it may be valuable to keep their history. So how to do that?

We need to start with the source repository (where the files are currently) to strip it down from all other files. To do so it is best advised to create a fresh clone, for example in some C:\tmp\old-repo location. And than use git filter-repo command to strip all other files:

git filter-repo \
    --path-regex ".*ClassOne.java$" \
    --path-regex ".*ClassTwo.java$" \
    --path-regex ".*ClassOneTest.java$" \
    --path-regex ".*ClassTwoTest.java$" \
    --prune-empty always --force

After that command only needed files (in the example two classes and tests for them) will be kept in the old-repo repository with their history. We can git mv them now to the location which they should have in the target-repo.

Now its time to work with a target-repo. We can add new remote repo here, fetch it and merge allowing unrelated histories:

git remote add sourceRepoName C:\tmp\old-repo
git fetch sourceRepoName
git merge sourceRepoName/main --allow-unrelated-histories

Maven verbose dependency info

Sometimes it may be hard to find why in maven project some dependencies are resolved to specific version. In older maven versions there was a mvn dependency:tree -verbose, but it was developed for Maven 2 and may not correctly work with Maven 3 as described on plugin page.

After looking around for some alternative, it looks like maven-helper-plugin does a great job to generate a very detailed effective pom with rich XML comments describing each dependency version (and each property value) source:

mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:effective-pom -Dverbose=true -Doutput=effective-pom.xml


Trzaski w rowerze

Trzaski z korby? Trzeszcząca sztyca? Jadąc rowerem nie raz ciszę jazdy, bądź sapanie na podjeździe, zakłócają niezidentyfikowane hałasy z roweru. Na bikeradar.com pojawił się ostanio artykuł sugerujący jak sobie z nimi radzić – okazuje się, że rozwiązaniem na większość (gdy już je namierzymy) bywa cienki film ze smaru. Czy się sprawdza? Będę w najbliższym czasie weryfikował.

A jeśli i Wam coś trzeszczy w rowerze, to proponuję również sprawdzić, czy porady coś pomogą: http://www.bikeradar.com/mtb/gear/article/angryasian-silence-those-persistent-mystery-creaks-44332

GMail i Windows Phone - ogień i woda?

Google od jakiegoś czasu stara się utrudniać życie użytkownikom telefonów z systemami innymi niż Android. Jednym z tego przejawów jest nieintuicyjne działanie przycisku skasuj w skrzynce odbiorczej. Po zalogowaniu na GMaila wiadomości nadal widnieją w odebranych/wszystkich. Rozwiązać ten problem można wchodząc na adres http://m.google.com/sync/settings koniecznie z urządzenia mobilnego i modyfikując parametry synchronizacji wybranych urządzeń.

Adding custom Converters to ConversionService in Spring MVC

If somebody starts to play a little with a Sping MVC application sooner rather than later will see a message saying something like

(...) nested exception is java.lang.IllegalArgumentException: 
Cannot convert value of type [java.lang.String] to required type [sth.model.MyCustomType] for property 'propertyName': no matching editors or conversion strategy found

There are a lot of spnippets around how to create a converter, name it StringToMyCustomTypeConverter (I can recommend this one: http://www.javabeat.net/2011/02/introduction-to-spring-converters-and-formatters/), and also how to add it in the xml configuration:

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
  <property name="converters">
    <list>
      <bean id="StringToMyCustomTypeConverter" class="sth.converter.StringToMyCustomTypeConverter" />
    </list>
  </property>
</bean>

In my spring familiarization project I've decided to use java config to some extend. So I spent time looking around how to add custom converters in code. I easly run into problem with two ConversionService(s) registerd which ended with no explicit bean with name 'conversionService' error. Finally I found working (and very easy indeed) solution. My configuration class e.g. AppConfig (annotated with @Configuration), has to extend WebMvcConfigurerAdapter (or implement WebMvcConfigurer interface) and just override addFormatters method (you can register converters there also):

@Override
public void addFormatters(FormatterRegistry formatterRegistry) {
    formatterRegistry.addConverter(new StringToMyCustomTypeConverter());
}

Łożyska Mavic Crossmax SL

Mavic CrossMax 29er oraz CrossRide 29er

Nowsze modele kół Mavic'a, wyposażone w zmodyfikowany bębenek ITS-4. Sam bębenek pomiędzy modelami różni się ilością zapadek (i wycięć na nie), natomiast poza tym konstrukcja jest bliźniacza. Nie wiem, czy to ja mam takiego pecha, czy producent przyoszczędził na łożyskach, ale w obu posiadanych przeze mnie bębenkach padły one bardzo szybko – jeden faktycznie był intensywnie użytkowany, natomiast drugi jest dla mnie zupełną zagadką. 

Oba łożyska w bębenku są wymienne – oznaczone 6803 – ale trzeba to robić ostrożnie (znam przypadek pęknięcia bębenka przy wymianie). Zadania nie ułatwia fakt, że jedno z łożysk osadzone jest dosyć głęboko, więc zarówno przy wybijaniu jak i wbijaniu przydatne będą różnego rodzaju podkładki (u mnie sprawdziły się m.in. nakładki do klucza nasadowego ze sprzęgłem).

Mavic CrossMax SL (26")

Choć zwykle koła te służą długo i bezproblemowo, to jednak nadchodzi moment, gdy trzeba pomyśleć o wymianie łożysk.

Z przodu w wersji disc kręcą się dwa łożyska 61903 (6903), a w wersji ceramic ???.

Natomiast z tyłu w bębenku użyte jest łożysko 608 (z drugiej strony jest ślizg, zamiennik występuje na ebay). Na osi z jednej strony również jest 608, natomiast z drugiej 61903 (6903).

Jeszcze jedno miejsce autostartu programu

Wydawało mi się, że jedynymi miejscami w których konfigurowane są programy uruchamiane przy starcie systemu to:

  1. w przypadku „mniej sprytnych” programów: Start->Wszystkie programy->Autostart
  2. dla tych „bardziej sprytne”: klucze Run w rejestrze systemu windows dostępne wygodnie, zbiorczo, po uruchomieniu msconfig.

Po zainstalowaniu ASUS AI Suite II spotkała mnie jednak niespodzianka, ponieważ program startował wraz z systemem, choć w żadnej z powyższych lokalizacji go nie było. Krótka chwila googlania pozwoliła znaleźć odpowiedź — program ten rejestruje się w narzędziu systemowym Harmonogram zadań (w wersji ang. Task Manager) jako uruchamiany przy zdarzeniu jakim jest start sytemu. Wyłączenie go tam rozwiązało problem przymulania startu systemu, a ja dowiedziałem się o jeszcze jedno miejscu, które można sprawdzić, gdy nie wiadomo skąd pojawił się auto-startujący program.

Zapisz i zamknij w Firefox 4+

Po aktualizacji przeglądarki nie wiem dlaczego niektóre ustawienia nie zostały automatycznie pobrane z wcześniejszej wersji. Jednym z nich jest, być może dla niektórych irytujące, ale moim zdaniem przydatne ostrzeżenie przy zamykaniu przeglądarki przy paru otwartych tabach z możliwością zapisania sesji do następnego włączenia.

Zwyczajowe ustawienie w opcjach (Firefox › Opcje › Opcje › Karty › Ostrzegaj przed zamknięciem wielu kart) tym razem jakoś nie chciało zaskoczyć i choć przeglądarka ostrzegała przy zamykaniu wielu tabów to nie dawała możliwości zapamiętania ich. Wiem, że są dodatki do zarządzania sesjami, ale nie chciałem strzelać z armaty do wróbla (i instalować kolejnego dodatku), więc chwilę pogooglałem i udało się znaleźć rozwiązanie. Z mojego punktu widzenia wygląda to trochę na jakiś bug rozbieżności pomiędzy ustawieniami widocznymi na GUI a wewnętrznymi ustawieniami przeglądarki, ale mogę się mylić.

Aby problem rozwiązać wystarczy wpisać w pasku adresu about:config, obiecać, że będziemy grzeczni 😉 i znaleźć atrybut (można odfiltrować wpisując początek nazwy w pasku u góry) browser.showQuitWarning i zmienić jego wartość na true (np. poprzez dwukrotne kliknięcie). Viola! działa.

Zmiana położenia kont użytkowników w Windows 7, Vista, XP

Osobiście nie lubię trzymać swoich danych na dysku systemowym, więc przy okazji przesiadki na nowy system Microsoftu – Windows 7 – poszukałem jak zmienić lokację kont użytkowników (działa też w Viście i XP) z domyślnej C:\Users na własną. Odpowiedź znalazłem bardzo szybko: źródło. Dzięki takiej zmianie prawidłowo działają linki do wszystkich tzw. bibliotek (obrazy, muzyka, pobrane, itp.). Również zainstalowane programy, dane związane z danym użytkownikiem, trzymają lokalnie. Oczywiście nadal zachowane są prawa dostępu do folderów .

Aby zmienić lokację gdzie tworzone są nowe foldery użytkowników (przy braku bieżących danych można po zmianie utworzyć nowe konto, a dotychczasowe skasować i w pełni cieszyć się poprawnym ulokowaniem):

  1. Utworzyć docelowy folder użytkowników, np. D:\Users
  2. Uruchomić regedit
  3. Otworzyć ścieżkę HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
  4. Zmienić wartość ProfilesDirectory i zmienić na pożądaną np. D:\Users
  5. Nowe konta będę tworzone w nowej lokalizacji

Zmiany lokalizacji istniejącego użytkownika na razie nie potrzebowałem, więc odsyłam do podanego we wstępie źródła.

Kosmetyka ;)

Stwierdziłem, że w dziale wyniki można dostać oczopląsu i postanowiłem coś z tym zrobić... Teraz łatwiej można odnaleźć nazwę zawodów i bez męczenia wzroku odczytać odnoszące się do niej dane.