Programming and Exciting Things

Java human readable time

Published on 26.02.2013

Идеята е от timestamp да получим текст от сорта на преди ХХ време

import java.util.Date;

public class PrettyDate {
    private Date date;

    public PrettyDate() {
	this(new Date());
    }

    public PrettyDate(Date date) {
	this.date = date;
    }

    public String toString() {
	long current = (new Date()).getTime(), timestamp = date.getTime(), diff = (current - timestamp) / 1000;
	int amount = 0;
	String what = "";

	if (diff > 31536000) {
	    amount = (int) (diff / 31536000);
	    what = "година";
	} else if (diff > 31536000) {
	    amount = (int) (diff / 31536000);
	    what = "месеца";
	} else if (diff > 604800) {
	    amount = (int) (diff / 604800);
	    what = "седмици";
	} else if (diff > 86400) {
	    amount = (int) (diff / 86400);
	    what = "ден";
	} else if (diff > 3600) {
	    amount = (int) (diff / 3600);
	    what = "часа";
	} else if (diff > 60) {
	    amount = (int) (diff / 60);
	    what = "минути";
	} else {
	    amount = (int) diff;
	    what = "секунди";
	    if (amount < 6) {
		return "точно сега";
	    }
	}
	if (amount == 1) {
	    if (what.equals("ден")) {
		return "вчера";
	    } else if (what.equals("седмици") || what.equals("месеца") || what.equals("години")) {
		if (what.equals("месеца")) {
		    return "преди " + amount + "месец";
		}
		if (what.equals("седмици")) {
		    return "преди " + amount + "седмица";
		}
		if (what.equals("години")) {
		    return "преди " + amount + "година";
		}
		return "преди " + what;
	    }
	}
	return "преди " + amount + " " + what;
    }
}
Може да го използваме по следния начин:
long dv = Long.valueOf(item.date) * 1000; // в милисекунди :D :D 
Date df = new java.util.Date(dv);
PrettyDate date = new PrettyDate(df);
System.out.println("Посетено " + date.toString());			

Android set element to center

Published on 25.02.2013

Идеята: да наглася един Relative View да заема само половианта от видимата площ
Решението:

    private void naglasi_elementite(){
	DisplayMetrics d = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(d);
        RelativeLayout rl = (RelativeLayout) findViewById(R.id.activity_main_top_filter_citys);
        rl.getLayoutParams().width = ( d.widthPixels / 2 );
    }

Mysql remove dublicated items

Published on 25.02.2013

Имам една таблица с размер от 40GB, която се оказа че съдържа доста дублиращи се елементи. Вместо да създавам temp таблици и да местя съдържание от една таблица в друга и след това да унищожавам реших че мога да възложа тази задача на mysql engina-а

 
ALTER IGNORE TABLE big_fat_table ADD UNIQUE INDEX(row_id1)
За времетраенето на заявката не съм много сигурен колко ще отнеме, но то зависи от доста параметри, но пък смятам че е удачно :)

Git запазване (кеширане) на паролата

Published on 17.02.2013

Тъй като съм голям мързел и не искам да въвеждам всеки път паролата си когато синхронизирам, решението се оказа следният малък helper: http://blob.andrewnurse.net/gitcredentialwinstore/git-credential-winstore.exe това е когато използвам HTTPS а за SSH вече автентикацията е чрез public/private ключове.

Python is numeric

Published on 15.02.2013

Една малка функция за проверка дали даден стринг е число

def is_numeric(value):
        return str(value).replace("-", "").replace(".", "").isdigit()
Може да се използва по следния начин:
	is_numeric("41.1")