Svn2github problems

12 Dec 2014 18:31

I'm the one behind the svn2github.com service. The service was started a few years ago to help me and my team start a PHP project that we wanted to host in Git. The PHP libraries we wanted to use were hosted in Subversion. Given the Composer was not too popular we decided to put the links to the libs into the repo using git submodules.

Given how basic the git-svn is, and how easy it is to have a Git repo in GitHub, we thought, hey, there must be an automatic mirroring tool to clone publicly available SVN repos to GitHub. The service would be probably called svn2github.com.

Such service was not there and we struggled looking for one, but again, since this was so easy to set up, I decided that I can do it myself! So I did.

Svn2github.com operated with only minor administration from my side, but at some point I realized there are over 500 repos mirrored by it, which was fine.

But recently the server svn2github is hosted on started to experience some problems, mostly with I/O throughput and I connected them directly to the operation of the svn2github processes.

Basically with so many repositories stored at the disk, the periodical task to do just git svn rebase and git push if there were any changes might be challenging due to just the number of IO operations needed to accomplish this. Also at some point the (most important) data just stops fitting in cache and the disk IO needs to be requested each time an FS operation is needed.

The problem became apparent to me, because of the other services that I run on the same hardware, mainly the database. It started to be terribly slow meaning all the other apps would take forever to do even a basic task.

I needed to suspend the svn2github operation to let the more important services continue to run, but I planned to bring this useful service back to life. As often in such cases I want to add more features while doing that and make the updates more clever, so they don't consume so much server "life" as they were.

The first step though is restarting svn2github, which means you can now add more SVN repos to be mirrored to GitHub and the repos will be synchronized with one small exception. Any repository that contains more than 2000 files (including the .git files) will not be automatically updated.

I'll update the GitHub descriptions of those "paused" mirrors and if you want them to be "resumed", I'll ask you to contact me and let me know. This way the service will continue to work for the small repos (which are the majority), which don't cause so much trouble for the machine, while the big repos would be only updated when requested (I assume most of them were needed "once" and now no-one really needs them in place).

Happy SVN mirroring! See you on svn2github.com!

UPDATE: Some svn2github stats

To give a notion of scale this project is at here are some stats:

Repositories with less than 2000 files each (including the .git files):

Number of them: 482
Total size of them on disk: 19G
Total number of files on disk: 954321
The biggest one: 635M (DevIL)
The smallest one: just 208k (aszip)

Repositiories with over 2000 files in each:

Number of them: 231
The total size: 308G (took 133m58.527s to compute that)
The biggest one: 42G (testingazuan)

Comments: 15

Working around a buggy sound card

02 Dec 2014 23:34

I found the laptop I bought recently has a weird thing with its soundcard. It plays music OK, it also allows you to change the mixer levels, nothing special, but when you try changing mixer setting while the music is playing the music starts getting choppy and the process handling the mixer tend to freeze. Also you cannot pause the music, sometimes it repeats the same sample over and over and it gets very annoying.

My approach to this issue was to use PulseAudio software mixer capabilities, so the hardware mixer is never adjusted (other than for the initial setup).

Step 1. Getting PulseAudio to use the software mixer

I found no good documentation on this other than PulseAudio uses paths to convert the desired volume to the hardware mixer settings and if it lacks the ability to do so it would turn the volume up/down using software. Reading between the lines I realized if I remove the paths I will get what I want. Just do this and restart pulseaudio and you'll have PulseAudio doing all the mixing in software:

sudo mv /usr/share/pulseaudio/alsa-mixer/paths /usr/share/pulseaudio/alsa-mixer/paths.bak

Verifying it works

Open two terminal windows. In each of them open alsamixer. Both should display very simple controls and say Card: PulseAudio. Use F6 to switch to the real card in one of the windows. Usually the cards have plethora of controls, so should yours.

Now change the output volume in the alsamixer still saying "Card: PulseAudio". If the volume reported by the other alsamixer does not change, it works as expected!

If you now rename the paths directory back and restart the pulseaudio process, updating the PulseAudio volume should update the real device volume as well.

Step 2. Integrating this with XFCE (or other DE)

The way xfce4 handles the volume is two-fold:

  • There's a xfce4-volumed daemon. It only controls the key bindings. It binds volume up, volume down and mute keys to control the real device controls
  • There's a panel applet called "Audio Mixer" that shows the current volume level and lets you change the volume as well.

Both component are optional and both seem to not work with PulseAudio (even through PulseAudio ALSA emulation which tricks alsamixer for instance).

We're going to overcome this problem by replacing these components with two other programs.

pa-applet

pa-applet will replace the "Audio Mixer" applet. The difference is the pa-applet docks to the systray, so is not XFCE-specific. The downside is we don't have control over the specific position of the icon, all we know is it will appear in the systray (so don't forget to have the systray applet added to the panel).

In order to install this software you need to clone the source, and run ./autogen.sh, ./configure, make, sudo make install. You will get information about deps missing, for instance:

configure: error: Package requirements (glib-2.0) were not met:

No package 'glib-2.0' found

You need to find the proper *-dev package for each unmet dependency (for this one it will be libglib2.0-dev).

I came across one additional problem. The software seems not updated after some GTK+ 3 updates and it uses a deprecated function. Because the code is configured in a way that every warning stops the compilation, it wouldn't let you compile the code unless you open the src/Makefile file and then find and remove the -Werror flag from it.

xfce4-volumed-pulse

This part will take care of binding the media keys to the pulse audio controls (rather than to the sound card controls).

You need to download the tar package, untar it, ./configure, make, sudo make install. It also requires quite a few libs to be installed, but I didn't found any issues when compiling.

Hooking this up together

Since I didn't need the original xfce4-volume anymore I decided to remove it:

apt-get remove xfce4-volumed

But because XFCE will try to launch this anyway on each start, I decided to take advantage of it and replace it with a script:

#!/bin/bash

/usr/local/bin/xfce4-volumed-pulse
/usr/local/bin/pa-applet

Add the executable bit, restart the laptop and all should be working correctly at this moment.

Setting the hw mixer controls

Since PulseAudio won't update the hw controls after you follow up this little howto, it's quite important to set all the important channels to 100% (or other number up to your taste). The way to update the hw controls was described before.

Open the terminal, type alsamixer and hit F6. This will give the list of ALSA devices besides the PulseAudio emulation, your real sound cards should display as well. Choose the right one and you should be given access to tweak the real card controls.

Note if you removed the PulseAudio paths, the PulseAudio controls wouldn't update when you tweak the hw controls.

Comments: 1

Lamerstwo allegro

05 Nov 2014 18:44

Niedawno miałem głupią przygodę z allegro, które pokazało brak klasy w obsłudze klienta, odpowiedzialnością za swój błąd obarczyło sprzedawcę, a mi uniemożliwiło zapłacenie kartą za produkty.

Przeprowadziłem nieco frustrującą rozmowę z allegro na temat błędu w ich serwisie. Po około miesiącu usłyszałem plotkę jakoby większość ludzi z działu obsługi klienta allegro zostało zwolnionych. Nie zmieniło to jednak w ogóle podejścia do klienta.

Dzisiaj na forum allegro, mnóstwo zgłoszeń o "zwielokrotnionym działaniu koszyka", a allegro wciąż przerzuca odpowiedzialność za ich błąd na sprzedawców i kupujących, czego doświadczyła dziś moja żona.

To zainspirowało mnie do upublicznienia historii mojej rozmowy z allegro.

Moja wiadomość do allegro (skopiowane z maila, które allegro wysyła jako potwierdzenie, że otrzymali, warto zwrócić uwagę do wagi przywiązanej do bezpieczeństwa, tak dużej, że znak cudzysłowu jest zaeskepowany nawet nie raz, co i tak dla e-maila nie ma sensu, ale aż TRZY RAZY!):

Dzień dobry,

chciałem kupić przez koszyk 6 żarówek z aukcji: "KIERUNKOWSKAZ LED 5
SMD W5W T10 POMARAŃCZOWY NW5P" (numer 4552723961).

Dodałem więc 6 żarówek do koszyka i przeszedłem przez wszystkie etapy
finalizowania zamówienia.

Na ostatnim etapie po kliknięciu "potwierdź" pojawił się
komunikat o błędzie technicznym i prośba o spróbowanie ponowne za chwilę.

W związku z tym upewniłem się, że transakcji nie ma w
"kupionych", przeszedłem do koszyka i ponownie zamówiłem
przedmioty (które wciąż tam były). Nie dodawałem kolejnych 6 sztuk do koszyka!

Przy płatności okazało się, że mam do zapłaty kwotę za 12 żarówek, a na mój e-mail
przyszły DWA potwierdzenia zakupu po 6 żarówek w każdym przypadku.

Proszę o usunięcie jednej z kupionych aukcji (albo przerobienie obu na 3 sztuki),
tak abym mógł zapłacić sprzedającemu za 6 sztuk żarówek i otrzymać produkt, w
ilości której potrzebuję.

Proszę o pilne naprawienie Waszego błędu.

Dziękuję,
Piotr Gabryjeluk

Odpowiedź allegro:

Dzień dobry.

Po potwierdzeniu zakupu dochodzi do zawarcia umowy, kolejne potwierdzenie dodaje nowe sztuki. Pan potwierdził zakup dwukrotnie:

quakee 2,15 zł 6 pon, 15 wrz 2014, 09:13:12
quakee 2,15 zł 6 pon, 15 wrz 2014, 09:12:02

Rozumiem jednak, że doszło do nieporozumienia i kupił Pan więcej sztuk, niż Pan zamierzał. Ze strony Allegro nie ma możliwości, żeby anulować Pana zakup, ale proszę skontaktować się ze Sprzedającym, będzie on mógł zwrócić się do nas z prośbą o zwrot prowizji za niesprzedane przedmioty. Pan zostanie tylko poproszony o wyjaśnienia w formularzu, do którego link prześlemy Panu w powiadomieniu.

Jeśli Sprzedający jest przedsiębiorcą, może Pan odstąpić od umowy w ciągu 10 dni od chwili otrzymania towaru, tak mówi Ustawa. Natomiast część Sprzedających wyraża zgodę na anulowanie zakupu jeszcze przed wysyłką tego towaru.

Proszę również ustalić ze Sprzedającym sposób zapłaty za przedmioty, ponieważ system PayU będzie wymagał zapłaty za całe zakupy.

W przyszłości jeśli wystąpi podobny problem proszę nie potwierdzać zakupu kilka razy. Proszę wykonać zrzut ekranu z widocznym błędem i wysłać go do nas. Będziemy mieli wówczas możliwość szczegółowej analizy opisanego problemu.

Pozdrawiam,

Moja odpowiedź:

Dzień dobry,

Dziękuje za odpowiedź.

Czy w allegro po zakupie przedmiotów pozostają one w koszyku?

Kupowałem już wielokrotnie przez koszyk zarówno w allegro jak i w innych serwisach
i dotąd zawsze po potwierdzeniu zakupów, koszyk ulegał opróżnieniu (co ma sens w
kontekście ogólnie pojętego UX).

Proszę o ponowne przeczytanie mojej wiadomości i rzeczową odpowiedź.

W międzyczasie skontaktuję się ze sprzedawcą na wypadek, gdyby jednak nie
potrafiła mi Pani pomóc.

Pozdrawiam,
Piotr Gabryjeluk

Odpowiedź allegro:

Witam.

Po zakupie przedmioty powinny zniknąć z koszyka. Jeśli tak się nie stało, należało się z nami skontaktować przed ponownym potwierdzeniem zakupu.

Nie mam mozliwości anulowania zakupu, gdyż w chwili jego potwierdzenia staje się on wiążący dla Pana i Sprzedającego.

Nie mamy możliwości weryfikacji ewentualnego problemu technicznego po naszej stronie, kiedy jest już po fakcie.

Jeśli w przyszłości wystąpi podobny problem proszę nie potwierdzać zakupu kilka razy, proszę od razu się z nami skontaktować. Sprawa trafi wtedy do Działu Technicznego i będzie weryfikowana.

Pozdrawiam,

Moja odpowiedź:

Dzień dobry,

czy zatem na allegro komunikat mówiący o tym, że wystąpił błąd i należy
rozumieć w następujący sposób:

  • operacja, którą próbowałeś zrobić i tak mogła nastąpić, nawet jeśli na

to nie wygląda (w tym przypadku nie usunięto przedmiotów z koszyka)

  • nie próbuj ponownie (bo np. kupisz jakieś rzeczy podwójnie)

Dziękuję za odpowiedź,
Piotr Gabryjeluk

Zauważyłem, że się pomyliłem w poprzedniej wiadomości, a zatem wysłałem sprostowanie:

Przepraszam, do mojej wiadomości wkradł się błąd. Poniżej zredagowane
pytanie:

Czy zatem na allegro komunikat mówiący o tym, że wystąpił błąd i należy
spróbować ponownie, należy rozumieć w następujący sposób:

  • operacja, którą próbowałeś zrobić i tak mogła nastąpić, nawet jeśli na

to nie wygląda (w tym przypadku nie usunięto przedmiotów z koszyka)

  • nie próbuj ponownie (bo np. kupisz jakieś rzeczy podwójnie)

Dziękuję,
Piotr Gabryjeluk

Brak odpowiedzi ze strony allegro, a zatem prośba o odpowiedź:

Dzień dobry,

czy zamierzają Państwo odpowiedzieć na moje pytanie?

Dziękuję,
Piotr Gabryjeluk

(W końcu!) odpowiedź:

Witam.

Jeśli ma Pan zastrzeżenia, co do treści komunikatów i chciałby Pan przesłać sugestię bądź zaproponować nowe rozwiązanie, zachęcam do podzielenia się nią na naszym forum, na stronie:

http://cafe.allegro.pl/forumdisplay.php?67-Sugestie-i-pomys%C5%82y

Tam będą mieli możliwość zapoznania się z nią specjaliści od optymalizacji wprowadzanych rozwiązań.

Pozdrawiam,

Niezadowolony z tej odpowiedzi, odpisałem:

Rozumiem, że nie zamierzają Państwo odpowiedzieć na moje pytanie.

Jeżeli nie dostanę odpowiedzi na moje pytanie:

Czy zatem na allegro komunikat mówiący o tym, że wystąpił błąd i należy spróbować ponownie, należy rozumieć w następujący sposób:

  • operacja, którą próbowałeś zrobić i tak mogła nastąpić, nawet jeśli na to nie wygląda (w tym przypadku nie usunięto przedmiotów z koszyka)
  • nie próbuj ponownie (bo np. kupisz jakieś rzeczy podwójnie)

uznam, że:

1. Z powodu błędnego działa koszyka oraz błędnego komunikatu w allegro,
zostałem wprowadzony w błąd przez co dwukrotnie zamówiłem towar

2. Z powodu dwukrotnego zamówienia towaru, nie miałem możliwości
zapłacenia przez PayU (a zatem ograniczyliście mi możliwość sprawnego
zakupu) a moja przesyłka z powodu potrzeby dodatkowej komunikacji nie
przyjdzie na czas

3. Zamiast uczciwie zająć się sprawą: przeprosić sprzedawcę i mnie, i
zaproponować rozwiązanie, zrzucają Państwo odpowiedzialność za własny
błąd na kupującego i sprzedającego wymagając dodatkowej komunikacji poza
allegro, proszenia o zwrot prowizji, a sprzedającego tłumaczenia się z
błędu, który wyniknął z winy allegro.

Proszę zatem o odpowiedź na moje pytanie i na przyszłość o nieunikanie
odpowiedzialności za błędne działanie serwisu. Wszyscy rozumieją, że
czasami pojawi się jakiś błąd i nikt nie ma za to pretensji, ale
ignorując ten fakt i zrzucając odpowiedzialność ze błędy na innych
pokazujecie totalny brak klasy (a zdaje się, że allegro nie chce być już
postrzegane jako e-bazarek z tanimi produktami i fatalną obsługą).

Dziękuję i liczę na odpowiedź,
Piotr Gabryjeluk.

Allegro odpowiada:

Witam.

Nie mogę odnieść się do Pana prośby. Nie widziałam komunikatu, który Pan widział. Nie przesłał Pan zrzutu ekranu, nie zacytował Pan również dokładnej jego treści.

Komunikat, który Pan zobaczył nie jest tutaj jednak najważniejszy. Nie informował on, że nie doszło do zakupu. Potwierdzenie opcji Kup teraz oznacza zakup. Z tego, co Pan napisał wynika, że potwierdził Pan zakup jeden raz, a później kolejny raz, dlatego doszło do podwójnego zakupu.

Poprosiłam Pana o kontakt z nami, jeśli w przyszłości problem pojawi się ponownie, gdyż na tę chwilę nie mamy możliwości weryfikacji tego, co stało się, kiedy pierwszy raz dokonał Pan zakupu.

Pozdrawiam,

Moja odpowiedź:

Dzień dobry,

proszę zrozumieć, że z mojej perspektywy błąd pojawił się przy drugim
"potwierdzeniu" koszyka. Przyzna Pani, że robienie wtedy screenshota nie
miałoby żadnego sensu.

Jeśli zależy Pani na zidentyfikowaniu błędu i ustrzeżenie przed nim
przyszłym użytkowników (żeby im nie musiała Pani wmawiać, że to ich
wina), niech Pani poprosi zespół developerski o logi koszyka.

Co do braku możliwości weryfikacji, śmiem w to wątpić. W takiej
aplikacji jak allegro, na pewno jest zapisywane powiązanie transakcji z
konkretnym koszykiem. Jeśli po transakcji koszyk jest czyszczony, nigdy
nie powinno się zdarzyć, że z jednego koszyka są dwie transakcje. Mogę
dla Pani sprawdzić, czy jest to teoretycznie możliwe do zweryfikowania z
kolegami, którzy pracują w allegro. Również łatwo znaleźć listę
wszystkich komunikatów przewidzianych dla błędów w czasie klikania na
konkretny przycisk w czasie finalizacji zamówienia.

Proszę powiedzieć, czy podtrzymuje Pani opinię o braku możliwości
weryfikacji mojej sytuacji. Jeśli tak jest, proszę o informację, czy i
kiedy planujecie Państwo logować ID koszyka, z którego powstało
zamówienie, żeby w przyszłości nie zasłaniać się brakiem danych.

Czy ma Pani jakiekolwiek informacje świadczące o tym, że faktycznie
potwierdziłem dwa razy zamówienie wiedząc o tym, że za pierwszym razem
się ono powiodło?

Co do rad na przyszłość, też mam kilka dla Państwa:

1. Proszę się skupiać najpierw na rozwiązaniu sytuacji która już się
wydarzyła a nie na radzeniu waszym użytkownikom co zrobić jak następny
raz spotkają się z błędem w waszym serwisie.

2. Jeśli oczekujecie, że użytkownicy nie będą ponownie próbować klikać w
przycisk nie piszcie, żeby próbowali ponownie.

3. Jeśli oczekujecie, żeby użytkownicy kontaktowali się z Wami w
przypadku wystąpienia konkretnego błędu, to napiszcie, żeby się
skontaktowali.

Czekam na wyjaśnienie i naprawienie mojej sytuacji.

Dziękuję,
Piotr Gabryjeluk

Allegro w końcu się poddało (powiedzmy):

Witam.

Sprawa została zgłoszona do Działu Technicznego.

Dodam tylko, że bez względu na efekt działań Działu Technicznego, nie będziemy mogli usunąć zakupu z Pana konta i w tej sprawie tak czy inaczej musi się Pan skontaktować z Kontrahentem.

Pozdrawiam,

Comments: 0

Accessing HTTPS Over HTTP

01 Nov 2014 16:47

For one my internal projects, I needed a HTTP-to-HTTPS proxy in a way that a client connects to HTTP network inside the trusted network and the server connects through the Internet to the service via HTTPS.

I quickly set this up using Apache. Here's the virtual host file:

<VirtualHost *:8371>
        ServerName              localhost
        ProxyPreserveHost       Off
        SSLProxyEngine          On
        Header                  edit Set-Cookie secure;.HttpOnly HttpOnly
        RewriteEngine           On
        RewriteRule             ^/(.*) https://remote-server.com/$1 [P,L]
        ProxyPassReverse        / https://remote-server.com/
</VirtualHost>

You need to enable the following modules for that: proxy, proxy_http, rewrite, headers

Note, above I also mangle the Set-Cookie response headers in a way, that every http-only secure cookie (this means a cookie is transmitted to the server only over a secure transport and is not available on the client side) is converted to a http-only but non-secure.

The rule I produced (convert regexp "secure;.HttpOnly" to just "HttpOnly") may not work for you because I targeted one particular service and the construction of such cookies may be different for the one you want to proxy.

The second note is that, the service you're proxying might actually check the protocol on the client side as well, which we cannot mock on the server-level. I was lucky my service didn't have such checks.

Comments: 0

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License