webdancer's Blog

Scala学习-语言基础

1.Scala解释器:键入scala命令启动,使用和python的差不多;也可以运行脚本文件:

 scala xx.scala

2.变量定义:两种变量类型:val和var,val类型变量一旦初始化,不能再被赋值,相当于java中的final类型的变量。与java不同的是Scala可以进行类型推导,不用显示的写出变量的类型。

var a = "Hello World"
val b = 3.14

如同想要显示的写出变量类型,可以在变量名称后面加上“:type”:

var a:String = "Hello World"
val b:Int = 3.14

3.函数定义:

 scala的函数定义用"def"作为开始的标识符,

def max(a:Int, b:Int):Int = {
    if (a>b)
        a
    else
        b
}

需要注意:函数的返回值在非递归函数时可以省去,但是作为良好的编程习惯,还是加上;在只有一个语句的情况下,大括号可以省略。

def error = println("Error!")

Scala的函数参数传递方式一般是CBV(call by value),如果参数类型前面有“=>”则使用CBN(call by name)。

4.控制结构:可以用while进行循环,if进行判断,与java一样的。

5.使用foreach和for来进行迭代:

函数时first citizen,可以充当参数,所以foreach的参数可以是function literal。例如如果输出脚本的参数,

args.foreach((arg:String) => println(arg))

也可以使用for,

for(arg <- args)
    println(arg)

Scala学习--Program Paradigm

Program Paradigms

  • Imperative Programming: modifying mutable variables, assignments, control structure;
  • Fuctional Programming:
    • Strictly, No mutable variables, No assignments, No loops.
    • Widely, Focusing on functions, function is the first citizens

  

  • logical programming

scala学习——环境配置

打算学习一下Spark,因为spark使用Scala语言写的,所以先得学习一下相关的知识。由于我以前对java比较了解了,如果你对java不熟悉,所以这篇文档的内容可能不是很适合你。

1.下个Scala编译器

2.选择开发环境IntelliJ+scala插件:当然可以在命令行里面进行语言的学习,但是最好先学习个IDE,这样看源码的时候也方便。对于如何在IntelliJ中使用scala的插件,可以参考:这个简单的scala插件使用的文档。

【注意】:直接使用“run”可能没法运行,配置一下就可以了。

关于Object classification 不错的资源

这个网站收集了在几个常用的图像库上state-of-art的方法。

网址:http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html

深度学习工具-Caffe

一个深度学习工具

简介

Caffe is a framework for convolutional neural network algorithms, developed with speed in mind. It is written and maintained by Yangqing Jia as a replacement of decaf, Yangqing’s earlier Python implementation of CNNs. Several Berkeley vision group members are actively contributing to the codebase.

Caffe is currently released under the UC Berkeley non-commercial license.

Decaf, the big brother of Caffe, has a cool demo. Caffe’s own demo will come soon.

链接:

http://daggerfs.com/caffe/

[转]颠覆编程方式的感知编码:Stephen Wolfram雄心勃勃的全新计算模式

本文转自36Kr:http://www.36kr.com/

2002 年,出生在英国的科学家、程序员及创业家 Stephen Wolfram 的《一种新科学》刚刚发布,其颠覆传统的追求知识方式引发的惊愕、争议与指责就已经铺天盖地。上个月初,他在博客中披露了自己的一个即将完成的新项目,称该项目将会对技术世界乃至于技术以外的世界产生深远影响。

VB 的 John Koetsier 在看了Wolfram的东西后说,那东西确实令人吃惊。无论你对他那本书的看法如何,有一件事情必须承认,他是个天才。


知识+计算=大事物

Wolfram 的父母是二战前逃离德国到英国去的犹太人。他从小就显露出了过人之处。12 岁时他已经撰写了一部物理词典,14 岁时已经完成了 3 本粒子物理方面的书,15 岁发表了第 1 篇科学论文。

1988 年,他做出了科学计算平台 Mathematica;2009 年,他发布了计算知识搜索引擎 Wolfram Alpha。而他的最新项目,则是这两者的完美联姻:

Mathematica 是完美的精确计算引擎,WolframAlpha 则是有关世界的一般信息。现在我们把二者结合到了一起。

这种结合只是大图景的一部分。新项目还包括了自然语言编程—这种自然语言并不是仅靠自然语言来完成编程,而是说开发者可以利用一部分的自然语言。此外应用中的一切会有一个新的定义,从代码到图像,从输入到结果,一切均可以符号表达式的方式使用和拓展。自动化也到了全新的水平,而且编程语言的开发跟以往完全不一样,抛弃了以往从小开始、以敏捷构造功能,建设库和模块为核心的做法,转为一种具备大规模整体性的东西—将数据和代码合二为一。还有就是对计算的全新专注,其对世界的了解甚至比程序员还要多。

野心比Google的知识图谱大多了

跟我们在 Wolfram Alpha 做的事情相比,知识图谱的心气就小得多了,那仅仅是维基百科和其他一些数据

Google 希望理解对象和事物及其关系,以便给出回答而不仅仅是结果。但 Wolfram 希望让世界变成可计算的,这样的话计算机就可以回答诸如“现在国际空间站在哪里”之类的问题。这需要一定水平的机器智能,它得知道国际空间站是什么,还得知道它在太空中,知道它正在绕着地球轨道飞行,还得知道它的速度以及目前的轨道位置。

这不是静态的数据,而是计算与知识的结合。现在 WolframAlpha 做到了这一点,但这还仅仅是个开始。

Wolfram语言组件

Wolfram 认为,搜索引擎不擅长这个东西,因为太凌乱了。搜索引擎中的问题会有很多答案,其适用性与正确性也各异。这没办法计算,不够简洁,无法进行编程或注入系统。

Wolfram 说,让世界成为可计算的,这是一个比产生维基百科式信息要大得多的目标……一个迥然不同的东西。我们试图要做的远比这要更加雄心勃勃。

这件事情是如此的富有野心,意义是如此的深远,甚至到了难以描述的地步。Wolfram 说在他这辈子做过的各种事情里面,这是最复杂的一个,复杂到可怕,难以解释。请记住,这是一个曾经写过粒子物理论文的人。这件事情需要渊深知识,牵涉面广,意义深远—Wolfram 称之为伸到编程、科学、知识及商业等不同领域的“触须”。

让计算机做这件事情

“总的说来,我们试图做的是,只要你能描述得出来想要什么,计算机就替你做。人来定义目标,然后计算机尽量去理解意思,然后尽最大努力去执行。”
Wolfram 说。

他还进行了现场演示。

大约 30 秒钟,Wolfram 就创建了一个小小的 web 应用,应用可以在网页上画圆,里面还包括有一个用户界面,通过它访客可以让圆圈变大变小或变颜色。编程如此简单要感谢 Wolfram 语言,由于它可以访问到浩瀚的知识库—所以知道什么是圆且可以画圆,它还可以自动提供 web—原生的用户控制来操纵这个圆。这个例子只是个小意思,但过了 30 秒,Wolfram 又写出了一个代码片段,代码实现了对南美国家的定义然后展示了相应国家的国旗。然后他调出一幅欧洲地图,通过计算的方式以不同的颜色高亮显示德国和法国,整个过程只需几秒钟


Wolfram语言解决“南美洲有哪些国?它们的国旗是什么?”这个问题

之所以能做出这样的东西,是因为新的 Wolfram 计算框架包括了 Mathematica20 年开发过程中形成的复杂而精确的算法,再加上 WolframAlpha 内部的知识引擎。结果是惊人的。

通过信息进行自动化

Wolfram 说这种自动化水平要比以往任何时候都要高,其强大令人难以置信,只要是 WolframAlpha 知道的,app 都知道。

这是因为 Wolfram 的自然语言处理技术。它知道南美洲是一个洲,因为知识引擎 WolframAlpha 知道这一点。同样地,它知道哪些国家属于南美洲,其国旗是什么,也了解相应国家的人口、地图形状及概况,也许还包括成千上万个其他的数据元素。而获取这一切只需输入“南美洲”即可。


1、2行代码即可完成一幅高亮显示德国和法国欧洲地图的调用。粗体的行是Wolfram自己输入的

换句话说,“南美洲”并不是一个被赋值的变量或待实例化的对象或类,而是一个机器知道和理解的短语,其含义、意思和关联均可毫不费力地植入程序中,且不需要外部的数据来源。而且该知识来源还会不断更新和发展来匹配不断更新和变化的世界。

这将是开发者开发应用的一大变化,而且这种编程方式不存在现实限制。

Wolfram 进一步以南美洲作为类比,说正如我们了解厄瓜多尔的事情(如人口)一样,我们也可以了解 Twitter API 的东西。

由于具备快速创建应用的能力,Wolfram 将成为游戏颠覆者。

自然语言输入—小孩也能写代码?

它改变了应用开发经济,因为以往需要数小时或数周完成的事情现在只需要几分钟。许多人都一些有趣的想法、算法或应用创意,但苦于缺人缺钱或缺时间而无法完成。Wolfram 目前正在跟这些人会面,这一切将会改变。

Wolfram 说自己的新项目将会催生一大批新的初创企业—在数小时内开发出一种算法或自动化系统将变成现实。

它还改变了程序员的范畴,因为代码将不再是动辄成千上万行,而是 20 到 200 行。这意味着娃娃也能写代码,菜鸟也能做出精彩的应用。


你想看图还是看代码?

Wolfram 说,有了自然语言输入,谁将成为富有经验的程序员将会被改变。书写代码将被大大缩短—这是一门可以让你马上就能把事情干完的语言,不是那种“hello world”也要写上 10 行。而它将为书写复杂程序的人铺设好了坦途。

但这也会让你有点发懵。

感谢 Mathematica 的历史悠久以及 WolframAlpha 的大脑,Wolfram 语言知道许多东西,也能通过内置函数对其进行操作—包括数据操纵和分析、可视化及制作图表,图像、地理、几何、声音、科学数据以及几乎自动化的用户界面开发,进入数据、社交数据,甚至在云端的部署。这是所有一切东西的大杂烩,甚至还要多得多,这正是它最晦涩难懂的地方—因为它跟传统的数据与代码及界面分离的做法实在是太不一样了。

当然,在具备自然语言输入的同时,Wolfram 语言也有语法和结构以及操作符等,那些创建无缺陷的、可按你思路运行的程序所必须的构造物。这也意味着这门语言还是需要学习的—并非说谁都可以马上就能使唤它来开发应用。

Wolfram的用武之地:Raspberry Pi,智能手机、设备

这些应用有很多用武之地。

Wolfram 最近发布了一个 Raspberry Pi 版的 Mathematica。这不仅令人好奇:承载着浩大知识的 Wolfram 语言是如何被容纳进 Pi 小小的身躯内的?

奥秘在于它的引擎非常便携,但显然知识却是非常庞大的,所以 Wolfram 语言所需要的知识是集中存放到云端的,在处理时引擎会向云端索取知识。

Wolfram 语言还可支持桌面应用、移动应用、web 应用的开发,且既可支持公有云也可支持私有云。对于移动应用将会嵌入一个 Wolfram 引擎,然后通过 API 的方式去获取所需的数据。而所有代码均可复制粘贴于云端、设备及桌面之间。

不过不想学 Wolfram 语言也没问题,Wolfram 说像 Java 那样的原生语言可以通过函数调用来利用 Wolfram 引擎。从表面上来看开发者仍只是在调用 Java,但实际上后台会访问 Wolfram 的云。

感知编码,智能对象

由于 Wolfram 语言具备很高的自动化能力和智能水平,且对待数据和代码的方式十分类似,所以这种语言是不是可以被认为是具有感知能力的代码呢?

从某种程度来说是这样的。Wolfram 解释说,他们试图做的,是让程序员设定目标,然后由计算机去琢磨如何实现目标。

但这并不是要让机器去创新手段,不过 Wolfram 也对让计算机去创新、创作感兴趣。比方说Wolfram Tones就是这样。这款音乐制作应用可以根据用户的输入自动创作音乐(在他的《一种新科学》中提到过)。这种东西他说很多都在“秘密地”搞,往往是替玩对冲基金的金融服务公司弄的。而 Wolfram 引擎已经为如果做事和展示结果添加了一定程度的智能。

当然这种智能跟人工智能仍相去甚远,但这一天也许会来的。可能是以大规模分布的形式。

Wolfram 说,视定义的不同,目前全球大约有 100-150 亿台计算机,而且很多设备内部也有计算机。在不久的将来,几乎所有的东西都将由计算机组成—甚至很小的东西。到那时,计算的作用甚至比现在还要大,而且那时候各种级别的东西都将是可适配的、可修改的。

Wolfram 所指的也许是技术奇点。当我们到达技术奇点时,智能将成为万物唯一的定义因子,而且那时候的技术发展节奏之快已非现在的人们所能理解了,世界变化越来越快,快到人类已经无法想象。

如果这个奇点真的到来,可能就是智能系统发展的结果。也许 Wolfram 语言就是此类系统的先驱。

也因此 Wolfram 语言才会如此的难易理解和解释,正如 Wolfram 在博客中所述:

在我看来,现在还是它将会带来的结果的早期阶段。但我已经可以确定该项目是我们迄今为止最重要的一个。这需要艰苦卓绝的工作,但它所展现的景象会令人无比兴奋。我已经迫不及待,恨不得“即将推出”变成所有地方的人都能使用的实际系统……

[本文编译自:venturebeat.com]

[翻译]POSIX 线程编程

文章原文:POSIX Threads Programming

作者: Blaise Barney, Lawrence Livermore National Laboratory

地址:https://computing.llnl.gov/tutorials/pthreads/#PthreadsAPI

翻译:webdancer(翻译的不好,勿喷,O(∩_∩)O~)

=================================================

  1. 概要
  2. Pthreads总览
  1. 什么是线程?
  2. 什么是Pthreads?
  3. 为什么有Pthreads?
  4. 设计线程程序

继续阅读

python的namespace问题

1.问题

写程序的时候,出现了一个bug,看了很久也没有发现问题。程序的逻辑模样大致如下所示:

for i in range(4):
    x = [ e**i for i, e in enumerate(range(5))] 
    y = 2 * i
    print y

如果对python很熟悉的,一眼就可以看出问题的所在。程序的原意是:y = 2 * i 这条语句中i与第一行中的i一致的,但是却使用了第二行中的i值,但是程序依然循环了四次。打印的结果是:

8
8
8
8 

这令人非常的疑惑,主要是在python 2,x中,list comprehension中的变量的scope没有仅限于‘[ ]’中,而是漏了出来。这的确有点不太符合逻辑,因为在理解上,‘[ ]’中的变量的scope仅限于里面,更加符合直观的感觉。

2.解决

解决的方法:

  1. 避免名字冲突就行了,比如把第二行的i换成j。
  2. 升级python的版本。在python 3.x中,这个问题就不存在了,list comprehension表达式有了自己的scope.(是不是应该升级到python 3了??但是好像一些包还是支持3.x不太好呀,囧。。。)

3.python 的namespace和scope

namespace就是一个从名字到对象的映射,现在的python好像就是用字典数据结构实现的。对于namespace注意的就是生命周期(lifetime)和作用域(scope)。所谓生命周期就是实现namespace的对象在内存中存在的时间,而作用域(scope)就是namespace在程序中起作用的文本区域。




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee