代码 > 开始使用visual studio code
2016-09-06
这两天偶然用了下vs code。发现个方面的感觉都非常棒。体验很好。对比了一下作netbeans和atom发现不论速度/外观上都是目前最优秀的。决定花一段时间习惯下这个编辑器。
代码 > phonegap/cordova解决android下viewport无效的问题
2016-02-22
环境:linux debiantesting,cordova 6.0.0,android sdk 23
今天公司有需要,拿cordova封装一个app,结果安卓浏览器一跑一口老血喷出来了,viewport无效。
赶紧一顿搜索,装插件,依旧蛋疼。
只能老实怕代码。
总的来说,问题是需要调用android sdk的WebSettings的setUseWideViewPort和setLoadWithOverviewMode方法。
对代码连蒙带爬,大概整理出了头绪。
大部分相关代码都在platforms\android\CordovaLib\src\org\apache\cordove下。
- 实际代码由src\io\cordova\hellocordova\MainActivity做入口,继承自CordovaActivity
- 核心代码由CordovaActivity实现。CordovaActivity的appview指向了CordovaActivity。
- CordovaWebView是接口类,具体的业务逻辑都在CordovaWebViewImpl下。
- 这个类是虚拟的,调用CordovaWebViewEngine这个借口来实现渲染。
- 而CordovaWebViewEngine也是一个虚拟类,具体的是由engine下的SystemWebViewEngine来实现的。
- 而SystemWebViewEngine有个public属性webview,是继承自android系统webview的SystemWebView。
- 具体的webview可以由CordovaWebView的getview,调用SystemWebViewEngine方法取得。
好在我现在写代码也不怕麻烦,爬一串还算轻松……
具体修改肯定是修改src\io\cordova\hellocordova\MainActivity。
代码如下
package io.cordova.hellocordova;
import android.os.Bundle;
import org.apache.cordova.*;
import android.webkit.WebView;public class MainActivity extends CordovaActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
loadUrl(launchUrl);
// Set by <content src="index.html" /> in config.xml
view=(WebView) this.appView.getView();
view.getSettings().setUseWideViewPort(true);
view.getSettings().setLoadWithOverviewMode(true);
//Add By jarlyyn.http://blog.jarlyyn.com
}
}
然后 cordova run android 一下,真机跑一下,为了让第一页也起效,把给location夹在了setTimeout 0里。收工。
话说我最讨厌的语言依次就是PHP,Javascropt,Java了。
现在居然越来越火,工作中碰到的越来越多,这是说明我没眼光么……
代码 > 解决react input框chrome无法输入中文的问题
2015-08-16
之前使用input框,value设为模型的值,发现无法输入中文。
研究了下。通过非托管的输入框组建,外带初始值设置解决这个问题。
也就是说,
从
<input onChange={this.change} value={this.state.model.v}>
改为
<input onChange={this.change} defaultValue={this.state.model.v}>
IE下并没有这个问题。感觉是输入法和chrome之间的问题。但是同时在linux下和win下都有这个问题。只能通过别的方式绕开了。
代码 > 在nodejs中使用vm
2015-04-21
最近在做基于Nodejs的mud客户端。考虑到安全性问题,需要用到VM。
一开始没考虑透彻怎么使用vm来隔离代码。
参考了下sandbox的代码。终于i想通了。
说到底,先要构建一个content上下文。
然后把所有的接口,做一个闭包,加入content中。
比如,原先是api.method,那么现在应该这样:
content.method=function(){api.method.apply(api,arguments)}
要么你把整个函数都替换掉,要么拉倒。
不能把对象本身暴露给vm,只暴露封装过的。
这样应该没问题吧?js里没法把function闭包中的内容再反向去出来吧?
sandbox那样还需要另开一个chlidprocess,再通过stdin/stdout来沟通,似乎对我的应用太重了点。
作为一个本地程序,添加太多的processer似乎太不礼貌了
代码 > cheerio.js的一个坑。
2015-02-07
今天在用nodejs给客户从老网站上爬资料时,碰到一个巨坑。
所有的问题都被转意了,导致 我公司自己的程序截取前N个字符的部分和渣一样(其实这也能算我部分代码的BUG)。
爬遍谷歌,找到了解决方案:
在使用是禁用decodeEntities。
比如:
var $ = cheerio.load(body,{decodeEntities: false});
参考:
https://github.com/cheeriojs/cheerio/issues/496
代码 > 半夜不能写代码
2014-11-23
越写越兴奋,强迫自己睡着都不行。
晚上睡觉想着nodejs的express,其实是connect,想着自己写的第三方代码,再想着promises
越来越觉得这些东西的奇妙,自己的代码需要进行不小的调整,才能更‘美观’,更优雅
赶紧开电脑,上github给自己开issus。
这下半夜怎么过啊……
代码 > Js的bind真心是个好东西
2014-10-27
重写了nodejs代码,发现之前的代码太恶心,用了bind后整个世界清净了。
bind的用法很简单。
func.bind(this对象+参数1+参数2);
返回一个新函数
比如
var newfunc=func.bind('a','b','c')
newfunc(d).
就会以'a'为this对象。'b','c','d'为参数访问func函数。
让js的函数的变量作用域变得极为可控。
类似与这样的代码
var func.prototype.bind=function (thisobj,arg1,arg2...)
{
return function(){
func.call(thisobj,arg1,arg2);
}
}
代码 > 这不是GPL的时代,这是MIT的时代。
2014-08-06
一直以来,GPL一直作为开源的代表,被人们广为了解。
在单机时代,GPL的确很的保证了开源软件的生命力和发展。
可随着网络时代的到来,免费时代的到来,GPL的生命力越来越低了。
免费,或者强制的公开代码已经不是那么的重要了。
开源更多的是为了让别人加入自己的阵营,成为事实上的标准。
看看现在各种火热的开源产品。
Android,jquery,nodejs。
基本都是mit协议,或者apache协议这种对商业友好的协议。
就连我现在自己丢代码开源,也从lgpl变成了mit了。
时代不同,开源的意义不同了。
是现在的时代太势利,还是以前的时代太狭义?
这永远只是一个只有时间有资格解答的问题。
代码 > 漂亮的前端编辑器brackets
2014-08-05
最近需要在Win下安装快速编辑代码的工具。
不喜欢nodepad++,有不想老是和sublime text的提示框纠缠,想起了v2ex上看多的一条回复。放google一搜,下了个brackets回来,感觉真的不错。
外观清爽。样式之类编辑方便,适用html,跨平台,开源,js的语法提示,足够了。
代码 > Express 与 socket IO 共用session.
2014-06-13
- EXPRESS:4.4.2
- SOCKET.IO:1.0
研究了一天Express和socket IO。
爬了半天代码,找了半天挂件,最后还是用最原始的console.log+猜测搞定了。
socket.request中有res变量。那么直接用socket.request,socket.request.res作为connect中间件的req和res,就能取得自己想要的东西了。
以cookie-session为例:
//直接导入Session处理函数
var session = require('cookie-session')({secret: 'test',//secureProxy: true});
app.use(session);
io.on('connection', function(socket){
var req=socket.request;
var res=req.res;
session(req,res,function(){});
});
就可以取得和使用session了。不再需要其他额外的组建。