• 首页
  • 关于

我自然

分类存档: 未分类

《1988:我想和这个世界谈谈》中丁丁哥哥的死因

在 2010年10月23日 上公布 作者为 yankay

在韩寒的小说《1988:我想和这个世界谈谈》,丁丁哥哥永远是放在光的,就像韩寒一样放着光。该标题也取自于丁丁哥哥的一段话。丁丁哥哥死于一次远行,原因作者却没有交代,其实他已经说的很明白了。

片段一

丁丁哥哥的身材很好,他和那些书呆子们不同,他喜欢体育,很早赤膊。在五月里,他就开始光着上身,对着篮球架引体向上。他可以做三十下,我可以做三下。他教我如何双手握着篮球架上的横杠在上面转一圈,我一个夏天都喜欢供着篮球架打转,我衣服的腹部都是锈水。丁丁哥哥有一次甚至把篮球架都拔了起来,换了一个地方,因为他说篮球架在的地方
不好,他在学习的时候每天都要看到,让他分心。
我相信,丁丁哥哥那天是去找了临时工哥哥,并且把他痛打一顿。但是丁丁哥哥后来告诉我,他只是去谈了谈,他说打架当然能解决问题,谈也能解决问题。我说,那你为什么不像香港电影里那样,直接就打架呢?
丁丁哥哥沉思许久,意味深长地看着我,把手放在我的肩膀上,说,因为会疼嘛。
我点了点头。
丁丁哥哥说,他在学校里是学生会的主席,有的事情,靠谈就搞定了,他有领导能力。丁丁哥哥说,那天,我去找了临时工哥哥,问他缘由,因为像我们这种大人,是不会打弹子的。
我看着丁丁哥哥,丁丁哥哥一点头,继续说,果然。
我一精神,问,那是为什么呢,他要和我们打弹子。
丁丁哥哥说,因为他要赢你们的弹子,他不光和你们打,他还和别的小孩子打,因为他要买一只红灯牌录音机。
我说,嗯。
丁丁哥哥秀了一下肱二头肌,说道,我说,你这是不可以的,你这是欺负小孩子。你要录音机干什么?他说,他要录一盘磁带,唱一首歌寄给他的笔友。
我说,他可以去借一台录啊。
丁丁哥哥说,总是有私心的嘛,他当然也想自己听听,后来我就带他去了文化站,借了我一个朋友的录音机。
我说,哇,文化站的人你也认识啊。
丁丁哥哥云淡风轻道,一个朋友。
我说,那临时工哥哥唱了一首什么歌啊。
丁丁哥哥说,他录了一首《尘缘》。
我说,什么是《尘缘》啊?
丁丁哥哥说,你爸妈不看电视啊,主题歌。
我说,嗯。
丁丁哥哥哼道,尘缘如梦,几番起伏总不平,繁华落尽,一身憔悴在风里,回头时无晴也无雨,漫漫长路,起伏不能由我,人海漂泊,尝尽人情淡薄,热情热心,换冷淡冷漠,任多少真情独向寂寞,人随风过,自在花开花又落,不管世间沧桑如何
我打断了丁丁哥哥,笑道,哈哈哈哈哈哈,临时工哥哥也会唱歌,临时工哥哥也会唱歌。
我没有意识到,那一刻是丁丁哥哥在唱歌,这是我第一次听他唱歌,但是我却打断了他,
丁丁哥哥看着我说,漫漫长路,起伏不能由我。
我跟着唱道,漫漫长路,起伏不能由我。
丁丁哥哥说,这是去年的歌,今年唱着还挺有感觉。
我跟着说,挺有感觉!
丁丁哥哥答应在那个夏天教我足球中的假动作,丁丁哥哥说我踢球太老实了,往左就是往左,往右就是往右,你的身体已经告诉了对手一切。你要把球踢好,要把球控制在自己的脚下,就要学会假动作,你眼睛看着右边,身体晃向右边,你伸出右脚,大家都以为你要往右去了,突然之间,你的左脚一发力,你其实是向左去了,你就把大家都骗了,踢球过人一定要做假动作。等我回来我就教你假动作。
丁丁哥哥在春天收拾好所有的行囊,握着一张火车票向我告别。
我说,丁丁哥哥,你要去南方还是要去北方啊。
丁丁哥哥说,我要去北方。
我说,哇,带我一起去吧。
丁丁哥哥说,不行,你太小了。
我说,我坐火车不用钱的。
丁丁哥哥说,不行,你太大了。
我说,丁丁哥哥,你去做什么啊?
丁丁哥哥说,我去和他们谈谈。
我说,你和谁谈谈啊?
丁丁哥哥唇边露出微笑,急切地说,这个世界。
我说,哇噢。
如果丁丁哥哥还活着,现在应该是 38 岁?39 岁?40 岁?我已经迷糊了。娜娜买了两大塑料袋的食物向我走来。没走几步,就扶着垃圾桶吐了起来。我赶紧打开车门,门边正好撞到一个推着液化气罐的老大爷。我没顾上,径直穿过马路。老大爷大喝一声,小伙子,你站住,撞了人想跑?

从这段话韩寒对丁丁哥哥有比较全面的介绍。丁丁哥哥身体很健壮,并且非常爱好学习,是学生会的主席。他还说“打架当然能解决问题,谈也能解决问题”,同时表示更期望和平解决问题。唱出那首《尘缘》,颇有诀别的意味。在春天出发去北方,答应会在夏天来教“我”踢球,可以却没有能回来。去北方的目的是“和这个世界谈谈”。如果大学四年的话,他上大学的年代大约在1987-1993之间。

片段二

10 号的性格从小这样,在他小的时候,周围有不少人讨厌他,但这就是我没有讨厌他的原因, 我觉得他就是一个粗制滥造没有文化的丁丁哥哥,他们是事物的两个方向,但却是同一样事物。10 号那样滥,但有时候能泛出亮光。丁丁哥哥虽然总是充满光
芒,但他也有背对着我们的光斑。
在这个夏天湿漉漉的夜晚,10 号直接抽出一把枪,说,兄弟,你玩玩。
我忙摆手,问他,真的假的。
10 号说,当然是真家伙,假的带在身上,那还不被兄弟们笑死。
我说,你哪里来的。
10 号说,你不知道吧,小时候小学的校办厂,它原来就是生产枪的。我他妈也是到后来才知道,你看,我要了这个型号,陆四式,—枪—个。
我看了一眼,说,你开过么?
10 号举起枪,朝天砰的一枪,回声在这个小镇上飘荡撞击了三四次,我抬头望去,刺眼的月光和若隐若现的树叶摇曳着。10 号乐不可支,看着我,说,开过了。
10 号搂着我的肩膀,我们坐在一个公共汽车站前,10 号说,娘的,这个娘们。我最近撩上了一个女的。哦,我先跟你说,前两天我还看到了一个片子.一个电影,讲少年杀人事件的,但是我被骗了,这根本就不是一个枪战片,这片子太臭了,太闷了,但我每次都想,我要是不看了, 我就对不起我刚才浪费的时间,我就看完了, 结果还是个闷屁,三个多小时。
但是我里面学会了一句话,一句台词,也是一个娘们说的,我就把这个台词发给了我撩的那个女的,我发短信告诉她,我就像这个世界,这个世界是不会变的,来适应这个世界吧,哈哈哈哈哈。
我说,嗯,还挺文艺的,撩那些爱唱歌写东西的女的还行。

10号就是丁丁哥哥的一个劣质仿制品。相比于丁丁哥哥选择和这个世界谈谈,10号选择适应这个世界。于是他手里有一把“陆四式”手枪。

“陆四式”手枪比较老了,性能不好,10号没有理由特地选这个型号。
丁丁哥哥死于何事,想必不用再赘述了。

“我辈执笔文人,每觉我民族文化只是一大酱缸,肮脏污染之外,一无可取,果尔,则吾人对上述千千万万之烈士圣贤,又何以交代?正因为我民族中也多的是黄兴一类的贤人烈士,才能抵制那些民族败类、文化渣滓、昏君独夫、党棍官僚、土豪劣绅和市侩文痞,而使我民族文化绵延五千年而未至于绝代也。言念及此,每于午夜清晨,试溯旧史,辄至感慨万端,有时且垂涕停笔,不能自已。历史学家也是人嘛!虽尽量压抑人皆有之的情感,仍难期其入至善之境也。”
–唐德刚

读这部小说的时候,我感到一股莫名的压抑感,压抑的连悲伤都没有了。也许我想成为丁丁哥哥,做不成,最后在世界的压迫下,堕入了酱缸,哈哈哈哈哈。
[audio:http://yankay-static.googlecode.com/svn/trunk/music/Hitomi%20-%20Stories.mp3]

文章分类 未分类 | 发表评论 |

用Map/Reduce来做好友推荐

在 2010年8月12日 上公布 作者为 yankay

SNS网站都有一个功能,就是好友推荐(或者Follower推荐)。例如,在人人网上出现的“你可能认识的人”。怎么来实现呢,有一个很简单的办法。如果小刚和小明不是好友,但是他们有很多的共同好友。那么可以认为,A和B很可能相识。

从图论的讲法上看,就是先列出一个人(记为小A)的所有朋友的朋友,在寻找小A和这些人之间有多少长度为2的通路。将这些通路数排序,寻找最高的那几个就可以了。

所以我们的Map/Reduce的任务就是:找出所有人的十个Top“推荐好友”。

社会化网络的图一般都很简单。我们假设输入是按name排序的。

"ricky" => ["jay", "peter", "phyllis"]
"peter" => ["dave", "jack", "ricky", "susan"]

我们使用两轮Map/Reduce任务来完成这个操作。

第一轮MR任务

这个任务的目的是计算每一对距离是2的人之间的通路数。

  • 在Map函数中,我们先将每对朋友做一个笛卡尔乘积,说的不大清楚,举个例子,比如
    "ricky" => ["jay", "john", "mitch"]
    

    那么结果就是

     ["jay", "john"], ["jay", "mitch"], ["john", "mitch"]
    

    他们都是通过ricky牵线搭桥认识的。将已经是朋友的组合筛选掉,再排好序。传给Reducer。

  • 在Reduce函数中, 相同的组合必定会传给Reducer。所以Reducer只要数好有几个相同的组合传给他就行了.
Input record ...  person -> connection_list
e.g. "ricky" => ["jay", "john", "mitch", "peter"]
also the connection list is sorted by alphabetical order

def map(person, connection_list)
  # Compute a cartesian product using nested loops
  for each friend1 in connection_list
     # Eliminate all 2-degree pairs if they already
     # have a one-degree connection
     emit([person, friend1, 0])
     for each friend2 > friend1 in connection_list
         emit([friend1, friend2, 1],  1)

def partition(key)
  #use the first two elements of the key to choose a reducer
  return super.partition([key[0], key[1]])

def reduce(person_pair, frequency_list)
  # Check if this is a new pair
  if @current_pair != [person_pair[0], person_pair[1]]
      @current_pair = [person_pair[0], person_pair[1]]
      # Skip all subsequent pairs if these two person
      # already know each other
      @skip = true if person_pair[2] == 0

  if !skip
      path_count = 0
      for each count in frequency_list
          path_count += count
      emit(person_pair, path_count)

Output record ... person_pair => path_count
e.g. ["jay", "john"] => 5

第二轮MR任务

这一轮的MR任务是为了列出每个人距离为2的好友,查出他们直接究竟有几条路径。

  • 在Map函数中,我们将每一组数据重新排列,保证一个人信息落在一个reducer上
  • 在Reduce函数中,只要将每个人的可能好友之间的路径数排个序就可以了.
Input record = Output record of round 1

def map(person_pair, path_count)
  emit([person_pair[0], path_count], person_pair[1])

def partition(key)
  #use the first element of the key to choose a reducer
  return super.partition(key[0])

def reduce(connection_count_pair, candidate_list)
  # Check if this is a new person
  if @current_person != connection_count_pair[0]
      emit(@current_person, @top_ten)
      @top_ten = []
      @current_person = connection_count_pair[0]

  #Pick the top ten candidates to connect with
  if @top_ten.size < 10
      for each candidate in candidate_list
          @top_ten.append([candidate, connection_count_pair[1]])
          break if @pick_count > 10

Output record ... person -> candidate_count_list

e.g.  "ricky" => [["jay", 5],  ["peter", 3] ...]

Follower推荐
如果我想要做Follower推荐而不是好友推荐怎么办呢?
很简单。只要将第一步的MR任务改为求“Follow关系”和“Followed”关系的笛卡尔乘积就可以了。这里就不列伪码了。

参考地址:http://horicky.blogspot.com/

文章分类 未分类 | 发表评论 |

Eclipse4.0的新特性(可下载)

在 2010年7月31日 上公布 作者为 yankay

千呼万唤始出来,Eclipse4.0提前版发布了。我等这个版本已经一年多了。新的版本的性能很好,真的很好。但是没有我所期待的Web运行模式。界面也不如原先优雅了。

感觉Eclipse4.0对于Eclipse3.6。在功能上相当于Eclipse3.6对于Eclipse3.5,在Eclipse个上变化并不大。毕竟Eclipse的功能主要靠插件提供,而Eclipse只是给这些功能提供一个展现的舞台。

对 于Eclipse平台本身,将Web技术引入到Eclipse平台内部。Eclipse开发者可以使用Css,Javascript等Web技术来开发插 件。新的RCP可以是一个富客户端开发工具,可以将应用程序编译成Flex,Dojo(js),以及本地版本运行。不过RCP在eclipse3.5已经出现了。

接下来介绍一些Eclipse4.0的新特性。

Eclipse4.0项目主页 http://www.eclipse.org/eclipse4/

新版工作台

新版的Eeclipse更新了用户界面。此更新的主要目标是采取一个更现代的视觉风格,减少混乱,并使用空白空间代替原先的分割线来区分不同的界面元素。重新设计了选项卡和工作台,让我们能更专注于工作区域。

全局搜索框

和Gmail相似,工具栏上有了全局搜索框。提供了一个“快速通道”。这个功能很亮。

更灵活的布局

您现在可以将功能面板和编辑器叠在一起了。例如,在一些情况下,您可以将功能面板和编辑器叠在一起,以提供更多的空间。

您不仅可以混合操作面板和编辑器,你还可以在编辑器区域分割一块给操作面板,然后最大化编辑器区域。整个工作空间都显示编辑器。

Eclipse开发者相关的功能

  • 通用事件总线
  • 用户界面模块化
  • 简洁的模型结构
  • 使用CSS来控制样式
  • 更多

虽然这些内容对于使用Eclipse的人用处不大,但是对于平台本身影响还是很大的。

文章分类 未分类 | 发表评论 |

Facebook背后的软件

在 2010年7月14日 上公布 作者为 yankay

Facebook

Facebook的数据规模使得很多传统的解决方案根本不适用,或者无法分解来处理。保持一个拥有5亿用户的系统一直稳定可靠的运行,并不是一件很容易的事情。这篇文章介绍了一下Facebook使用的软件。

Facebook的扩展性挑战

在我们讨论细节之前,这里有一些Facebook已经做的软件规模:

  • Facebook有570000000000每月页面浏览量 (据Google Ad Planner)。
  • Facebook的照片量比其他所有图片网站加起来还多(包括Flickr等网站)。
  • 每个月超过30亿张照片被上传。
  • Facebook的系统服务每秒处理120万张照片 。 这不包括CDN服务中处理的照片。
  • 每月超过25亿条的内容 (状态更新,评论等)被共享。
  • Facebook有超过30,000服务器 (这个数字是去年一年!)

Facebook扩展所依赖的软件

Facebook是在某些程度上说仍然是LAMP的站点,但它比普通的LAMP大得多,以纳入其他元素和很多服务,并修改现行的做法。

例如:

  • Facebook的仍使用PHP,但它已经为它建立一个编译器,以便它可以分为本地代码打开了Web服务器,从而提高性能。
  • Facebook的使用Linux,但他特别为网络吞吐量做了优化。
  • Facebook的使用MySQL,但主要是作为一个Key-value的持久性存储,Jions和服务器逻辑操作在Web服务器上操作。因为在那里更容易执行。

还有是自编写的系统,如Haystack,一个高度可扩展的对象存储,用来存储Facebook的照片。还有Scribe,一个日志系统,可以运行在Facebook的巨大规模上的日志系统。

OK。现在 我们介绍一下全球最大的社会网络网站的所使用的软件吧。

Memcached


Memcached

memcached的是现在互联网最有名的软件之一了。 这是一个分布式内存缓存系统,用来作为Web服务器和MySQL服务器之间的缓存层(因为数据库访问比较慢)。 多年以来,Facebook已经提出了一些优化Memcached和一些周边软件的办法。如压缩network stack。

Facebook的每时每刻都有数10TB的数据缓存在Memcached的数千台服务器上。 它可能是世界上最大的Memcached的集群了。

HipHop for PHP

HipHop for PHP

PHP作为一种脚本语言,和本地程序相比是运行缓慢的。 HipHop可以将PHP转换成C + +代码,然后再进行编译,可以获得更好的性能。 因为Facebook严重依赖PHP,这使得其可以让Web服务器运行的更有效率。

一个工程师小团队在Facebook(一开始只有三人)花了18个月时间开发HipHop,现在已经是可用状态。

Haystack

Haystack是Facebook的高性能照片存储/检索系统(严格来说,是一个对象存储,因此它并不一定要存储照片)。 它有许多工作要做;有超过200亿张上传的照片,并且每一个被保存在四个不同的分辨率,因此有超过800亿张照片。

它不仅是对能够处理的上亿的照片,运行表现也是至关重要的。 正如我们前面提到的,Facebook的服务约120万张照片每秒 ,这个数字不包括CDN上的。 这是一个惊人的数字。

BigPipe

BigPipe是Facebook开发的一个动态的网页服务系统。 Facebook使用它来按section(称为“pagelets”)处理每个网页,以获取最佳性能。

例如,在聊天窗口是分开的,新闻Feed也是分开的,等等。 这些pagelets可以在一个页面表现的时候同时使用,这是该页面表现的时候获取进来的。即使某些工程的一部分关闭或中端,用户也可以获得一部分网页。

Cassandra

Cassandra

Cassandra是一个不会单点失败的分布式存储系统。 这是为NoSQL运动的一个重要组成部分,并已公开的源代码(它甚至成为一个Apache项目)。Facebook在搜索功能中使用它。

除了Facebook,还有一些人也用它,例如Digg的。 不过最近Twitter放弃了cassandra。

Scribe

Scribe是一个灵活的日志系统,Facebook在他的内部大量使用。 它的能够处理在Facebook的大规模日志记录,并自动处理新的日志记录类别,Facebook有数百个日志类别(categories)。

Hadoop and Hive

Hadoop

Hadoop的是一个开源的map-reduce实现,使得它可以在进行大数据上进行运算。 Facebook的使用这个进行数据分析(而我们都知道,Facebook已经大量的数据)。 Hive就是发源于Facebook,使得对于Hadoop使用的SQL查询成为可能,从而是其更容易对非程序员使用。

Hadoop和Hive是开源的(Apache项目),有为数众多的追随者,例如雅虎和Twitter。

Thrift

Facebook使用的几种不同的语言和不同的services。 PHP是最终用于前端,Erlang是用于聊天,Java和C ++也使用于多种场所,也许还有其他语言。Thrift是一个内部开发的跨语言的框架,联系语言,使他们可以在一起合作,从而使他们之间可以交互。 这使得Facebook可以更容易为继续保持其跨语言的发展。

Facebook已经让Thrift开源。更多的语言支持已被添加到Thrift。

Varnish

Varnish

Varnish是一个HTTP加速器,可以作为一个负载平衡器,并缓存的内容,然后可以以闪电般的速度送达。

Facebook使用的arnish来处理照片和个人资料图片,处理每天数十亿的要求。 和其他的东西一样,Varnish是开源的。

保持Facebook 顺畅运行的其他东西。

我们已经提到的软件,组成了Facebook的系统,并帮助运行在大规模上。 但是,处理这么大的系统是一个复杂的任务,因此我们将列出一些其他的东西,他们保持了Facebook的平稳运行。

渐进发布和暗启动

Facebook有一个他们所谓的守门人制度(Gatekeeper),允许他们可以给不同的用户运行两套不同的系统。 这让Facebook渐进的发布新的功能,A / B测试,只为Facebook雇员发布等的某些特性。

Gatekeeper也可以让Facebook实现“暗启动”,这是在用户使用一些功能之前,就激活某些功能(因为用户没有察觉,所以称之为暗启动)。 这将作为一个现实世界的压力测试,在正式启动前,帮助揭露一些功能障碍和其他问题。 暗启动通常是在正式启动前两个星期。

Profiling的直播系统

Facebook的仔细监控其系统,有趣的是它也负责监察每一个PHP函数在生产环境的性能。 检测各个PHP的环境的配置运行情况。使用开源工具,XHProf 。

渐进的利用关闭功能来提升性能

如果Facebook运行时出现性能问题,有一个办法,就是逐步禁用不太重要的功能,以增强Facebook的大量核心功能表现。

我们没有提及的事情

我们没有提到硬件相关的事情,但这也是提高可伸缩性的重要一环。例如,就像其他大型站点,Facebook利用CDN来处理静态内容。Facebook还有一个the huge data center,可以帮助他扩展更多的服务。

Facebook的开源情结

不仅是Facebook使用(和帮助),如Linux,Memcached的,MySQL和Hadoop的开源软件,以及许多其他情况下,也贡献许多了其内部开发的软件。

Facebook亦开源了Tornado,一个高性能的网络服务器框架,由FriendFeed团队开发。

关于开放源码软件清单,可以在Facebook’s Open Source page.找到。

Data sources:

http://royal.pingdom.com/2010/06/18/the-software-behind-facebook/

Various presentations by Facebook engineers, as well as the always informativeFacebook engineering blog.

文章分类 未分类 | 发表评论 |

来到上海了

在 2010年7月14日 上公布 作者为 yankay

来到上海了。

挤上了人山人海的地铁,兴致勃勃的向浦东进发。大海的地铁确实很拥挤,要想跳钢管是不可能了。作为地铁的克星,果然不负众望,地铁行至一半,死机不动了,许久方徐行。

找了个地方安顿了下来。准备Galaxydb那个项目。去看看单位。采购生活资料,事情还是蛮多的。值得一提的是,我们下定决心,决定斥巨资购买一把菜刀的时候发现找不到能买到菜刀的地方了。于是我打听到因为世博会,上海已经停止出售和运输刀具。于是我们只有吃冷冻食物了。

其实我们还可以吃刀削面。


刀削面的传说

据传当蒙古鞑靼侵占中原后,为防止汉人起义造反,将家家户户的金属器具全部没收,并规定每十户人家只能用一把厨刀,切菜做饭时轮流使用。

一天中午,有位老汉想取刀做面,结果没能接到,气馁地回家,在回家的路上看到一块薄铁皮,就顺手捡起来揣在怀里。 回家后,老伴责怪老汉,老汉取出铁皮,老伴说:“你就会胡侃”,老汉灵机一动,就用这个切吧!他把揉好的面团放在一块木板上用左手端好,右手操起铁片就削了起来,薄薄的面片飞入锅中后不住地翻滚,很快就煮熟了。 老汉把面捞入碗中浇上卤汁,边吃边说:“好得很,好得很,以后再也不用排队取厨刀了,就用这铁片片削吧。” 一传十,十传百,成了刀削面。

住的地方

床铺

同居对象的博客:http://www.qqlemon.com/

注:我们都是男性,性取向主流。

工作兼游戏台

文章分类 未分类 | 发表评论 |

又一个Grails BBS

在 2010年6月4日 上公布 作者为 yankay

最近浩然姐姐要我们交JavaEE的大作业,于是我敏捷了一把,用一个晚上的时间生产了一个Grails BBS。

以前有ROR和Java的基础,Grails学的很快,一两个钟头就略通皮毛了。推荐一本读物,多亏他的帮助。

BBS下载

文章分类 未分类 | 发表评论 |

域名转出中,访问不到莫见怪

在 2010年5月29日 上公布 作者为 yankay
文章分类 未分类 | 发表评论 |

Jsa4j快速入门

在 2010年5月9日 上公布 作者为 yankay

安装开发环境

安装Java JDK

安装Eclipse

下载jsa4j-derby

使用 Jsa4j开发

  • 新建一个Java工程,
  • 在classpath中导入dependence文件夹中的Jar包,还要有jsa4j-db-kv-derby- 1.0-alpha-1.jar.依赖情况详见:http://jsa4j.sourceforge.net/jsa4j-db-kv-derby/dependencies.html
  • 新建一个Xml文件,文件路径为 META-INF/jsa4j-db-kv.xml :
  •  
             
                    org.jerrymouse.jsa4j.db.kv.local.derby.DerbyDBManager
                     
             
     
    
  • 新 建一个Java类:
  •       package org.jerrymouse.jsa4j.db.kv.example;
    
          import org.jerrymouse.jsa4j.db.kv.DB;
          import org.jerrymouse.jsa4j.db.kv.DBManagerFactory;
          import org.jerrymouse.jsa4j.db.kv.Repository;
    
          public class Tutorial {
    
                  private static DB db;
    
                  private static String EXAMPLE = "example";
    
                  private static DB getDB() {
                          if (db == null)
                                  db = new DBManagerFactory().getDBManager("derby-db").getDB();
                          return db;
                  }
    
                  public static Repository getRepository(String prefix) {
                          Repository repository = new Repository(prefix, getDB());
                          return repository;
                  }
    
                  public static void main(String[] args) {
                          //存放一个字符串"hello jsa4j"
                          getRepository(EXAMPLE).put("1", "hello jsa4j");
                          //取出这个字符串
                          String message = getRepository(EXAMPLE).get("1");
                          System.out.println(message);
                  }
          }
    
    
    
  • 如 是运行即可

详细参考API文档

示例代码下载示例代码

文章分类 未分类 | 1 条评论 |

Jsa4j通用数据底层

在 2010年5月9日 上公布 作者为 yankay

jsa4j是Jerrymouse Storage API for Java的简称。是JerryMouse小组开发的通用数据 底层,可以架设在单机或者Gae环境之下。脱胎于CommonCloud项目,由于CommonCloud过 于复杂,缺乏可用性。所以开发了他的简化版Jsa4J。Jsa4J的目标是可用和简洁。项目地址



Jsa4j子项目列表

Jsa4j-db-kv 提供 KeyValue 数据库接口。有一个Derby和一个Gae实现。还有用于缓存的支持

接口本身非常简洁:只有两个方法:

 String get(String key)
 String put(String key, String value)

详 见API文档

Jsa4j-db-table 表结构的数据库支持

Jsa4j-search 提供全文搜索支持。

Jsa4j-bus 建立在分布式缓存上的通讯总线


Jsa4j- db-kv。随着NoSql?运动,新奇的数据库层出不穷,提供 了各种丰富的接口。这些接口丰富在两个方面:

  • 事务处理
  • 数据结构

Jsa4j- db-kv没有“事务处理”和“数据结构”的概念,极大的方便了数据库开发。

关于事务。不管是ACID还是 BASE,都是事务处理方式。Jsa4j-db-kv没有事务的概念,默认大于配置, 认为存操作需要事务,取操作不需要。认为数据库写入永远是成功的。具体是不是真的能成功,应该由另一套系统来管理。

对于比较可靠的列存数据库,和不怎么可靠的类似Cache的数据库都有支持。

关于数据结构。数据结构方面有关系性 数据库,列存(BigTable? like),文档数据库,图数据库和Key Value之分。其中Key Value是最简单的,可以由其他类型的数据库实现。同时提供一个索引工具和搜索工具,满足在数据索引上的需要。


项目地址

快速入门

文章分类 未分类 | 发表评论 |

Facebook Graph API使用介绍

在 2010年5月5日 上公布 作者为 yankay

Facebook Graph API可以理解为一个可以访问Facebook数据的Web服务。该API提供了对人员,相册,事件等等Facebook对象以及这些对象之间诸如朋友,标签,分享内容等等连接之间的访问。

当您输入一个URL后,会返回一个Json对象

对象的格式参考http://developers.facebook.com/docs/reference/api/。

你可以用同样的方式访问Facebook对象

  • Users: https://graph.facebook.com/btaylor (Bret Taylor)
  • Pages: https://graph.facebook.com/cocacola (Coca-Cola page)
  • Events: https://graph.facebook.com/251906384206 (Facebook Developer Garage Austin)
  • Groups: https://graph.facebook.com/2204501798 (Emacs users group)
  • Applications: https://graph.facebook.com/2439131959 (the Graffiti app)
  • Status messages: https://graph.facebook.com/367501354973 (A status message from Bret)
  • Photos: https://graph.facebook.com/98423808305 (A photo from the Coca-Cola page)
  • Photo albums: https://graph.facebook.com/99394368305 (Coca-Cola’s wall photos)
  • Videos: https://graph.facebook.com/614004947048 (A Facebook tech talk on Tornado)
  • Notes: https://graph.facebook.com/122788341354 (Note announcing Facebook for iPhone 3.0)

你也可以用https://graph.facebook.com/ID/CONNECTION_TYPE访问这些对象的其他信息

  • Friends: https://graph.facebook.com/me/friends
  • News feed: https://graph.facebook.com/me/home
  • Profile feed (Wall): https://graph.facebook.com/me/feed
  • Likes: https://graph.facebook.com/me/likes
  • Movies: https://graph.facebook.com/me/movies
  • Books: https://graph.facebook.com/me/books
  • Notes: https://graph.facebook.com/me/notes
  • Photos: https://graph.facebook.com/me/photos
  • Videos: https://graph.facebook.com/me/videos
  • Events: https://graph.facebook.com/me/events
  • Groups: https://graph.facebook.com/me/groups

参考:http://developers.facebook.com/docs/api

文章分类 未分类 | 发表评论 |
下一页 »

近期文章

  • 听说 Docker 被 kubenetes 抛弃了,怎么办?containerd
  • 公告 – 博客重开了
  • CloudFoundry v2面面谈,内赠MicroCFv2福利
  • Docker能够运行任何应用的“PaaS”云
  • Scala Tour – 精选

近期评论

  • Gao发表在《公告 – 博客重开了》
  • Impala:新一代开源大数据分析引擎 – FIXBBS发表在《Google Dremel 原理 – 如何能3秒分析1PB》
  • 何建兵发表在《NoSQL数据库笔谈v0.2》
  • Pony发表在《Docker能够运行任何应用的“PaaS”云》
  • Pony发表在《Docker能够运行任何应用的“PaaS”云》

归档

  • 2021年6月
  • 2021年3月
  • 2014年2月
  • 2013年9月
  • 2013年5月
  • 2013年1月
  • 2012年11月
  • 2012年9月
  • 2012年8月
  • 2012年3月
  • 2012年2月
  • 2012年1月
  • 2011年11月
  • 2011年10月
  • 2011年9月
  • 2010年10月
  • 2010年8月
  • 2010年7月
  • 2010年6月
  • 2010年5月
  • 2010年4月
  • 2010年3月
  • 2010年2月
  • 2010年1月
  • 2009年10月
  • 2009年9月
  • 2009年8月
  • 2009年7月
  • 2009年6月
  • 2008年10月
  • 2008年8月
  • 2008年7月
  • 2008年6月

分类

  • 家庭生活
  • 未分类
  • 每日心得
  • 软件技术

友情链接

  • DaoCloud Enterprise
  • DaoCloud 云原生一体机

CyberChimps WordPress Themes

沪ICP备2021008917号-1 © 颜开