Other articles


  1. Index and Payload

    NoMagic 的文档也正在不断的更新 https://github.com/kernel1983/NoMagic/blob/master/README_cn.md 另外我们还有一个示例项目来 https://github.com/kernel1983/pythonic.info 来展示如何使用 NoMagic.

    Index and Payload

    在开发和使用 NoMagic 框架的过程当中, 我们考虑了各种数据的使用方法. 在实践中, 我们不断对数据库本质的有了更透彻的领悟. 关系型数据库简化了人们对于数据库的操作, 但是在面对一些极端的情况的时候, 回到原点重新思考就非常重要了. 可是讽刺的是, 由于多年的数据库教学, 很多人已经不知道数据库的本质意义了, 显得计算机教育的可悲.

    数据库, 数据的仓库. 本质上, 数据存在磁盘上就行了, 但是磁盘上的数据我们给他起了另外一个名字: 文件. 好吧... 那么数据库被人们怎么定义了呢, 能存储数据, 还要能方便的查询数据. 怎么说? 在文件里寻找, 或者说在非结构化数据里面寻找, 叫搜索 ...

    read more
  2. LongPlay One Year

    Sun 09 June 2013
    By KJ

    In jam.

    LongPlay 一年战争秘录

    开发 LongPlay 已经整整一年, 这是一段绝妙的旅程.

    每一个人都曾经有过梦想, 然后被现实所打败, 或多或少. 生活很承重, 其实压垮你的是思想的禁锢. 当人们学会思考投入的成本, 思考方向, 思考回报, 那么你的脚步就不再轻盈了.

    LongPlay 开始于一个很简单的想法, 在和一位老大聊天的时候, 学到了一句话: 要做大家都用的东西. 大道至简, 于是我对自己说, 我要做一个音乐产品. 很多年一直都想做的音乐产品, 十年前的 Winamp 给这个世界带来的变化, 我还记忆犹新. 又一次, 当我看到情侣们共享一个耳机听音乐的时候, 我觉得将这一件充满温情的事情变成一个产品也许是不错的主意. 在一个带着耳机跑步的夜晚, 我给这个新产品起名 LongPlay.

    于是就在一年前的今天, 我开始将想法变成实实在在的代码.

    我花了差不多三个月的时间做了一个网页版, 因为web技术我更加擅长. 我实现了两个网页播放器的同步播放一首歌曲的即时系统, 并且在一个派对上来了一次电脑大合唱, 那感觉是非常的自豪. 另外一个非常巨大的收获是 大数据框架 NoMagic, 她的成型主要在这一时期, 现在代码已经公开.

    这期间也走了一些弯路. 我希望LongPlay可以读取 Dropbox 里的音乐 ...

    read more
  3. Tornado Prespective

    Tornado最佳实践

    最近看到很多人的开发经验. 比如ruby和rails的使用者非常喜欢传道授业解惑, 网上能看到的python的文章大多数在研究一些好玩的算法等等. 事实上python在顶级软件团队的应用程度相当普遍, 在严肃的生产环境中也十分让人放心. 只是几乎所有的python framework都不擅长宣传自己, 本人有一次一口气浏览了大部分python web框架的主页, 没有一个框架主页有视频教程. 相比rails甚至Java的play framework首页都有screencast.

    在干活方面我是一个非常不主流的人, 大家都在谈论的的rails我不用, 一心放在python的framework tornado上, 即使很多用python的人也多在使用django这些流行的框架, 但是我的tornado却越用越顺手, 几乎形成了一套最佳开发实践, 完成项目的速度连我自己都吓了一跳. 本文介绍自己的经验, 顺便对其他传言迎头痛击.

    首先, 曾经看到网上有人说, 没有ORM的框架不用也罢, 我完全不同意. tornado没有ORM, 2.x自带了一个模块database.py, 开始接触tornado的时候我想也没想就用了, 初看它是一个对mysql-python的简单包装而已, 我也对database.py存在的必要性表示过质疑. 但是慢慢我发现这个模块很好用, 也很必要. 这个模块独立于tornado, 偶尔将database.py单独拿出来放到其他的项目里, 现在已经离不开了.

    这里再多说两句, 直接使用mysql-python看似也没有多大的差别, 但是返回的数据往往都是各种object. 使用python的话我们更加习惯返回的东西是字典和列表. database.py ...

    read more
  4. about me

    Fri 22 March 2013
    By KJ

    In jam.

    大家好, 我叫KJ. 很久没写博客了.

    很久以前当在国内还没有多少人知道python的时候, 我用django写了自己的博客系统, 偶尔写写技术发发牢骚. 直到有一天我开始不在使用django而全面转向了tornado, 开始越来越倾向使用简单的工具解决复杂的问题. 之后我对这个世界的更加现实的部分更感兴趣了, 慢慢就停止了制造轮子的行为.

    转向tornado之后的项目都为了解决实际问题而非自我需要, 同时我也停止了常规博客, 偶尔写就写一点充满正能量的. 偶尔混混twitter, 微博, 最重要的还是和朋友们email来往.

    我从上海搬到了新加坡, 学了很多, 爱上了看书, 英文的也能读一点点了. 很多事情还要继续, 创业准备中. 今年三十了.

    read more
  5. No Magic Guideline

    Sun 30 September 2012
    By KJ

    In python.

    NoMagic 是一套基于 MySQL 的数据库设计规范+代码库

    参考了大神 Bret Tyalor 的文章 backchannel.org/blog/friendfeed-schemaless-mysql, 实现的也非常简单粗暴: 全部都是函数, 非常易于阅读.

    简单的讲一些特点:

    • NoMagic 涉及数据的存储和索引, 不涉及冗余. 通俗的说, MySQL 的热备份还是要自己做.
    • NoMagic 不涉及数据的计算, 愿意用粗暴的方法得到结果, 还是习惯用 MapReduce 提高性能, 是你自己的选择.
    • NoMagic 的非核心函数库, 提供了一些常规应用的快速bootstrap. 比如在数据库里创建个用户, 修改个密码, 还有SNS的一些功能比如like, comment之类的, 只是为了帮助大家减少重新发明轮子的行为.
    • NoMagic 鼓励大家阅读代码, fork代码, 修改代码, 扩展代码. 就如起名叫NoMagic, 这个框架没有魔术, 只是帮助大家在创建一个网站的时候, 能够面向未来做好可扩展的准备, 同时也不用在写代码的第一天就给自己的电脑上安装一大堆 mongodb ...
    read more
  6. How to read tornado documentation

    Sun 30 September 2012
    By KJ

    In python.

    www.tornadoweb.org/documentation/ 是 tornadoweb 唯一的官方文档, 有着独特的风格, 具体体现在代码即是文档的注释, 看不懂文档, 请看代码.

    我很喜欢这样的风格, 至少从某一点上说, tornadoweb 作者希望用户阅读他们的代码而不仅仅是使用, 不愿意创造一个神奇的黑盒. 不过 tornado 的文档也是被人诟病的主要话题.

    在各种社区看到一些初学者的提问, 现在已经没有多少人问Pylons或者TurboGears了, 新手的主要兴趣点在于Django, Flask, Web.py 和 Tornado, 谈到 Tornado, 大家都会提到文档不足需要做一些心里准备.

    回想一下 python 的文档, 其实在很多新手看来也是文档不足的例子. Python 的主要学习资料来自于docs.python.org的两个大版块, Tuturial 和 Library Reference, 所有有经验的 python 用户往往直接去看标准库 Reference, 当然他们同时会开着 python ...

    read more
  7. Function vs class

    Web.py 的影响深远, 同时代的 Django, 如今已经非常流行. 但是django之后呢? Tornado, webapp 等一系列框架已经自然的选择了web.py的进化路线.

    几年前人们在讨论web.py, 现在人们在讨论Flask, Flask 成为 python framework 中的简洁的代名词.

    这里谈一谈一个小细节, 关于framework中request handler. Tornado选择了class作为request handler, django和Flask则使用函数, 更简洁.

    我自己也强烈倾向于简洁, 能用function绝不class. 开始的那段时间我是django的忠实fans. 同一时代的Pylons和TurboGears则使用类controller.

    使用tornado之后, 我的态度有些转变. Tornado使用类controller实为必须.

    根据自己的经验, 我相信很多人有和我一样的体验: 我们尝试解决问题的时候, 总是先创建一个空白的py文件开始解决问题. 为了重用自己的代码, 我们会将代码编程函数. 函数的弱点在于很多时候中间变量状态无法保存(除非你真的很擅长FP). 于是最后我们的函数又被加上了self, 变成了class.

    Tornado内部引入了异步编程, 异步是tornado的核心, 很多中间状态需要保存. 一个request不再等同于一次函数操作.

    所以, 这里的观点是 ...

    read more
  8. Handler in Tornado Template

    在rails中使用erb的时候发现, erb无需传递任何参数, self已经被作为参数传出. 难怪玩rails的朋友都高呼rails贴心.

    Tornado很棒的技巧, 本人最近才发现.

    以前我们这样做:

    def get(self):
        self.render("template/file.html", user = self.current_user, posts = [
                {"title": "post 1", "content": "first post"},
                {"title": "post 2", "content": "second post"},
            ])
    

    我写的稍稍夸张了一点, 但是我们发现通过 handler 可以指向 controller self, 那么 render 方法就更加优雅了:

    def get(self):
        self.user = self.current_user
        self ...
    read more
  9. think in fp

    Fri 03 August 2012
    By KJ

    In FP.

    函数式编程另类指南是一篇极好的文章. 它追求通俗, 不过即便是这样, 即使非常有经验的程序员, 读起来还是有些吃力.

    这里我谈一谈个人的感受

    异步

    我们在谈论函数式编程的时候, 谈论的较多的是一个概念, closure(中文翻译叫做闭包, 这是一个非常烂的翻译)

    我不想具体讨论closure的含义, 我们关注它的作用, 我们能用closure做什么? 我觉得closure最大的用途可能就是编写异步代码了.

    我们开始真正的进行异步编程, 应该是从第一个win32程序开始的. 那时候看纯C写的Windows程序, 手动构建一个消息循环, 或许我们并没有意识到, 我们正开始学习异步编程. 最明显的一个概念就是回调

    异步编程几乎就是一切高性能编程的基础. 同时, 它对几乎所有的多线程编程说了NO. 我们在编写一个Windows程序的时候第一次弄懂了一个问题: 有好几个窗口, 都会操作一个变量, 请问变量要不要加锁?答案是NO, 当时一个同事说出正确答案: 因为执行顺序是在消息循环里的, 我们没有用多线程, 所以不需要给变量加锁.

    如果今天让我再次回答, 那么答案将更加简单: 异步编程不需要加锁, 多线程编程才要加锁.

    理论上, 所有的计算机语言都可以进行异步编程. 一些语言不提供多线程库, 则不得不使用异步编程. 比如说: PHP和JavaScript

    我相信大量大量的程序员接触的第一门函数式语言是JavaScript, 同时他们第一次进行的异步编程, 也就是ajax调用.

    我们看到的一点非常有趣的现象是 ...

    read more

Page 1 / 2 »

blogroll

social