Programming and Exciting Things

Windows Server информация за DHCP (статистика)

Published on 22.03.2013

За един от проектите по коити работя ми трябва информация за DHCP сървъра (Windows server). Със следната командата

 netsh dhcp server show mibinfo 

можем лесно да я вземем и обработим по подходящ начин :)
примерен резултат:
C:\Users\Administrator.SERVER1>netsh dhcp server show mibinfo

MIBCounts:
        Discovers = 3235.
        Offers = 3235.
        Delayed Offers = 0.
        Requests = 4279.
        Acks = 4512.
        Naks = 154.
        Declines = 0.
        Releases = 154.
        ServerStartTime = 15 March 2013 г. 09:31:44 ч.
        Scopes = 1.
        Scopes with Delay configured= 0.
        Subnet = 192.168.137.0.
                No. of Addresses in use = 113.
                No. of free Addresses = 78.
                No. of pending offers = 0.

Android, Java: стартиране на телефонно повикване

Published on 20.03.2013

Идеята е да започнем телефонно обаждане с помощта на Java. Реализирането е мега простичко:

 
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:0886062974"));
startActivity(intent);

Като ако нямаме права да го правим естествено няма да успеем :) За да си поискаме нужните права трябва да добавим следното
<uses-permission android:name="android.permission.CALL_PHONE" />
в AndroidManifest.xml

Java foreach loop

Published on 15.03.2013

Foreach-ът се използва доста често и като цяло улеснява доста итерирането над колекции и масиви. Като цяло for-each e за предпочитане спрямо for.
пример:

	ArrayList<String> a = new ArrayList<String>();
	
	a.add("da");
	a.add("ne");
	a.add("drugo");
	
	// типичен for-each би изглеждал така
	for( String el : a) {
		System.out.println(el);
	}
	

Парсване на www.shallalist.de списъка с "забранени" сайтове

Published on 03.03.2013

За един проект имах нужда да имам различните "лоши" адреси от www.shallalist.de под формата на mysql таблици и това е набързо написан скрипт който парсва и генерира sql готов за импортиране:

import sys
import os

dir = "C:\\Users\\Yuks\\Desktop\\BL\\"

categories_table = "bl_categories"
elements_table = "bl_elements"


def ls(dir, hidden=False, relative=True):
    nodes = []
    for nm in os.listdir(dir):
        if not hidden and nm.startswith('.'):
            continue
        if not relative:
            nm = os.path.join(dir, nm)
        nodes.append(nm)
    nodes.sort()
    return nodes



def gen_items():
    dirs = ls(dir)
    for el in dirs:
        try:
            file = dir + el + "/domains"
            with open(file) as fileobject:
                for line in fileobject:
                    if line != "":
                        rr = "INSERT INTO `{el_cat}` (`cat_name`, `url`) VALUES ('{cat_name}', '{domain}');"
                        rr = rr.format(el_cat = elements_table,cat_name = el.strip(),domain = line.strip())
                        print rr
        except:
            pass
        
        
def categories():
    file = dir + "global_usage"
    r = []
    with open(file) as fileobject:
        name = ""
        desc = ""
        for line in fileobject:
            tmp = {}
            if "#" not in line:
                if "NAME:" in line:
                    name = line.replace("NAME:", "").strip()
                    
                elif "DESC EN" in line:
                    desc = line.replace("DESC EN","").strip()
                else:
                    pass
                
            
            if name != "" and desc != "":
                rr = {}
                rr['name'] = name
                rr['desc'] = desc
                name = desc = ""
                r.append( rr )
   
                 
    for el in r:
        print (el['name'],el['desc'])
        print   

def gen_cats_sql_tables():
    r = """
CREATE TABLE `{cat}` (
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(500) NOT NULL,
    `desc` TEXT NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
    """""
    r = r.format(cat = categories_table)
    return r            

def gen_items_sql_tables():
    r = """
CREATE TABLE `{elements}` (
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `cat_name` VARCHAR(500) NOT NULL,
    `url` TEXT NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
    """""
    r = r.format(elements = elements_table)
    return r            

 
print gen_cats_sql_tables()   
print gen_items_sql_tables()   
gen_items()
Файлът със лошите адреси може да се свали от http://www.shallalist.de/Downloads/shallalist.tar.gz
ps: би трябвало да може да работи и с http://urlblacklist.com/

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());