接触 Python 后的一点感受记录

python最近因为工作的关系开始学习 Python 了。以前从不曾正儿八经地学过,如果说工作学习经验带来改变的话,那么编程语言的学习就是个很好的例子。如果在十年前,我要学习 Python 的话大概会买本系统介绍的 Python 教程,然后一页一页慢慢看,估计能够啃完大半本,跳过一些自认为次要的特性。等到在项目中使用已经得是一两个月之后了吧。但是如今我显然不太会做一样的事情,我现在会拿着我那些熟悉的编程语言来比较,不同的特性上面,Python 是怎样的,是先进还是落后,适合解决什么问题,在哪些领域可以大行其道,但在遇到哪些问题的时候事倍功半。

想起以前接触过的编程语言里,事实上有一半都不能算系统地学过,大致上只是 [……]阅读全文

Scala 的模式匹配

scala

最近开始学习 Scala,相较于学习 Haskell 的过程来看,Scala 真是直观得多,友好得多,更容易上手。以前写过关于从熟悉的 Java 和 JavaScript 来逐步学习 Groovy 和 Haskell 的文章,这以后再来学习 Scala 的话,就可以不断比较了。如果和我一样有 Java 经验的话但是从来没有接触过 Scala 的话,建议先阅读这篇文章,A Scala Tutorial for Java Programmers,一边比较,一边熟悉,同时配套的还有这个,Scala for Java programmers – Joakim Ohlrogge & Enno Runne,Youtube 上的视频,

[……]阅读全文

运行时动态增加枚举类型

enum 最近在使用一个内部框架的时候,希望能够在运行时指定枚举类型,却发现这是一件挺麻烦的事情(不找别的替代方式,就是要动态增加 enum 的类型),方法也不正统,不过作为有趣的尝试,研究研究也无妨,下面的内容主要来自于 《Java – create enum instances dynamically》这样一篇文章。在一切开始前,如果你想问,为什么非要增加/改变 enum 类型?其实这是一个非常好的问题,多数情况下这是应对被避免的,但是这不在今天我的讨论范围内。

一、方法 void addEnum(Class<T> enumType, String enumName),用于增加一个枚举类型:

&n

[……]阅读全文

Java8 集合中的 Lambda 表达式

lambda

本文翻译自《Java 8 Explained: Applying Lambdas to Java Collections》。

Lambdas 表达式是 Java 8 的主题,在 Java 平台上我们期待了很久。但是,如果如果我们不在集合中使用它的话,就损失了很大价值。把现有接口迁移成为 lambda 风格接口的问题已经通过 default methods,也就是 defender methods 解决了。在这篇文章里面我们来看一看 Java 集合里面的批量数据操作(bulk operation)。

批量操作

最初的变更文档已经说了,批量操作是 “给 Java 集合框架添加的用以批量操作数据的功能,而它是基于 lam

[……]阅读全文

使用堆外内存

有时候对内存进行大对象的读写,会引起 JVM 长时间的停顿,有时候则是希望最大程度地提高 JVM 的效率,我们需要自己来管理内存(看起来很像是 Java 像 C++祖宗的妥协吧)。据我所知,很多缓存框架都会使用它,比如我以前使用过的 EhCache(给它包装了个酷一点的名字,叫 BigMemory),以及现在项目中的 Memcached。在 nio 以前,是没有光明正大的做法的,有一个 work around 的办法是直接访问 Unsafe 类。如果你使用 Eclipse,默认是不允许访问 sun.misc 下面的类的,你需要稍微修改一下,给 Type Access Rules 里面添加一条所有类都可以访问的规则:

config

在使用 Uns

[……]阅读全文

编程语言学习和使用的观点

vb 我的一些关于编程语言学习和使用的观点如下,因为最近谈到这个事情,就记录下来吧,但是我只想简单的表述出来。当然,我不想陷入语言孰优孰劣这种争论的圈子里。

多掌握一门语言有没有价值?如果一门新的语言能改变你对编程的理解,它就是值得学习的。另外,每一门语言对应着一种或几种 “编程范型”,接触不同的编程范型是很有价值的,这是扩展视野的好机会。

编程语言只是工具,工具都是用来解决特定的问题的。特定的问题使用适合的工具来解决。但是很多情况下,我们的选择太多。选择这一门编程语言的原因可能只是因为 “它很酷啊”,或者 “因为大家都在用它”。另外,还有一种极端的滥用的情况:“当手上有一把锤子的时候,你看什么都是钉子

[……]阅读全文

Java 的日期 API 真烂

date 记得在我刚学 Java 的时候,真是搞不清楚 Date 和 Calendar 这两个类,后来我渐渐知道,原来不能全怪我啊,Java 日期 API 之烂是公认的(不妨参见这篇文章,Tiago Fernandez 做过一个投票,就是要选举最烂的 Java API,结果 Java 日期 API 排行第二,仅次于臭名远扬的 EJB2,嘿嘿)。

蛋疼的 java.sql.Date

只有 Date 和 Calendar 搞定一切吗?那还好啊。当然不是!光 Date 就有 java.util.Date 和 java.sql.Date,而且关系是 java.sql.Date extends java.util.Date。为了把前者转成后者,我写了这样的代码

[……]阅读全文

Dart,你凭什么挑战 JavaScript?

dart 不妨先来打量一下 JavaScript。JavaScript 是唯一至今主流且基于原型的语言,虽然说支持面向对象,但是无论是封装、继承、多态,实现起来总需要用到一些 tricky 的办法,而且也不甚完美。事实上,为了抢市场,从 1995 年 JavaScript 设计完成到发布,只有短短的 7、8 个月的时间,极度缺乏谨慎的语言特性和规范的评估。而和微软 JScript 的竞争,使得 EcmaScript 标准仓促问世,这些都是 JavaScript 存在诸多缺陷的重要因素。

不止如此,Google 认定,JavaScript 的缺陷难以以改良的方式被修复,必须革命。那么都有哪些缺陷呢?推荐大家去阅读《Using JavaSc

[……]阅读全文

Dart:JavaScript 的未来

dart 最近在关注 Dart 语言,下面这篇文章译自这里,其实是 2011 年 11 月 Google 内部员工的一封邮件,邮件中提到的 Dash,就是如今的 Dart 语言的前身。Google 搞东西很有意思,思维似乎非常超前,总是能挖到现在火爆的东西的不足,然后搞一个新的东西代替它,真是凶猛异常。比如 SPDY、V8、WebP、Go 等等,有的成功,有的失败。还有,希望大家能从下面粗糙的译文中留意到,Google 对于标准非常重视,谈论中也是霸气外露,希望把一切标准都控制在自己手里。

Subject: [Caja] 转发:从上周的 JavaScript 会议看 JavaScript 的未来
From: Mark S. Mill

[……]阅读全文

Io 语言导引

Io 第一次接触 Io 语言的时候我就被其简洁干净的语法打动了(如果你有编程语言的经验,也许 15 分钟就可以掌握大部分的语法),Io 语言的简单、灵活和对并发的良好支持都让人印象深刻。本文翻译自 Io 语言官网的这篇文章

引言

总览

Io 语言是一门基于原型的动态语言,主要思想很大程度上受到了 Smalltalk(所有变量都是对象)、Self(基于原型)、NewtonScript(差异化继承)、Act1(并发行为特征)、Lisp(运行时可观测和修改代码)和 Lua(小巧可嵌入)的影响。

透视图

过去三十年编程语言研究的重心已经转移到了具备强大的表达力的高级语言(比如 Smalltalk),以及性能卓越

[……]阅读全文

一些中文编程语言

1 我自认为本文不是恶搞,让我们本着严肃认真的精神来审视这些中文编程语言。

易语言

易语言可以说是中文编程语言的老大,拥有独立的编译器。易语言并不是把现存的编程工具进行表面汉化而成的,和其他国外语言相比," 易语言" 最大的不同是彻底中文化,且拥有自下而上的全部自主知识产权。

易语言的全新版本叫做“ 易语言. 飞扬”,包含垃圾收集机制,是完全面向对象的中文编程语言:

公开 类 启动类
{
	公开 静态 启动 ()
	{
		控制台. 输出 (" 你好,世界!");
	}
}

和其他中文编程语言相比,它是最成熟的,而且同时具备了

[……]阅读全文

你真的精通 Java 吗?

java 简历和自我介绍上经常能够读到“ 精通 Java” 这样的话,有人和我说,精通 Java 的人太多了,精通 Java 已经不能算亮点、不能给自己加分了。可是事实真是这样吗?

对于语言的学习,我有一种观点,一是纵向,即要选择一门自己认为合适的语言学到有相当的深度。二在于横向,即要学习不同类型、不同历史和不同门派的语言:

  1. 既有底层的语言,也有高级语言;
  2. 接触一些动态语言、函数式语言;
  3. 了解一些不同语言的编程范型和编程方式,比如基于原型编程、面向切面编程、命令式编程等等;
  4. 最好能关注一门年纪尚浅,甚至小众的语言,了解一门语言的发展。

横向类比能够带来对一门语言的

[……]阅读全文

不妨学习一下 Perl

perl Perl 是什么?用 Larry Wall 自己的话说,Perl 是借取了 C、sed、awk、shell scripting 以及很多其他程序语言的特性的一种语言。你可以说它是 “实用报表提取语言”(Practical Extraction and Report Language),也可以叫它 “病态折中垃圾列表器”(Pathologically Eclectic Rubbish Lister),Larry 说:“OK,我都承认”。

最近机缘巧合,有幸接触了一把 Perl,以及它的模板引擎 Mason(我是这么理解的)。我用过 Java、C#、C++等等传统高级语言,也研究过 Groovy、JavaScript 之类

[……]阅读全文

Groovy on Grails 交流活动

2008 年 InfoQ 交流活动的胶片:

http://cid-5b1e02933669f469.skydrive.live.com/redir.aspx?page=browse&resid=5B1E02933669F469!105&type=5

 

活动宣传页:
 
 
2008 年上半年,一次活动中的翻译稿。Groovy on Grails 一些文章的翻译:
 
10 个对于 Grails 的误解
 

[……]阅读全文

看 JDK 源码,解几个疑问

java 1、Java 定时器原理是怎么样的?

解包 jdk_sec-1_5_0-src-jrl,在/j2se/src/share/classes/java/util 中找到 Timer 类。

private TaskQueue queue = new TaskQueue();
private TimerThread thread = new TimerThread(queue);

我找到了一个 Timer 的任务队列,找到了一个实际运行的线程类。

再来看看还有什么:

    private void mainLoop() {
        while (true) {
            try {

[……]阅读全文

C++学习杂记

c  智能指针:auto_ptr 和 shared_ptr:

auto_ptr 是个 pointer-like 对象,也就是所谓的 “智能指针”,其析构函数会自动调用。

std::auto_ptr<Investment> ptr1(new Investment());
//之后,如果:
std::auto_ptr<Investment> ptr2(ptr1);
//或者:
ptr2=ptr1;
//那么 ptr2 指向那个对象,ptr1 置空。

shared_ptr 类似,但它可以追踪有多少指针指向该对象,并在无指针指向时析构。
这时的拷贝:
ptr2=ptr1;
结果则是两个指针指向同一对象。
aut

[……]阅读全文

动手实现随机验证码

validationCode 见过好几种类型的验证码,一开始觉得验证码的生成很神奇,后来发现验证码也是可以用 Java 轻松实现的。今天就来做一做这件事情。

首先,来写一个画验证码图片的 Java 类:

package com.xxx.validationCode;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Ra

[……]阅读全文

back to top