kalmanfans's Blog

模式识别 非线性预测 复杂网络 Following your heart

快速制作论坛

 

 

因为业务的需要,我公司需要制作论坛。本文档以制作www.geoamgp.com网站的过程为例,主要介绍论坛网站的制作流程和方法,以启发后来人。

 

软件准备:

空间管理软件。FlashFXP。

网站系统,比如:space builder, phpwind, Discuz.

 

流程:

申请域名和空间。

目前,国内有很多帮助申请域名的公司。我就是在万网 (www.cnaaa.net)公司的帮助下,申请得到我的域名: geoampg.com。

 

安装空间管理软件,并上传网站系统到空间。

我使用的是FlashFXP, 通过空间服务器提供商提供的用户名和密码,你可以访问和操作空间。当然,此时空间的能力特别弱小。

上传成功后,你可以尝试访问网站系统,测试网站系统是否成功上传。

 

域名解析

空间在申请后,你是可以在internet上任何一点进行访问。域名解析的空间是功能是,把注册了的域名,连接到空间的访问地址上。

 

shchen.lmars@live.cn

MySQL数据导入导出与备份

 
 
数据表数据导出为TXT、EXCEL格式
select CI,LAC,Longtitude,Latitude 
into outfile "c:/data_outchen.txt" 
lines terminated by "\r\n" 
from buf_20070918;
 
 
数据表数据导出为TXT、EXCEL格式
从TXT、EXCEL格式导入到数据库中。
use db4teletra;
CREATE TABLE  buf_20070918 (
  `R_ID` int(10) NOT NULL AUTO_INCREMENT,
  `CI` int(10) NOT NULL,
  `LAC` int(10) NOT NULL,
  `Longtitude` decimal(12,6) NOT NULL,
  `Latitude` decimal(12,6) NOT NULL,
  `Rechtswert_Y` decimal(12,3) NOT NULL,
  `Hochwert_X` decimal(12,3) NOT NULL,
  `Azimuth` int(10) DEFAULT NULL,
  `Sectorangle` int(10) DEFAULT NULL,
  `Repeater` int(10) DEFAULT NULL,
  PRIMARY KEY (`R_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6755 DEFAULT CHARSET=utf8;
 
use database_name;
load data local infile "c:/buf20070918.txt"
into table buf_20070918(CI, LAC, Longtitude, Latitude, Rechtswert_Y, Hochwert_X, Azimuth, Sectorangle, Repeater);
 
 
数据表数据导出为SQL语句
mysqldump -u root -p tele_tra_db buf_20070918 > dumpbuf.txt password mysql
 
 
数据库备份

Matlab中fscanf的用法

今天读一段程序,主要目的是从一个文件中读取数据,然后用这些数据来画图。

matlab中的fscanf的用法如下:

A=fscanf(fid,format)
[A, count]=fscanf(fid,format,size)
[A, count]=fscanf(fid,format,size)


个人感觉用的最多的是 这样的形式:

data = fscanf(fid,format,size);

期中data为读取内容的数组,他的大小由size决定。size是一个[m n]的向量,

m为行,n为列(注意,这里读取的顺序是按列优先排列的,不明白的话可以看

下面的例子),若n取inf表示读到文件末尾。fid为fopen打开文件的返回值,

format是格式化参数(像printf、scanf)。

举个小例子:

路径+文件名:d:\moon.txt

内容:13,1,3.4

   3,2.1,23

1,12,2

   4,5.4,6

现在为了读取moon中的数据存在一个数组里,可以用如下方法

fid=fopen('d:\moon.txt');

data_1 =fscanf(fid,'%f,%f,%f',[3,inf]) ;%这里得用单引号

data_2 =fscanf(fid,'%f,%f,%f',[2,inf])

data_3 =fscanf(fid,'%f,%f,%f',[2,2])

fclose(fid);

这时data_1, data_2, data_3分别是一个数组,其内容分别如下:

data_1

13 3 1 4

1 2.1 12 5.4

4 23 2 6

data_2

13 3.4 2.1 1 2 4

1 3 23 12 4,5 6

data_3

13 3.4
1 3

由此可见,读数据的时候,从多维数组的水平方向,一个一个读取,传递给新的数组时,从列方向优先。

数据库中的Trigger器

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器可以查询其他表,而且可以包含复杂的 SQL语句。它们主要用于强制服从复杂的业务规则或要求, 用于加强数据的完整性约束和业务规则等。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

  触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

 

一个触发器有三个基本部件:触发事件或语句、触发器的限制、触发器动作。

触发事件或语句:为引起触发器激发的SQL语句,是对指定表INSERT、UPDATE或DELETE语句。

触发器限制:为一布尔表达式,当触发器激发时该条件必须为TRUE。触发器的限制是用WHEN子句来指定。

触发器的动作:为一个PL/SQL块(过程),由SQL语句和PL/SQL语句组成。当触发语句发出,触发器的限制计算得TRUE时,它被执行。在触发器动作的语句中,可使用触发器的处理的当前行的列值(新值、老值),使用形式为:

NEW.列名 引用新值

OLE.列名 引用老值

 

在定义触发器时可指定触发器动作执行次数:受触发语句影响每一行执行一次或是对触发语句执行一次。

对每一触发语句可有四种类型触发器:

行触发器:对受触发语句所影响的每一行,行触发器激发一次。

语句触发器:该类型触发器对触发语句执行一次,不管其受影响行数。

定义触发器可以指定触发时间,指定激发器动作的执行相对于触发语句执行之后或之前。

BEFORE触发器:该触发器执行触发器动作是在触发语句执行之前。

AFTER触发器:该触发器执行触发器动作是在触发语句执行之后。

一个触发器可处于两种不同的方式:使能触发器和使不能触发器。

使能触发器:只要当触发语句发出,触发器限制计算为TRUE,这种类型的触发器执行其触发动作。

使不能触发器:这种触发器即使其触发语句被发出,触发器限制计算为TRUE,也不执行触发器动作。

触发器的源代码存储在数据库中,在第一次执行时,触发器的源代码被编译,存储在共享池中。假如触发器从共享池中挤了,再使用时必须再重新编译。

 

触发器是一种自动执行响应数据库变化的程序。可以设置为在触发器事件之前或之后触发或执行。能够触发触发器事件的事件包括下面几种:

  DML事件
  DDL事件
  数据库事件

  DML事件触发器可以是语句或行级触发器。DML语句触发器在触发语句之前或之后触发DML行级触发器在语句影响的行变化之前或之后触发。用户可以给单一事件和类型定义多个触发器,但没有任何方法可以增强多触发器触发的命令。下表列出了用户可以利用的触发器事件:

 

事件触发器描述
INSERT  当向表或视图插入一行时触发触发器
UPDATE  更新表或视图中的某一行时触发触发器
DELETE 从表或视图中删除某一行时触发触发器
CREATE 当使用CREATE语句为数据库或项目增加一个对象时触发触发器
ALTER 当使用ALTER语句为更改一个数据库或项目的对象时触发触发器
DROP 当使用DROP语句删除一个数据库或项目的对象时触发触发器
START 打开数据库时触发触发器,在事件后触发
SHUTDOWN  关闭数据库时触发,事件前触发
LOGON 当一个会话建立时触发,事件前触发
LOGOFF 当关闭会话时触发,事件前触发
SERVER 服务器错误发生时触发触发器,事件后触发

  

创建触发器的语法如下:

CREATE [OR REPLACE] TRIGGER trigger_name
{before|after|instead of} event
ON {table_or_view_name|DATABASE}
[FOR EACH ROW[WHEN condition]]
trigger_body

  只有DML触发器(INSERT、UPDATE、DELETE)语句可以使用INSTEAD OF触发器并且只有表的DML触发器可以是BEFORE或AFTER触发器。

  象约束一样触发器可以被设置为禁用或启用来关闭或打开他们的执行体(EXECUTE),将触发器设置为禁用或启用使用ALTER TRIGGER语句:

ALTER TRIGGER trigger_name ENABLE;
ALTER TRIGGER trigger_name DISABLE;

  要禁用或启用表的所有触发器,使用ALTER TABLE语句

ALTER TRIGGER table_name DISABLE ALL TRIGGER;
ALTER TRIGGER table_name ENABLE ALL TRIGGER;

  删除触发器使用DROP TRIGGER

DROP TRIGGER trigger_name;

 

DML触发器

  当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于强制执行业 务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。

DDL触发器

  它是Sql Server2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它在数据库结构发生变化时执行,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。

 

创建SQL语法

  DELIMITER |

  CREATE TRIGGER `<databaseName>`.`<triggerName>`

  < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >

  ON <tableName>

  FOR EACH ROW

  BEGIN

  --do something

END |

触发器的优点

触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用CHECK约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。

 

比较触发器和约束

  约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,而引用完整性(RI) 则应通过 FOREIGN KEY 约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。

  例如:除非 REFERENCES 子句定义了级联引用操作,否则 FOREIGN KEY 约束只能以与另一列中的值完全匹配的值来验证列值。

  CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的列验证列值,则必须使用触发器。约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器。

  触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。当更改外键且新值与主键不匹配时,此类触发器就可能发生作用。例如,可以在 titleauthor.title_id 上创建一个插入触发器,使它在新值与 titles.title_id 中的某个值不匹配时回滚一个插入。不过,通常使用 FOREIGN KEY 来达到这个目的。

  如果触发器表上存在约束,则在 INSTEAD OF 触发器执行后但在 AFTER 触发器执行前检查这些约束。如果约束破坏,则回滚 INSTEAD OF 触发器操作并且不执行 AFTER 触发器。

  触发器到底可不可以在视图上创建 在 SQL Server™ 联机丛书中,是没有说触发器不能在视图上创建的, 并且在语法解释中表明:在 CREATE TRIGGER 的 ON 之后可以是视图。 然而,事实似乎并不是如此,很多专家也说触发器不能在视图上创建。我也专门作了测试,的确如此,不管是普通视图还是索引视图,都无法在上面创建触发器,真的是这样吗?

  请点击详细,但是无可厚非的是:当在临时表或系统表上创建触发器时会遭到拒绝。

  深刻理解 FOR CREATE TRIGGER 语句的 FOR 关键字之后可以跟 INSERT、UPDATE、DELETE 中的一个或多个,也就是说在其它情况下是不会触发触发器的, 包括 SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。

  相关内容 一个有趣的应用我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名, 在触发器中利用回滚就可以巧妙地实现无法更改用户名……详细内容 触发器内部语句出错时…… 这种情况下,前面对数据更改操作将会无效。举个例子,在表中插入数据时触发触发器,而触发器内部此时发生了运行时错误,那么将返回一个错误值,并且拒绝刚才的数据插入。不能在触发器中使用的语句 触发器中可以使用大多数 T-SQL 语句,但如下一些语句是不能在触发器中使用的。

  CREATE 语句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。

  ALTER 语句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。

  DROP 语句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。

  DISK 语句,如:DISK INIT、DISK RESIZE。

  LOAD 语句,如:LOAD DATABASE、LOAD LOG。

  RESTORE 语句,如:RESTORE DATABASE、RESTORE LOG。

  RECONFIGURE

TRUNCATE TABLE 语句在sybase的触发器中不可使用!

 

慎用触发器

  触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作…… 同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程序

Sqlserver示例

insert 触发器示例

  create trigger tri_insert

  on student

  for insert

  as

  declare @student_id char(10)

  select @student_id=s.student_id from

  student s inner join inserted i

  on s.student_id=i.student_id

  if @student_id='0000000001'

  begin

  raiserror('不能插入1的学号!',16,8)

  rollback tran

  end

  go

update触发器示例

  create trigger tri_update

  on student

  for update

  as

  if update(student_id)

  begin

  raiserror('学号不能修改!',16,8)

  rollback tran

  end

  go

delete触发器示例

  create trigger tri_delete

  on student

  for delete

  as

  declare @student_id varchar(10)

  select @student_id=student_id from deleted

  if @student_id='admin'

  begin

  raiserror('错误',16,8)

  rollback tran

end

 

reference:

Oracle trigger: http://zxf-noimp.iteye.com/blog/1140979

百度文档:触发器

Wikepedia: trigger

IBM trigger:

 

局部搜索,模拟退火,遗传算法,禁忌搜索,门特卡罗算法的形象比喻

局部搜索,模拟退火,遗传算法,禁忌搜索,门特卡罗算法的形象比喻

为了找出地球上最高的山,一群有志气的兔子们开始想办法。
    1、兔子朝着比现在高的地方跳去。他们找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是局部搜索,它不能保证局部最优值就是全局最优值。
    2、兔子喝醉了。他随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,他渐渐清醒了并朝最高方向跳去。这就是模拟退火。
    3、兔子们吃了失忆药片,并被发射到太空,然后随机落到了地球上的某些地方。他们不知道自己的使命是什么。但是,如果你过几年就杀死一部分海拔低的兔子,多产的兔子们自己就会找到珠穆朗玛峰。这就是遗传算法。
    4、兔子们知道一个兔的力量是渺小的。他们互相转告着,哪里的山已经找过,并且找过的每一座山他们都留下一只兔子做记号。他们制定了下一步去哪里寻找的策略。这就是禁忌搜索。

还有一个MC 算法
5、兔子们随便生产,产下了大量的兔崽子。兔崽子到处耍欢了跑,弄得全世界满是兔子。这些兔子中,站在最高处的兔子,它就找到了地球上最高的山。

数学的用处

高等数学有什么用?很多人问过我这个问题。其实大多数人在问这个问题的时候,心里已经预设了否定的答案。确实,对于大多数人来说,已经发展到了连数字都基本很少用了的一些高等数学分支,是过于虚无飘渺了。但是实际上,今天我们的生活已经完全离不开数学。甚至可以这么说,没有高等数学的发展,就不会有今天的现代社会。

        也许很多人会怀疑这点,那么我就来稍微介绍一下现在高等数学的各主要学科的用处。初等数学就不说了,一些如离散数学、运筹学、控制论等纯粹就是为了应用而发展起来的分支也不说了,重点介绍基础方面的。

        数学分析:主要包括微积分和级数理论。微积分是高等数学的基础,应用范围非常广,基本上涉及到函数的领域都需要微积分的知识。级数中,傅立叶级数和傅立叶变换主要应用在信号分析领域,包括滤波、数据压缩、电力系统的监控等,电子产品的制造离不开它。 

        实变函数(实分析):数学分析的加强版之一。主要应用于经济学等注重数据分析的领域。 

        复变函数(复分析):数学分析加强版之二。应用很广的一门学科,在航空力学、流体力学、固体力学、信息工程、电气工程等领域都有广泛的应用,所以工科学生都要学这门课的。 

        高等代数,主要包括线形代数和多项式理论。线形代数可以说是目前应用很广泛的数学分支,数据结构、程序算法、机械设计、电子电路、电子信号、自动控制、经济分析、管理科学、医学、会计等都需要用到线形代数的知识,是目前经管、理工、计算机专业学生的必修课程。

        高等几何:包括空间解析几何、射影几何、球面几何等,主要应用在建筑设计、工程制图方面。 

        分析学、高等代数、高等几何是近代数学的三大支柱。

        微分方程:包括常微分方程和偏微分方程,重要工具之一。流体力学、超导技术、量子力学、数理金融、材料科学、模式识别、信号(图像)处理 、工业控制、输配电、遥感测控、传染病分析、天气预报等领域都需要它。 

        泛函分析:主要研究无限维空间上的函数。因为比较抽象,在技术上的直接应用不多,一般应用于连续介质力学、量子物理、计算数学、控制论、最优化理论等理论。 

        近世代数(抽象代数):主要研究各种公理化抽象代数系统的。技术上没有应用,物理上用得比较多,尤其是其中的群论。 

        拓扑学:研究集合在连续变换下的不变性。在自然科学中应用较多,如物理学的液晶结构缺陷的分类、化学的分子拓扑构形、生物学的DNA的环绕和拓扑异构酶等,此外在经济学中也有很重要的应用。 

        泛函分析、近世代数、拓扑学是现代数学三大热门分支。 

        非欧几何:主要应用在物理上,最著名的是相对论。 

        数论:曾经被认为是数学家的游戏、唯一不会有什么应用价值的分支。著名的哥德巴赫猜想就是数论里的。现在随着网络加密技术的发展,数论也找到了自己用武之地——密码学。前几年破解MD5码的王小云就是数论出身。 

        到目前为止,数学的所有一级分支都已经找到了应用领域,从自然科学、社会科学、工程技术到信息技术,数学的影响无处不在。如果没有高等数学在二十世纪的发展,我们平时所玩的电脑、上的网络、听的mp3、用的手机都不可能存在。当然,一般的普通大众是没必要了结这些艰深抽象的东西,但是它们的存在和发展却是必需的,总要有一些人去研究这些。

        数学,就是算术,小学直接面对数字,计算,1+1=2之类的东东,初中有了代数和方程,实际上就是用一个字母来代表一个数,这个数的具体值可以是未知的。到了高中,主要研究未知数的对应变化关系,即函数。到了大学,更进一步,研究函数值的变化规律,比如导数就是函数的变化率。最后泛函就是研究不同函数之间的变化关系了。

        数学是从具体到抽象,再抽象的过程,从自然数到集合,从集合到群,从群到拓扑,从拓扑到流形。只要你有时间,都能看懂,必竟数学家也是人,人脑是肉长的。肉长的人脑能想到的东西也就这点了。

        最难的还是数论,一个哥德巴赫猜想,整了三百年,没人想出来怎么证。搞数论,人脑估计不够用了。


        不过,对于大多数数学家来说,研究数学的目的就是为了好玩。这种心情和宅男们对galgame的感情在本质上是没有什么不同的。所谓数学的用处,不过是一个副产品罢了

Matlab runtime运行时间计算

 

通常在算法研究中要对比算法的效率。比较算法效率的一种重要指标,就是考量不同算法在计算处理相同规模的实验数据时,需要的计算时间。本文在这里罗列三种常见的matlab 程序运行时间计算方法。

 

当然这个对于只有几秒钟的小程序没有什么意义,但是对于大程序就有很重要的意义了。

注意:三种方法由于使用原理不一样,得到结果可能有一定的差距!

1、tic和toc组合(使用最多的)

计算tic和toc之间那段程序之间的运行时间,它的经典格式为

  1. tic
  2. 。。。。。。。。。。
  3. toc

复制代码

换句话说程序,程序遇到tic时Matlab自动开始计时,运行到toc时自动计算此时与最近一次tic之间的时间。这个有点拗口,下面我们举个例子说明

  1. % by dynamic of Matlab技术论坛
  2. % see also http://www.matlabsky.com
  3. % contact me matlabsky@gmail.com
  4. % 2009-08-18 12:08:47
  5. clc
  6. tic;%tic1
  7. t1=clock;
  8. for i=1:3
  9. tic ;%tic2
  10. t2=clock;
  11. pause(3*rand)
  12. %计算到上一次遇到tic的时间,换句话说就是每次循环的时间
  13. disp(['toc计算第',num2str(i),'次循环运行时间:',num2str(toc)]);
  14. %计算每次循环的时间
  15. disp(['etime计算第',num2str(i),'次循环运行时间:',num2str(etime(clock,t2))]);
  16. %计算程序总共的运行时间
  17. disp(['etime计算程序从开始到现在运行的时间:',num2str(etime(clock,t1))]);
  18. disp('======================================')
  19. end
  20. %计算此时到tic2的时间,由于最后一次遇到tic是在for循环的i=3时,所以计算的是最后一次循环的时间
  21. disp(['toc计算最后一次循环运行时间',num2str(toc)])
  22. disp(['etime程序总运行时间:',num2str(etime(clock,t1))]);

复制代码

运行结果如下,大家可以自己分析下

  1. toc计算第1次循环运行时间:2.5628
  2. etime计算第1次循环运行时间:2.562
  3. etime计算程序从开始到现在运行的时间:2.562
  4. ======================================
  5. toc计算第2次循环运行时间:2.8108
  6. etime计算第2次循环运行时间:2.813
  7. etime计算程序从开始到现在运行的时间:5.375
  8. ======================================
  9. toc计算第3次循环运行时间:2.0462
  10. etime计算第3次循环运行时间:2.046
  11. etime计算程序从开始到现在运行的时间:7.421
  12. ======================================
  13. toc计算最后一次循环运行时间2.0479
  14. etime程序总运行时间:7.421

复制代码

2、etime(t1,t2)并和clock配合

来计算t1,t2之间的时间差,它是通过调用windows系统的时钟进行时间差计算得到运行时间的,应用的形式

  1. t1=clock;
  2. 。。。。。。。。。。。
  3. t2=clock;
  4. etime(t2,t1)

复制代码

至于例子我就不举了,因为在上面的例子中使用了etime函数了

3、cputime函数来完成

使用方法和etime相似,只是这个是使用cpu的主频计算的,和前面原理不同,使用格式如下

  1. t0=cputime
  2. 。。。。。。。。。。。。。
  3. t1=cputime-t0

复制代码

上面说到了三种方法,都是可以进行程序运行时间计算的,但是Matlab官方推荐使用tic/toc组合,When timing the duration of an event, use the tic and toc functions instead of clock or etime.

至于大家可以根据自己的喜好自己选择,但是使用tic/toc的时候一定要注意,toc计算的是与最后一次运行的tic之间的时间,不是第一个tic,更不是第二个。。。。。

德国劳工法最新改革

The German Act Implementing the EU Directive on Entry and Residence of Highly Qualified Workers法案通过了,最新改革内容包括:

持德国以外护照的学生可以(可折合)工作的天数从90天增加到120天;

毕业后留在德国找工作的时间,从一年延长到一年半;

居住签证可能到达2年,从毕业后开始计算。

年工资超过€44,800 (特殊短期职位 €35,000),工作4年以上,将得到蓝卡

雇员家属将更加容易申请德国签证。

 

This is important information you can share with other international students!!!

DAAD Welcomes ‘Right of Residence’ Improvements

Greater freedom of choice for foreign students, graduates, scientists and researchers

Bonn, 30 April 2012. On 27 April 2012, the Bundestag (lower house of Germany’s federal parliament) passed the Act Implementing the EU Directive on Entry and Residence of Highly Qualified Workers. The scope of this law exceeds the EU targets and presents foreign students, scientists and researchers with new opportunities in Germany. And yet, though it is indeed a step in the direction of a ''welcoming culture'', there is still more to be done.

The German Act Implementing the EU Directive on Entry and Residence of Highly Qualified Workers brings far-reaching changes to the right of residence in Germany: for example, foreign students will in future be permitted to odd-job for 120 instead of, as previously, 90 days per year and, after graduating, they will be allowed to stay in Germany for 18 instead of 12 months to seek qualified employment. They may work without time limits during this search phase. They are no longer obliged to seek the approval of the German Federal Employment Agency (BA). Another novelty is that they will be eligible for a settlement permit, in other words an indefinite right of residence, as early as after two years.

A right of residence for up to 6 months is to be introduced for foreign academics seeking employment. Anyone able to present an employment contract as an academic or qualified professional with a minimum salary of around €44,800 (around €35,000 for certain shortage occupations) may work in Germany for up to 4 years using the ''Blue Card''. Blue Card holders will already be eligible for a settlement permit after 2 to 3 years. Family members of foreign skilled workers will also find it easier to take up employment, for example by no longer requiring the approval of the German Federal Employment Agency (BA).

The new law opens up new opportunities in Germany for foreign students, scientists and researchers. It broadens the individual’s freedom of choice, e.g. to stay and work in Germany for a certain time or indefinitely. In the view of the German Academic Exchange Service (DAAD), this individual freedom of choice is a key characteristic of an outward-looking and welcoming country. The DAAD hence welcomes the new legislation.

By way of further improvement, the maximum duration of stay of students should be returned to 10 years for a course of studies, including study preparation, and 5 years for a doctorate. Since 2009, the maximum duration of stay has been set at a total of 10 years for a course of studies and a doctorate. Even allowing for the standard study period this is still too short a period of time if a student is obliged to attend and complete Studienkolleg (preparatory study college) before taking up his or her studies or if the doctorate, as is the case for most German students, takes more than three years. Simultaneously more efforts must be undertaken to improve the studying success of foreign students in Germany.
 

The act still needs to be approved by the Bundesrat (upper house of Germany’s federal parliament).

陪我看日出(转)

和好多朋友聊天,一个基本的共识就是,时至如今越来越没有热情去认识新的人了。

我也是如此,出国独居将近两年时间,与人的交流量急遽下降,习惯成自然表达的欲望也随之线性递减,即使有话要说也已经有那么多老朋友和老地方,何必要掏开心扉认识一个完全陌生的人。让一个人彻底地了解另一个人,究竟要花多少的时间,该是一件多么累人的事情。

现实生活中如此,在网络空间里也是,校内是能不加就不加新人,QQ用了将近十年的时间,累计下来几百个好友,大多数人加了之后便是束之高阁,和我一样万年隐身,明明就是老死不相往来,删也不是不删也不是。所以,最好还是不用随便加人了。我们都丧失了交流的热情。

两个多月前有一次忽然心血来潮,在自己的好友名单上新增了七八个隐身可见名单,都是一些我想说话但是不知道如何开口的人。一个多月的时间下来,结果是这几人里没有一个人找我说过话,想了想还是把这些隐身可见又默默地取消了。所以说,不知道如何开口终究是无法开口,开着隐身可见晃到他们面前反倒显得尴尬。大概就是这么一回事。

这些人中有一个我曾经默默地追了四年的女生。

翻了一下我们几年的聊天记录,只有一页半的长度:“新年快乐,谢谢。”“生日快乐,谢谢。”“这么晚还没睡,哦是昨晚睡觉忘了关QQ了。”“你工作了吗?恩。”“给我留一个地址哦,我给你寄明信片。”最长的一条是她给我留的:“只买到十三号回家的票,都不知道来不来记得请你吃饭。”时间是2010年我出国之前的那个夏天,她本打算在我出国前请一顿饭,或许真的是没有来得及,有意无意,这顿饭最后还是没有请上,错过了也就错过了。

其实我也很清楚,自己早不再喜欢她,怀念更多的是在教室的窗口等着她经过的岁月而非沈佳宜,虽然,她还是会不期而至地在我失眠的夜里经过那个窗口,像雨雾里的霓虹灯一样发出不可抗拒的光芒。不枉我当年给她手写过诗和情书。不枉我当年因为她在晚自习后的操场上一个人喝了两瓶啤酒。

那时候还不会喝酒,便学会了忧伤。每个人都为自己的青春珍藏着一份足以回味一辈子的爱恋。如果年轻的时候连动过心都没有,这样的人生才可悲,二十三岁之后便再也不会用那样的心情去喜欢一个姑娘。怯场,往往出现在第一次,在屏住呼吸的舞台上哑口无言,而对恋爱而言,往往却是经历的越多越加胆怯,越加不知道该何时何地如何开始一场爱恋。

大概是因为,从前喜欢一个女生,只要有心底里荡起的一丝好感就足够了,而现在要考虑的有:未来,过往,工作,距离,籍贯,家庭,学历,专业,谈吐,兴趣,名单可以列的更长,未能免俗,喜欢再不会是毫无顾忌一意孤行的付出,不再像一朵心里不用阳光和水就能萌芽出的鲜花,而更如一场冗长而可畏的体检,更烦人的是,体检之后好消息基本不会有,坏消息倒是随时都有可能冒出,令人心惊肉跳,了解的结果或许不尽如人意。当然,从现实理性的角度上看,这样负责任的体检或许对谁都有好处,免得彼此失望之后互相伤害。只不过,这样的戏剧还没开场未免已经令人心生烦倦,少了最原始的纯粹,认识和了解一个人终究变成了一件可畏可惧的事情。所以,不如怯场,敬而远之。

有一个女生和我说过,她也不那么喜欢自己现在的男朋友,但是一想到要花多大的力气才能再找到一个更好的男生然后还要再互相认识互相了解,算下来不如就凑合现在这个吧,她说,说不定她的男友也是这个想法。

恩,大概便是这样的心情。所以,有的时候我也会在脑海里徒劳地搜索着生平至今认识过的姑娘们,无一例外,她们都远在天涯。想来想去,都是一件烦人的事情。

据说,所谓的成功男人最终都要迎娶比自己小十岁以上的少女。不寒而栗,纵然年岁再大的男人也都喜欢二十五岁以下的女人,相差自己十岁的人结婚,年龄固然不是问题,但是我无法想象,两个人的成长经历里没有烙下相同的时代刻痕,诸如在初中的时候迷过周杰伦,诸如在高中的时候看过超级女声,诸如在大学的时候看过北京的奥运会等等等等。我知道,周杰伦也会老去,超级女声之后还有非诚勿扰,流行是不死的,四年一届的奥运会依然是人类流动的盛宴,但是,当这些时代的痕迹和你的人生轨迹交汇到一起时,塑造出来的便是一代人独有的喜怒哀乐的记忆。没有相同时代记忆的人怎么可以在一起。

对姑娘的感觉是如此,对朋友也是。

交到好朋友也变成了一件越来越难的事儿。经历事情越多修炼的读人术越久,也就越来越容易洞察到人性的缺陷和弱点,而年龄越大要应付的现实繁缛越多,人性的缺陷和弱点也就越容易暴露,这两个道理摆在一起大概就再很难找到一个推心置腹的朋友。再加上我骨子里依然是一个相当精英主义的人,对好友的期许要求大概也太高,在欧洲前后呆了一年半的时间也,想起来交过最好的朋友却是认识不到四个月的赵千,令人难过的是,由于等不到签证,他下周就要永远地离开巴黎回国了,这里又少了一个可以和我说话的人。

一直很喜欢袁枚的诗句:一双冷眼看世人,两腔热血酬知己。但是,没有时间的沉淀,谁愿意把自己的内心掏出来和一个人分享,所谓知己难寻不如就不要寻了。想来想去,活着终究是一件孤独的事。一方面,早就学会了在各种场合娴熟的微笑讲各种恰如其分的话来,把自己包装的基本滴水不漏万无一失。这些还不简单么,和开一场玩笑似的。一方面,自己的内心情绪包裹的更紧,在面对一个未知的交流时,习惯性地怯场。

刚到法国的时候,如果长途坐火车都尽量找个法国人攀谈,为了提高语言,也为了体会和不同文化的人交流经验。此时此刻,我坐在飞驰的火车上,早就对攀谈的热情全无,只顾看窗外一路不大明朗的风景,大概这就是这么一回事。人生的戏剧演到现在,交流的热情越来越少,越来越不想认识新人,怯场之后退入幕后,宁愿就这样冷看台上一切的发生。

音乐是蔡淳佳的陪我看日出,最近很喜欢的一首歌。怯场的人一般都以怀旧自娱自乐,这都是不好的习惯。

时间是2012年5月4日,于巴黎至布鲁塞尔火车上。

http://www.youtube.com/watch?v=hTfj8LSTCVo

 

陪我看日出   蔡淳佳

雨的气息是回家的小路

 

  路上有我追着你的脚步

 

  旧相片保存着昨天的温度

 

  你抱着我就像温暖的大树

 

  雨下了走好路

 

  这句话我记住

 

  风再大吹不走嘱咐

 

  雨过了就有路

 

  像那年看日出

 

  你牵着我穿过了雾

 

  叫我看希望就在黑夜的尽处

 

  哭过的眼看岁月更清楚

 

  想一个人闪着泪光是一种幸福

 

  又回到我离开家的小步

 

  你送着我满天叶子都在飞舞

 

  雨下了走好路

 

  这句话我记住

 

  风再大吹不走嘱咐

 

  雨过了就有路

 

  像那年看日出

 

  你牵着我穿过了雾

 

  叫我看希望就在黑夜的尽处

 

  雨下了走好路

 

  这句话我记住

 

  风再大吹不走嘱咐

 

  雨过了就有路

 

  像那年看日出

 

  你牵着我穿过了雾

 

  叫我看希望就在黑夜的尽处

 

  虽然一个人

 

  我并不孤独

 

  在心中你陪我看每一个日出

 

4月下旬苏黎世之行