Java BASE64加密解密

Java BASE64加密解密 sun.misc包是Sun公司提供给内部使用的专用API,不建议使用。另外apache已经实现了一套:
参考org.apache.commons.codec.binary.Base64
下载地址:http://commons.apache.org/codec/download_codec.cgi

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
 * BASE64加密解密
 */
public class BASE64
{
    /**
     * BASE64解密
   * @param key
     * @return
     * @throws Exception
     */
    public static byte[] decryptBASE64(String key) throws Exception {
        return (new BASE64Decoder()).decodeBuffer(key);
    }
    /**
     * BASE64加密
   * @param key
     * @return
     * @throws Exception
     */
    public static String encryptBASE64(byte[] key) throws Exception {
        return (new BASE64Encoder()).encodeBuffer(key);
    }
    public static void main(String[] args) throws Exception
    {
        String data = BASE64.encryptBASE64("法证先锋 第二部".getBytes());
        System.out.println("加密前:"+data);
        //5rOV6K+B5YWI6ZSLIOesrOS6jOmDqA==
        byte[] byteArray = BASE64.decryptBASE64(data);
        System.out.println("解密后:"+new String(byteArray));
    }
}

利用HDFS java API增删改查操作

利用HDFS java API增删改查操作
在做这个实验的时候需要特别注意下面三个问题:
1、hdfs安全模式需要关闭 命令:./hadoop dfsadmin -safemode leave
2、工程中依赖的版本必须和集群的一致,否则也会报 version不一致错误
3、hadoop集群用户权限的问题,以及各个目录的作用
目前为什么会有这三个问题的原因待查!!!
未验证目前使用hadoop的版本(release-0.20.0)是否支持webhdfs,反正我是怎么都连接不上啊!!!
从这上面看,0.20.0 可能是不支持的
https://jira.springsource.org/browse/IMPALA-15?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
Serengeti Distro:
Apache Hadoop:1.0.1
GreenPlum HD:1.1(Apache Hadoop 1.0.0)
CloudEra: CDH3(Apache Hadoop 0.20.2, WebHDFS is not supported in this version)
Hortonworks: 1.0.7 (Apache Hadoop 1.0.2)
步骤如下:
工程结构,如图:

工程结构

工程结构


上代码 O(∩_∩)O哈哈~
pom.xml配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.yun.hdfs</groupId>
	<artifactId>hdfs</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<build>
		<plugins>
			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<appendAssemblyId>false</appendAssemblyId>
					<descriptorRefs>
						<descriptorRef>jar-with-dependencies</descriptorRef>
					</descriptorRefs>
					<archive>
						<manifest>
							<mainClass>com.yun.hdfs.WangPan</mainClass>
						</manifest>
					</archive>
				</configuration>
				<executions>
					<execution>
						<id>make-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>assembly</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-core</artifactId>
			<version>0.20.2</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
	</dependencies>
</project>

WangPan.java 主方法用于调用:

package com.yun.hdfs;
import java.io.IOException;
public class WangPan {
	/*** 运行结果描述. */
	private static String result = "";
	public static void main(String[] args) {
		try {
			// 判断命令输入是否正确
			if (args[0] != null && !"".equals(args[0]) && args.length > 0) {
				if ("upload".equals(args[0])) {
					result = "upload:" + WangPanUtils.uploadFile(args);
				} else if ("delete".equals(args[0])) {
					result = "delete:" + WangPanUtils.deleteFile(args);
				} else if ("query".equals(args[0])) {
					if (WangPanUtils.listFile(args) == null) {
						result = "query:fail!";
					} else {
						result = "query:success";
					}
				} else if ("read".equals(args[0])) {
					result = "read:" + WangPanUtils.readFile(args);
				} else {
					System.out.println("sorry,wo have no this service!");
				}
				System.out.println(result);
			} else {
				System.out.println("fail!");
				System.exit(1);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

WangPanUtils.java增删改查:

package com.yun.hdfs;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class WangPanUtils {
	/**
	 * 上传文件. java -jar /root/hdfs-0.0.1-SNAPSHOT.jar upload /root/test-hdfs.txt
	 * hdfs://hadoopm:9000/user/root/upload/12390po.txt
	 *
	 * @param args
	 * @return
	 * @throws IOException
	 */
	public static String uploadFile(String[] args) throws IOException {
		String loaclSrc = args[1];
		String dst = args[2];
		if (args.length < 3) {
			return "fail";
		}
		InputStream in = new BufferedInputStream(new FileInputStream(loaclSrc));
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(dst), conf);
		OutputStream out = fs.create(new Path(dst));
		IOUtils.copyBytes(in, out, 4096, true);
		return "success";
	}
	/**
	 * 查询文件列表. java -jar /root/hdfs-0.0.1-SNAPSHOT.jar query
	 * hdfs://hadoopm:9000/user/root/
	 *
	 * @param args
	 * @return
	 * @throws IOException
	 */
	public static Path[] listFile(String[] args) throws IOException {
		if (args.length < 2) {
			return null;
		}
		String dst = args[1];
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(dst), conf);
		FileStatus[] statu = fs.listStatus(new Path(dst));
		Path[] listPaths = FileUtil.stat2Paths(statu);
		return listPaths;
	}
	/**
	 * 删除文件.
	 * java -jar /root/hdfs-0.0.1-SNAPSHOT.jar delete hdfs://hadoopm:9000/user/root/upload/12390po.txt
	 *
	 * @param args
	 * @return
	 * @throws IOException
	 */
	public static String deleteFile(String[] args) throws IOException {
		if (args.length < 2) {
			return "fail";
		}
		String fileName = args[1];
		Configuration config = new Configuration();
		FileSystem hdfs = FileSystem.get(URI.create(fileName), config);
		Path path = new Path(fileName);
		if (!hdfs.exists(path)) {
			return "fail";
		}
		boolean isDeleted = hdfs.delete(path, false);
		if (isDeleted) {
			return "success";
		} else {
			return "fail";
		}
	}
	/**
	 * 读取文件.
	 * java -jar /root/hdfs-0.0.1-SNAPSHOT.jar read hdfs://hadoopm:9000/user/root/upload/123.txt /root/test-readfile898.txt
	 *
	 * @param args
	 * @return
	 * @throws IOException
	 */
	public static String readFile(String[] args) throws IOException {
		if(args.length < 3){
			return "fail";
		}
		String dst = args[1];
		String newPath = args[2];
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(dst), conf);
		FSDataInputStream hdfsInStream = fs.open(new Path(dst));
		OutputStream out = new FileOutputStream(newPath);
		byte[] ioBuffer = new byte[1024];
		int readLen = hdfsInStream.read(ioBuffer);
		while (-1 != readLen) {
			out.write(ioBuffer, 0, readLen);
			readLen = hdfsInStream.read(ioBuffer);
		}
		out.close();
		hdfsInStream.close();
		fs.close();
		return "success";
	}
}
/**
	 * 创建文件夹.
	 * java -jar /root/hdfs-0.0.1-SNAPSHOT.jar mkdir hdfs://hadoopm:9000/user/root/upload/test909
	 *
	 * @return
	 * @throws IOException
	 */
	public static String mkdir(String[] args) throws IOException{
		if(args.length < 2){
			return "fali";
		}
		String dst = args[1];
		Configuration conf = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(dst), conf);
		Path path = new Path(dst);
		if (fs.exists(path)) {
			return "fail";
		}
		fs.mkdirs(path);
		return "success";
	}

PS:需要注意的是,我们需要把这个工程利用maven打包成一个可运行的jar包,使用如下命令:

打包命令

打包命令


执行命令在每个方法注释上写明了,执行效果如下:
增删改查效果

增删改查效果


还需要访问 http://hadoopm:50070/ -> Browse the filesystem 查看hdfs文件操作是否真的成功
web hdfs

web hdfs

curl命令

发现个好东东:curl。curl是利用URL语法在命令行方式下工作的文件传输工具。
它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。
curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
Windows操作系统下的网络蚂蚁,网际快车(FlashGet)的功能它都可以做到。准确的说,curl支持文件的上传和下载,所以是一个综合传输工具,但是按照传统,用户习惯称curl为下载工具。
获得页面
使用命令:curl http://curl.haxx. se
这是最简单的使用方法。用这个命令获得了http://curl.haxx. se指向的页面,同样,如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地。如果下载的是HTML文档,那么缺省的将不显示文件头部,即HTML文档的header。要全部显示,请加参数 -i,要只显示头部,用参数 -I。任何时候,可以使用 -v 命令看curl是怎样工作的,它向服务器发送的所有命令都会显示出来。为了断点续传,可以使用-r参数来指定传输范围。
获取表单
在WEB页面设计中,form是很重要的元素。Form通常用来收集并向网站提交信息。提交信息的方法有两种,GET方法和POST方法。先讨论GET方法,例如在页面中有这样一段:

<form method=”GET” action=”junk.cgi”>
<input type=text name=”birthyear”>
<input type=submit name=press value=”OK”>
</form>

那么浏览器上会出现一个文本框和一个标为“OK”的按钮。按下这个按钮,表单就用GET方法向服务器提交文本框的数据。
例如原始页面是在 www.hotmail. com/when/birth.html看到的,然后您在文本框中输入1905,然后按OK按钮,那么浏览器的URL现在应该是:“www.hotmail. com/when/junk.cgi?birthyear=1905&press=OK”
对于这种网页,curl可以直接处理,例如想获取上面的网页,只要输入:
curl “www.hotmail. com/when/junk.cgi?birthyear=1905&press=OK”
就可以了。
表单用来提交信息的第二种方法叫做POST方法,POST方法和GET方法的区别在于GET方法使用的时候,浏览器中会产生目标URL,而POST不会。类似GET,这里有一个网页:

<form method=”POST” action=”junk.cgi”>
<input type=text name=”birthyear”>
<input type=submit name=press value=”OK”>
</form>

浏览器上也会出现一个文本框和一个标为“OK”的按钮。按下这个按钮,表单用POST方法向服务器提交数据。
这时的URL是看不到的,因此需要使用特殊的方法来抓取这个页面:
curl -d “birthyear=1905&press=OK” www.hotmail. com/when/junk.cgi
这个命令就可以做到。
1995年年末,RFC 1867定义了一种新的POST方法,用来上传文件。主要用于把本地文件上传到服务器。此时页面是这样写的:

<form method=”POST” enctype=’multipart/form-data’ action=”upload.cgi”>
<input type=file name=upload>
<input type=submit name=press value=”OK”>
</form>

对于这种页面,curl的用法不同:
curl -F upload=@localfilename -F press=OK URL
这个命令的实质是将本地的文件用POST上传到服务器。
有关POST还有不少用法,用户可以自己摸索。
使用PUT
HTTP协议文件上传的标准方法是使用PUT,此时curl命令使用-T参数:
curl -T uploadfile www.uploadhttp. com/receive.cgi
有关认证
curl可以处理各种情况的认证页面,例如下载用户名/密码认证方式的页面(在IE中通常是出现一个输入用户名和密码的输入框):
curl -u name:password www.secrets. com
如果网络是通过http代理服务器出去的,而代理服务器需要用户名和密码,那么输入:
curl -U proxyuser:proxypassword http://curl.haxx. se
任何需要输入用户名和密码的时候,只在参数中指定用户名而空着密码,curl可以交互式的让用户输入密码。
引用
有些网络资源访问的时候必须经过另外一个网络地址跳转过去,这用术语来说是:referer,引用。
对于这种地址的资源,curl也可以下载:
curl -e http://curl.haxx. se daniel.haxx. se
指定用户端
有些网络资源首先需要判断用户使用的是什么浏览器,符合标准了才能够下载或者浏览。
此时curl可以把自己“伪装”成任何其他浏览器:
curl -A “Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)” URL
这个指令表示curl伪装成了IE5.0,用户平台是Windows 2000。(对方服务器是根据这个字串来判断客户端的类型的,所以即使使用AIX也无所谓)。
使用:
curl -A “Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)” URL
此时curl变成了Netscape,运行在PIII平台的Linux上了。
COOKIES
Cookie是服务器经常使用的一种记忆客户信息的方法。如果cookie被记录在了文件中,那么使用命令:
curl -b stored_cookies_in_file www.cookiesite. com
curl可以根据旧的cookie写出新cookie并发送到网站:
curl -b cookies.txt -c newcookies.txt www.cookiesite. com
加密HTTP
如果是通过OpenSSL加密的https协议传输的网页,curl可以直接访问:
curl https://that.secure.server. com
http认证
如果是采用证书认证的http地址,证书在本地,那么curl这样使用:
curl -E mycert.pem https://that.secure.server. com

没有云的话 大数据就是个作坊by王坚

王坚,阿里巴巴最富争议性的人物之一,爱者极爱,恨者极恨。
5月12日,我和MTC的朋友,在杭州发起并主持了一场关于云计算的沙龙,虾米的思践聊了云音乐,快的打车陈伟星聊了云时代的产品设计,短趣网王强宇聊了云时代的创业,当然少不了王坚聊一聊他对云计算的看法。
当天,青龙老贼发了一段王坚的部分观点,遭遇了他开通微信公众号以来最强烈的退粉,也激起了圈内人的各种讨论,这就是王坚的“影响力”。
我把王坚的分享做了个详细版的梳理,里面涉及了阿里云的定位、对大数据的反思、对APP创新的不看好,信息量很大,你可以感受一下。
一、无人机是大数据的典型
我热爱和平,但一讲到云计算和大数据,我想到的两个例子,都跟战争有关。
一个例子是,《世界是平的》作者去前线,看了现场的指挥官,发现西点军校应该重新办了。因为一个连排级的军官,只要一个电话,航母上的飞机就过来了。这放在以前的战争里是不会发生的,一个连排级军官能够动用的战争资源非常有限。今天,其实一个连排级的军官需要的训练和过去的军长师长是一样的。
经常有人问,如果有一定的基础设施,我能不能改变世界。在以前,只有国家主席可以做,今天一个人可以做的比主席还能多。因为有了云计算。
另外一个例子是,有人和我吹牛,说世界上大数据用得最好的就是无人机。前几天美国还在开会讨论为什么要租用中国的卫星,就是因为它自己的数据不够。无人机就是非常典型的一个创新,以前仗不是这么打的,今天有了大数据后就变了。
所以,云计算可以让你做以前不能做的事情,做以前不能做的规模。
二、我们的客户才是最会用数据的人
阿里云最早成立的时候,我们说自己是数据分享第一平台,对于这个定位,我自己觉得还蛮超前的。
阿里巴巴最早在讨论的时候,我们说为什么提数据,不提信息,这是一个很关键的事情。IBM会说数据没有用,知识才有用,所以这个定位很关键。
只要一谈到数据,我们其实就把自己定位在平台上了。我们想象我们的客户是把数据用到最好的人,而不是我们自己。
今天,最成功的数据公司就是谷歌。谷歌拿了全世界每个人都有的数据,就是web,它就靠自己的处理能力,做成了世界上最大的生意。谷歌初期的时候,它有的数据别人也有,只是别人没有他的处理能力和思想。
数据就是数据,只是要有人把他做成生意。
所以我们定位自己的时候,数据就是数据,这个是最基本的东西,有人比你更聪明,会把这个事情做成重要的生意。
今天的数据远远超过以前WEB的数据,所以可以想象的生意也会多很多很多,所以肯定可以比以前做得更大。
以前也没人知道数据在哪里,直到谷歌把他变成一个搜索,有办法把广告引导搜索里面。今天看来这个很简单,放当初很难,因为要把大家都有的东西,做成一个挣钱的东西,当时没几个人想清楚的,否则微软、雅虎也都不会把雅虎外包给别人。
三、“大数据”叫错了
之前田溯宁在北京组织了一个活动,请了《大数据》的作者,大家开了一个很小的研讨会。
我分享时说,其实大数据是叫错掉的,“大数据”没有反应这个问题最本质的东西。
其实大数据很早以前就有,只是光只有数据大是没有用处的。世界上最大的数据估计和互联网一点关系都没有,欧洲对撞实验室做一次碰撞的数据,可能一辈子都做不完,最大的数据估计在那里。
今天的数据不是大,真正有意思的是数据变得在线了,这个恰恰是互联网的特点。所有东西在线这个事情,远远比“大”更反映本质。
像快的打车要用一个交通的数据,如果这些东西不在线,是没有用的。
为什么今天的淘宝数据值钱,因为他在线了。写在磁带、写在纸上的数据,根本没有用。
反过来讲,在线让数据搜集变得非常容易。过去美国谁要做总统,需要做盖勒普调查,去街上拦2000个人,在纸上打个勾,预测就很准了。现在不用做这个事情,只要在twitter上分析每个人发的东西,就可以知道总统会是谁了。
而且盖勒普调查做完之后很难快速影响社会,现在数据可以反过来快速影响社会。就像打车软件,如果要影响出租车司机,可能比出租车公司更大,原因就是数据在线了。
有时候,一些石油、地质之类的公司来跟我讲大数据,我就想不通这算不算大数据。他们的数据多是肯定的,但是他们的数据不在线,没有意义。
四、数据比功能更重要
产品我是不太懂的,阿里云的产品做得那么不好,都是我的责任,这个得求大家原谅。
但吃了很多苦头后,对于产品心得还是有的。
目前我没有看到一个产品和数据结合得很好。非互联网时期的产品,功能一定是它的价值,今天互联网的产品,数据一定是它的价值。
做航旅信息的产品,出了很多款。最近我看到出了一个“航旅纵横”,我用的比较多,我也不知道产品好不好,反正数据很好,他可以告诉你前一个航班发生了什么事情。
过去的软件,很多功能超出数据的重要性,但我相信,接下来,数据比功能会更重要。互联网人应该会能理解这个说法。
我和马云开玩笑说,阿里巴巴对数据的理解深度,不会超过苏宁对电子商务的理解。我的意思其实是,机会在哪里,大家都没搞清楚。
前几天我在北京碰到叶凯(京玩蟹科技有限公司CEO),他说游戏做来做去,发现数据是最重要的东西,在几个机房里数据拷来拷去很痛苦。
我猜测,他理解游戏的话,完全靠直觉已经不够了,数据可以帮他做这个事情。就好像一个人做在室内用数据来开飞机,光是训练飞行员的成本都不知道降低多少,这和用数据去改进游戏是异曲同工的。
五、云计算是个信任生意
我看云计算的时候,突然发现,云计算是个信任生意。包括虾米,短趣,能搬到阿里云,都是一个信任。
中国是全世界最早用纸币的国家。一张纸上盖个章,就让人相信是财富,这需要极大勇气的。今天,我们反而大大落后了,我们不相信信用卡,把信用卡当借记卡在用了,这是很要命的地方。
有人说他要做三年赚200亿美金(的互联网项目),他还要依靠别人(的云计算服务),他要相信这一点,是很了不起的。
我觉得,没有这个勇气,是不可能创新的。中国今天是有这样的机会。
我这里有个很自豪的案例。今天全国中国的药品,都有一个条形码,它需要去追踪每个药到了哪个批发商,到了哪个零售商,到了哪个医院,到了哪个患者,这个东西是个很重要的东西。现在这个东西就在阿里云上面,350万亿盒的数据都在上面。将来你跑到医院,自然能知道哪个是真药假药,也就是说,原来乱七八糟的事情就没了。这个是很大的创新。以前这些数据不在线的时候,你根本不敢去想,现在,你可以做很多的事情了。
另外一个案例,保险是一个很传统的行业。开一个保险公司,必须要开办事处。每人敢说,现在办一个保险,可以不签一个书面的东西。但是,可能今年下半年,中国会出一家保险公司,这是全世界第一家没有办事处的保险公司。不需要在纸上签任何东西,在线就能做完所有事情。
按我的理解,云计算能做好的话,创新机会非常大。
六、做APP,是在别人花园弄点盆栽
我觉得,移动互联网的创新,可以超越APP创新的范畴。
今天APP上的创新,有点像在人家花园里种点小花。因为苹果和安卓已经圈了一个花园,你种点花种点草是没有问题的,就像是去花鸟市场买点盆栽,反正是死也死不了活也活不好。
但是你要做点有生命力的东西,还是有挑战的。你要跑到大森林里,才能做有生命力的东西。否则叫你下架就下架,你会觉得还是有问题的。
当然,那个花园是一个很好的环境,也有人来看。但是在中国做生态的话,我们还是可以做有革命性的东西。
具体是什么,我们也真不知道。
七、有了施乐,才有苹果
我们做云计算最大的挑战是什么,就是我们真不懂。
这是一个无中生有的行业,我们过去只是在书上读到过的。是靠大家的互相配合、交互才能做起来。
我觉得应该办一个互联网博物馆。今天大家都看到了结果,没看到过程,这样的国家是很难创新。
大家可能不知道,大概百分之一百的鼠标都在中国生产,大部分也在中国消费,很多技术也在中国。很少有人去问,为什么有个东西要叫鼠标,第一个鼠标出来的时候是很丑陋的木头做的。
今天大家看到有个很漂亮的手机,叫做iphone,有个很好的操作系统,有个很好的appstore,大家可能没想过,这东西怎么来的。我早上在看一个关于美国八十年代经济的片子,其中采访了乔布斯,他说,如果不被苹果赶走,可能不会发生后面的事情。如果当时乔布斯没被赶走,没有一赌气去做NeXT,没有被买回来作为ios的基础的话,是不会有今天的苹果的。
所以,这里面的机缘巧合是很难计划的。
我要抱歉的是,阿里云是肯定要做好的,这个吃苦过程肯定逃不掉。
有一个八卦,苹果先做麦金塔,微软随后出了视窗,苹果就告微软抄袭。盖茨就和乔布斯说,我们就别互相搞了,其实我们都偷了施乐的东西。施乐没做大,但做出了很大的贡献。
中国的环境里没有施乐这样的公司,自然而然就不要想出苹果这样的公司。
我想说,就算各位创业者和施乐一样做点死不死活不活的东西,也很有意义。
八、不是搜集什么数据,而是做什么服务
今天的手机的传感器,和巡航导弹的传感器差不多。它能搜集到的东西很多,但是没有产生多大价值。
我觉得,数据搜集这件事,已经没有多大创新了,只要你想得到,我们一定能做得到。我觉得真正的创新,是你在这上面能够做什么,这还没有人弄懂。
这是一个鸡和蛋的问题,如果没有人能够用得好,那后面的东西不会发生。
最早的时候,有人会说,基于位置的服务什么的。但是到了今天,依然没有人知道了位置后,把服务做好。我觉得,这是最大的挑战。
九、云计算这名字有歧义
云计算是工业时代的电,大数据就是福特生产线,云存储就是钢铁工业。
也就是说,没有钢铁,就没有电,就不会有大规模工业化生产。没有云计算,大数据不会出来,如果美云计算没有解决云存储的问题,也不会出来。
我觉得云计算这名字的歧义在于,我们说这个的时候,其实包括了云计算、大数据、云存储等等所有的东西。
大数据,是我今天能想到的,那条能起来的福特生产线。到了最后,大家应该会忘记了云计算,只记得福特了。所以我说,看得见的前端,看不见的后台。
我不相信有人说,我做大数据,但是没有云的,那就是小作坊。
十、千万不要想着拿数据去改进业务
今天的银行,都不会是靠大数据起来的公司。银行靠什么处理数据,靠IBM。你可以算出来他做数据的成本,他处理数据产生的价值,可能都无法抹平处理数据的成本。
数据真正了不起的地方,是靠小的成本,去产生有价值的东西。
并不是说,有数据的地方,就会有大数据业务的存在。
阿里巴巴在数据上做的最好的是金融,但金融不等于银行。阿里金融做小贷的事情,恰恰是银行做不了的。银行没有这个数据,银行做信用评级的成本极高,银行不做小的贷款。
阿里金融每天贷10块钱,100块钱的人多得很。有个贷1块钱的客户,写了个感谢信,说这辈子从来没有人借给他一块钱,突然有人借他1块钱,他就觉得人生从此被尊敬了。
你千万不要想着拿数据去改进一个业务,这不是大数据。你一定是去做了一件以前做不了的事情。
亚马逊是全球做推荐最好的业务,这可以算是大数据的早期,但现在它每天想着怎么把推荐做得更好,我觉得这件事情一定没有希望。
http://www.techweb.com.cn/people/2013-05-14/1296347.shtml

js的Prototype属性解释及常用方法

函数:原型
每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文)。这个属性非常有用:为一个特定类声明通用的变量或者函数。
prototype的定义
你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在。例子:
Example PT1
CODE:

function Test()
{
}
alert(Test.prototype); // 输出 "Object"

给prototype添加属性
就如你在上面所看到的,prototype是一个对象,因此,你能够给它添加属性。你添加给prototype的属性将会成为使用这个构造函数创建的对象的通用属性。
例如,我下面有一个数据类型Fish,我想让所有的鱼都有这些属性:livesIn=”water”和price=20;为了实现这个,我可以给构造函数Fish的prototype添加那些属性。
Example PT2
CODE:

function Fish(name, color)
{
this.name=name;
this.color=color;
}
Fish.prototype.livesIn="water";
Fish.prototype.price=20;

接下来让我们作几条鱼:
CODE:
var fish1=new Fish(“mackarel”, “gray”);
var fish2=new Fish(“goldfish”, “orange”);
var fish3=new Fish(“salmon”, “white”);
再来看看鱼都有哪些属性:
CODE:

for (int i=1; i<=3; i++)
{
var fish=eval_r("fish"+i);   // 我只是取得指向这条鱼的指针
alert(fish.name+","+fish.color+","+fish.livesIn+","+fish.price);
}

输出应该是:
CODE:

"mackarel, gray, water, 20"
"goldfish, orange, water, 20"
"salmon, white water, 20"

你看到所有的鱼都有属性livesIn和price,我们甚至都没有为每一条不同的鱼特别声明这些属性。这时因为当一个对象被创建时,这个构造函数将会把它的属性prototype赋给新对象的内部属性__proto__。这个__proto__被这个对象用来查找它的属性。
你也可以通过prototype来给所有对象添加共用的函数。这有一个好处:你不需要每次在构造一个对象的时候创建并初始化这个函数。为了解释这一点,让我们重新来看Example DT9并使用prototype来重写它:
用prototype给对象添加函数
Example PT3
CODE:

function Employee(name, salary)
{
this.name=name;
this.salary=salary;
}
Employee.prototype.getSalary=function getSalaryFunction()
{
return this.salary;
}
Employee.prototype.addSalary=function addSalaryFunction(addition)
{
this.salary=this.salary+addition;
}

我们可以象通常那样创建对象:
CODE:

var boss1=new Employee("Joan", 200000);
var boss2=new Employee("Kim", 100000);
var boss3=new Employee("Sam", 150000);

并验证它:
CODE:

alert(boss1.getSalary());   // 输出 200000
alert(boss2.getSalary());   // 输出 100000
alert(boss3.getSalary());   // 输出 150000

这里有一个图示来说明prototype是如何工作的。这个对象的每一个实例(boss1, boss2, boss3)都有一个内部属性叫做__proto__,这个属性指向了它的构造器(Employee)的属性prototype。当你执行 getSalary或者addSalary的时候,这个对象会在它的__proto__找到并执行这个代码。注意这点:这里并没有代码的复制(和 Example DT8的图表作一下对比)。

js实现hashmap

js实现hashmap ,项目中遇到了要在js中使用java hashmap的功能,找到一个不错的JS实现,
感谢lujc:

/***
 * js 实现hashmap  功能  lujc
 * 常用功能实现
 * @return
 */
function HashMap(){
	this.length = 0;
	this.maxLength = Number.MAX_VALUE;
	this.container = {};
}
HashMap.prototype.put = function(objName,objValue){
	try{
		if(this.length >= this.maxLength)
			throw new Error("[Error HashMap] : Map Datas' count overflow !");
		if(objName != ""){
			for(var p in this.container){
				if(p == objName){
					this.container[objName] = objValue;
					return ;
				}
			}
			this.container[objName] = objValue;
			this.length ++ ;
		}
	}catch(e){
		return e;
	}
};
HashMap.prototype.get = function(objName){
	try{
		if(this.container[objName])
			return this.container[objName];
	}catch(e){
		return e;
	}
};
HashMap.prototype.contains = function(objValue){
	try{
		for(var p in this.container){
			if(this.container[p] === objValue)
				return true;
		}
		return false;
	}catch(e){
		return e;
	}
};
HashMap.prototype.remove = function(objName){
	try{
		if(this.container[objName]){
			delete this.container[objName];
			this.length -- ;
		}
	}catch(e){
		return e;
	}
};
HashMap.prototype.pop = function(objName){
	try{
		var ov = this.container[objName];
		if(ov){
			delete this.container[objName];
			this.length -- ;
			return ov;
		}
		return null;
	}catch(e){
		return e;
	}
};
HashMap.prototype.removeAll = function(){
	try{
		this.clear();
	}catch(e){
		return e;
	}
};
HashMap.prototype.clear = function(){
	try{
		delete this.container;
		this.container = {};
		this.length = 0;
	}catch(e){
		return e;
	}
};
HashMap.prototype.isEmpty = function(){
	if(this.length === 0)
		return true;
	else
		return false;
};
HashMap.prototype.runIn = function(fun){
	try{
		if(!fun)
			throw new Error("[Error HashMap] : The paramer is null !");
		for(var p in this.container){
			var ov = this.container[p];
			fun(ov);
		}
	}catch(e){
		return e;
	}
};

Hadoop学习新人必看

Hadoop新人必看:
新人困惑:
大家对整个云计算没什么感觉,根本就不理解为啥hadoop这么设计,hadoop和云计算是什么关系 只是听人说 好
但是好在哪里 根本不知道
下面给出一个简易入门步骤:
1、推荐看下 张荣典的视频
《云计算之前生今世与未来》,视频地址:http://tianhailong.com/hadoop-forums/topic/hadoop%E8%B5%84%E6%96%99%E6%B1%87%E6%80%BB
先补习下云计算知识 弄清楚啥叫云计算 都分为那些层?
2、明确了云计算是个什么东东后 然后再弄清楚hadoop是干什么用的 hadoop位于云计算的哪个层里 起到什么作用
hadoop包含哪些组件,每个组件提供什么功能,组件与组件之间的关系是什么?
3、然后再开始搭建Hadoop集群
写mapreduce的helloworld
然后再开始装hbase、zookeeper等 挨个实现helloworld
Hadoop集群搭建教程:http://tianhailong.com/hadoop%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA%E8%AF%A6%E7%BB%86%E7%AE%80%E6%98%8E%E6%95%99%E7%A8%8B.html
4、需要准备的知识:任何语言的编程经验+java(最好会)+云计算知识背景(大数据知识背景)+linux安装操作+虚拟机知识
必须先记在心里的东西:
1、cygwin只是模拟了linux环境
2、hadoop必须安装在linux环境上
3、mapreduce程序开发直接就在window上开发即可
4、mapreduce程序的运行:可以把写好的程序打成jar包 放到hadoop集群上 执行hadoop命令(就像大家安装完 验证集群是否正常运行那样 ”计算圆周率“一样)
5、 我们学的是hadoop 而不是整环境 ,可以先把环境的问题绕过
6、刚开始千万别用eclipse连接hadoop集群
7、如果你说6的理由是测试方便,那我告诉你,写junit更方便

台湾国网中心Hadoop实验集群

从网上找到了好东西,还是台湾人民好啊,搭建好的Hadoop集群,开放了公共服务 http://hadoop.nchc.org.tw/ 对于想学习hadoop编程,又苦于没有机器,你们有福啦 O(∩_∩)O哈哈~
这是他们的公告

  1. 歡迎至 forum.hadoop.tw 或 臉書粉絲團 進行討論
  2. 歡迎加入 公告群組,以利接收即時公告事宜
  3. 初學者請參閱線上教學: Hadoop 觀念篇 ,
    實作步驟請參閱以下三個連結:
    帳號申請 | HDFS 練習 | MapReduce 練習 ]
  4. 本叢集所採用的 Hadoop 版本是 0.20.1,寫程式時請參考 javadoc
  5. 倘若貴單位不允許 SSH 連線,或有 PROXY 限制,請改連https://hadoop.nchc.org.tw 並採用系統帳號密碼(hXXXX)登入。至於HDFS 與 MapReduce 也請請點選對應連結存取。

本叢集純為實驗用途,無法保證7×24服務品質
重要數據資料請務必另行備份,謝謝!
重要運算工作亦請考慮使用其他付費平台

家目錄空間吃緊中,請盡量上傳至HDFS後,
清除家目錄檔案,謝謝!

若有公用資料集運算需求,請置於
hdfs://hadoop.nchc.org.tw/pub,謝謝!

hadoop集群服务

hadoop集群服务


1、先注册账号:
http://hadoop.nchc.org.tw/new_register.php
注册

注册


2、邮箱激活
激活邮件

激活邮件


3、一会你会收到SSH地址、用户名和密码
SSH账号密码

SSH账号密码


4、登录后进入界面,就可以运行计算π的那个示例啦(注意:浏览器得支持java运行才能看到这个界面),或者使用SSH客户端输入地址、用户名密码链接到Hadoop集群, O(∩_∩)O哈哈~
计算π1

计算π1


计算π2

计算π2

关于fsockopen pfsockopen函数被禁用的解决方法

关于fsockopen pfsockopen函数被禁用的解决方法
一、
服务器同时禁用了fsockopen pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。
具体操作:
搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。
示例如下
修改前:
$fp = fsockopen($host, 80, $errno, $errstr, 30);
修改后:
$fp = stream_socket_client($host.”80″, $errno, $errstr, 30);
二、
如果PHP版本低于5.0,fsockopen被禁用,又没有stream_socket_client()怎么办呢?自己写一个函数实现fsockopen的功能,参考代码:
function b_fsockopen($host, $port, &$errno, &$errstr, $timeout) {
$ip = gethostbyname($host);
$s = socket_create(AF_INET, SOCK_STREAM, 0);
if (socket_set_nonblock($s)) {
$r = @socket_connect($s, $ip, $port);
if ($r || socket_last_error() == EINPROGRESS) {
$errno = EINPROGRESS;
return $s;
}
}
$errno = socket_last_error($s);
$errstr = socket_strerror($errno);
socket_close($s);
return false;
}
具体操作:
1.首先找到使用fsockopen函数的代码段,将上面代码加至其上端,搜索该代码段中的字符串 fsockopen( 替换为 b_fsockopen( 。
2.因为fsockopen函数返回文件指针所以可以被文件函数操作,但是这个b_fsockopen函数没能返回文件指针,需要继续修改代码段:用socket_read( 替换掉 fread( ,用socket_write( 替换掉fwrite( ,用socket_close( 替换掉fclose( 。
三、
使用CMS类网站程序的用户,如织梦CMS,phpwind,帝国,等程序,请将您的程序升级到最新的版本并及时更新安全漏洞补丁。
disable_functions = system,exec,passthru,escapeshellcmd,pcntl_exec,shell_exec,set_time_limit,fsockopen,pfsockopen

锟斤拷

今天又长知识了 O(∩_∩)O哈哈~
“xefxbfxbdxefxbfxbdxefxbfxbd”-锟斤拷
百度百科上面说:
锟斤拷,经常在搜索引擎和网站上看到的字符。是一种因微软漏洞造成的乱码。
这些字句是毫无实际意义的,但它们却形象地表达出了一些莫名其妙的问题。相当经典!
我们上网的时候不用去关心网站采用了什么编码格式,但是页面中不时出现的乱码还是会让我们头疼。在这点上,Firefox的用户更是深有体会,用Firefox浏览网页看到乱码的机会要比IE多得多。 乱码主要与字符编码系统有关。例如一个网页中常出现的乱码“锟斤拷”(百度,Google),它就是新老编码系统转换中出现的。
网友est专门写了一篇文章来考证问题来源:
Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER。那么U+FFFD的UTF-8编码出来,恰好是 ‘xefxbfxbd’。如果这个’xefxbfxbd’,重复多次,例如 ‘xefxbfxbdxefxbfxbd’,然后放到GBK/CP936/GB2312/GB18030的环境中显示的话就是“锟斤拷——锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)”。