Programming and Exciting Things

Exiftool

Published on 19.02.2014

ExifTool е много приятен инструмент за работа с exif данните в снимките, който ползвам основно за извиличане на GPS координатите от снимка:

exiftool.exe -filename -imagesize -gps:GPSLatitude -gps:GPSLongitude -gps:GPSAltitude -n SNIMKA.jpg 

това ще ни даде lat/lng + alt. в dec. вариант. Ако махнем -n от командата резултата ще бъде в градуси пр.
GPS Position": "51 deg 30' 52.82\" N, 0 deg 8' 47.12\" W"
.
Приложението го има за windows/linux и може да се изтегли от http://www.sno.phy.queensu.ca/~phil/exiftool/
Като освен за четене на exif данни се справя чудесно и с extract-ването на jpg от raw изображения (примерно NEF файловете на Nikon).

Map ftp server as local drive in windows 8

Published on 10.02.2014

Попаднах на една много приятна програмка (само конзолен вариант) който се справя успешно с map-ване на ftp сървър към windows 8 машина.
Самата програма използва Dokan FS driver-а който е нещо като windows версия на FUSE.

Повече информация за самото приложение: http://www.ferrobackup.com/ftpuse/

И хубавата част е че това може да се комбинира със robocopy :)

Nginx automatic virtual subdomains

Published on 28.01.2014

От известно време ползвам Digitalocean и за момента съм много доволен от това. Но с хубавите страни на cloud машините идва и една малка подробност, a именно трябва да си настроя всичко сам. Тъй като явно съм мързелив и не ми се редактира конфигурацията на уеб сървъра толкова често използвам този конфигурационен файл за да си "създавам" автоматично виртуални събдомейни

server {
    listen  80;
    server_name "~^(?<sub>.+)\.rawpics\.net$";
   
    if (!-d /projects/rawpics.net/$sub) {
        rewrite . http://rawpics.net/ redirect;
    }
    root /projects/rawpics.net/$sub;
   
    index index.php index.html index.htm;
   
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 1y;
        log_not_found off;
    }
    location / {
        try_files $uri /index.php?$args;
         if (-f $request_filename) {
            break;
        }
        if (-d $request_filename) {
            break;
        }
        rewrite ^(.+)$ /index.php?uri=$1 last;        
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;        
    }
    location ~ /\.ht {
        deny all;
    }
}

Ако не намери директория просто редирекваме към главния домейн :)
ps: оказа се че повече ми харесва nginx отколкото apache :)

ViewPager in Scroolview

Published on 20.01.2014

Снощи добавях view pager в контейнер от scrollview и тъй като не е много препоръчително да се прави естествено държанието на цялото приложение беше "странно", проблема го реших със следното парченце код:

final ViewPager vp = (ViewPager) findViewById(R.id.top_imageViewPager);
	vp.setPageMargin(-50);
	vp.setHorizontalFadingEdgeEnabled(false);
	vp.setFadingEdgeLength(30);
	adapter = new ImageViewAdapterClubObekt(cnt, snimki_top);
	vp.setAdapter(adapter);
	vp.setOnTouchListener(new View.OnTouchListener() {
	        int dragthreshold = 30;
	        int downX;
	        int downY;
	        @Override
	        public boolean onTouch(View v, MotionEvent event) {
	            ScrollView mScrollView = (ScrollView) findViewById(R.id.scrrol_view_obekt);
	            switch (event.getAction()) {
	            case MotionEvent.ACTION_DOWN:
	                downX = (int) event.getRawX();
	                downY = (int) event.getRawY();
	                break;
	            case MotionEvent.ACTION_MOVE:
	                int distanceX = Math.abs((int) event.getRawX() - downX);
	                int distanceY = Math.abs((int) event.getRawY() - downY);

	                if (distanceY > distanceX && distanceY > dragthreshold) {
	                    vp.getParent().requestDisallowInterceptTouchEvent(false);
	                    mScrollView.getParent().requestDisallowInterceptTouchEvent(true);
	                } else if (distanceX > distanceY && distanceX > dragthreshold) {
	                    vp.getParent().requestDisallowInterceptTouchEvent(true);
	                    mScrollView.getParent().requestDisallowInterceptTouchEvent(false);
	                }
	                break;
	            case MotionEvent.ACTION_UP:
	                mScrollView.getParent().requestDisallowInterceptTouchEvent(false);
	                vp.getParent().requestDisallowInterceptTouchEvent(false);
	                break;
	            }
	            return false;
	        }
	    });
	vp.setOnPageChangeListener(new OnPageChangeListener() {
	    @Override
	    public void onPageScrollStateChanged(int arg0) {
	    }

	    @Override
	    public void onPageScrolled(int arg0, float arg1, int arg2) {
	    }

	    @Override
	    public void onPageSelected(int position) {
		switch (position) {
		case 0:
		    menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
		    break;
		default:
		    menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
		    break;
		}
	    }
	});
Освен проблема с свайп евентите съм "фикснал" и лявото меню да не се показва при swipe ако елемента не е 0-ев.
За лявото меню ползвам "SlidingMenu"

pCloud and BitCoins

Published on 14.01.2014

От вчера (13 януари 2014) pCloud вече приема плащания и през виртуалната валута Bitcoin
Интересно е дали ще има ползваемост или все още въпросната валута е далеч от реална употреба и е по-скоро спекулативна.