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
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
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
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
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
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
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
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
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!
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
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
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 LDAP
và AUTH_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
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