Fantasy

Programming & Thinking

React

在全职使用 Node.js 工作大半年之后,在上周末转型做 ReactNative 的开发 – 而这也正是我在业余时间所做的事情。 于是乎,又一次迎来了把兴趣变成职业的转机 – 在这里我可以相对主动的用自己比较心仪的技术做一些事情。 以下是我在公司里的技术转型路线: 前端开发 -> Node.js Web开发 -> ReactNative 开发 回归正题。 既然开始了全职的 ReactNative 开发时光,就希望结合工作上的一些需要来做一些组件上的开发,毕竟现在 ReactNative 开源社区上有很多组件长期处于无人维护的状态,也有很多轮子还没有人造,亦或是不符合自己的业务需求。 本周的时候,我在 Github 上创建了一个名为 RNComponents 的组织,用来放置一些我自己写的、或者是从一些没有持续维护的组件 fork...

React

本次的开发过程基于 React Native v0.11.0, Node.js v4.0.0 版本。 最近计划用 ReactNative 实现一个简单的微博客户端。 新浪微博为 iOS, Android 等 App 开发者提供了相应的 SDK,而对于 Node.js, Python 等 Web 开发平台也有很多第三方的开发者提供了很多开源的 SDK。 而这次我要实现的则是在 React Native 中实现 Weibo 的 OAuth...

Essay

程序员世界中有很多常见的缩写,许多人对此甚是津津乐道。 我以前也是一个喜欢用「缩写」跟别人讲话的猿类,不过最近思考了一下感觉这种方式不甚友好。 故纂此文,是以自嘲。 一、著名的 SSH 可以在很多招聘 Java 程序员的 JD 中看到这么一句话:“熟悉 SSH 框架的使用”。 这里的 SSH 指的是 Spring, Struts 和 Hibernate 三个框架。 不幸的是,在程序员的世界里,这个名字「惨遭」重名。在网络协议中也有个 SSH,而它是 Secure Shell 的缩写。 值得庆幸的是,大多数程序员都可以区分不同场合的 SSH 到底是前者还是后者。 恰好我在上文中也「信手拈来」了一个缩写”JD”,是” Job...

Rust

Since Rust 1.0 has been occupying my Weibo’s timeline, I think it’s time to have a try on this programming language. Install Rust on OS X There exists pkg file...

React

前段时间,Facebook开源了之前发布的 React Native。这一消息让很多iOS、JavaScript开发者以及很多Hybrid应用开发爱好者为之兴奋。 相信有很多开发者都跟我一样,在听到这个消息后都会做两件事情: 上 GitHub star 一记 写个 Demo 看看效果、体验体验 在根据国际惯例写完一个 Hello World 之后,开始了 CNode 社区的 iOS 客户端开发,代码依旧遵循MIT协议开源在 Github. 这次的App开发的目录结构参考的是 HackerNews-React-Native: - App/ - index.ios.js - package.json 其中 App...

Writing

前段时间使用Gitbook编写了一本关于Node.js的小书,主要总结整理了一下我在之前学习、使用Node.js的一些经验和开发心得。可以通过Gitbook的在线地址阅读此书。 通过编写的过程,确实感觉写书的不容易:措辞、如何表达与解释等。幸而小书的大部分内容已经成型,不过也有很多尚处于空缺、有待增补的章节。关于这点我会在日后慢慢添加、完善。 当然也欢迎通过本书的Github主页提出问题、纠正错误。 2015-04-19 update 本书的中文版基本上已经成稿,但是英文版由于时间的原因会逐步翻译。由于 Gitbook 上生成的中文PDF效果实在有点寒碜,建议还是在 Web 浏览器上阅读,或者下载 ePub 等格式阅读。

Node.js

15年元旦之前的一次偶然的机会,快速开发了一个chepiao100.com的Node.js版本的SDK. 取名chepiao-sdk,已经发布在NPM上,可以通过npm install chepiao-sdk安装、使用。 开发这个SDK的初衷其实因为在14年圣诞左右,当时正在12306上抢春节来回的高铁票,于是就想到可不可以调用一些接口在终端中查询火车票相关的信息。最初我在互联网上搜索到、并使用了去哪儿的火车票查询开放接口,例如这种. node-train的前几个版本就是使用的去哪儿的这个接口,但是由于去哪儿这个接口有两个非常致命的缺陷: 没有文档,至少我在互联网上搜索不到相关的文档 列车时刻的接口返回中车站的信息是打乱的 因此我决意寻找另外的比较好的开放接口,于是就找到了chepiao100这个站点. 虽然以前没有听说过这个网站,但是从他的文档来看还是做的不错的. 不过万幸中的不幸就是该网站的API的secret key的有效时间只有一周. 介绍 使用这个SDK唯一的门槛就是在chepiao100的网站上去申请secret key,如果有需要长期使用应该需要通过咨询以期获取一个长期可用的key. 下面主要介绍一下SDK的使用和现有的几个主要API,首先需要初始化SDK,传入申请时的id和key: var Chepiao = require('chepiao-sdk'); var chepiao = new Chepiao({ userid: 'your userid', seckey: 'your...

Front-end

最近在做一个小东西:Toolbox,目的是提供一个给开发者使用的「工具箱」。也正是在做这个东西的同时,研究了一下sourcemap相关的内容。 之前更新了电脑上的Sass版本后(大概是3.4版本)编译的的Sass文件会自动生成sourcemap的文件。当时说实话不知道这是干什么用的,就默默的搜索如何在编译时加上参数不生成sourcemap文件。但是之后还是回头去看了看sourcemap为何物、有何用、如何用,谨以此文分享一下。 Source map 简介 Source map应该是最先应用于JavaScript的技术。(关于这一点并没有进行考究,但是从我搜索到的资料来看,应该是Google Closure最先提出的sourcemap调试技术) 由于很多框架、类库都相对比较庞大,所以在真正投入生产环境使用的时候都会用各种工具进行压缩、转换。 因此在浏览器中对使用这些「转换」过的代码进行调试都会感到十分迷惑:这种压缩过的代码要怎么调试?而sourcempa就是为了解决这个调试问题而诞生的。同样的,对于Sass这类CSS的预处理工具而言,Source map同样可以用来在浏览器内调试Sass代码。 下图为在Chrome中开启sourcemap调试选项: 有趣的是有一个名为Sourcemap的网站,提供的是商品运送、物流线路的自动可视化服务。 调试Sass 如上文所提及的那样,现有的Sass版本是默认开启sourcemap选项的,因此在生成对应的CSS文件的同时会生成一个.css.map的文件。 例如有以下Sass文件: .test color: black background-color: white .test-child color: red 通过Sass命令 sass style.sass style.css 编译后,就会生成以下style.css: .test...

Front-end

最初是想在文章中对比、探讨、研究一下JavaScript模块化方面的内容(其实连提纲都写好了),但是写着写着发现自己的功力不够: 仅使用过SeaJS和一点点的RequireJS 对于很多诸如模块规范、运行机制方面的东西不甚熟悉 开发的经验并不足够多,对于工程实践上的诸多内容不够深入 所以本文仅仅讨论一些关于JavaScript模块化的内容,着重介绍如何使用Browserify、搭配gulpjs来实现Web前端的JavaScript模块化。 关于JavaScript模块化 由于JavaScript语言(泛指当前广泛使用的版本)本身并不具备如同Java, Python等语言的类、模块、包等机制,并不能通过诸如import等方式加载同一项目中的不同模块,而随着Web开发方式的演进、客户端JavaScript的大放异彩,更加「有序」地组织页面的JavaScript代码就成为了一种必然的需求。 相信编写过稍具规模的Web应用的同学应该能够体会到JavaScript的这种「缺陷」,不过程序员天生就是一种没有轮子创造轮子的职业。 于是乎,JavaScript模块的组织方式出现了AMD, CMD与CommonJS等多种「规范」,关于JavaScript模块化的历程可以参考玉伯的文章 - 前端模块化开发那点历史 或者Google之。 但是这些标准在增进社区多元化的同时也给很多刚入门的同学带来了不少困惑:什么AMD,CMD,CommonJS,我到底应当使用哪种? 如果你还在为自己的项目所使用的技术选型,那么我会极力向你推荐CommonJS规范。 CommonJS规范的写法 CommonJS规范实际上是一个服务端JavaScript的规范,因此Node就遵循了此规范。 在CommonJS规范中,一个文件就是一个模块,例如: module.exports = function () { console.log('Hello Node.js'); } 假定上述文件保存为a.js,那么就可以在其他模块中像这样引用并执行该模块: var a...

Node.js

由于绑定信用卡后可以免费使用1年的AWS,在今晚把玩了一下AWS EC2。 试用了一会AWS之后给我的好感主要源于以下几点: 服务种类多,包括了EC2, VPC等30余中云计算、数据库、网络服务、数据分析的服务: EC2实例的种类多,现有的就包括Red Hat, SUSE和Ubuntu等(当然还有Windows Server). 基于Web的强大的管理后台,这点可能要使用过后才能感受一二 关于AWS就先介绍到这里,具体可以打开浏览器去感受一下: Amazon Web Service 通过SSH登录到AWS的Ubuntu实例后是这样的: 这次开始使用AWS的初衷不同于之前使用Digital Ocean (那时主要是配置VPN),主要是想在「非本地」和「非配置好的App Engine」的服务器上运行Node.js程序,感受以下生产环境的氛围以及相关的一些配置技(da)巧(keng)。 Node.js在Ubuntu等Linux发行版上大概有这么两种安装方式: (更改源后)使用发行版自带的包管理器,例如Debian系的apt-get,CentOS系的yum等 Clone GitHub上Node.js的源码,编译安装 Node.js官方给出了使用包管理方式安装Node.js的比较方便的方法:Install instruction,而我也正是使用这种方式安装的: curl -sL https://deb.nodesource.com/setup | sudo...