Search This Blog

Enable File System Quota On Debian

 

  • For example we want to apply disk quota on /dev/md5 to each user, say 2000MBytes soft limit & 2500MB/2.5GB hard limit.
  • 1. install quota package
    • sudo apt-get install quota
  • 2. edit /etc/fstab to enable quota on /dev/md5 file system
    • /dev/md5 /home ext3 defaults,usrquota,grpquota 0 2
  • 3. re-mount /dev/md5
    • sudo mount -o remount /home
  • 4. edit user quota one by one
    • sudo edquota -u tom -f /dev/md5
Disk quotas for user tom (uid 3050):
Filesystem blocks soft hard inodes soft hard
/dev/md5 0 2000000 2500000 0 0 0


* the above assigns 2000000KB/2GB soft limit and 2500000/2.5GB hard limit to user tom.




  • 5. set grace period to 0seconds

    • sudo edquota -t -f /dev/md5





Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/md5 0seconds 0seconds



  • 6. disable then re-enable the quota to make it work

    • sudo quotaoff -a


    • sduo quotaon -vug /dev/md5


      • on error:see this


        • quotaon: using /home/aquota.user on /dev/md5: Invalid argument


        • quotaon: using /home/aquota.group on /dev/md5: Invalid argument




      • quotacheck -vugm /dev/md5






  • 7. to list the current quota settings

    • repquota -a








How To Remove CDFS Partition From USB Thumb Drive

 

  1. You need to check the chip model of your USB drive using this tool: ChipGenius
    1. Download ChipGenius
    2. Connect you USB drive
    3. Run ChipGenius and check the information
    4. take down the information of your dirve, for example, the chip model of my usb drive is MTX6208.
  2. You will then need to find the tool for your chip.
    1. You can find and download the tool from this web site: www.51stor.net
      1. Note: make sure the tool you download matches your chip model.
    2. Run the tool. You should be able to remove the CDFS partition (by re-initializing the disk).

Debian Samba Server Setup

 

  1. Install samba
    • aptitude install smaba samba-doc smbldap-tools
      • Workgroup/Domain Name: NIG
      • Modify smb.conf to use WINS settings from DHCP?: No
    • dpkg-reconfigure samba
      • How to run Samba: daemons
      • Create password database: Yes
  2. Enable samba.schema in LDAP server
    • aptitude install samba-dodc
    • cd /usr/share/doc/samba-doc/examples/LDAP
    • gunzip samba.schema.gz
    • cp samba.schema /etc/ldap/schema/samba.schema
    • vim /etc/ldap/slapd.conf
      • include /etc/ldap/schema/samba.schema
    • /etc/init.d/slapd restart
  3. Let Samba use LDAP as backend
    • vim /etc/samba/smb.conf
      • passdb backend = ldapsam:ldap://localhost
      • ldap suffix = dc=neuroimaging,dc=org,dc=au
      • ldap machine suffix = ou=SMBMachines
      • ldap user suffix = ou=People
      • ldap group suffix = ou=Group
      • ldap admin dn = cn=admin,dc=neuroimaging,dc=org,dc=au
      • ldap delete dn = no
      • ldap ssl = start_tls
  4. Configure smbldap-tools package
    • aptitude install smbldap-tools
    • cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/
    • gzip /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz
    • cp /usr/share/doc/smbldap-tools/examples/smbldap.conf /etc/smbldap-tools/
    • vi /etc/smbldap-tools/smbldap_bind.conf
    • vi /etc/smbldap-tools/smbldap.conf
    • vi /etc/samba/smb.conf
    • Note: read /usr/share/doc/smbldap-tools/
  5. Important:
    • To change rootpw of the binddn cn=admin,dc=example,dc=org, you need
      • smbldap-passwd
      • edit /etc/smbldap-tools/smbldap_bind.conf
      • smbpasswd -w <ldap_rootpw>
See Also
  1. Samba LDAP
  2. Samba 3 LDAP

LDAP Replication Using syncrepl

 

My Solution
  • Master server:
    • edit configration in /etc/ldap/slapd.conf, append following:
## syncrepl provider
index entryCSN,entryUUID eq

moduleload syncprov.la
overlay syncprov

syncprov-checkpoint 10 5
syncprov-sessionlog 100



  • Slave server:

    • edit /etc/ldap/slapd.conf, append:





## syncrepl consumer
index entryCSN,entryUUID eq
syncrepl rid=123
provider=ldap://master-ldap.example.org:389
type=refreshOnly
interval=00:00:01:00
searchbase="dc=example,dc=org"
filter="(objectClass=*)"
attrs="*"
scope=sub
schemachecking=off
bindmethod=sasl
saslmech=DIGEST-MD5
authcid="admin"
credentials="Password"



  • Note: in my case, I am using SASL DIGEST-MD5. Read the references if you want to use simple bind. Detail about how to enable SASL on openldap server, see here


  • Restart Master slapd then Slave slapd.



References



  1. Configuring the Master-Slave Replication


  2. LDAP Sync Replication


  3. LDAP replication setup using syncrepl


  4. Debian LDAP Server Setup

Debian Samba LDAP Integration

 






  1. install samba

    • aptitude install samba




  2. install smbldap-tools

    • aptitude install smbldap-tools




  3. read smbldap-tools documentation

    • gunzip /usr/share/doc/smbldap-tools/README.Debian.gz


    • less /usr/share/doc/smbldap-tools/README.Debian





I. LDAP Server Configuration



  1. Copy the 'samba.schema' to be used in your LDAP server (you can find it in '/usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz' after installing the samba-doc package):


    • zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema




  2. Modify the file '/etc/ldap/slapd.conf' to include the samba schema:

    • include /etc/ldap/schema/samba.schema




  3. Optionally add indexes to optimize SAMBA access:

    • index uid,uidNumber,gidNumber,memberUid eq


    • index cn,mail,surname,givenname eq,subinitial


    • index sambaSID eq


    • index sambaPrimaryGroupSID eq


    • index sambaDomainName eq




  4. Allow users to change their NT and LM Passwords changing the line: access to attribute=userPassword by: access to attrs=userPassword,sambaNTPassword,sambaLMPassword


  5. Restart the LDAP server.

    • /etc/init.d/slapd restart





II. Samba Server Configuration



  1. Edit the '/etc/samba/smb.conf' to change the passdb backend from the original to:

    • passdb backend = ldapsam:ldap://localhost




  2. Add configuration directives for the passdb system:

    • obey pam restrictions = no


    • ldap admin dn = cn=admin,dc=neuroimaging,dc=org,dc=au


    • ldap delete dn = no


    • ldap suffix = dc=neuroimaging,dc=org,dc=au


    • ldap machine suffix = ou=Computers


    • ldap user suffix = ou=Users


    • ldap idmap suffix = ou=Users


    • ldap group suffix = ou=Groups




  3. More to use the smbldap-tools to change passwords:

    • ; Do ldap passwd sync


    • ldap passwd sync = Yes


    • passwd program = /usr/sbin/smbldap-passwd %u


    • passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated*




  4. And if you want to administer user and groups from windows add:

    • add user script = /usr/sbin/smbldap-useradd -m "%u"


    • ldap delete dn = Yes


    • delete user script = /usr/sbin/smbldap-userdel "%u"


    • add machine script = /usr/sbin/smbldap-useradd -w "%u"


    • add group script = /usr/sbin/smbldap-groupadd -p "%g"


    • delete group script = /usr/sbin/smbldap-groupdel "%g"


    • add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"


    • delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"


    • set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"




  5. Restart samba and add the smbldap admin password to let SAMBA use it:

    • /etc/init.d/samba restart


    • smbpasswd -w LDAP_ADMIN_PASSWORD





smbldap-tools Configuration



  1. Start copying the files 'smbldap.conf' and 'smbldap_bind.conf' from '/usr/share/doc/smbldap-tools/examples/' to '/etc/smbldap-tools/':

    • zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf


    • cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf




  2. Edit the 'smbldap.conf' file; the main parameters to watch out are the 'SID', the ldap servers addresses, the TLS settings and the LDAP suffix.

    • NOTE: To obtain the SID execute the following command with your SAMBA server Running:


      • net getlocalsid






  3. Edit the 'smbldap_bind.conf' file and put there the SMBLDAP administrator's DN and Password.


  4. Fix file permisions:

    • chmod 0644 /etc/smbldap-tools/smbldap.conf


    • chmod 0600 /etc/smbldap-tools/smbldap_bind.conf




  5. To initialize the LDAP database invoque the command:

    • smbldap-populate


    • NOTE: This makes the tool start adding uids and gids from 1000 (hardcoded default), if you want to start from different numbers you can use "-g <firstgid>" or "-u <firstuid>" as options to smbldap-populate.



Mac OS X LDAP Client Setup

  • Add LDAPv3 source to Directory Access
    1. go to Applications -> Utilities, open Directory Utility
    2. Unlock it with root password 
    3. Click "Show Advanced Settings"
    4. Click "Services
    5. Select LDAPv3, click Configure
    6. Click the edit pen icon at bottom left
    7. Check off "Use DHCP-supplied LDAP server"
    8. Select Options then click New
    9. Enter a configuration name i.e.: Master LDAP
      •  Server Name: your Master LDAP server name ie. ldap.example.org
    10. Click on LDAP Mappings and select RFC 2307 (Unix) 
    11.  A window will pop up that will ask you for a search base. Input ie. dc=example,dc=org and tick SSL, click Ok then Ok again.
    12. Now you'll be back at the Directory Access Window
      • Click on Authentication at the top of the window 
      • Under Search, pull down & choose "Custom Path" then Click Add
      • Select ldap/ldap.example.org source 
      • Click OK and OK again until Directory Access closes.
    13. Restart the machine
  • After the restart you should be able to log in as any valid LDAP user




Troubleshooting


  1. If after configuring your LDAP you still can't authenticate and your /var/log/system.log contains messages like these /System/Library/LoginPlugins/MCX.loginPlugin/Contents/MacOS/MCXCacher: DSOpenNode(): dsOpenDirNode("/LDAPv3/ldap.example.org") == -14002

    • The problem comes from the Format utility of the Directory Access which apparently keeps misconfiguration even if it is corrected.
    • To correct
      1. Remove all contents of the directory /Library/Preferences/DirectoryService ie. double click on your Mac HDD
      2. Open /Applications/Utilities/Netinfo Manager and within it remove all contents of /config/mcx-mask
      3. Then restart the machine and reconfigure.


  2. After an update to Mac OS X Server 10.5.3 some clients do not find the LDAP server with messages:
    • DirectoryService[48]: DSLDAPv3PlugIn: [machine] LDAP server config not updated with server mappings due to server mappings error.
    • DirectoryService[48]: LDAPv3: SafeOpen Can't retrieve server mappings from search base of <cn=config,dc=lip6,dc=fr>.
    • DirectoryService[48]: LDAPv3: SafeOpen Cannot retrieve server mappings at this time.
    • The problem came from utility Utility directory (Directory Utility) that keeps obviously a bad configuration. Pour corriger cela il faut : To correct this requires:
      1. Delete the contents of the directory / Library / Preferences / DirectoryService.
      2. Then, (restart), and repeat the configuration format Directory without error:)


  3. I just spent a very long time on a client does not find the LDAP server with messages: /System/Library/LoginPlugins/MCX.loginPlugin/Contents/MacOS/MCXCacher: DSOpenNode(): dsOpenDirNode("/LDAPv3/mon.server.fr") == -14002
    • The problem came from utility format Directory (Directory Access) that keeps obviously a bad configuration even if it is correct.
    • To correct this requires:
      1. Delete the contents of the directory / Library / Preferences / DirectoryService.
      2. Delete the entire contents of / config / pcs-cache in the NetInfo Manager (NetInfo Manager).
      3. Then, (restart), and repeat the configuration format Directory without error:)


  4. sudo dscl . -delete /Config/mcx_cache; sudo reboot


References


  1. Configuring Mac OS X LDAP Authorization for Leopard (Mac OS X 10.5.x)
  2. Configuring Mac OS X LDAP Authorization for Tiger (Mac OS X 10.4.x)
  3. Mac OS X authentication against OpenLDAP
  4. Setting up Mac OS X Server
  5. Mac OS X: How to Connect to an LDAPv3 Server Using a Self-Signed Certificate
  6. Integrating Apple OS X Clients with an OpenLDAP Directory(10.4 Tiger)
  7. Integrating OSX Clients with an OpenLDAP Directory
  8. Mac OS X: dscl
  9. Mac OS X ldap client
  10. Integrating Mac OS X And Novell eDirectory
  11. Integrating OS X into Active Directory
  12. dsconfigldap command
  13. MAC OS/X authentication against OpenLDAP 2.3 (Resolved)

Ubuntu LDAP Client Setup

 

  1. make sure your ldap server is reachable:
    • ping ldap.example.org
  2. install required packages
    • aptitude install auth-client-config ldap-auth-client ldap-auth-config libnss-db libnss-ldap libpam-ldap nscd nss-updatedb
      • Configuring ldap-auth-config:
        • Should debconf manage LDAP configuration? Yes
        • LDAP server Uniform Resource Identifier: ldaps:ldap.neuroimaging.org.au (Note: use ldap: if the server does not enable TLS)
        • Distinguished name of the search base: dc=example,dc=org
        • LDAP version to use: 3
        • Make local root Database admin: Yes
        • Does the LDAP database require login? No
        • LDAP account for root: cn=admin,dc=example,dc=org
        • LDAP root account password: XXXXXXXX
        • Local crypt to use when changing passwords: md5
  3. If server enables TLS
    • copy the CA certificate from the server:
      • mkdir /etc/ldap/certs; scp root@ldap:/etc/ldap/certs/cacert.pem /etc/ldap/certs/
    • edit /etc/ldap.conf (There are two ldap.conf files. /etc/ldap.conf and /etc/ldap/ldap.conf)
      • vim /etc/ldap.conf
        • host ldap.example.org
        • base dc=example,dc=org
        • uri ldap://ldap.example.org
        • rootbinddn cn=admin,dc=example,dc=org
        • bind_policy soft
        • ssl on
        • ssl start_tls
        • tls_cacertfile /etc/ldap/certs/cacert.pem
  4. Now you can test it with following commands
    • getent passwd should return the accounts from ldap server.
    • nss_updatedb ldap should succeed.
    • If above do not work
      • check /var/log/auth.log
      • vim /etc/ldap.conf
        • bind_policy hard
        • tls_checkpeer no
        • try getent passwd and nss_updatedb ldap again
      • Files needs to look at:
        • /etc/ldap.conf
        • /etc/ldap.secret (Note: you need to update thisfile if you have changed rootpw.)
  5. Edit ldap-auth-config
    • vi /etc/auth-client-config/profile.d/ldap-auth-config
      • [lac_ldap]
      • nss_passwd=passwd: files ldap [NOTFOUND=return] db
      • nss_group=group: files ldap [NOTFOUND=return] db
      • nss_shadow=shadow: files ldap
      • pam_auth=auth sufficient pam_ldap.so
      • auth required pam_unix.so nullok_secure use_first_pass
      • pam_account=account sufficient pam_ldap.so
      • account required pam_unix.so
      • pam_password=password sufficient pam_ldap.so
      • password required pam_unix.so nullok obscure min=4 max=8 md5
      • pam_session=session required pam_unix.so
      • session required pam_mkhomedir.so skel=/etc/skel/
      • session optional pam_ldap.so
      • session optional pam_foreground.so
    • auth-client-config -a -p lac_ldap (note: lac_ldap is the profile name defined in /etc/auth-client-config/profile.d/ldap-auth-config file. Do not use the file name here.)
  6. enable nss_db cache
    • vi /etc/cron.hourly/nss_updatedb-ldap.sh
      • #!/bin/bash
      • /usr/sbin/nss_updatedb ldap
    • To make actual use of the cached data you will need to edit /etc/nsswitch.conf like this:
      • passwd: files ldap [NOTFOUND=return] db
      • group: files ldap [NOTFOUND=return] db
    • This means:
      • look first in the local files (/etc/passwd and /etc/group)
      • if not found, use LDAP
      • when LDAP does not have user information, exit and return nothing (this is the [NOTFOUND=return] directive)
      • if the LDAP server was not reachable, proceed with using the cached data
See also:

Enable SASL Authentication on OpenLDAP Server

 

  • Note: This document is based on Debian 4.0 etch.
  1. Install SASL2 packages
    • apt-get install sasl2-bin libsasl2-modules
  2. Modify /etc/default/saslauthd
    • vim /etc/default/saslauthd
      • START=yes
      • MECHANISMS="pam"
  3. Configure OpenLDAP server to use SASL
    • vim /etc/ldap/slapd.conf
      • sasl-realm NEUROIMAGING.ORG.AU
      • sasl-host supertower.neuroimaging.org.au
      • authz-regexp uid=admin,cn=neuroimaging.org.au,cn=.+ cn=admin,dc=neuroimaging,dc=org,dc=au
      • authz-regexp uid=(.*),cn=neuroimaging.org.au,cn=.+ uid=$1,ou=People,dc=neuroimaging,dc=org,dc=au
      • sasl-secprops none
  4. Configure LDAP client
    • vim /etc/ldap/ldap.conf
      • SASL_SECPROPS none
      • SASL_REALM NEUROIMAGING.ORG.AU
  5. See also LDAPv3 How To
    • Note:
      • In openldap 2.3, authz-regexp replaces sasl-regexp
      • You may need to enable ldap server logging, see debian-ldap-server-setup
      • You may need to chgrp openldap /etc/sasldb2 to grant access to ldap server.
  • Note: The server must request a client certificate in order to use the SASL EXTERNAL authentication mechanism with a TLS session. As such, a non-default TLSVerifyClient setting must be configured before SASL EXTERNAL authentication may be attempted, and the SASL EXTERNAL mechanism will only be offered to the client if a valid client certificate was received. Openldap Amin Guide, 12.2.1.8.

Debian LDAP Client Setup

 

  1. Make sure FQDN of the ldap server is either in /etc/hosts or DNS resolvable.
  2. Copy CA certificate from the ldap server to the client computer:
    • mkdir /etc/ldap/certs; scp root@ldap-server:/etc/ldap/certs/cacert.pem /etc/ldap/certs/
  3. Install required software packages
    • aptitude install libnss-db libnss-ldap libpam-ldap nscd nss-updatedb
      • Configuring libnss-ldap
        • LDAP server Uniform Resource Identifier: ldap://ldap-server.example.org.au
        • Distinguished name of the search base: dc=example,dc=org,dc=au
        • LDAP version to use: 3
        • Does the LDAP database require login? No
        • Special LDAP privileges for root? Yes
        • Make the configuration file readable/writeable by its owner only? No
        • LDAP account for root: cn=admin,dc=example,dc=org,dc=au
        • LDAP root account password: XXXXXXXX
      • Configuring libpam-ldap
        • Make local root Database admin. Yes
        • Does the LDAP database require login? No
        • LDAP account for root: cn=admin,dc=example,dc=org,dc=au
        • LDAP root account password: XXXXXXXX
        • Local crypt to use when changing passwords: md5
  4. Enable TLS
    • vim /etc/libnss-ldap.conf
      • ssl start_tls
      • tls_cacertfile /etc/ldap/certs/cacert.pem
  5. Configure /etc/nsswitch.conf
    • vim /etc/nsswitch.conf
      • passwd: files ldap [NOTFOUND=return] db
      • group files ldap [NOTFOUND=return] db
      • shadow files ldap [NOTFOUND=return] db
      • OR
      • passwd: ldap compat
      • group: ldap compat
      • shadow: ldap compat
  6. Test:
    • getent passwd
      • should return list of password entries from LDAP server
    • nss_updatedb ldap
      • should succeed.
  7. Enable cron job to update local nss database
    • touch /etc/cron.hourly/nss_updatedb-ldap.sh
    • echo "#!/bin/bash" > /etc/cron.hourly/nss_updatedb-ldap.sh
    • echo "/usr/sbin/nss_updatedb ldap" » /etc/cron.hourly/nss_updatedb-ldap.sh
    • chmod +x /etc/cron.hourly/nss_updatedb-ldap.sh
  8. Configure pam.d
    • vi /etc/pam.d/common-auth
      • auth sufficient pam_ldap.so
      • auth required pam_unix.so nullok_secure use_first_pass
    • vi /etc/pam.d/common-account
      • account sufficient pam_ldap.so
      • account required pam_unix.so
    • vi /etc/pam.d/common-password
      • password sufficient pam_ldap.so
      • password required pam_unix.so nullok obscure min=4 max=8 md5
    • vi /etc/pam.d/common-session
      • session required pam_unix.so
      • session required pam_mkhomedir.so skel=/etc/skel/
      • session optional pam_ldap.so
      • session optional pam_foreground.so
  9. Troubleshooting:
    • Config files needs to look at:
      • /etc/pam_ldap.conf
      • /etc/pam_ldap.secret (Note: if you have change the rootpw, you will have to update this file)
      • /etc/libnss-ldap.conf
      • /etc/libnss-ldap.secret (Note: if you have change the rootpw, you will have to update this file)

Debian LDAP Server Setup

 

I. OpenLDAP Server Installation
  1. Install openldap server
    • aptitude install ldap-server
      • Admin Password: XXXXXXXX
      • Confirm Admin Password: XXXXXXXX
  2. Configure openldap server
    • dpkg-reconfigure slapd
      • Omit OpenLDAP server configuration? no
      • DNS domain name: example.org.au
      • Name of your orgnization: example.org.au
      • Admin Password: XXXXXXXX
      • Confirm Password: XXXXXXXX
      • Database backend to use: BDB
      • Do you want your database to be removed when slapd is purged? Yes
      • Move old database? Yes
      • Allow LDAPv2 protocol? No
  3. vim /etc/ldap/slapd.conf (optional)
    • uncomment:
      • rootdn "cn=admin,dc=example,dc=org,dc=au"
  4. Test installation
    • aptitude install ldap-utils
    • ldapsearch -H ldap://localhost -b "dc=example,dc=org,dc=au" -D "cn=admin,dc=example,dc=org,dc=au" -x -W
II. Migrate existing information(password,group) into LDAP
  1. aptitude install ldap-utils migrationtools
  2. pwconv; grpconv (optional, required if wants to enable shadow)
  3. vi /etc/migrationtools/migrate_common.ph
    • $DEFAULT_MAIL_DOMAIN = "example.org.au";
    • $DEFAULT_BASE = "dc=example,dc=org,dc=au";
    • $IGNORE_UID_BELOW = 1000; #(Uncomment to exclude Debian-managed system users)
    • $IGNORE_GID_BELOW = 100; #(Uncomment to exclude Debian-managed system groups)
  4. cd /usr/share/migrationtools/
  5. ./migrate_base.pl > /root/ldap/base.ldif
    • You will need to remove the top entries "dn: dc=org,dc=au" and "dn: dc=example,dc=org,dc=au" in /root/ldap/base.ldif since those top entries have been intialized when setting up the server.
  6. ./migrate_passwd.pl /etc/passwd /root/ldap/passwd.ldif
  7. ./migrate_passwd.pl /etc/group /root/ldap/group.ldif
  8. ldapadd -H ldap://localhost -D "cn=admin,dc=example,dc=org,dc=au" -x -W -f /root/ldap/base.ldif
  9. ldapadd -H ldap://localhost -D "cn=admin,dc=example,dc=org,dc=au" -x -W -f /root/ldap/passwd.ldif
  10. ldapadd -H ldap://localhost -D "cn=admin,dc=example,dc=org,dc=au" -x -W -f /root/ldap/group.ldif
III. Enable TLS (optional)
  1. Generate CA-signed SSL Certificate
  2. Modify /etc/ldap/slapd.conf
    • TLSCipherSuite HIGH:MEDIUM:+SSLv2:+SSLv3:RSA
    • TLSCACertificateFile /etc/ssl/certs/cacert.pem
    • TLSCertificateFile /etc/ssl/certs/server-cert.pem
    • TLSCertificateKeyFile /etc/ssl/certs/server-key.pem
    • TLSVerifyClient allow
  3. Modify /etc/default/slapd
    • To enable both StartTLS and ldaps://
      • SLAPD_SERVICES="ldap:/// ldaps:///"
    • To enable only StartTLS
      • SLAPD_SERVICES="ldap:///"
    • To enable only ldaps://
      • SLAPD_SERVICES="ldaps:///"
    • See also StartTLS vs. ldaps://
  4. Force to use TLS connection:
    • vim /etc/ldap/slapd.conf
      • security ssf=56 update_ssf=112
    • see also 1 and 2
  5. Restart ldap server
    • /etc/init.d/slapd restart
  6. Test installation:
    1. If ldaps:/// is enabled, you can use the following command to test:
      • openssl s_client -connect localhost:636 -showcerts
    2. On the ldap server itself, make sure ldap-utils installed (aptitude install ldap-utils)
      • vim /etc/ldap/ldap.conf
        • BASE dc=example, dc=org, dc=au
        • URI ldap://localhost
        • ssl on
        • ssl start_tls
        • TLS_CACERT /etc/ssl/certs/cacert.pem
        • TLS_REQCERT demand
      • ldapsearch -x -W -d 1 -ZZ -D "cn=admin,dc=example,dc=org,dc=au"
      • ldapsearch -H ldap://localhost -x -W -d 1 -ZZ -D "cn=admin,dc=example,dc=org,dc=au"
  7. More detail at http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html
  8. See also http://www.openldap.org/doc/admin24/tls.html
IV. DUAConfigProfile.schema Support (Optional)
  1. What is DUA? Directory User Agent.
  2. Download the DUAConfigProfile.schema
  3. Include the schema in slapd.conf
    • vim /etc/ldap/slapd.conf
      • include /etc/ldap/schema/DUAConfigProfile.schema
  4. Restart ldap server
    • /etc/init.d/slapd restart
V. Enable openldap server logging
  1. modify /etc/ldap/slapd.conf
    • change
      • loglevel 0
    • to
      • loglevel 256
    • more detail about loglevel
  2. modify /etc/syslog.conf
    • append
      • local4.* /var/log/ldap.log
  3. restart syslog daemon
    • killall -HUP syslogd
  4. trouble shooting

Adding Dynamic Contents to IFrames

http://bindzus.wordpress.com/2007/12/24/adding-dynamic-contents-to-iframes/

<html> 
    <head> 
       <title>Adding Dynamic Contents to IFrames</title> 
       <script type="text/javascript" src="IFrame.js"></script> 
       <script type="text/javascript"> 
          function onPageLoad() 
          { 
             var canvas = document.getElementById("canvas"); 
             var iframe = new IFrame(canvas); 
             var div = iframe.doc.createElement("div"); 
             div.style.width = "50px"; div.style.height = "50px"; 
             div.style.border = "solid 1px #000000"; 
             div.innerHTML = "Hello IFrame!"; 
             iframe.doc.body.appendChild(div); 
          } 
       </script> 
    </head> 
    <body onload="onPageLoad();"> 
       <div id="canvas" style="border: solid 1px #000000; height: 500px; width: 500px;"></div> 
    </body> 
</html> 

Java SPI: Service Provider Interface

 

David Gallardo on the Service Provider Interface

Ethan Nicholas: Creating a Service Provider Interface

http://java.sun.com/j2se/1.4.2/docs/api/javax/imageio/spi/ServiceRegistry.html

http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Provider%20Configuration%20File

FreeNX Setup on SuSE Linux Enterprise (SGI Altix 3000 Itanium 64bit)

 

I. FreeNX Server Setup

  1. Build NX Libraries
    1. Download NX sources
      1. Get all sources except nx-X11-compat.tar.gz from http://www.nomachine.com/sources.php
    2. Untar all sources, install all dependencies then do:
      1. $ cd nx-X11
      2. $ make World
      3. $ cd ..
      4. $ cd nxproxy
      5. $ ./configure && make
    3. Install the compiled libraries and binaries to /usr/local/freenx:
      1. $ NXPREFIX=/usr/local/freenx
      2. $ mkdir -p ${NXPREFIX}/lib ${NXPREFIX}/bin
      3. $ cp -a nx-X11/lib/X11/libX11.so* ${NXPREFIX}/lib
      4. $ cp -a nx-X11/lib/Xext/libXext.so* ${NXPREFIX}/lib
      5. $ cp -a nx-X11/lib/Xrender/libXrender.so* ${NXPREFIX}/lib
      6. $ cp -a nxcomp/libXcomp.so* ${NXPREFIX}/lib
      7. $ cp -a nxcompext/libXcompext.so* ${NXPREFIX}/lib
      8. $ cp -a nx-X11/programs/Xserver/nxagent ${NXPREFIX}/bin
      9. $ cp -a nxproxy/nxproxy ${NXPREFIX}/bin
    • *Note:* To compile those libraries, you need to have gtk-devel package installed.
  2. Build FreeNX Server
    1. Download FreeNX server source package:
      1. Download from: http://prdownload.berlios.de/freenx/freenx-server-0.7.3.tar.gz
    2. Compile FreeNX Server:
      1. $ cd freenx-
      2. $ patch -p0 < gentoo-nomachine.diff
      3. $ vi nxloadconfig
        • NX_DIR=/usr/local/freenx
        • PATH_BIN=$NX_DIR/bin
        • PATH_LIB=$NX_DIR/lib
      4. $ export DESTDIR=/usr/local/freenx
      5. $ make
      6. $ make install
      7. $ cp node.conf.sample $DESTDIR/etc/node.conf
    3. Xdialog is required. You need to download and build from source.
      1. Download http://xdialog.free.fr/Xdialog-2.3.1.tar.bz2
      2. Follow the instructions to build and install it.
    4. Setup nxserver
      1. $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freenx/lib
      2. $ export PATH=$PATH:/usr/local/freenx/bin
      3. $ nxsetup --install
    5. Fix sessreg
      1. $ vi /usr/local/freenx/etc/node.conf
        • COMMAND_SESSREG="/usr/X11R6/bin/sessreg"
    6. Set font path on the server (NOTE: This is an import step, otherwise the Mac OS NX Clients cannot display the fonts properly.)
      1. $ vi /usr/local/freenx/etc/node.conf
        • AGENT_EXTRA_OPTIONS_X="-nolisten tcp -fp /usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/75dpi/,/usr/X11R6/lib/X11/fonts/100dpi"
    7. Modify the display base:
      1. $ vi /usr/local/freenx/etc/node.conf
        • DISPLAY_BASE=1001
    8. See also:
      1. Install Free NX server
      2. Fonts and NX
II. FreeNX Server Administration
  • Note: You need to operate as root and you need to export the env variables: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freenx/lib; export PATH=$PATH:/usr/local/freenx/bin
  • See also:NX Server Admin Guide
  1. Server management
    1. To start server:
      1. $ nxserver start
    2. To stop server:
      1. $ nxserver stop
    3. To restart server:
      1. $ nxserver restart
  2. User management
    1. To add a user
      1. $ nxserver --adduser <user>
    2. To delete a user
      1. $ nxserver --deluser <user>
  3. Replacing the Default SSH Key-Pair with Keys Generated for Your Server: See section 4.4. of NX Server Admin Guide
III. FreeNX Client Setup
  1. Windows Client:
    1. Download from: http://www.nomachine.com/download-client-windows.php
  2. Mac OS X Client:
    1. Download from: http://www.nomachine.com/download-client-macosx.php
  3. Linux Client:
    1. Download from: http://www.nomachine.com/download-client-linux.php

影响世界的100部著作

[1] 《圣经》
它是了解西方文化的钥匙! 作为基督教的正式经典,其最重要的主题是人。
[2] 《古兰经》
伊斯兰教的经典。从对世俗的征服来看,它表现的威力比任何神迹都大。
[3] 牛顿《自然哲学的数学原理》
没有牛顿,就没有近代科学。牛顿第一次表明人可以像上帝那样洞察世界的奥妙,这种思想在思想史上是空前的。
[4] 达尔文《物种起源》
达尔文的伟大之处,就是在于在看来不变的事物中找到变化,在看来没有联系的事物中找到关系。
[5] 弗洛伊德《梦的解析》
梦是最一般的心理现象之一,也是各种迷信和预言的来源之一。弗洛伊德主要功绩在于理性地把梦作为一种对象来研究,并得出划时代的发现——潜意识。弗洛伊德指出,人并不是自己行为和精神的主宰,他在很大程度上受潜意识控制。
[6] 欧几里得《几何原本》
除了《圣经》以外,没有任何其他著作有这么多人阅读、学习和研究,正是《几何原本》把数学变成脱离实际的纯粹数学,并且对于近代科学有着不可替代的作用。
[7] 亚当·斯密《国富论》
用科学的方法对经济体制运行规律进行研究,斯密发现了任何时代、任何社会运行的主要矛盾——公平与效率。
[8] 马尔萨斯《人口原理》
两个世纪以来,马尔萨斯可以说被攻击得体无完肤。不过,即便他的每一句话、每个数据都是错的,其精神实质总是得到辉煌的证实。
[9] 卡逊《寂静的春天》
同《人口原理》一样,《寂静的春天》是人类对自己的生存状况提出严重警告的警世之作,在它出版四十多年之后,“环境”已经成为最流行的热门词条之一。
[10] 马克思,恩格斯《gcd宣言》
这是一部气势磅礴的作品,同时它又是具有深刻思想的理论著作,这两者的结合造成它的非凡的影响。它是“**主义的圣经”,真正影响了千百万人的思想和行动。
[11] 《论语》
代表中国文化的首屈一指的著作。其核心思想在于人和人之间有差别、不能平等,这也是两千五百年来中国文化的核心。许多古代文化消亡了,而中国文化却在变化中存续下来,这可能是孔子和他的《论语》的功劳。
[12] 孙武《孙子兵法》
它是中国也是世界上最早以及最有影响的军事理论著作,它同儒家思想共同塑造了中国传统文化,而这种思想完全深入到现代人的思想之中。《孙子兵法》提供的“计谋”形成中华民族两千五百年来斗争哲学的主导技术,但单纯技术观点并不能带来胜利,许多情况下还遭到失败。
[13] 拉瓦锡《化学原论》
人类面对的就是多样多彩的物质世界,化学就是关于多样性的科学,而且化学不单纯是“自然科学”,它还是人工科学。不少人低估了化学革命,也没有对拉瓦锡的功绩予以充分的肯定。
[14] 麦克斯韦《电磁通论》
麦克斯韦的电磁理论不仅在理论上是物理科学的重大突破和完美综合,而且从技术上产生出惊人结果。一方面通过电工学使整个文明社会电气化,使工业自动化成为可能;另一方面,通过电磁波的预言和发现,直接把人类引导到无线电世纪,而这构成了信息与传媒社会的必不可少的物质基础。
[15] M.韦伯《新教伦理与zb主义精神》
马克斯·韦伯是20世纪最伟大的社会科学家,从某种意义上讲可以与马克思相提并论。马克思侧重经济基础,而韦伯则强调意识形态,特别是宗教的作用。在一个片面强调竞争、优胜劣汰、尔虞我诈的社会中,理性的经济伦理——诚实、信任、责任、互惠是多么难以建立起来。而这就是韦伯的新教伦理学说的重要意义。
[16] J.S.穆勒《论自由》
“自由”是一个美丽的字眼,但不少人对它只是泛泛而谈,许多人批判它更是偷换概念、言不及义。穆勒的《论自由》是迄今为止论述社会自由最重要的著作,也是第一批介绍到中国的世界名著。遗憾的是,一百年后,一些中国人对此书的内容仍然茫然无知。 www.
[17] 孟德斯鸠《论法的精神》
法律是人类最古老、也是最普遍的建制之一。历史上的许多政治理想和社会大同的思想,最终只有通过法律才能落在实处。所以历代思想家对法律多有思考,但他们往往从某一角度出发,而带有一定的局限。本书是第一部系统的法学巨著,其核心在于法律至上和三权分立学说。这不仅在历史上有着重大作用,而且对今日仍有不可忽视的影响。
[18] 卢梭《社会契约论》
启蒙运动时期是一个思想大解放的时代,它与工业制度的结合是社会现代化的两个动力。卢梭是法国启蒙运动时期最有影响的思想家;但时至今日,人们对卢梭仍有许多误解,不是认为他的思想和其他人差不多,就是认为他十分激进。仔细研究一下他的思想,会发现他有许多独创之处。
[19] 希特勒《我的奋斗》
《我的奋斗》是一个非常好的反面教材。希特勒在书中反复明确宣传他的政治理想。概括起来就是:种族主义、大日耳曼民族主义、生存空间、第三帝国的理想国。这些思想在希特勒死后并没有消失,仍然在以各种形式延续着。
[20] 麦克卢汉《理解媒体》
我们生活在信息时代,可是很少人关注信息的传播;我们生活在媒体的包围之中,可是没什么人注意到它的影响。麦克卢汉是最早开始关心媒体对个人、对社会的改造的人,提出“媒体即消息”的论点。他开拓了一个无尽的前沿,但还有许多问题需要进一步挖掘。
[21] 柏拉图《共和国》
世界哲学归根溯源只有两种,其中之一是希腊哲学。了解希腊哲学,首先要谈柏拉图。柏拉图的伟大之处就在于他把哲学提高到一个新的境界:哲学不是那种空洞言词的游戏,也不是宗教和意识形态的教条。哲学要对一般概念和理论进行发挥和论证。
[22] 亚里士多德《工具论》
亚里士多德是许多学科的开创者。与柏拉图不同,他是学科的体系化者;后来许多哲学、科学体系的建立是以他的体系为模式来做的。《工具论》是亚里士多德的逻辑论文的汇编。逻辑和语言一样,平时感觉不到它有多重要,而只有在思想混乱一团时才感到其必不可少。逻辑是整理思想和知识的框架,没有它,理论和科学都无从产生。
[23] 薛定谔《生命是什么?》
20世纪生命科学最重要的事件是分子生物学的产生,分子生物学来自沃森和克里克的DNA双螺旋模型。而这两位科学家恰巧都受到薛定谔这本小册子的深刻影响,他们的成就,使其后五十年生物学完全改变面貌,而且还将在下一个五十年、一百年改变世界的面貌。这条路恰巧是一位连化学都不太懂的物理学家打通的。
[24] 维纳《控制论》
该书实际上预示了第二次世界大战以后一整套新学科的产生。控制论所包括的内容十分庞杂;20世纪晚期发展起来的一套理论,如非线性科学、浑沌理论、复杂性理论、人工生命、直接或间接的与控制论特别是维纳的思想有关。
[25] 威尔逊《社会生物学:新的综合》
正如威尔逊所说,社会生物学的主要目的,是建立一个普遍理论,使之能够依据群体的各种参数关系以及由物种遗传结构所产生的行为在受到制约的情况下,来预见社会组织的特征。显然,这在理论上是一个非常大胆的尝试。正如达尔文一样,只要把动物同人类联系起来,终将会受到挑战。
[26] 莎士比亚《哈姆雷特》
莎士比亚对人的本质的洞察上升到了哲学的高度。从古到今,人最感兴趣的问题还是人本身,人希望认识自己;而这恰巧是人本主义或人文主义的实质。但人是复杂的,这种认识也不是一蹴而就的,所以文艺作品为我们提供一个最佳的场所。
[27] 陀斯妥耶夫斯基《卡拉马佐夫兄弟们》
陀斯妥耶夫斯基在作家当中是最伟大的思想家。如果说,“文学是人学”,那他就是人类心灵最为深刻的探索者。或许,是人心的洞察者。俗话说“人心叵测”,这似乎有贬义,但人心的确难以用科学的方法、理性的方法来度量,而文学作品却可以弥补科学的不足。
[28] 孔德《实证哲学教程》
孔德的《实证哲学教程》可以看成是19世纪初思想状况的一个百科全书,从这里勾画出未来发展的蓝图。这本百科全书的大纲就是科学分类。学科的不断分化与专门化是一种不可遏制的趋势,只有科学分类才能告诉我们它们发展的逻辑线索和历史线索。
[29] 边沁《道德与立法原理引论》
边沁在国内不大为人所知,但不少人对他的“功利主义”应该有所耳闻。边沁的功利主义主要问题在于他过于强调个人幸福与公共幸福的一致性,而且事在人为,总可以使其一致。虽然边沁的每一种理想都遭到许多反对,但是在英国本土却渐进地得到贯彻,这也许是19世纪英国得到和平发展的原因所在。
[30] 《奥义书》
世界哲学归根溯源只有两种,其中之一是印度哲学。但印度哲学过于抽象、过于脱离现实和现世,它没能繁衍出健康的自然哲学和社会哲学,而只是停留在纯哲学的层面,更多的是塑造印度人乃至印度宗教的精神。《奥义书》是印度哲学的源泉。它首先从巫术、仪式中过渡到哲学性质的问题,并谋求其解答;它开辟了印度哲学的先河。
[31] 歌德《浮士德》
歌德用“古典的”形式创造一个崭新的,完全属于新时代的理想的人。在歌德的浮士德身上,最主要的是为求知识的无尽的探索精神,这个精神可称之为浮士德精神。正是这种精神成就了西方的科学昌明与文化鼎盛的时代。
[32] 塞万提斯《唐·吉诃德》
名著的伟大之处在于它有助于精神的提升,精神提升的关键在于人生意义的认同。唐·吉诃德和他的仆人桑丘以及书中的其他人物对每个读者来说都不陌生,一个人在他生活中,总会遇到类似的人物和情景。除了技术进步之外,你会发现现代的人性与塞万提斯描写的16世纪的人性与非人性何其相似乃尔。
[33] 凯恩斯《就业、利息和货币通论》
不管你相信不相信zb主义必将灭亡,20世纪没能灭亡恐怕得归功于凯恩斯,是他拯救了zb主义免遭灭顶之灾。战后经济学的理论框架也是他奠定的。
[34] 凡勃仑《有闲阶级论》
阶级的划分除了马克思的经典定义之外,一般使用比较随便,但划分的依据不外乎政治、经济与身份地位。但凡勃仑是一位另类的思想家,他把人按“闲暇”来分类,分成有闲阶级和无闲阶级。由于有闲阶级越来越成为现代生活中十分重要的因素,有必要对有闲阶级的地位和存在价值做一番探讨。
[35] 福柯《词与物》
很难用一句话概括这本书,实在要说,那就是“学科分类与演化的科学框架”。在学科肆意泛滥的今天,科学的分类实属当务之急。
[36] 罗尔斯《正义论》
罗尔斯的《正义论》于1971年出版。其中讨论的主题没有一样是新的,也就是说,这些都是启蒙运动时期的问题,但是,他却是在新的环境之下来考虑的。换句话说,这本书标志着道德哲学由现代到后现代的转变。
[37] 卡西尔《符号形式的哲学》
“人是什么?”——人们对哲学本来应该解决的最根本问题一直没有给出像样的答案。卡西尔解决这个问题的出发点与众不同,那就是“人是符号的动物”。这打开了一个新的通道。由于所有的文化的基础都是建立在人有形成概念的能力之上,这种能力使我们能够发明和使用人工记号和符号。卡西尔认为这些“符号形式” 正是哲学所应该集中研究的对象。
[38] 乔姆斯基《句法结构》
语言是21世纪最主要的研究对象之一。人的一生都在用语言同人打交道,也通过语言进行思考;但是围绕语言有许多老大难问题至今不能理解。1957年出版的《句法结构》引起一场语言学上的乔姆斯基革命;这是一场对整个语言理论的正本清源。它不仅在语言学界激起强烈反响,而且影响到许多周边领域,涉及许多基本问题。
[39] 冯·诺伊曼,摩根斯坦《对策论与经济行为》
冯·诺伊曼的工作从方法上标志着数理经济学的新时代。他的方法证明,现代数学的公理思想,抽象的概念对于实际问题一样有着巨大的应用价值。他的哲学观点预示着未来数学家的工作——数学家可以在极其广泛的领域中选择课题进行研究,无论是对策论还是与经济学的结合已经取得而且必将取得重大进展。
[40] 微耳和《细胞病理学》
现在的西医被称为“科学的”,归根结底,有赖于把疾病的原因建立在实证的基础上。而这正好是德国医学家微耳和的主要贡献。他是细胞病理学的缔造者。1858年他发表了《细胞病理学》,其中完整地阐述细胞学说,并声称“所有细胞来自细胞”。
[41] 汤因比《历史研究》
今天的新闻就是明天的历史,有识之士总要考虑当前与过去的关联,将来的发展趋势等等;而这就需要通过学习和研究历史,建立一种历史哲学或历史观。而史论就是为这些人打造航海罗盘的。汤因比的《历史研究》在众多的史论中占有十分重要的地位,因为它包含大量的理论概括及创新。
[42] 布罗代尔《15至18世纪的物质文明、经济与zb主义》
到了20世纪,史学界出现一次大的革命,那就是“年鉴学派”的兴起。年鉴学派反对把历史局限于政治史范围之内,主张研究历史的全貌。布罗代尔就是年鉴学派第二代的代表人物,由于他的工作,年鉴学派在二战后占主流地位,其影响也从法国扩大到全球。
[43] 罗素《自由与组织》
在18世纪末,可以说所有国家都在同一起跑线上,却因为各种原因产生了如今如此惊人的差距。过去的历史哲学也许能指明历史发展的方向和动力,但无法预测历史发展的速度。而19~20世纪与以往历史的不同之处正好在于速度的变化。罗素的高明之处就在于他能指出引向这种变化的因素。
[44] 霍布斯鲍姆《极端的年代》
在整个历史长河中,20世纪究竟是继往开来走向进步走向辉煌的时代,还是一个无足轻重的一个小插曲,现在下结论还为时过早。但作为一个极端的时代,肯定会遗留下相当多的后遗症,值得我们反思。
[45] 亨廷顿《文明的冲突与世界秩序的重建》
在21世纪,各种文明的命运是我们首先要关心的问题。本书就是在历史转折关头反思的结果。亨廷顿害怕伊斯兰文明与儒教文明联手打败基督教文明,但是前两者是不可能结合的,这点上他的判断显然有误。然而文明的冲突是否能造成新一轮的“西方的没落”,却不是没有可能。
[46] 加缪《鼠疫》
从古到今,人类不断面对各种灾难,但他们很少能够对灾难有所准备。这本讲人类如何面对灾难的书创作于希特勒时代,许多人感到无望。在这关键时刻,加缪看到面对灾难的惟一正确态度,就是不要听从命运的摆布,也不要听从权威与利益集团的煽动。
[47] 劳伦斯《查泰莱夫人的情人》
这是一本“禁书”,也许是最著名的、名副其实的禁书。尽管它因“性”被禁,却并不等于说它的题材只是性。在书中,劳伦斯不仅要求一个人真正“性”的解放,更要求从工业文明、传统文化以及精神束缚中解放出来,成为“解放的人”。这些才是劳伦斯思想的深义。
[48] 尼采《查拉图斯特拉如是说》
19世纪两位大思想家对20世纪有着持续的影响:一位是马克思,一位是尼采。这本书是尼采著作的顶峰。它包括尼采过去的一切思想,这些思想用两个新的概念,即超人和永远轮回来加以贯穿。
[49] 波普尔《科学发现的逻辑》
波普尔的《科学发现的逻辑》是科学哲学的一次革命。波普尔说:“经验科学就是理论体系,我们可以把认识逻辑称做理论的理论。”“科学的理论就是普遍的命题。”按照他的学说,科学理论“不是由观察开始,而是由问题开始”。波普尔的整个科学理论的出发点是划界问题,也就是找出一个判据来区别科学与“伪科学 ”的界限。
[50] 托夫勒《第三次浪潮》
人们对未来有所企盼,但同时又对未来充满恐惧;在一个变化剧烈的世界中有着大量的不确定性,人们希望驾驭它。到20世纪后半,未来学应运而生。对未来学家的评价首先在于对还没有发生的事或仅仅处于萌芽状态的东西能否做出比较准确的预测。托夫勒做到了这点。他的这本书在1980年出版,而20世纪后二十年正是按照这个蓝图来实现的。
[51] 波伏瓦《第二性》
女性占人类的一半,但研究与思考女性问题的著作却少得可怜;英译本《第二性》1953年出版后立即成为畅销书。尽管时隔半个多世纪,女性主义和谈论女性的书出版无数,但是没有一本书像这本书一样,使人感受到如此浓郁的学者气息。
[52] 纪德《伪币制造者》
在大众文化如此昌盛的今天,纪德的书不会出现在休闲读者之中。但是,文化也是两极分化的,在高雅文化发展而且存在发展土壤的地方,纪德不会消失,相反,会维持着他那至高无上的地位。他的作品很观念化。在本书中,他试图成为真的人,但什么是真的?
[53] 萨义德《知识分子的代表》
尽管关于知识分子的理论著作难以产生,但我们还是选择了萨义德的这本书。因为我们也许可以从思想自由和知识分子看到文明的未来。在书中,萨义德提出的问题令人深思,1987年贾可比的《最后的知识分子》出版,以后是否还有知识分子?
[54] 莫诺《偶然与必然》
生命科学存在着许多谜!至今我们还对生物体的精巧别致莫名其妙,我们还不知人是不是一台机器,也不知生物进化是不是一个必然的过程,也不知道生死界究竟在何处?而这本书阐述就是法国生物学家莫诺对生物进化的哲学思考。
[55] 萧伯纳《人与超人》
萧伯纳是仅次于莎士比亚的英国(爱尔兰)剧作家,在世界戏剧史上大致也处于同等地位。他的大部分剧本可以称之为“思想剧”,而其中顶尖之作可以说是《人与超人》,该剧真正表现了萧伯纳自己特有的哲学——生命力哲学。
[56] 西蒙《人工物的科学》
近二百年实验科学的发展给我们带来一个人工的世界;而制造人工物就是发明、仿造、改进、组合直至本书所说的设计。尽管现在设计科学已成为一个专业领域,但未来需要的恰巧是西蒙这样的博家而不是狭窄领域的专家。只有他们才能设计出未来人工物的世界。
[57] 泰勒《原始文化》
“文化”一词在媒体上的运用真是泛滥成灾,可是没什么人对它哪怕有最粗略的界定;是泰勒给他的研究对象“文化”以一个比较确切的定义,他的《原始文化》被公认为文化人类学的奠基之作。表面上看,它是纯学理的研究;然而,自然语言与原始思维对于21世纪人工智能的探讨有着重要意义。
[58] 怀特海《科学与近代世界》
数学在近代科学产生与发展中有着不可替代的重要作用。许多人也知道,也说,但并不理解。其实,欧洲人领先也就三百年,可为什么老跟不上呢?中国怎么拿个诺贝尔这么困难?这可以说是“新李约瑟疑难”。其实,照怀特海那样研究一下这三百年的历史,就会有八九不离十的答案。
[59] 格劳秀斯《战争与和平法》
格劳秀斯的伟大著作已经问世将近四百年了。今天战争与和平仍是世界的头号问题。格劳秀斯已经考虑到对于战犯、损害和战费不加追究以换取有保障的和平。遗憾的是,人们似乎并没有从历史中学会足够的智慧,来处理战争的后果。
[60] 埃柯《玫瑰的名字》
随着技术的进步,过去靠指纹破不了的案今天可用DNA破案了;但是,心灵的事情就说不准了。符号表达是极为复杂的一件事,符号技术远没有基因鉴定那么方便。但是,符号学会给我们带来一个全新的,难以想像的世界。埃柯的小说神奇之处就在于此。
[61] 笛卡尔《方法谈》
什么是科学精神,到现在仍然是众说纷纭。但是,科学精神一定会导致科学发展,其起点必定是求知的欲望。笛卡尔在《方法谈》一书中一开始就讲述他从学校出来后的二十年的探索过程,而且在探索过程中开创出自己独特的理论与方法。这就是笛卡尔哲学体系,其核心是认识论。正是笛卡尔把哲学扭转到了正确的方向。
[62] 培根《论学术的进展》
四百年来,尽管人们早已享受近现代科学所带来的种种福利,然而人们的头脑不一定比古时更少教条、偏见、迷信以及愚昧和疯狂的古怪思想。而培根的伟大贡献正在于列举了四种使人陷于这类错误的“偶象”(idol)或幻象。
[63] 《毛主席语录》
毛泽东是位历史大人物,他极大地影响了中国历史的进程。不妨把毛泽东的一生分为三个时期。而《毛主席语录》出版于第三时期的正中间,包含了后期(从1949年到1963年)的部分内容,但极为重要的后期思想(1963年到1976年)则没有反映出来,这是全面、准确掌握毛泽东思想不可不注意的事。
[64] 奥威尔《1984年》
在20世纪反乌托邦、反集权主义的作品中,谁又能比奥威尔写得更好呢?在他那里,既有卡夫卡的个人处境,又有A.赫胥黎的科技统治,同时还有柯斯特勒的现实主义。《1984年》是一个警世之作,就像马尔萨斯和卡逊的著作一样。
[65] 卡夫卡《审判》
卡夫卡的不朽在于他提出的问题远比他解答的多得多。在《城堡》中他谈到“提问题是主要的”。实际上这就是科学与人生的真谛。思想来源于对问题的探索,探索过程也许比拾取现成答案更有意义。
[66] C.P.斯诺《两种文化》
斯诺两种文化的论点很简单:科学家应该读过莎士比亚,而文学家应该懂得热力学第二定律讲什么。不幸的是,这种情况越来越难以实现了。到了21世纪初,除了高喊“科学与人文相结合”的口号之外,什么也没有了,一维的人降为零维的人。然而沿着本书界定的思想史的轨迹走下去,是可能升维,升到三维四维,甚至成为“超人”的。
[67] 帕斯卡《思想录》
世界上的问题,特别是人的问题,不确定性或者偶然性是经常起作用的因素。实际上,帕斯卡尔以概率的方法对于决定论的世界观提出挑战,不管这种决定论是上帝的决定论还是科学的决定论。这种方法到20世纪发展成为一套随机的决策理论。
[68] 哈耶克《通往奴役之路》
哈耶克以经济学家知名,还荣获1974年诺贝尔经济学奖,但是,他的政治哲学更有创见,更有影响。哈耶克的思想总有点不合时宜,但从长期来看又显得十分深刻。他是位彻头彻尾的自由主义者。他的真知灼见不能因意识形态的关系而被我们舍弃。
[69] 列夫·托尔斯泰《战争与和平》
托尔斯泰无疑是有史以来最伟大的作家之一。作为大文豪,他的作品足以为他争取到不朽的地位,但作为一个伟大的人,他并不满足。他生命最后三十年就是在对人生的一些基本问题的思考中度过的。我们选《战争与和平》,是因为从中可直接看到他的历史思想。历史虽已过去,但无法用刀斧砍去,它依然影响我们的现在,也影响我们的未来。
[70] 鲁迅《阿Q正传》
要在中国作家中选出一位思想家可不容易,特立独行不是中国人的精神。稍稍离经叛道,不是棒杀,默杀,就是捧杀。无疑,每一套杀法,鲁迅都经过,只是什么时候干什么,随时代的潮涨潮落决定。但是,近百年来中国首屈一指的作家还是鲁迅,而《阿Q正传》是其代表作。
[71] 本尼迪克特《菊与刀》
进入21世纪,世界上有五个经济大国,而日本是惟一入围的东方国家,也是最快达到这一步的国家。本书完成于二战刚刚结束时,作者对日本的民族性做了很好的概括。时隔五六十年,书中的观点基本上没过时。我们可以把这点称之为“民族性”的稳定性。无疑,日本过去是、将来也会是一个有影响的民族。
[72] 加西亚·马尔科斯《百年孤独》
对大多数人来说,拉丁美洲仍是个神秘的地区。马尔科斯在这本书中用马孔多来凝缩整个哥伦比亚乃至整个拉丁美洲的命运。愚昧闭塞和混乱是百年不变的内因,而美国佬、autarchy者则是外因。那么“孤独”又是什么意思,作者说“孤独的反义词是团结”,他暗示了出路,但结论令人沮丧:经历了百年,又回到原位,这似乎就是拉丁美洲的命运。
[73] 康拉德《黑暗的心》
非洲大陆是地理概念,我们所知甚少的那部分通称撒哈拉以南的非洲,此书说的就是这块地方。黑暗的心有两种含义,一是黑非洲的心脏地带,当时的比属刚果;一是文明人即殖民者来到之后,从外到里进行掠夺,并从精神上进行腐蚀的罪恶行径。黑非洲不是倒退,就是仍然停滞在那里。人口不断地增长,永远伴随饥荒与贫困,其前景令人忧虑。
[74] 冯特《民族心理学》
长期以来,对心灵的研究一直是哲学甚至神学的领地,至今心理学是否是科学仍有很多争议。冯特的主要贡献就在于倡导用科学方法研究心理。1879年,他在莱比锡建立世界第一个心理学实验室,这标志着实验心理学正式诞生,也标志着作为科学的心理学的产生。
[75] 李约瑟《中国的科学与文明》
李约瑟的《中国的科学与文明》卷帙浩繁,至今仍然没能结束。他花了毕生精力研究中国古代科学与技术,最后留下了著名的李约瑟疑难:为什么如此先进的古代“科技”,没能产生近代科学?
[76] 托马斯·阿奎那《神学大全》
《圣经》中存在大量前后矛盾、不可思议甚至荒谬的地方,这些早在基督教初创时就有人意识到了。但其中许多人采取“信仰主义”态度,“正因为其不可信才信”。而托马斯·阿奎那第一次寻求对基督教第一信条即“上帝的存在性和惟一性”以证明。这不仅使神学带有数学的风味,还由此推出一系列命题并构成精微的神学体系。
[77] 卡莱尔《英雄与英雄崇拜》
这本书的种种观点有许多人支持,更遭到很多批判。但正如卡莱尔所说“只要人类存在一天,英雄崇拜就永远不会消亡”。究竟“时势造英雄”还是“英雄造时势”不是简单用“是”和“否”能回答的问题。随着现代社会的多元化,更提出了“英雄如何从各界脱颖而出”的问题。
[78] 《阿含经》
佛教是最古老的世界宗教。佛教没有把人的崇拜集中起来的神,更没有一本大家都认同的经典。《阿含经》是最为接近原始佛教的经典,而其中包括上百部经。
[79] 蒙田《随笔集》
一个国家即使有诗、戏剧以及后来的小说,如果没有像样的精美散文,就称不上文学大国。蒙田开创的随笔为散文开拓了最高级的文学形式,而且以其直截了当、言之有物、极富启发性而为它树立了标准和榜样。
[80] 哈代《无名的裘德》
哈代作品的悲剧性震撼人心。这是一种真正的人性的悲剧。人希望精神的上升,但并非所有人都有这个机会,有机会的人未必真正有学识和创见,他们劝裘德安分守己、乐天知命,难道这应该是未来人的哲学吗?
[81] 列宁《国家与革命》
《国家与革命》系统考察和阐明了马克思和恩格斯在国家问题上的基本理论,列宁由此大大发展了mks主义理论,并且通过自己的革命实践建立了第一个无产阶级专政的国家。
[82] 老聃《道德经》
它是世界上影响很大但篇幅最短的书。总的说来,《老子》与《论语》几乎完全不同而且相互补充构成中国传统文化。孔子一直是中国文化的在朝派,而老子则是在野派。老子乃至道家学说最有意义的地方在于给孔子的“理想国”开辟一个精神逃脱的小路。
[83] 笛福《鲁滨逊飘流记》
从某些文化看来,征服自然以及诸如此类的自我挑战是不可理喻的傻事。而这些傻事的背后,有的却是一种可贵的精神力量,在困境中通过艰苦劳动生活下去的意志以及战胜灾难、孤独的勇气。虽然,“人定胜天”之类的话,现在看来是不对的,但是,现代人还是应该以鲁滨逊的精神来保护人类生存环境并且战胜自我的。
[84] 叔本华《作为意志和表象的世界》
真正伟大的思想总是要经受时间的考验。批判叔本华的人很多,但批判他最厉害的卢卡奇也不得不承认他的哲学才能。叔本华的原创思想很多,其基础是两大理论:惟意志论和悲观主义。前者建立以意志为核心的形而上学,从而开辟了近两个世纪的非理性思潮。
[85] 杜威《democracy主义与教育》
西方哲学几乎全部来自欧洲,只有实用主义哲学是美国土生土长的。实用主义哲学是一个十分灵活、密切联系实际的哲学,它的精神完全反映在教育学当中,更重要的是,教育这个话题将是21世纪的最主要的争论问题之一,而杜威的思想以及后来进步教育的实践对于后来人肯定有借鉴意义。
[86] 贝克尔《人力资本》
除了人口、环境问题之外,21世纪最大的问题是健康、教育以及相关的人与社会的发展。通常人们总强调人与人,国与国之间的物质差距;其实,从长远看,精神文化差距才是最大的。而贝克尔的核心思想在于这也需要投资!他还指出除了个人收益之外,也要考虑社会收益,而这也是未来需要深入研究的课题。
[87] 熊彼得《经济发展理论》
熊彼得明确区别发明与创新是他的独特之处。从亚当·斯密到马克思都知道技术发明对经济的重大推动,但熊彼得式的创新完全是“企业家”的事。熊彼得这种观点不仅为过去许多技术进步导致创新从而推动经济高涨的事例所证明,更明显地表现在2000年,高涨的信息经济突然“泡沫破裂”。
[88] 博尔赫斯《文集》
博尔赫斯有一个与众不同的特点,那就是他可能读过成千上万的作家和作品。他的作品把二千五百年的世界文明精华纳入其中。这也许正是“古典”的真谛。生命太短了,你怎么能读那么多,体会那么深。那么读博尔赫斯吧,他能帮你。
[89] 斯特伦奇《国家与市场》
20世纪末到21世纪初,全球化的趋势势不可挡。虽说国际关系、国际事务、国际政治、国际经济学早已成为研究的领域;但是,只有本书给出系统的总结,同时制定了一个研究和分析的框架,而这正是今后理论和实践工作的起点。
[90] 狄更斯《双城记》
它叙述了法国大革命那个翻天覆地的时代,其中展示了残酷的阶级斗争。狄更斯再次以悲天悯人的精神,为世界编织出一个善良的人替友赴死的故事。但是,他无法解释历史之谜:这一切究竟为什么发生?
[91] 尼赫鲁《印度的发现》
印度同中国一样也是现在世界四大文化之一,但我们对印度却知之甚少。话说回来,要想了解一个民族,最好的办法是了解其历史。尽管印度的历史支离破碎,缺环甚多;但《印度的发现》就是了解印度历史的最好的入门书。
[92] 库恩《科学革命的结构》
库恩对科学哲学的贡献主要是提出了“范式”概念以及常规科学与科学革命的划分。他成为科学哲学中历史学派的开创者。受他的理论影响的主要是社会科学和人文科学领域的学者,这些学者急于要把自己的专业纳入一般科学的框架之中,而这种混合确实起着一定的作用。
[93] 罗斯托《经济增长的阶段》
罗斯托的理论核心就是所有国家的经济发展都要经历五个阶段。但由于他的理论是建立在从1800年到1950年这个阶段的经济基础上,因此在应对后工业社会的情况时有着明显的不足。人口、贫困、发展、失业仍然是21世纪经济的大问题。从传统经济到现代化再到全球化仍有漫长的道路要走。罗斯托的研究只不过为增长与发展经济学的研究开了一个头。
[94] 法约尔《工业管理与一般管理》
到20世纪初,管理进入科学管理阶段。法约尔对管理给出一个框架,开创了组织研究领域,拓广了科学管理原理所涉及的领域,为现代组织理论打下一个基础。他把组织比做有机体,对后来人是有启发意义的。正因为如此,他的理论不断得到批判、补充和发展。
[95] 马尔库塞《一维的人》
20世纪60年代中期,西方发达国家爆发了震惊世界的学生运动,而被激进的学生们奉为精神导师的是3M:马克思、毛泽东和马尔库塞。二战以后西方国家的新变化,促使他们对马克思主义重新进行反思。《一维的人》正是马尔库塞在这方面成熟思考的产物。
[96] 维科《新科学》
维科是18世纪到19世纪的浪漫主义思潮的先驱。由于当时的主流趋势是应用自然科学方法去研究一切现象,特别是心理的、政治的、经济的、文化的;但是维科第一个明确区分开自然科学与人文研究,并认识到文化的多元性,这为比较文化人类学,比较历史语言学,比较历史美学,比较历史法理学等奠定基础。
[97] 伏尔泰《老实人或乐观主义》
伏尔泰是启蒙运动的旗手。他的著作太多了,很难讲哪一个是他的代表作。不过有一类作品适合我们的需要,那就是哲理小说。似乎没什么其他作家写过这类作品。《老实人》的哲理相当简单,但在任何时代都碰到:不管是自然灾祸还是人为苦难,都和上帝无关。人们只有通过理智和正义,努力与邪恶势力斗争,世界才能逐渐变得更为美好。
[98] 卡内蒂《群众与权力》
卡内蒂的《群众与权力》是他一生体验与不断探索与思考的结果。全书以科学的精神研究了四大主题:群众、权力、死亡、转变,而且把它们紧密地联系在一起。在历史上的确对群众心理学有过一些探讨,不过还没有什么理论研究。卡内提的独到之处在于把权力与死亡联系在一起。他说:“幸存之际就是权力在握之际。 ”
[99] 马斯洛《动机与人格》
时至今日,心理学已经成为极为庞杂的学科体系。在20世纪中期,两个最大的学术派则是弗洛伊德的精神分析以及强调科学方法的行为主义学派。而马斯洛倡导了心理学研究的第三思潮,即人本主义心理学。这一思潮强调人有独立人格,有发展自身的潜能,能够自我实现。“自我实现”这个概念就是马斯洛提出并且大大加以发挥的。
[100] 曹雪芹《红楼梦》
《红楼梦》在中国影响极大,在世界上却影响很小。这种反差说明什么呢?《红楼梦》彻头彻尾的“中国味”。而这种中国味也许可以从中国诗词、中国书画、中国园林,甚至中国戏曲中体会一二,但《红楼梦》却是全方位的。它是中国(传统)社会的缩影。

How to avoid java.util.ConcurrentModificationException

The following code may cause java.util.ConcurrentModificationException:
for(Iterator it = list.iterator();it.hasNext();){
String member = (String)it.next();
if(member.equals("delete")){
list.remove(member);
break;
}
}
To work around:
String memberToDelete = null;
for(Iterator it = list.iterator();it.hasNext();){
String member = (String)it.next();
if(member.equals("delete")){
memberToDelete = member;
break;
}
}
if(memberToDelete!=null){
list.remove(memberToDelete);
}
 
See http://java.sun.com/j2se/1.5.0/docs/api/java/util/ConcurrentModificationException.html

Google Web Toolkit 1.6 on Linux (Ubuntu 8.0.4) failed to compile and run. How to work around?

I am trying GWT 1.6 for Linux on my Ubuntu 8.0.4. It was using SUN JDK 6. However, GWT failed to compile and run the application:

#
# An unexpected error has been detected by Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0625665c, pid=15353, tid=2418424720
#
# Java VM: Java HotSpot(TM) Server VM (10.0-b23 mixed mode linux-x86)
# Problematic frame:
# V [libjvm.so+0x25665c]
#
# An error report file with more information is saved as:
# /mnt/stor/development/workspace/ownproject/WebShopModule/war/hs_err_pid15353.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#


http://code.google.com/p/google-web-toolkit/issues/detail?id=3382



To work around this problem, I had to change to openjdk 6:


sudo aptitude install openjdk-6-jdk
sudo update-java-alternatives -s java-6-openjdk



In eclipse, Window -> Preferences -> Java -> Installed JREs -> add ..., then select /usr/lib/jvm/java-6-openjdk

Disable “unaligned access to …” message when running java on Itanium 64

Installed Java 6 on Itanium 64 Altix 3000 system. But it gives

java(84473): unaligned access to 0x2000000001aee211, ip=0x2000000001cb9ef0
java(84473): unaligned access to 0x2000000001aee219, ip=0x2000000001cb9ef1
java(84473): unaligned access to 0x2000000001aee211, ip=0x2000000001cb9ef0
java(84473): unaligned access to 0x2000000001aee219, ip=0x2000000001cb9ef1
java(84473): unaligned access to 0x2000000001aee211, ip=0x2000000001cb9ef0

when running a java application.

You can actually disable the messages:



Prepend


prctl --unaligned=silent 



to java command line will disable the messages.


See also: http://java.sun.com/javase/6/webnotes/Itanium6u11.html