ConTeXt 学习路线图
去年就决定一定要用 TeX 系统来编排我的毕设论文, 经过长期的资料收集整理和学习, 发现入门 TeX 没有想象中的那么复杂, 传说中原生支持 Unicode 的 ConTeXt 已经可以使用, 接下来只要掌握入门的知识, 然后参考 ConTeXt Wiki 上的 References 就可以顺畅的写文档啦.
路线图大概是这样:
- 序幕有点长 —— 了解 TeX 的历史
- 这就是 ConTeXt Minimals —— 安装最小化的 ConTeXt 环境
- 不仅仅为了中文、zhfonts 模块的用法 —— 实现中文字体以及中文标点的处理优化
- ConTeXt an Excursion —— 官方入门文档, 读完就能对 ConTeXt 系统有一个全面的了解
- ConTeXt 学习笔记 By Li Yanrui —— 与第四条参照着看,有助于理解和扩展
- ConTeXt Wiki Reference —— 官方 Wiki 的命令 Refrences
杭州天气的抓取(续)
自从上次搞定了那个 IE Only 的杭州气象网的整点天气数据后, 在 @xufan6 的协助下搞定了 RRD 的更新和图片的输出, 跑在家里的服务器上. 但是家里服务器略不稳定, 断网断电不可避免, 于是用 PHP 又把这个功能给实现了一遍, 放到了 SAE 上, 顺便也抓了湿度, 可见度, 气压数据, 实现了 JSON 的输出, 已期望二次利用, 但因为在忙毕设, 没有花心思做这个, 所以现在只有输出最近24小时的信息.
SAE 网址在这: 杭州"实时"气象数据
接着 @xufan6 帮忙搞了 RSS 输出,用 Feedburner 抓取后更新到 @hzqxsk 上,配合已有的 @hztqyb 一起参考,对杭州的出行和衣着还是有点帮助的
丑陋的抓取杭州气象网的整点天气
很丑的实现了在屎一样的杭州气象网上抓取正点温度数据的命令..坐等 @xufan6 用这个收集数据, 然后把这些历史数据做成图片来看看杭州的气象趋势. 下面就直接给出命令, 欢迎直接粘贴尝试
<code>
curl "http://www.hzqx.com/gzhfw/qxsk.asp" -s | iconv -f gb2312 -t utf-8 -c | sed -e 's/ //g' -e 's/;//g' | grep -oP 'line_1.*line_2' | sed -e 's/v:line title=/\n/g' | perl -ne 'print "$1,$2,$3,$4\n" if /时间:(\d{1,2})时[#&\w&\d]*?温度:([\d.]*?)℃(?:[#&\w&\d]*?最低温度:([\d.]*?)℃)?(?:[#&\w&\d]*?最高温度:([\d.]*?)℃)?/'
</code>
打出的内容分别是: 时间,温度,最低温度,最高温度
后两项如果没有的话就留空
Gentoo使用LDAP整合linux登陆
- LDAP的初步介绍请看: l-penguin的LDAP入门 && LDAP – 整合 Linux user login
- Gentoo的LDAP重要参考: Gentoo Guide to OpenLDAP Authentication
- LDAP Authentication In Linux
- LDAP目录树的缺省结构: 缺省目录信息树 (Directory Information Tree, DIT)
简略步骤
-
安装 openLDAP && nss_ldap && pam_ldap 组件
emerge openldap nss_ldap pam_ldap
-
配置 slapd.conf
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/openldap.schema pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args modulepath /usr/lib64/openldap/openldap # userPassword 属性仅供验证, 不可显示 access to attrs=userPassword by dn="uid=crhan,ou=SA,ou=Tech,ou=People,dc=myzjut,dc=org" write by anonymous auth by self write by * none access to * by self write by users read by anonymous read access to dn.base="" by * read access to dn.base="cn=Subschema" by * read database hdb suffix "dc=myzjut,dc=org" checkpoint 32 30 rootdn "cn=Manager,dc=myzjut,dc=org" rootpw secret directory /opt/openldap-data index objectClass eq index cn,uid eq index uidNumber eq index gidNumber eq -
passwd: files ldap shadow: files ldap group: files ldap
-
base dc=myzjut,dc=org uri ldap://ldap.yx.zjut.in ldap_version 3 scope sub bind_timelimit 2 bind_policy soft pam_filter objectclass=posixAccount pam_login_attribute uid pam_member_attribute memberUid # 默认密码的加密方式 (passwd修改密码相关) pam_password exop nss_base_passwd ou=People,dc=myzjut,dc=org?sub nss_base_shadow ou=People,dc=myzjut,dc=org?sub nss_base_group ou=Group,dc=myzjut,dc=org?sub
-
加入 pam_ldap 验证模块到
/etc/pam.d/system-authauth required pam_env.so auth sufficient pam_unix.so try_first_pass likeauth nullok auth sufficient pam_ldap.so use_first_pass auth required pam_deny.so account sufficient pam_unix.so account sufficient pam_ldap.so password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow password sufficient pam_ldap.so use_first_pass password required pam_deny.so session required pam_limits.so session required pam_env.so session required pam_unix.so session optional pam_ldap.so
-
搞定
添加 LDAP 用户
ldapadd -x -D 'cn=Manager,dc=myzjut,dc=org' -w secret -f init.ldif
使用以下 init.ldif 文件添加用户
dn: dc=myzjut,dc=org objectClass: dcObject objectClass: organization o: MyZJUT dc: myzjut dn: cn=Manager,dc=myzjut,dc=org objectClass: organizationalRole cn: Manager dn: ou=People,dc=myzjut,dc=org ou: People objectClass: top objectClass: organizationalUnit dn: ou=Tech,ou=People,dc=myzjut,dc=org ou: 技术部 ou: Tech objectClass: top objectClass: organizationalUnit dn: ou=SA,ou=Tech,ou=People,dc=myzjut,dc=org ou: 服务器管理 ou: SA objectClass: top objectClass: organizationalUnit dn: ou=Dev,ou=Tech,ou=People,dc=myzjut,dc=org ou: 后台开发 ou: Dev objectClass: top objectClass: organizationalUnit dn: cn=test test.local,ou=SA,ou=Tech,ou=People,dc=myzjut,dc=org givenName: test sn: test.local cn: test test.local uid: test_ldap uidNumber: 5000 gidNumber: 600 homeDirectory: /home/users/ttest.local objectClass: inetOrgPerson objectClass: posixAccount objectClass: top loginShell: /bin/bash userPassword: 123123 dn: ou=Group,dc=myzjut,dc=org ou: Group objectClass: organizationalUnit objectClass: top dn: cn=SA,ou=Group,dc=myzjut,dc=org cn: SA objectClass: posixGroup objectClass: top gidNumber: 600 memberUid: ttest.local description: group for SA from myZjut dn: ou=Hosts,dc=myzjut,dc=org ou: Hosts objectClass: organizationalUnit objectClass: top
验证
-
名称服务, 若完全按照上面的步骤, 输入下面的命令, 应该都有输出
# getent passwd | grep test_ldap # getent group | grep SA
-
修改密码, 使用
passwd修改密码时显示LDAP字样# passwd test_ldap Enter login(LDAP) password:
恭喜成功
Lion 自动读写挂载 ntfs 分区
使用ntfs-3g替换macX原生的ntfs自动挂载程序, 实现macX自动挂载读写的ntfs分区, Lion测试可行.
需要以下准备:
- Xcode(软件中心下载)
- HomeBrew || MacPorts(未验证)
- 熟悉的文本编辑器一枚(我用macVim, 也可用HomeBrew安装)
- 终端一只(spotlight 搜索Terminal即可)
步骤
第一步 安装 HomeBrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
第二步 安装 ntfs-3g
搭建Girocco (git hosting solution from from repo.or.cz)
起因
由于学校社团的开发团队开始慢慢扩张, 为了避免自己被开发没日没夜的代码提交等问题困扰, 所以决定找一个好用一点的版本控制软件和代码托管的网站. 因为涉及的都是内部的代码, 再加上教育网到国外代码托管网站的速度太慢, 所以寻找部署一个开源解决方案就变的异常重要. 因为在 dvcs 里面我只会 git , 所以就选择了 git 作为了我们的版本控制软件. 最开始选择的Git代码托管方案是 Gitolite , 因为所有的权限控制都需要修改特殊版本库 ‘gitolite-admin’ , 所以第一次给所有人开设账号变得 非常麻烦 ( 比如先要普及关于公私钥对的知识等等 ). 在使用了一段时间之后, 还遇到了如下问题:
- 用户随意建立的版本库无法自行删除 ( 似乎使用gitolite-adc可以解决,但是尚未尝试 )
- 用户需要更新公钥时候必须麻烦管理员进行操作
- gitweb界面不够美观
所以尝试寻找一些新的解决方案, 在 stackoverflow的帖子 里面选择了看起来最简单的 Girocco 进行尝试.
Girocco 是 repo.or.cz 采用的代码托管方案, 简单易用. Girocco 的 介绍页面在此 . 在介绍中,他把自己与 Gitorious , Github , Gitosis & Gitolite 进行了对比, 称 Gitolite 和 Gitosis 根本不能算是一种 hosting solution, Gitorious 又不能体现 gitweb 的简约美, 而 Github 不开源.
经过
Set up Time Machine Server on Gentoo for Lion
重点参考来源: http://www.kremalicious.com/2008/06/ubuntu-as-mac-file-server-and-time-machine-volume/
Set up server on gentoo
# macOX 10.7 need netatalk-2.2.0 or above echo 'net-fs/netatalk ~amd64' >> /etc/portage/package.keywords emerge netatalk avahi # Make folder `/opt/TimeMachie' a shared volumn to your mac. # Option `tm' is important, which means this volumn is used by timemachine echo '/opt/TimeMachine TimeMachine cnidscheme:dbd options:tm' >> /etc/netatalk/AppleVolumes.default echo '- -tcp -noddp -uamlist uams_dhx.so,uams_dhx2.so -nosavepassword' >> /etc/netatalk/afpd.conf cat << EOF >/etc/avahi/services/afpd.service <!--?xml version="1.0" standalone='no'?--><!--*-nxml-*--> <?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <!-- Customize this to get a different name for your server in the Finder. --> <name replace-wildcards="yes">%h</name> <service> <type>_device-info._tcp</type> <port>0</port> <!-- Customize this to get a different icon in the Finder. --> <txt-record>model=Xserver</txt-record> </service> <service> <type>_afpovertcp._tcp</type> <port>548</port> </service> </service-group> EOF rc-update add avahi-daemon default rc-update add netatalk default rc
Set up Time Machine on OS X lion
# Make Time Machine could use disks through the network defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
使用GNU `parallel`并行更新git子模块
如果你像我一样使用`pathogen`来管理你的vim插件,并且在.vim/bundle/文件夹下面添加了好多个git submodule的话,这个技巧应该对你有点帮助。
这里用到了GNU的`parallel`工具,如果你是gentoo,那你可以通过moreutils包来获得它。
emerge moreutils
用法很简单,这里就直接给出可用的脚本了,将下面的脚本放到git的根目录下运行即可
#!/bin/sh
PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
CWD=$( cd $(dirname $0) && pwd )
sub_modules=$(git submodule status |awk '{print $2}')
if [ -n "$sub_modules" ]
then
if [ -x "$(which parallel)" ];then
parallel -i sh -c "cd {};pwd;git pull" -- $sub_modules
else
echo ' * Error: Util `Parallel` not found'
fi
else
echo " * Error: Not any git submodules find"
fi
Use xmodmap to make CapsLk an addtional Ctrl
结果很简单,过程很曲折,完整的代码如下,将其放入~/.Xmodmap中即可:
!add capsLK additional ctrl remove lock = Caps_Lock add control = Caps_Lock keycode 66 = Control_L
PS: keycode 66 就是CapsLk键
参考资料: