各种大小的同济大学透明徽标
最近要做一些幻灯片,要加上学校的 logo, 所以就去搜索了矢量的徽标,结果居然要用 CorelDRAW 打开。我就下了 CorelDRAW 把它转换成了各种大小的 PNG 格式。透明的东西加在幻灯片里真的很方便,经过简单的处理就可以有很好的效果。
最近要做一些幻灯片,要加上学校的 logo, 所以就去搜索了矢量的徽标,结果居然要用 CorelDRAW 打开。我就下了 CorelDRAW 把它转换成了各种大小的 PNG 格式。透明的东西加在幻灯片里真的很方便,经过简单的处理就可以有很好的效果。
字符串的切片是指截取字符串的子串。Python 里截取字符串的子串相当方便。首先,先给一个变量赋值:
1 | >>> word="Hello" |
第一种切片操作是获得字符串的第 n 个字符所组成的字符串:
1 2 | >>> word[1] 'e' |
Python 的“下标”也是从 0 开始的。Python 里似乎没有字符这种概念,只有“只有一个字符的字符串”的概念。所以,我们不能像 C 一样地通过指定“数组”下标来改变字符串,比如以下代码是错误的:
1 2 3 4 5 | >>> word[1]='o' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment </module></stdin> |
Python 字符串中的下标也可以是负数,表示从右向左的顺序。但是请注意,自然语言中的字符串“最后”一个字符,在 Python 里是第 -1 个字符。并且 Python 认为 -0 = 0, 所以有以下结果:
1 2 3 4 | >>> word[-0] 'H' >>> word[-1] 'o' |
Python 是解析型的语言,所以我首先需要一个 Python 解析器。我开始的时候傻乎乎地用 Ubuntu 执行了 apt-get install python, 结果它告诉我已经安装过了。
好吧,安装过就安装过了吧。开始的时候我们在交互模式 (interactive prompt) 下玩玩,方法是打开终端,输入 python 后按回车。之后,终端下就会出现提示符 >>> 。一开始我们可以把它当成表达式计算器来用,当我们输入一个数学表达式后,按下回车,这个表达式将被计算,计算结果将被顶格输出。
有趣的是,Python 还有复数的数据类型,表示的方法和我们在数学上表示的方法很类似,只不过 i 变成了 j, 也就是,在 Python 里的复数的虚部用后缀 j 表示,比如 1+2j 等。而且这个 j 是不区分大小写的。
复数还有另外一种表示方法,与 C++ 有些像,complex(0, 1) 即可。显然右边的那个参数是虚部。
Java 的标识符可以包含数字、英文字幕、下划线及美元符号,传说标识符还可以是中文之类的宽字符。但是标识符不能以数字开始。Java 的标识符没有长度限制,并且区分大小写。
通常情况下,Java 标识符的命名是匈牙利命名法,与微软通常的风格不同的是,Java 程序员似乎不会把与数据类型有关的东西写在标识符上,比如 Java 中不会出现类似 lpszCmdLine 之类的标识符,当然这只是一个习惯问题。在 Java 中,对于函数,通常采用典型的匈牙利命名法;但是对于变量等,通常是将第一个单词小写,若有第二个单词,才会从第二个单词开始采用驼峰法。不过有时也有例外情况,Java 的常量也有可能被写成像 C 的宏的样子。
Java 程序通常采用 4 格缩进,是否将 Tab 替换为空格倒无所谓。Java 的开大括号一般不会独自占用一行,而闭大括号会独自占一行,并且与对应的开大括号所在行的行首对齐。
六月份看了一些 Java, 后来基本忘记了。现在又要重新捡回来……
好吧,首先是 JDK 的下载。先去下载一个 JDK 安装,之后设置环境变量 JAVA_HOME 为安装路径(安装路径下有个 bin 文件夹,这是识别安装路径的方法),比如我就是这样设置的:
C:\Program Files\Java\jdk1.6.0_21
然后设置环境变量 CLASSPATH 为一个点,加分号,再加上经常放 Java 的类文件的文件夹。如:
.;C:\Java\Classes
然后在 PATH 里加上:
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
现在很多网站都不只提供单一的服务,但是对于用户身份验证,似乎都是可以允许用户在任何一个地方登陆之后,以该身份会话 (Session) 使用整个网站其余的所有服务。本文分 3 种情况简单讨论一下网站统一身份会话记录的实现思路。
单一域名的身份认证好办,当 POST 正确的用户名和密码的时候,生成一个 Session, 然后将随机生成的复杂的 Session ID 和与之关联的用户的 ID 记录在服务器端。在以后的访问中,先探测浏览器 Cookie 是否含有 Session, 如果有的话就在服务器中查找该 Session 对应的用户 ID, 然后视为该用户登陆。
通过设置浏览器 Cookie 记录一个随机的 Session, 来达到记录用户身份的目的是可以的。但是浏览器对 Cookie 这个东西,因为考虑到安全性,只能设置在某个域名,甚至域名的一个目录下,其它域名往往无法共享这个数据。那当遇到多个域名的时候应该怎么办呢?
当服务涉及到多个子域名的时候,记录用户会话还是比较简单的。与单一域名下的统一身份会话记录不同的是,在设置 Cookie 的时候,需要设置域名为一个点加顶级域名。比如若本站 euyuil.com 实行统一身份认证的话,需要将 Cookie 的域名设置成 .euyuil.com 才行。而若是类似 www.euyuil.com 的设置,只是设置了 www 的子域名下的 Cookie.
这篇文章同样是写给同学们滴,我在机房承诺给同学们的链表源代码现在终于兑现啦。
从前我从 VB 转向 C 时,被一个前辈“警告”说,C 语言的指针很难,在 VB 里没有指针的概念,所以我会经历一个相当困难的转型时期。事实证明,这个转型时期比较困难是没错,但是困难并不在指针上。所以其实指针就是个纸老虎,大家不要怕。
什么?哦,什么是链表?好吧……先说说链表本身。链表是由若干个有先后次序的节点组成的图结构,画成图就是这个样子:

单向链表示例
其中,上图的圆圈代表节点,圆圈里的数字是节点里的数据(当然节点的数据可以是数字以外的很多东西),箭头表示节点之间的连接关系。什么?那六个点是什么?那六个点是省略号啊……
这个时候就要说到链表的作用了。链表能表示怎样的一种情况?看看窗外一排停车位,链表就可以表示那一排停着的车,奔驰的下一个是宝马,宝马下一个是保时捷,保时捷下一个是兰博基尼,还有省略号……此时就有如下一种链表关系:

脑海中高档住宅小区的停车场示意图
大家不要觉得链表只能写在一行上,像上面这样也是链表,一条蛇扭了扭应该也算是蛇吧。
同鞋们新年快乐。在这辞旧迎新之际,嘿嘿,我来写点东西给你们。上个学期我们学了 C 语言,我也有幸拜读了各位的一些代码,发现了一些问题,零零散散的,可能说得也不能让大家瞬间理解一些东西。不过不要紧,语言要积累嘛,一点一点说哈,有问题就提在评论里哈。如果有高手路过,还请绕道哈。
首先,大家注意下面这行代码:
1 | char *str = "Hello"; |
我看到一些同学写代码的时候写成这样,不知道是不是谭浩强提倡的啊……不过希望大家不要写出这样的代码,因为那个字面常量 “Hello” 在内存中的位置没法预料,而你的指针又经常传递到这传递到那的,指不定会发生什么意外。况且你让一个指针指向一个常量,你也必须使用 const char * 才对啊。然而你应该这样写:
1 | const char str[] = "Hello"; |
这样是多么和谐啊。
然后,我还见过一些同学写出了这样的代码:
1 2 3 4 | char *func() { char buffer[] = "Hello"; return buffer; } |
以前高中时间紧,还时不时上来写写文章,PHP 之类的东西也是高中学会的。但是上了大学后就很少写文章了,况且学的还是软件工程。还好我找到了一个冠冕堂皇的理由:教育网无法访问我虚拟主机所在的服务器。
最近(其实有几个月时间了)又和一个某同学创建了一个俱乐部,目的是给部分没有任何编程基础的同学课外指导,也可对全年级学生的水平有个大体的了解。后来计划做一个网站给这些同学做题,由于看了一些《设计模式》之类的书,并且发现 Web 的应用和一般的二进制程序有一些不同,所以这个鸽子一直放了很久。
两个月前我买了一些小纸条,经常写一些备忘之类的,贴在宿舍的桌子上。其中有一条格外醒目:不要放鸽子。我觉得放鸽子是我巨大的缺点之一,经常高估开发效率还算好,有的时候说好要做的东西到最后都放弃或者是搁浅了。这是不对滴。有两种途径可以改进这个缺点,一是不要随便放话出来,二是放出来就做出来。
这段时间游戏倒是玩了不少:使命召唤 4, 6, 7; 荣誉勋章;孢子;侠盗猎车手 4; 帝国时代 3; 仙剑奇侠传 1, 4; 红色警戒 2, 3; 反恐精英 1.5; 星际争霸;三角洲部队……
然而我的绩点就颓了,3.7 . 好在没有挂科。
总想把一些计划写出来,但又怕放鸽子。记在心里又怕忘记,或者不能形成习惯。我承认我现在想做好两件比较大的事,期限是 2011 年之内。嘿嘿,如果完成了,我再放鸽子吧……