Kho tháng 1/2006

Thứ ba, 31 Tháng một năm 2006 18:24:25 JST

Gentoo Forum ba triệu bài

Vậy là sau 1 năm đạt được 2 triệu bài, giờ Gentoo Forum được ba triệu. Theo đà này, dự đoán năm sau được .. 4 triệu (dễ quá xá).


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Chủ nhật, 29 Tháng một năm 2006 02:07:56 JST

Chúc mừng năm mới

Đầu năm nghe Nirvana (Smelling like teen spirit), uống Asahi, hack Dia. Ôi Thiên đàng!!!


Cập nhật 1 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ bảy, 28 Tháng một năm 2006 19:21:29 JST

Dia Cairo!

Hura! Cairo renderer cho Dia chạy rồi :D dù còn vài chỗ vẫn cần điều chỉnh lại. Keke :))


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ năm, 26 Tháng một năm 2006 18:33:33 JST

Nối liền hai bờ Mailing List và forum (punbb)

Max Khitrov vừa cho ra mắt bản beta Mail List Bridge Mod cho PunBB. Xem ra khá hữu dụng. Tuy nhiên vẫn chưa giải quyết phần mail attachment.


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ năm, 26 Tháng một năm 2006 18:28:53 JST

Kerberos và Single Sign-On

Một ngày mò mẫm vất vả. Cuối cùng quyết định Kerberos vẫn chưa đủ hỗ trợ để thực hiện giải pháp Single Sign-On, đặc biệt là ở phía Web Client/Web Server. Đụng vô Kerberos trên Web lại đụng đến IE rồi SSPI, NTLM, nhức cả đầu. Mà ActiveDirectory ra đời để giải quyết SSO nhưng cũng đâu thấy mần ăn được gì. Túm lại là SSO/Kerberos, để đó năm sau tính tiếp.


Cập nhật 1 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Chủ nhật, 22 Tháng một năm 2006 21:11:28 JST

Dia SVG

Mất gần hai ngày để gắn librsvg vào dia. Gắn xong thì hiện shape đẹp thiệt (lấy cái thùng rác gnome gắn vô, không mất gradient). Mỗi tội dùng svg gốc của dia thì nó nằm ở bắc cực, librsvg chỉ vẽ vùng xích đạo nên vẽ ra .. trong suốt.

Thêm chuyện nữa, do show shape dạng image nên mất các thông tin về shape, hết chọn object một cách chính xác mà phải chọn nguyên cục vuông theo bounding box. Muốn dùng rendered image làm mask cũng không xong vì phần render nằm trong DiaRenderer, độc lập với phần DiaCanvas :(

Giờ có hai giải pháp. 1 hack tiếp rsvg để có thể implement lại distance_from. 2 tìm cách chơi với cairo playback (mấy cái thread về metafile, meta surface trên cairo ML).


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ ba, 17 Tháng một năm 2006 22:11:46 JST

Gtk+ Online đổi tên sang Gtk+ Ajax

Tiếp theo Gtk+ Online.

Nhờ MrChuoi, ngộ ra thêm có thể điều khiển lưu lượng mạng từ phía server (Web client). Nếu loại bỏ signal mouse-move thì có thể giảm đáng kể lưu lượng mạng cần thiết, bù lại mất các hiệu ứng. Phần nữa là các động tác drag-drop cũng mất tác dụng. Giải pháp khắc phục chơi kiểu nông dân: thay vì gửi mouse-move liên tục, hoặc không gửi mouse-move, ta gửi mouse-move định kỳ, đủ chậm để không chiếm quá nhiều băng thông. Ôi tradeoff!


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ năm, 12 Tháng một năm 2006 23:34:49 JST

Route tất cả qua VPN

Thử route tất cả connection qua VPN vì nhưng không được. Cứ xoá default route là mất VPN connection. Sau một hồi mò lại mới thấy mình ngu: xoá default route thì mất đường đi tới VPN server, vậy mất VPN connection là đáng. Thêm route tới VPN server trước rồi xoá default route là ok. Giờ chỉ cần thêm default route mới, route tất cả quả VPN server :))

UPDATE: Sau thành công vang dội là cái chết của router :( Router chết thì bó tay.


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ năm, 12 Tháng một năm 2006 20:04:10 JST

GQview for Windows (again)

Long time ago, someone ported gqview to Windows and then left it in the dark. Now another one has made another port for GQview. I'm pleased to announce: GQview for Win32 Project! Thank you weixiaozhang!


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ ba, 10 Tháng một năm 2006 05:41:26 JST

Blah

You scored as English. You should be an English major! Your passion lies in writing and expressing yourself creatively, and you hate it when you are inhibited from doing so. Pursue that interest of yours!

English

67%

Psychology

58%

Theater

42%

Mathematics

42%

Linguistics

42%

Engineering

42%

Philosophy

42%

Sociology

42%

Biology

25%

Anthropology

25%

Chemistry

17%

Art

8%

Journalism

0%

Dance

0%

What is your Perfect Major? (PLEASE RATE ME!!<3)
created with QuizFarm.com

Cập nhật 1 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ hai, 09 Tháng một năm 2006 03:57:42 JST

librsvg không gtk+

Thần chú hôm nay (sau khi chép gdk-pixbuf từ gtk+ vào librsvg)

cd gdk-pixbuf
gcc -c gdk-pixbuf-data.c -I.. `pkg-config glib-2.0 --cflags` -DGETTEXT_PACKAGE=librsvg gdk-pixbuf.c  gdk-pixbuf-util.c gdk-pixbuf-enum-types.c  gdk-pixbuf-scale.c
cd pixops
make
cd ../..
make
gcc -c test.c `sdl-config --cflags` `pkg-config glib-2.0 --cflags` -I.
gcc -g -O2 -o rsvg test.o `sdl-config --libs --cflags` /usr/lib/libpopt.so ./.libs/librsvg-2.so /usr/lib/libxml2.so /usr/lib/libpangoft2-1.0.so /usr/lib/libpango-1.0.so /usr/lib/libgobject-2.0.so /usr/lib/libgmodule-2.0.so /usr/lib/libglib-2.0.so /usr/lib/libcairo.so /usr/lib/libXrender.so /usr/lib/libX11.so /usr/lib/libXau.so /usr/lib/libXdmcp.so -ldl -lpng12 /usr/lib/libfontconfig.so /usr/lib/libexpat.so /usr/lib/libfreetype.so -lz -lm -Wl,--rpath -Wl,/home/pclouds/local/lib gdk-pixbuf/gdk-pixbuf.o gdk-pixbuf/gdk-pixbuf-data.o gdk-pixbuf/gdk-pixbuf-enum-types.o gdk-pixbuf/gdk-pixbuf-util.o  gdk-pixbuf/gdk-pixbuf-scale.o gdk-pixbuf/pixops/.libs/libpixops.a

demo.c:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

#include <SDL.h>
#include <glib.h>
#include <rsvg.h>

SDL_Surface *load_svg (char *file, int width, int height, float wscale, float hscale)
{
	GError * err = NULL;
	double dpi_x = -1.0;
	double dpi_y = -1.0;

	GdkPixbuf  * pixbuf;

	/* initialize gtk+ */
	rsvg_init ();

	rsvg_set_default_dpi_x_y (dpi_x, dpi_y);

	pixbuf = rsvg_pixbuf_from_file_at_size (file,width,height,&err);

	if (!pixbuf)
	{
		g_critical ("Error displaying pixbuf!\n");

		if (err)
		{
			g_critical (err->message);
			g_error_free (err);
		}

		return NULL;
	}

	/* Create the SDL surface using the pixel data stored. It will automatically be set to use alpha using these mask values */
	void *img = gdk_pixbuf_get_pixels (pixbuf);
	int w = gdk_pixbuf_get_width (pixbuf);
	int h = gdk_pixbuf_get_height (pixbuf);
	int bpp = (3 + gdk_pixbuf_get_has_alpha(pixbuf)) * 8;
	int rowstride = gdk_pixbuf_get_rowstride (pixbuf);
	SDL_Surface *sdl_surface=SDL_CreateRGBSurfaceFrom(
			img, w, h, bpp, rowstride ,
			0x000000FF, 0x0000FF00,
			0x00FF0000, 0xFF000000);

//	g_object_unref (G_OBJECT (pixbuf));
	rsvg_term ();

	return sdl_surface;
}

SDL_Surface*
init_SDL (int width, int height, int bpp)
{
    SDL_Surface *screen;
    if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
        fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
        exit(1);
    }
    atexit(SDL_Quit);
    
    /* Finished initalizing SDL */
    screen = SDL_SetVideoMode(width, height, bpp, SDL_SWSURFACE);
    if ( screen == NULL ) {
        fprintf(stderr, "Unable to set %ix%i video: %s\n", width, height, SDL_GetError());
        exit(1);
    }

    /* Give a window title. */
    SDL_WM_SetCaption("Cairo SDL DEMO", "DEMO");
    return screen;
}
int
main (int argc, char **argv)
{
    SDL_Surface *screen;
    SDL_Surface *svgimg;
    SDL_Event event;

    int width=320;
    int height=200;

    screen=init_SDL(width,height,16);
    /*Fill the background in purple so we can see the alpha blend */
    SDL_FillRect (screen, NULL, SDL_MapRGB(screen->format,155,0,255));

    /* Width and height are non-zero, will scale image to width x height */
    svgimg=load_svg ("demo.svg", width, height, 0, 0);

    /* Will scale image by 2x2. */
    //svgimg=load_svg ("demo.svg", 0, 0, 2, 2);

    // Will load image at it's natural size
    //svgimg=load_svg ("demo.svg", 0, 0, 0, 0);
    //svgimg=load_svg ("demo.svg", 0, 0, 1, 1); */


    SDL_BlitSurface (svgimg, NULL, screen, NULL);
    SDL_UpdateRect (screen, 0, 0, 0, 0);

    /* Handle events so we can safely exit. */
    while (1) {
            while (SDL_PollEvent (&event)) {
                switch (event.type) {
                    case SDL_KEYDOWN:
                        if (event.key.keysym.sym == SDLK_ESCAPE)
                            exit (0);
                        else if (event.key.keysym.sym == SDLK_f)
                            /* press f to toggle fullscreen */
                            SDL_WM_ToggleFullScreen(screen);
                        break;
                    case SDL_QUIT:
                        exit (0);
                        break;
                }
            }
    }
    exit (0);
}


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ năm, 05 Tháng một năm 2006 20:15:47 JST

BiForge

BiForge là một phiên bản bắt chước gforge hay sourceforge. BiForge bao gồm những thành phần sau:

  • Mail Server - Postfix
  • Mail Archiver/Indexer - ???
  • Mailing List management - Mailman
  • File Server - Samba
  • UserDB - OpenLDAP
  • Version Control - Subversion
  • Issue tracker - ???
  • Web Server - Apache2
  • Wiki - TWiki
  • Instant Messenging - SILC

Mục tiêu đơn giản: xây dựng một hệ thống giống sourceforge, nhưng hi vọng đơn giản hơn. Dựa trên các khối phần mềm có sẵn ghép lại với nhau. Wiki được sử dụng làm nền tảng chứa thông tin thay vì HTML tĩnh. Xác thực sẽ dựa vào OpenLDAP, các ứng dụng Web sẽ xác thực thông qua Apache và tự phân quyền. Forum sẽ được thay thế bằng Mailing list.

Bước một, tạo chroot environment từ stage3-x86-2005.1, emerge một số gói cần thiết trước. USE flag được dùng là

kerberos -X ldap mysql -cups samba -gtk -gtk2 -qt -arts acl -python sasl
unicode nptl sse apache2 vhosts mmx -ipv6 minimal

Ngoài ra còn tuỳ biến riêng trong package.use

dev-db/mysql utf8
dev-libs/cyrus-sasl authdaemond
dev-lang/perl -minimal    # nếu không openldap không chịu build với -minimal
net-nds/openldap -minimal # nếu không sẽ không có slapd

Các gói ban đầu được emerge gồm apache subversion openldap samba postfix mailman mysql twiki silc-server silc-client

Giai đoạn một tạm ổn với openldap, chưa thử ldaps nhưng ldap chạy ngon. slapd.conf là:

#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include     /etc/openldap/schema/core.schema
include     /etc/openldap/schema/cosine.schema
include     /etc/openldap/schema/inetorgperson.schema
include     /etc/openldap/schema/nis.schema

password-hash {smd5}

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral   ldap://root.openldap.org

pidfile     /var/run/openldap/slapd.pid
argsfile    /var/run/openldap/slapd.args

TLSCertificateFile  /etc/ssl/private/ldap.pem
TLSCertificateKeyFile   /etc/openldap/ssl/ldap.pem
TLSCACertificateFile    /etc/ssl/private/ldap.pem

# Load dynamic backend modules:
# modulepath    /usr/lib/openldap/openldap
# moduleload    back_bdb.la
# moduleload    back_ldap.la
# moduleload    back_ldbm.la
# moduleload    back_passwd.la
# moduleload    back_shell.la

# Sample security restrictions
#   Require integrity protection (prevent hijacking)
#   Require 112-bit (3DES or better) encryption for updates
#   Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
#   Root DSE: allow anyone to read it
#   Subschema (sub)entry DSE: allow anyone to read it
#   Other DSEs:
#       Allow self write access
#       Allow authenticated users read access
#       Allow anonymous users to authenticate
#   Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
#   by self write
#   by users read
#   by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn.  (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!

#######################################################################
# BDB database definitions
#######################################################################

database    bdb
checkpoint  32  30 # <kbyte> <min>
suffix      "dc=biforge,dc=net"
rootdn      "cn=Manager,dc=biforge,dc=net"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw      {SMD5}x8r+BC8drGSytIv49cWbfbY7zLo=
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory   /var/lib/openldap-data
# Indices to maintain
index   objectClass eq

access to *
    by users read
    by anonymous read

access to attrs=userPassword,gecos,description,loginShell
    by self write

Nội dung ldap hiện thời (YoLinux tutorial hơi bị hữu ích):

# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# biforge.net
dn: dc=biforge,dc=net
objectClass: dcObject
objectClass: organization
o: BiForge
dc: BiForge
description: BiForge mess

# Manager, biforge.net
dn: cn=Manager,dc=biforge,dc=net
objectClass: organizationalRole
cn: Manager
description: BiForge LDAP Manager

# People, biforge.net
dn: ou=People,dc=biforge,dc=net
ou: People
objectClass: top
objectClass: organizationalUnit
description: People

# guest, People, biforge.net
dn: uid=guest,ou=People,dc=biforge,dc=net
uid: guest
cn: guest
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJDgyQzR6VzFvJFhzVW9md3IxVHQvUjhSb0txQmo0ci4=
shadowLastChange: 13153
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 100
homeDirectory: /home/guest

# guest2, People, biforge.net
dn: uid=guest2,ou=People,dc=biforge,dc=net
uid: guest2
cn: guest2
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJDgyQzR6VzFvJFhzVW9md3IxVHQvUjhSb0txQmo0ci4=
shadowLastChange: 13153
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 100
homeDirectory: /home/guest2

# guest3, People, biforge.net
dn: uid=guest3,ou=People,dc=biforge,dc=net
uid: guest3
cn: guest3
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQxJDgyQzR6VzFvJFhzVW9md3IxVHQvUjhSb0txQmo0ci4=
shadowLastChange: 13153
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 100
homeDirectory: /home/guest3

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6

Apache config khá đơn giản, bật hai option LDAPAUTH_LDAP trong /etc/conf.d/apache2 lên rồi thêm dòng sau vào config

AuthName "BiForge authentication"
AuthType Basic
AuthLDAPUrl ldap://ldap.biforge.net/dc=biforge,dc=net
require valid-user

Bật SSL trong Apache bao gồm thêm mấy dòng trong /etc/apache2/modules.d/40_mod_ssl.conf (dĩ nhiên cần thêm SSL vào /etc/conf.d/apache2)

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

rồi thêm SSLRequireSSL vào đúng virtual host (dùng virtual host 443, không phải 80 nữa). Postfix chạy nhưng chưa hỗ trợ LDAP. Vấn đề đầu tiên, TWiki trong Gentoo không hỗ trợ Apache2, lại phải hack rồi.


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh

Thứ tư, 04 Tháng một năm 2006 21:47:57 JST

TMW

Cần làm thêm mấy cái patch nữa cho TMW:

  • Tự động đánh trả khi bị tấn công
  • Tự động lượm đồ nếu lượm được
  • Tự động giết Maggot nếu giết được
  • Cho phép đánh dấu thông tin cá nhân cho các item, monster và player

Cập nhật 3 lần. Lần cuối: Fri Aug 26 00:20:24+0003 2022

Tác giả: pclouds | Liên kết tĩnh