Jan
9
这两天Xsun同学想让我帮他看看Subpixel,亚像素这个东西。
于是考完就去看了看,觉得蛮有意思,很NB。可惜我帮不上忙,sigh。
贴一些东西出来吧:
其实这个东西我们早就接触到了,因为M$的Windows XP里面有有这个东西,名叫"ClearType"。
zz from http://hi.baidu.com/wingingbob/blog/item/11d43a8175d494debd3e1e35.html
ClearType是由微软在Windows操作系统中提供的屏幕亚像素微调字体平滑工具,让Windows字体更加漂亮。ClearType主要是针对LCD液晶显示器设计,可提高文本的清晰度。基本原理是,将显示器的R, G, B各个次像素也发光,让其色调进行微妙调整,可以达到实际分辨率以上(横方向分辨率的三倍)的纤细文本的显示效果。

1为ClearType线,2是普通的反锯齿线;3和4分别为1和2的四倍放大图;5是1实际显示在液晶显示器上的放大示意图。如图所示,ClearType充分利用LCD色条排列特性,显示出更为完美的斜线。

使用ClearType的显示器放大6倍的效果。由于各个次像素发光,文本边缘带有红、蓝色。
从实际的使用中也能看出来,在启用了ClearType技术以后,字体变得平滑漂亮了。
有兴趣的话还可以再看看这篇文章里的介绍: http://jazzzfish.spaces.live.com/blog/cns!AA856682D7F719B4!302.entry
于是考完就去看了看,觉得蛮有意思,很NB。可惜我帮不上忙,sigh。
贴一些东西出来吧:
其实这个东西我们早就接触到了,因为M$的Windows XP里面有有这个东西,名叫"ClearType"。
zz from http://hi.baidu.com/wingingbob/blog/item/11d43a8175d494debd3e1e35.html
ClearType是由微软在Windows操作系统中提供的屏幕亚像素微调字体平滑工具,让Windows字体更加漂亮。ClearType主要是针对LCD液晶显示器设计,可提高文本的清晰度。基本原理是,将显示器的R, G, B各个次像素也发光,让其色调进行微妙调整,可以达到实际分辨率以上(横方向分辨率的三倍)的纤细文本的显示效果。
1为ClearType线,2是普通的反锯齿线;3和4分别为1和2的四倍放大图;5是1实际显示在液晶显示器上的放大示意图。如图所示,ClearType充分利用LCD色条排列特性,显示出更为完美的斜线。
使用ClearType的显示器放大6倍的效果。由于各个次像素发光,文本边缘带有红、蓝色。
从实际的使用中也能看出来,在启用了ClearType技术以后,字体变得平滑漂亮了。
有兴趣的话还可以再看看这篇文章里的介绍: http://jazzzfish.spaces.live.com/blog/cns!AA856682D7F719B4!302.entry
Jan
8
其实好简单的=.= 为啥以前没去看捏。。。
已知有n个东东为u[1]~u[n], 体积和重量分别是s[1]~s[n]和w[1]~w[n]
有一个包包可以装下大小为S的东东,求这个包包最重可以装多重。
记W[n][S]为要求的东西: 从n个东东里面取出一部分填满体积为S的包包
很容易理解,W[n][S]为以下两个取值的最大值:
1. W[n-1][S] 不取第n个东东,最多可以装多重
2. (s[n] <= S的时候) w[n] + W[n-1][S-s[n]] 一定取第n个东东,重量为v[n],包包还能装S-s[n],那么前n-1个东东最多可以装多重。
另外,显然可以看出,当n或者S为0的时候,W[n][S]肯定也为0。
最简单的是写一个递归:
已知有n个东东为u[1]~u[n], 体积和重量分别是s[1]~s[n]和w[1]~w[n]
有一个包包可以装下大小为S的东东,求这个包包最重可以装多重。
记W[n][S]为要求的东西: 从n个东东里面取出一部分填满体积为S的包包
很容易理解,W[n][S]为以下两个取值的最大值:
1. W[n-1][S] 不取第n个东东,最多可以装多重
2. (s[n] <= S的时候) w[n] + W[n-1][S-s[n]] 一定取第n个东东,重量为v[n],包包还能装S-s[n],那么前n-1个东东最多可以装多重。
另外,显然可以看出,当n或者S为0的时候,W[n][S]肯定也为0。
最简单的是写一个递归:
Jan
8
昨天看的《C++标准函数库》,看到auto_ptr这一节,说到了关于内存泄露的问题
而且有些情况以前根本没有考虑到,想想觉得好危险。
典型的情况就是如下的代码:
如果在//do sth.的时候退出了函数,比如一个return语句,或者是抛出了一个异常
那么最后的delete p就不会被执行,于是就造成了内存的泄露。
更极端一点的情况是,可能申请了多个内存,有多处return,如果每一个都要处理,那程序就太恶心了。
但是不处理又是不行的——于是需要有一种方式来解决,于是标准库就引进了auto_ptr 智能指针。
这个东西保证它自己被销毁的时候能够释放其指向的对象(使用delete)。
一个简单的例子是:
在退出函数foo()的时候,p的析构函数会被调用,自动释放它指向的classA,于是再也不用费神去写delete了,真好~
不过auto_ptr不是基于引用计数的智能指针,所以有一些很特殊的属性。
如果想要用它,一定一定要都了解了才用哦!就推荐看这本书《The C++ Standard Library》C++标准函数库。
而且有些情况以前根本没有考虑到,想想觉得好危险。
典型的情况就是如下的代码:
void foo(){
int *p = new int[10];
//do sth.
delete[] p;
}
int *p = new int[10];
//do sth.
delete[] p;
}
如果在//do sth.的时候退出了函数,比如一个return语句,或者是抛出了一个异常
那么最后的delete p就不会被执行,于是就造成了内存的泄露。
更极端一点的情况是,可能申请了多个内存,有多处return,如果每一个都要处理,那程序就太恶心了。
但是不处理又是不行的——于是需要有一种方式来解决,于是标准库就引进了auto_ptr 智能指针。
这个东西保证它自己被销毁的时候能够释放其指向的对象(使用delete)。
一个简单的例子是:
#include<memory> //auto_ptr在头文件memory里面哦
using namespace std::auto_ptr; //它在namespace std里面哦
void foo(){
std::auto_ptr<classA> p(new classA);
//do sth.
//no need to free p;
}
using namespace std::auto_ptr; //它在namespace std里面哦
void foo(){
std::auto_ptr<classA> p(new classA);
//do sth.
//no need to free p;
}
在退出函数foo()的时候,p的析构函数会被调用,自动释放它指向的classA,于是再也不用费神去写delete了,真好~
不过auto_ptr不是基于引用计数的智能指针,所以有一些很特殊的属性。
如果想要用它,一定一定要都了解了才用哦!就推荐看这本书《The C++ Standard Library》C++标准函数库。
Dec
29
觉得blog的代码没有高亮非常难看,
但是不想用现成的超级臃肿的代码高亮工具,
于是自己写的一个,效果还行吧^_^
My Simple HighLighter @ CopyLeft
By Felix021 ( http://www.felix021.com ) @ 2008.12.29
一个很简单的基于Javascript的C/C++/...语法高亮代码
用法:
1. 在<head>和</head>之间加上这两句:
<link rel="stylesheet" rev="stylesheet" type="text/css" href="styles.css" />
<script language="javascript" src="hl.js"></script>
2. 需要高亮的代码块,应该是div元素,并且class要设置为code,例如
<div class="code">int main(){}</div>
当然,你也可以改hl.js里面的getElementsByTagName("div")来修改元素类型
修改后面的 if(clsname == "code") 也可以修改class的名字,但是记得也要修改styles.css
3. 在网页底部的</body>之前加上这个
<script language="javascript> highlighter(); </script>
4. 可以修改styles.css自定义元素的样式表
5. 可以修改 hl.js 的keywords列表增加自己想要的关键字list
var keywords = array(
"int", "char", "bool", "class"
);
注意每一个关键字要用引号围起来,而且两个关键字之间要用逗号分开;
最后一个关键字后面没有逗号。
例子参见index.html
下载文件 (已下载 1708 次)
但是不想用现成的超级臃肿的代码高亮工具,
于是自己写的一个,效果还行吧^_^
#include<iostream>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
cout << (a + b) << endl;
return 0;
}
using namespace std;
int main(){
int a, b;
cin >> a >> b;
cout << (a + b) << endl;
return 0;
}
My Simple HighLighter @ CopyLeft
By Felix021 ( http://www.felix021.com ) @ 2008.12.29
一个很简单的基于Javascript的C/C++/...语法高亮代码
用法:
1. 在<head>和</head>之间加上这两句:
<link rel="stylesheet" rev="stylesheet" type="text/css" href="styles.css" />
<script language="javascript" src="hl.js"></script>
2. 需要高亮的代码块,应该是div元素,并且class要设置为code,例如
<div class="code">int main(){}</div>
当然,你也可以改hl.js里面的getElementsByTagName("div")来修改元素类型
修改后面的 if(clsname == "code") 也可以修改class的名字,但是记得也要修改styles.css
3. 在网页底部的</body>之前加上这个
<script language="javascript> highlighter(); </script>
4. 可以修改styles.css自定义元素的样式表
5. 可以修改 hl.js 的keywords列表增加自己想要的关键字list
var keywords = array(
"int", "char", "bool", "class"
);
注意每一个关键字要用引号围起来,而且两个关键字之间要用逗号分开;
最后一个关键字后面没有逗号。
例子参见index.html

Dec
29
被牛逼哄哄的Snoopy雷到了。
事情是这样的,今天打开 http://acm.whu.edu.cn/woj 检查oak的运行情况
发现在status的第二页有好多个submit都处于Running状态
ssh到服务器上去看了一下,发现Judge在Compile OK以后就挂掉了。
有一堆Stack的信息,但是看不太懂~
DEBUG了一阵,定位到了错误:在判断Restricted_Function的那个函数里面。
加入了调试代码以后的大概结构是这样的:
然后发现非常神奇地,程序输出的是
然后跟上一堆程序出现错误的信息。
于是我就懵了,居然一个return语句也能出现错误?
然后请教snoopy大牛,经过一番七荤八素的DEBUG以后,终于找到了症结所在:
原来在Restricted_Function里面定义的那个char f[30]空间太小了
由于是分配在栈空间里面的,所以在运行的时候,出现了少量越界写入的情况
在程序返回的时候,由于返回地址等被未预料到的字符覆盖了,于是就出现了上述问题。
一个return语句也能"出错",暴露出这样严重的内存使用问题
——可能存在于任何地方,写程序的时候务必要小心啊!
同时,通过这种方式"定位"到的错误点,未必就是错误真正发生的地方!
事情是这样的,今天打开 http://acm.whu.edu.cn/woj 检查oak的运行情况
发现在status的第二页有好多个submit都处于Running状态
ssh到服务器上去看了一下,发现Judge在Compile OK以后就挂掉了。
有一堆Stack的信息,但是看不太懂~
DEBUG了一阵,定位到了错误:在判断Restricted_Function的那个函数里面。
加入了调试代码以后的大概结构是这样的:
......
bool Restricted_Function(){
char f[30], ...;
......
cout << "DEBUG 1" << endl;
return false;
}
......
bool WOJ_JUDGE(){
......
cout << "DEBUG 0“ << endl;
if(Restricted_Function(){
cout << "DEBUG 2" << endl;
return RF;
}
cout << "DEBUG 2" << endl;
......
}
bool Restricted_Function(){
char f[30], ...;
......
cout << "DEBUG 1" << endl;
return false;
}
......
bool WOJ_JUDGE(){
......
cout << "DEBUG 0“ << endl;
if(Restricted_Function(){
cout << "DEBUG 2" << endl;
return RF;
}
cout << "DEBUG 2" << endl;
......
}
然后发现非常神奇地,程序输出的是
引用
DEBUG 0
DEBUG 1
DEBUG 1
于是我就懵了,居然一个return语句也能出现错误?
然后请教snoopy大牛,经过一番七荤八素的DEBUG以后,终于找到了症结所在:
原来在Restricted_Function里面定义的那个char f[30]空间太小了
由于是分配在栈空间里面的,所以在运行的时候,出现了少量越界写入的情况
在程序返回的时候,由于返回地址等被未预料到的字符覆盖了,于是就出现了上述问题。
一个return语句也能"出错",暴露出这样严重的内存使用问题
——可能存在于任何地方,写程序的时候务必要小心啊!
同时,通过这种方式"定位"到的错误点,未必就是错误真正发生的地方!
Dec
29
据说MySQL是从v4.0开始支持事务(Transaction)的,一直没去试过。
今天心血来潮,于是就玩了一下。
首先,mysql里面有一个状态量叫做 autocommit ,默认值是1
也就是说,当你提交一个SQL语句以后,这条语句会被立即执行并修改数据库内容(如果有必要的话)。
所以如果你想要开始一个事务,那么首先应该把这个东东设置为0,有这么几种方法:
1. 提交SQL语句 START TRANSACTION;
2. 提交SQL语句 BEGIN;
3. 提交SQL语句 SET AUTOCOMMIT=0;
4. (PHP) mysqli_autocommit($conn, false);
然后就可以开始进行你想做的数据库修改了,比如INSERT, UPDATE, DELETE
修改完以后,如果返回的结果有不对劲的地方,OK,试试
1. 提交SQL语句 ROLLBACK;
2. 或者(PHP) mysqli_rollback($conn);
然后你就会发现数据库好像根本没有操作过似的
(其实仔细观察的话会发现auto_increment那个字段的max值变大了-____-)
如果一切OK,那么就用这个:
1. 提交SQL语句 COMIIT;
2. 或者(PHP) mysqli_commit($conn);
注意,在提交COMMIT以后,数据库的改动就正式写到硬盘,不能撤销啦。
给俩例子吧:
a. 在MySQL命令行下进行的操作
OK,再来个PHP版本的:
今天心血来潮,于是就玩了一下。
首先,mysql里面有一个状态量叫做 autocommit ,默认值是1
也就是说,当你提交一个SQL语句以后,这条语句会被立即执行并修改数据库内容(如果有必要的话)。
所以如果你想要开始一个事务,那么首先应该把这个东东设置为0,有这么几种方法:
1. 提交SQL语句 START TRANSACTION;
2. 提交SQL语句 BEGIN;
3. 提交SQL语句 SET AUTOCOMMIT=0;
4. (PHP) mysqli_autocommit($conn, false);
然后就可以开始进行你想做的数据库修改了,比如INSERT, UPDATE, DELETE
修改完以后,如果返回的结果有不对劲的地方,OK,试试
1. 提交SQL语句 ROLLBACK;
2. 或者(PHP) mysqli_rollback($conn);
然后你就会发现数据库好像根本没有操作过似的
(其实仔细观察的话会发现auto_increment那个字段的max值变大了-____-)
如果一切OK,那么就用这个:
1. 提交SQL语句 COMIIT;
2. 或者(PHP) mysqli_commit($conn);
注意,在提交COMMIT以后,数据库的改动就正式写到硬盘,不能撤销啦。
给俩例子吧:
a. 在MySQL命令行下进行的操作
mysql> use t;
mysql> CREATE TABLE `test`(`id` int primary key auto_increment, `name` char(50));
mysql> START TRANSACTION;
mysql> INSERT INTO `test` VALUES (NULL, 'a');
mysql> COMMIT; #或者 mysql> ROLLBACK;
mysql> SELECT * FROM `test`;
看看效果如何?mysql> CREATE TABLE `test`(`id` int primary key auto_increment, `name` char(50));
mysql> START TRANSACTION;
mysql> INSERT INTO `test` VALUES (NULL, 'a');
mysql> COMMIT; #或者 mysql> ROLLBACK;
mysql> SELECT * FROM `test`;
OK,再来个PHP版本的:
<?php
$conn = new mysqli("localhost", "root", "123456", "t");
$conn->autocommit(false);
$res = $conn->query("INSERT INTO `test` VALUES(NULL, 'a')");
if($res)
$conn->commit();
else
$conn->rollback();
$conn->close();
?>
$conn = new mysqli("localhost", "root", "123456", "t");
$conn->autocommit(false);
$res = $conn->query("INSERT INTO `test` VALUES(NULL, 'a')");
if($res)
$conn->commit();
else
$conn->rollback();
$conn->close();
?>
Dec
29
#include<iostream>
using namespace std;
char l[] = "Felix021";
void print(char a){
for(int i = 7; i >= 0; --i){
cout << ((a >> i ) & 1);
}
}
int main(){
for(int i = 0; l[i]; ++i){
print(l[i]);
}
cout << endl;
return 0;
}
using namespace std;
char l[] = "Felix021";
void print(char a){
for(int i = 7; i >= 0; --i){
cout << ((a >> i ) & 1);
}
}
int main(){
for(int i = 0; l[i]; ++i){
print(l[i]);
}
cout << endl;
return 0;
}
Dec
27
修改模板的时候希望能在 搜索框 实现这样一种效果:
默认显示内容为Search... ;鼠标点击激活后自动清空; 失去焦点以后如果内容为空,重置为Search...
记得IE有个onFocusOut事件,试了一下,确实OK
但是,非常遗憾地,FireFox没有这个事件。
又是Google又是Baidu,然后发现自己犯了Shability:
原来还有一个onBlur事件,就是用来作这件事情的。
默认显示内容为Search... ;鼠标点击激活后自动清空; 失去焦点以后如果内容为空,重置为Search...
记得IE有个onFocusOut事件,试了一下,确实OK
但是,非常遗憾地,FireFox没有这个事件。
又是Google又是Baidu,然后发现自己犯了Shability:
原来还有一个onBlur事件,就是用来作这件事情的。
<input type="text" value="Search..." onfocus="if(this.value=='Search...')this.value='';" onblur="if(this.value=='')this.value='Search...';"/>