Skip to content

Instantly share code, notes, and snippets.

View mpurbo's full-sized avatar

Mohamad Purbo mpurbo

View GitHub Profile
@mpurbo
mpurbo / gist:1030819
Created June 17, 2011 03:34
Simple many-to-many PostgreSQL query
SELECT pg.*
FROM programmers pg
WHERE EXISTS(
SELECT pp.programmer_id
FROM programmers_projects pp
WHERE
pp.programmer_id = pg.programmer_id AND
pp.project_id IN (1, 2) -- or whatever condition to filter the projects
)
@mpurbo
mpurbo / gist:1030830
Created June 17, 2011 03:42
Hibernate many-to-many Criterion
Criteria criteria = session.createCriteria(Programmer.class);
criteria.add(Restrictions.sqlRestriction(
"EXISTS(" +
"SELECT pp.programmer_id " +
"FROM programmers_projects pp " +
"WHERE " +
"pp.programmer_id = {alias}.programmer_id AND " +
"pp.project_id IN (1, 2) )"
));
@mpurbo
mpurbo / gist:1030837
Created June 17, 2011 03:50
Sample SQL with function in ORDER BY clause
SELECT ...
FROM ...
WHERE ...
ORDER BY ST_Distance(...)
@mpurbo
mpurbo / gist:1030838
Created June 17, 2011 03:52
Hibernate Order extension sample
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Order;
public class PostgisDistanceOrder extends Order {
private boolean ascending;
private String propertyName;
private double fromLatitude;
@mpurbo
mpurbo / gist:1030840
Created June 17, 2011 03:57
nfkc.c compile error fix when building Senna
# do configure
./configure --prefix=/usr --without-mecab
# compile nfkc.c manually before make
cd lib
../libtool --tag=CC --mode=compile \
gcc -I. -I.. -Wall -O0 -fno-strict-aliasing -g -MT nfkc.lo \
-MD -MP -MF .deps/nfkc.Plo -c -o nfkc.lo nfkc.c
# do make
@mpurbo
mpurbo / gist:1037518
Created June 21, 2011 09:25
Correct and transform SRID with PostGIS
-- add temporary column for storing geometry with correct SRID
select AddGeometryColumn('places', 'geom_4301', 4301, 'GEOMETRY', 2);
-- add temporary column for storing geometry with target SRID
select AddGeometryColumn('places', 'geom_4326', 4326, 'GEOMETRY', 2);
BEGIN;
-- set the source temporary column with geometries with corrected SRID
UPDATE places SET geom_4301 = 'SRID=4301;POINT('|| ST_X(geom) || ' ' || ST_Y(geom) || ')';
@mpurbo
mpurbo / gist:1651234
Created January 21, 2012 04:07
Japanese Address Regular Expression
public static final String SPACE = "[\\s\u3000]";
public static final String NUMBER = "[0-9\uff10-\uff19]"; // 0-90-9
public static final String HYPHEN = "[-\uff0d\u2212]";
public static final String NOT_NUMBER_OR_HYPHEN = "[^" + NUMBER.substring(1, NUMBER.length()-1) + HYPHEN.substring(1);
public static final String NUMBERS = "([0-9\uff10-\uff19\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+)"; // 0-90-9一二三四五六七八九
public static final String CHOUME = "\u4e01\u76ee"; // 丁目
public static final String BANCHI = "\u756a\u5730?"; // 番地
public static final String GOU = "\u53f7"; // 号
@mpurbo
mpurbo / gist:1651260
Created January 21, 2012 04:18
Japanese Postcode Regular Expression
public static final String SPACE = "[\\s\u3000]";
public static final String NUMBER = "[0-9\uff10-\uff19]"; // 0-90-9
public static final String HYPHEN = "[-\uff0d\u2212]";
public static final String NOT_NUMBER_OR_HYPHEN = "[^" + NUMBER.substring(1, NUMBER.length()-1) + HYPHEN.substring(1);
public static final String REGEX_POSTCODE =
"(?:" + NOT_NUMBER_OR_HYPHEN.substring(0, NOT_NUMBER_OR_HYPHEN.length() - 1) + "\\)]|^)" +
"\u3012?" +
SPACE + "*(" + NUMBER + "{3})" +
SPACE + "*" + HYPHEN +
@mpurbo
mpurbo / gist:1651273
Created January 21, 2012 04:22
Converting all double bytes UTF-8 numbers (0-9) in a String to single bytes (0-9)
private static String toHankakuNumbers(String zenkaku) {
if (zenkaku == null)
return null;
StringBuffer ret = new StringBuffer();
char [] src = zenkaku.toCharArray();
for (char c : src) {
if (c >= 0xff10 && c <= 0xff19) {
ret.append((char)(c - 65248));
} else {
ret.append(c);
@mpurbo
mpurbo / gist:1651282
Created January 21, 2012 04:25
Regular expression for format commonly used in Japanese phone number
public static final String SPACE = "[\\s\u3000]";
public static final String NUMBER = "[0-9\uff10-\uff19]"; // 0-90-9
public static final String HYPHEN = "[-\uff0d\u2212]";
public static final String NOT_NUMBER_OR_HYPHEN = "[^" + NUMBER.substring(1, NUMBER.length()-1) + HYPHEN.substring(1);
public static final String SEPARATOR = "[\\(\\)" + HYPHEN.substring(1, HYPHEN.length()-1) + "]";
public static final String REGEX_PHONEFAX =
"(?:" + NOT_NUMBER_OR_HYPHEN + "|^)" +
SPACE + "*(" + NUMBER + "{2,4})" +
SPACE + "*" + SEPARATOR +