Entries tagged as ‘programming’
Holy crap! A new programming language from Google!
http://golang.org/
Busyet, gw mesti lihat yang satu ini. Dari contoh program yang diberikan nampaknya Python-ish dengan rasa C. Saya bersemangat dengan prospek bahasa ini, bukan karena nama besar Google dibelakangnya tapi karena sederet feature yang masih “katanya” (soalnya belum coba sendiri
). Baguslah, saya sedang tunggu-tunggu yang seperti ini: fleksibilitas Python dengan power dan workflow C.
Yang paling penting menurut gw, ini bukan interpreted language! Kalau memang betul bisa kompilasi dengan cepat, seperti Object Pascal, maka asik juga bisa menyaingi Python yang (IMHO) bagus tapi sayangnya interpreted. Artinya Go, dari kesan yang gw dapat setelah membaca sekilas, memiliki kecepatan kompilasi seperti Object Pascal, menghasilkan native object bukan intermediate yang dijalankan oleh VM seperti Python atau Java, tapi dengan sifat ekspresif seperti Python.
Hmm.. very interesting. Pertanyaannya sekarang, apakah bahasa ini akan “sukses”?
Kategori: Uncategorized
Ditandai: computer, news, programming
A Python script to update links under a path to use new prefix.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys, getopt;
options = {'start': None, 'oprefix': None, 'nprefix': None, 'simulate': True};
class PathError (Exception):
pass;
def ShowUsage():
progname = os.path.split(sys.argv[0])[1];
print progname;
print '-'*len(progname)
print " Usage: %s [-w] [-s startpath] -o oldprefix -n newprefix\n" % progname;
print " Parameters: "
print " -w, --write Dont run the program run in simulation mode.\n";
print " -s, --start-path Use custom starting directory.\n";
print " -o, --old-prefix Find link(s) with prefix as specified by this parameter.\n";
print " -n, --new-prefix New prefix for the offending link(s) to use.\n";
####
def GetOptions():
global options;
ret = 0;
arguments = sys.argv[1:];
try:
wnt, dummy = getopt.getopt(arguments, "o:n:s:w", ["old-prefix=",
"new-prefix=", "start-path=", "write"]);
for name, val in wnt:
if name in ('-o', '--old-prefix'):
options['oprefix'] = val;
elif name in ('-n', '--new-prefix'):
options['nprefix'] = val;
elif name in ('-s', '--start-path'):
options['start'] = val;
elif name in ('-w', '--write'):
options['simulate'] = False;
##
if options['start'] == None:
options['start'] = os.getcwd();
except getopt.GetoptError:
ret = -1;
##
if (options['oprefix'] == None) or (options['nprefix'] == None): ret = -1;
if ret != -1:
print "Start : %s" % options['start'];
print "Old prefix : %s" % options['oprefix'];
print "New prefix : %s" % options['nprefix'];
if options['simulate'] == False: print "WARNING : This program may change links.";
print;
##
return ret;
####
def ProcessPath(curPath, recursive):
proccount = 0;
files = os.listdir(curPath);
if len(files) > 0:
print "Examining %s" % curPath;
for entry in files:
curFile = os.path.join(curPath, entry);
if os.path.islink(curFile):
linkPath = os.readlink(curFile);
if linkPath.find(options['oprefix']) == 0:
# we need to update this one
newLinkPath = linkPath.replace(options['oprefix'], options['nprefix'],
1);
print "Fixing %s\n Old path: %s\n New path: %s" % (curFile,
linkPath, newLinkPath);
if options['simulate'] == False:
# these two lines will modify/regenerate the symbolic link
os.unlink(curFile);
os.symlink(newLinkPath, curFile);
proccount += 1;
##
else:
# good link, skip it
pass;
elif os.path.isdir( curFile ) and recursive:
proccount += ProcessPath(curFile, recursive);
##
return proccount;
####
def main():
if GetOptions() == 0:
i = ProcessPath(options['start'], True);
print;
print ["Nothing processed by this program", \
"There are %s link(s) processed" % i][i > 0] + '.';
else:
ShowUsage();
####
if __name__ == '__main__':
main();
##
Kategori: Ilmu
Ditandai: code-dumping, computer, programming, python
I would like to post this one just in case I’ll need it someday in the future.
UNION can be used to ‘append’ multiple SELECT result into one stream of rows. This is not a JOIN. There are few situations where a UNION should be used to get a certain result. Here’s one:
I’ve got a table, a view to be exact, like this :
V_EMPLOYEERELATION
+------------+-------------+----------+
| EMPLOYEE | EMPLOYEE_2 | RELATION |
+------------+-------------+----------+
| 101 | 203 | 45 |
+------------+-------------+----------+
| 104 | 108 | 40 |
+------------+-------------+----------+
| 102 | 79 | 45 |
+------------+-------------+----------+
As you can see this is a table that stores relationship between employees. The task is to get all employee entries having a certain Relation ID.
Right, now here’s the query:
SELECT EMPLOYEE AS "ID" FROM V_EMPLOYEERELATION WHERE RELATION = %d
UNION
SELECT EMPLOYEE_2 AS "ID" FROM V_EMPLOYEERELATION WHERE RELATION = %d';
This query will return rows of employee ID satisfying a relation ID. If you know Python or Delphi, you might know the formatting string there. For people who don’t know, the %d is a replacement for an integer value. In this example I’m using integer as foreign key to a RELATION table.
One can use this SQL query like this:
const
SQUERY_GETEMP =
'SELECT EMPLOYEE AS "ID" FROM V_EMPLOYEERELATION WHERE RELATION = %d ' +
'UNION ' +
'SELECT EMPLOYEE_2 AS "ID" FROM V_EMPLOYEERELATION WHERE RELATION = %d';
...
// RunQuery is a function that takes string SQL query and a dataset, returning an integer
if ( RunQuery(Format(SQUERY_GETEMP, [iRelationID, iRelationID]), Table1) = 0 ) then
begin
while (not Table1.EOF) do
...
Please note that UNIONs requires each ’source-stream’ (a.k.a SELECT statements) to have the same fields number, type and size.
Kategori: Ilmu
Ditandai: programming, sql
I’m back to C++, at least for now. I’m in a process re-writing some of my (personal) apps to C using MFC (or wxWidgets). I’m doing this because I’m looking forward to code in C++ a lot more in the future. I’m quite satisfied with my current knowledge of Delphi, and frankly understanding Delphi’s (Object Pascal) programming helps my (re)transition to C++.
I worked my way through C++ basic (again) for a few hours, and some other quirks in C and how to do basic things done in C++. I’m using my free copy of VS.NET express, but that’ll (probably) change soon as I’m downloading wxDev C++. From the words I’ve heard about it, it sounds like ‘okay’ and might stand a chance as a good alternative for someone like me –someone coming from GUI-based IDE.
From my experience (so far) I realized that Delphi really has it’s own good points, and I did struggle with C++ to ‘do things’ like the way I used to in Delphi. As it turns out although not actually the same, now I know how to ‘do things’ C++ way. And these C++ ways of ‘doing things’ makes me really appreciate Delphi.
I guess it’s true then, you’ll appreciate the things you don’t have even more than the ones you have.
Nah, I guess that’ll change too. I’ll see where this fascinating world of C will take me.
Kategori: Orang bego punya kegiatan
Ditandai: c++, english, programming