10GUI
之前在 vps 上放了一份 phproxy 用来在不方便的时候翻墙,但是还是经常被 reset。周末忘记带鼠标回家(多美丽的借口哈),没法继续画图工作,便蛋疼下给 nginx 加上了 ssl 证书。
我是直接 apt 装的 nginx,所以再 apt install openssl 就可以了,自己源码编译的同学应该需要重新 configure 加上参数 –with-http_stub_status_module –with-http_ssl_module
#生成RSA密钥
openssl genrsa -out privkey.pem 2048
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
然后修改 nginx.conf,根据情况增加下面的配置
server
{
listen 443;
ssl on;
ssl_certificate /PATH/cacert.pem;
ssl_certificate_key /PATH/privkey.pem;
server_name www.doamin.com;
index index.html index.htm index.php;
root /PATH/fold
}
然后就可以 https 访问自己的加密代理咯,当然它是没通过任何机构认证的,所以要手动添加一下证书信任
前几天服务器忽然墙了一小会,心惊胆战额。俺的这些小站点基本上没有暴露出去过额,看数据统计也没啥访问量,于是疑心是不是有关部门在收集信息。俺觉得也只有通过 referrer 的统计才有可能抓到俺的这些个域名,于是动手屏之~
firefox 下打开 about:config
过滤器里搜索 refer,把 network.http.sendRefererHeader 设为 0, 或者 network.http.sendSecureXSiteReferer 设为 false 即可
唔,需要注意的是国内某些相册会需要 referrer 才能看到图片的。我基本不用相册服务,so I don’t care~
某项目页面渲染大部分由前端来实现,html 结构存入 js 则文件体积过大,可 用/维护 性较差。准备采用 jsonp 方式从后台请求而来
好处:数据跟表现结构分离,可判断模版所用到的 jsonp 是否之前已请求过,若对象已存在便无需请求(同一类型的页面公用一份TPL)
坏处:刷新页面之后,查看未请求过的页面要发2次请求 (tpl & data),本地存储成本需要更多实现成本; js未加载完之前页面链接完全不可用!
由于成本问题,本方案被抛弃,保留部分代码存此留念
<?php //本地伪造 模板 和 数据,即后面初始化时配置的 json.php?j=DATA/TPL header('Content-Type: text/html; charset=GBK'); if (isset($_GET['j'])) { $j = $_GET['j']; }else{ $j = ''; } if ($j == 'TPL') { echo "if(TEST.Util.Template) TEST.Util.Template.Detail.Tpl = function(o){ var lis = ''; for (var i=0, leng=o.arr.length;i<leng;i++) { lis += '<li>'+ o.arr[i] +'</li>'; } var HTML = '<h1 class=\"is-title\">'+ o.name +'</h1>'+ '<ul class=\"operation\">'+ lis +'</ul>'; return HTML; }"; }elseif ($j == 'DATA'){ echo " if(TB.Mp3.Util.Template) TB.Mp3.Util.Template.Detail.Data= ["; for ($i=0;$i<10;$i++) { if ($i != 9) { $prefix = ",\r"; }else { $prefix = ""; } echo " { order : '".$i."', name : '名称', arr : [a,b,c,d] }".$prefix; } echo "];"; } ?>
(function() { TEST.namespace('Util'); var YUtil = YAHOO.util, Dom = YUtil.Dom, Event = YUtil.Event, Lang = YAHOO.lang, Get = YUtil.Get, document = window.document, IE = YAHOO.env.ua.ie; TEST.Util = { Template : { Helper : { DefConfig : { //设置无意义的默认配置 Type:'', //type of TPL Tpl:'', //url of get TPL Order:'', // the order of data Data:'', //url of get data Callback:function(){}//callback after insert Template } }, Init : function(conf){ var self = this; var dconf = self.Helper.DefConfig; var config = self.config = Lang.merge(dconf, conf||{}); // 生成配置文件 // 判断该类型模板是否需要发请求 if ( !TEST.Util.Template[config.Type] ) { TEST.Util.Template[config.Type] = {}; Get.script(config.Tpl); } var insertData = function(){ var thisType = TB.Mp3.Util.Template[config.Type], _html=''; if (config.Type === 'Detail') { _html = thisType.Tpl(thisType.Data[Math.floor(config.Order)]); }else{ _html= thisType.Tpl(thisType.Data); } setTimeout(function(){ Dom.get('J_main').innerHTML = _html; // J_main 是页面上指定的 content 区域 if (config.Callback) config.Callback(); },0); }; // 插入数据 if ( !TEST.Util.Template[config.Type].Data ) { Get.script(config.Data,{ timeout:300, charset:'GBK', onSuccess: insertData } }else { insertData(); } // TODO 验证 获取的 数据和模板是否为正确的 json 格式,如不正确则提交一次验证请求获取失败原因 } } }; });
TEST.Util.Template.Init({ //直接初始化模板咯 Type:'Detail', Order: '2', Tpl:'json.php?j=TPL', Data:'json.php?j=DATA', Callback:function(){ alert('我是插入html之后要执行的回调!'); } });
HTML5 所包含的一系列新技术,大部分已经可以在较新版本的浏览器内使用了。呜,好多东西都是略有了解,没有实际应用的玩到过…
图片是从 twitter 上看到的,源地址:http://www.focus.com/images/view/11905/
印象中还有 HTML 5 和 HTML5 的差异,回头再仔细考证下
刚才同步了一下自己的 vim 配置文件,svn 提示说 “client is too old”,才想起来自己这套配置是以前提交到 googlecode 的,公司机器所用的 svn 版本比较低,受环境限制没法升级,于是跑官方的 faq 里翻了一下,处理方法如下:
$:cd PATH_OF_CODE $:wget http://svn.collab.net/repos/svn/trunk/tools/client-side/change-svn-wc-format.py $:python chage-svn-wc-format.py ./ 1.5
今天的工作量灰常不饱和,于是俺扫了俩眼 google reader, 在 风雪之隅 上发现了这个蛮好玩的东东 vimpress, 配置一下 用户名/密码/xmlrpc地址 之后就可以在 vim 里面获取 wordpress PostList 进行编辑,或者直接发表新文章。
需要注意的是该插件需要 python 支持,俺的 archlinux 早上还好好的用着没问题,手贱更新了下系统之后便不能在 vim 里跑 python 脚本了,翻了下 archlinux 的 bug 讨论区,结论是推荐自己去 abs 打包一个支持 pyton 的版本出来自己玩,当时俺就窘了。。。老老实实修改 PKGBUILD,漫长的打包过程完事后,俺又可以在 vim 里写 blog 咯~
———–这是一枚华丽分割线———–

在 customize 上看到 一张灰常有爱的壁纸 于是拿过来放 wp 里面,改改配色当做新主题。
btw: 截图里的窗口旋转是用 gnome-shell 提供的哦
童鞋们更新 ff3.6 之后纷纷崩溃,俺这跑 nightly build 反而无事,不禁匿于一旁轻抚菊花笑而不语
想起之前写过一个获取最新开发快照版本 chromium 的小脚本,便拿出来改造一下让它又能拿 ff 又能拿 chrome
<?php $format = $_GET['f']; $browse = $_GET['b']; if ($browse == 'firefox') { header('Location: http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/firefox-3.7a1pre.en-US.win32.installer.exe'); }else { $curl = curl_init(); $uri = 'http://build.chromium.org/buildbot/snapshots/chromium-rel-xp/'; curl_setopt($curl, CURLOPT_URL, $uri.'LATEST'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); curl_close($curl); // set default format $filename = '/mini_installer.exe'; if($format == 'zip'){ $filename = '/chrome-win32.zip'; } header('Location: '.$uri.$data.$filename); } ?>
ff 比较美,直接取 latest-trunk 目录就 ok 了,chromium 还得先拿个最后版本号折腾下
把脚本存到 php 环境 (需要 curl 支持) 访问 //DOMAIN/PATH/SCRIPT.php 即可
默认取 chromium 的 exe 安装包,加参数 ?f=zip 则为 zip 压缩包
参数 ?b=firefox 就是拿 firefox 了
xp 多用户补丁,给多人同时远程登陆测试机用
打上之后会自动踢掉前一位同名 user ,而不是像未打补丁之前给该用户弹确认提示框。所以最好是用不同的账户登陆
from: duran3000
铛铛铛,身为一个走在潮流前沿的前端代码工,要赶时髦,doctype声明就必须用
<!DOCTYPE html>
什么 xhtml Transitional / strict 都是渣,都太监了。噢嚯嚯嚯嚯,可以少打多少字哇,窃喜…
每个人都有头,唔,我知道大部分男童鞋有2个,身为一个wp的模板,你忍心让它没头么?
<header>
<h1><a href="<?php echo get_option('home'); ?>/"><?php bloginfo('name'); ?></a></h1>
<p class="site-desc"><?php bloginfo('description'); ?></p>
<nav>
<ul class="site-cates">
<?php wp_list_categories('title_li='); ?>
</ul>
<ul class="site-pages">
<?php wp_list_pages('title_li='); ?>
</ul>
</nav>
</header>头大概就这样子好了,本着一向简洁的文风,俺就不给注释了,php 部分请查阅 codex
俗话说的好,小妞美不美,关键看大腿。身为一个思想健康的男银,本站就直接把大腿割掉了。所以请勿随意评价俺的审美。如果某些童鞋对大腿有着偏执的爱好,可以参考下面的东东
<footer> <p> <?php bloginfo('name'); ?> is proudly powered by <a href="http://wordpress.org/">WordPress.org</a><br /> theme by<a href="http://blog.fouland.com/2009/09/new-theme-of-spritewood.sb">nocolor</a><br /> icon by <a href="http://glyphish.com/" target="_blank">glyphish</a><br /> <a href="http://mediatemple.net/" target="_blank"><img src="http://s2.mt-cdn.net/_images/partnerlogos/mt-160x30-dk__7b47849.jpg" /></a> </p> </footer>
从前啊从前,人们都把一个页面切成2半,可能是因为球状crt显示器的关系,这两半的宽度不一样啊不一样,为了区分这两兄弟,俺们一般会给他们分别取名叫 content 和 sidebar,现在哥俩里面偏瘦的那位混出头了,他有了一个更短小精悍的名字 aside,请童鞋们牢记它不叫 aids 也不叫 adidas
<aside> <section class="tweetr"> <h3>Tweetr</h3> <?php //灰常遗憾,根据俺的经验 php 取 rss 很容易出问题,据专家 小明 童鞋说 是 simplexml 解析的问题 echo get_avatar( 'evan@fouland.com', $size = '48', $default ='' ); include_once(ABSPATH . WPINC . '/rss-functions.php'); $url = 'http://twitter.com/statuses/user_timeline/16040115.rss'; $num_items = 1; $rss = fetch_rss($url); $rss->items = array_slice($rss->items, 0, $num_items); foreach ( (array) $rss->items as $item ) { echo "<a href='$item[link]' title='$item[description]'>"; echo htmlspecialchars($item['title']); echo "</a>"; } ?> </section> <section> <?php get_search_form(); ?> </section> <section class="friend"> <h3>BlogRoll</h3> <ul> <?php wp_list_bookmarks('title_li=&categorize=0'); ?> </ul> </section> </aside>
呃,下班了,明天再继续~ 俺们公司不提倡加班的,下班得赶紧回家。。。
http://edward.oconnor.cx/2009/09/using-the-html5-sectioning-elements
http://html5doctor.com/understanding-aside/
http://www.whatwg.org/specs/web-apps/current-work/multipage/
http://jacobrask.net/blog/2009/html5-css-reset/