windows下由于文件路径中包含空格符导致的bug解决方案

举个例子:在windows系统中,有用户“Farmer John”(注意中间有空格分隔),在用户根目录下有用户的头像图片”C:UsersFarmer Johnphoto.jpg“。现在有一对图片操作的库函数foo,foo的输入参数即为图片路径,由于foo的实现不完善导致如果路径中包含空格符的话会有bug(比如遇到空格截断),但用户又不能修改该函数,更不可能为了这个bug而去修改用户名,此时的一个很好的hack方式就是用mklink来fix包含空格的那个目录或者文件。对于现在这个bug,可以这么解决:

注意对于一些权限较高的目录可能需要在admin模式下的cmd才能完成。此时会出现一个叫”Farmer-John“的symbolic link的目录,此时当你向foo传入”C:UsersFarmer-Johnphoto.jpg“时,现在为合法输入,该路径其实等价地指向”C:UsersFarmer Johnphoto.jpg“的实际地址,bug就hacked了。

这个bug告诉我们两点:

1. 论测试的重要性

2. 开发目录下的所有目录和文件命名尽可能简单,比如只包含英文字母和数字,以免造成不必要的麻烦。

又搬家了

收到SAE发来的云豆不足的通知,提醒我该去给他进贡铜臭了。话说我差不多已经做了半年的SAE的付费用户了,每个月交个10多元我那几个小网站差不多就能撑起来了,BAE从此就是路人了。不过由于上次github的Edcucation Package想到好像有送1~2的云主机优惠,于是就简单看了下。DigitOcean又有绑定信用卡太蛋疼也怕不安全,意外发现了亚马逊的AWS支持一年的free tier试用,花了点时间研究了下,最后决定把主机挪到AWS一年玩玩。

这是网站第二次大迁移。

AWS也需要一张信用卡,会先扣掉1$验证(之后返还),再电话验证过后就可以用了。成功后登陆控制台一看惊呆了,见下图: Continue reading

Something you should know about the abs function

It is a rule in math that the absolute value of a number must be no less than zero. Is it true in computer languages? Well, most of the case except one. Let me take C language for example.

For a 32-bits C interger, its value ranges from [-2147483648, 2147483647] .So for x = -2147483648, what is the result of abs(x)? 2147483648, -2147483648, 2147483647, 0 or something else?

The result depends on your compiler! Please be careful to handle this undefined result in your coding.

Let’s look into the implementation of the abs function in C:

So a potential bug may skip into your code like this situration:

But if you really test the above code in your computer, probobly you will find that the computer gives you the expected output. Here is a Demo on ideone.com; You are suggested trying on your machine!

What happens to the correct output occassion is that the compiler actually return a longer integer type like long long which is 8 bytes usually. For long long y = abs(INT_MIN);, y is equal to INT_MAX + 1 for sure.

This is as much as the modern compiler can help you reduce your bugs. If you code in this way:

This time bugs are more likely to happen on you. Nigel Jones gives some good solutions to the problem in his article: The absolute truth about abs().

In summary, there are several ways to avoid the abs bug: 1. Always use a longer type to store your abs result, like long long for int. But what type for long long? Therefore the better one is double, in the cost of casting time and more CPU cycles. 2. Write your own abs function like this one: safe abs function; 3. Carry out the comparision in the negative space because negetive space is larger than the postive space.

Both solution 2 & 3 require you to use your own abs function.

That’s my report on delving the absolute function in C language. Just as a saying goes: Think twice before you code 🙂

网站改版记

闲的蛋疼又来改首页了。二话不说,先上结果:戳我!

为什么要改版呢?一来老的版本看腻了。。二来之前那个内容太少,加上flickr老是被屏蔽,网页上就真没啥东西可以看的了。而且其实之前1.0的时候对移动设备支持不太好,基本在手机上就是废了。

那这次主要改了啥呢?

  1. 新的页面设计。好吧,不是我自己设计的,在html5up上找了个叫overflow的模板改的.布局基本沿用了overflow的设计。根据自己的需求做了些小修改。
  2. 首先支持i18n! 有没有很高霸上,多语言支持! 好吧现在还只支持英语。用的是前端的i18next库,如果我判断出用户的默认语言是非中文我就自动显示英文的站点。但是前端做i18n的不利之处就是ajax站点的通病,对搜索引擎支持不好。因为内容是js动态生成,无法被搜索引擎索引(虽然Google的机器人可以执行当前页面的js脚本,但是也很有限)。好在我对动态生成的内容无被索引需求,也就不管了。 Continue reading

Javascript String 字符串模板替换函数(轻量级)

很多情况下在写一些小页面时想用一些字符串模板,但Javascript又不原生支持字符串模板,只好用一些第三方库,但引用第三方库的缺点在于很多功能的冗余, 浪费前端加载时间和流量,甚至会造成命名冲突等问题。

其实有时候的需求很简单,不需要很高级的字符串模板功能,只需要像'My Name is {name}. Hello {herName}这样的线性替换就行。其实这个需求实现起来非常容易,四行代码就搞定了。如下:

JS 字符串模板替换函数

妈妈再也不用担心我用+来拼接字符串啦 🙂 Continue reading

Leo

2014/04/13

花了一下午更新了下网站首页代码,主要进行了下面工作:

1. 重写了Flickr模块的代码,利用正则表达式提高了图片URL获取速度和加载速度

2. 新增了welcome.js,在控制台打印欢迎信息,很GEEK的方式,是个异步延迟加载模块

3. 把jQuery、nomalize等常见前端库换成了staticfile.org上的CDN,提高加载速度

4. 压缩了前端大部分代码,加载时间得到提升,消耗流量降至1.5M左右

5. 新增favicon,是个fudan的紫色logo

此版本为V2.0.

TODO:

1. 我的旅行轨迹

2. 我的摄影集(按主题分类)

3. 我的作品

Mac直接安裝Canon DPP系列升级版(适合无驱型Mac用户)

1. 首先到下面的网址下载canon最新的升级程序。没错是升级程序,当然的是mac的。
http://support-cn.canon-asia.com/

2. 解压。然后把解压后的文件(dpp3.XX_updater.app)复制到你的RMBP(例如桌面);

3. 右键dpp3.XX_updater.app,选择“显示包内容”,然后删除“contentsresourcesInfo.datx”。

4. 然后运行dpp3.XX_updater.app,神奇的情况发生了,可以安装DPP了,而不是提示升级。
总结:升级文件应该是一个完整的安装文件,只是canon基于特殊的想法给予了屏蔽,删除info.datx文件可解除。

参考文献:http://blog.sina.com.cn/s/blog_3ef766e00101ij0r.html

sae版的wordpress中的固定链接设置失败导致404解决大全

首先默认想仔细看本文的童鞋都是wordpress的初中级玩家、对php和服务器等也有一定的知识。

无论你通过哪种方式安装sae版的wordpress(代码仓库在线安装/下载wordpress改装版SVN提交),你如果碰到在设定wordpress固定链接时所有页面都出现404错误时,请看下文。

解决方案:URL重写(rewrite),也即自定义config.yaml。

一般情况:wordpress安装在根目录,这种问题的解决方案网上比较多,本质上都如下:

1. 修改根目录下的config.yaml文件(建议使用在线代码编辑方式,省去SVN不断提交的麻烦)。修改如下:

handle:
- rewrite: if (!is_file() && !is_dir() && path ~ "^/(.*)") goto "index.php/$1"

2. 点击保存,此时固定链接即可正常访问。

3. 简单解释下原理:is_file() 和 is_dir()判断当前URL是否是本地文件或者本地路径的名字,比如“www.louqibin.me/home.png” ,这个URL是我本地一张图片的路径,此时判断条件不成立,URL不重写,直接访问。但是比如“http://www.louqibin.me/2014/01/22/sae版的wordpress中的固定链接设置失败导致404解决大全/ ”,这个URL既不是一个文件路径也不是一个目录路径,同时path=”/2014/01/22/sae版的wordpress中的固定链接设置失败导致404解决大全/ ”,这个path满足正则表达式“^/(.*)””,该表达式要求判断path是否是以“/”开头之后跟任何字符,显然例子中的path满足,rewrite被激活,goto即为路径跳转,”index.php/$1″的意思是重定向到:

www.louqibin.me/index.php/2014/01/22/sae版的wordpress中的固定链接设置失败导致404解决大全/

即在原来URL中间插入/index.php/即可解决问题!

如果到这里你的问题还没有解决,正如我碰到的那样,我的情况是:我在一台sae服务器上装了多个wordpress,即在子目录下安装了wordpress。比如我在子目录blog和子目录dev下分别安装了两个博客。此时需要稍微改动下正则表达式如下:

handle:
- rewrite: if (!is_file() && !is_dir() && path ~ "^/(blog|dev)/(.*)") goto "$1/index.php/$2"

注意你应该根据你的情况修改正则表达式中的目录名字!

$1代表的是blog或者dev中任意一个字符串

$2代表的是(.*)中的所有字符。

原理都是一样的,在中间插入/index.php/。

刷新页面,怎么样,固定链接是不是生效了?恭喜!

 

除非注明,Leo’s Dev Blog文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.louqibin.me/dev/index.php/2013/08/08/为什么邮件地址中用等符号来代替.html

 

如何将Hotmail/Outlook中的日历导出到Gmail日历

一、Windows Live Mail 日历导出

1、登陆WLM日历http://calendar.live.com

2、点击上方“共享”,选择想要导出的日历本

3、选择“共享此日历”—“给您的朋友发送日历的只读链接”,这个时候点开“ICS:导入其他日历程序”,如下图

4、得到一串链接例如这样:webcal://cid-39f75e48944b9ba4.calendar.live.com/c~/calendar.ics

5、修改webcal为http得到一个新地址,例如这样:http://cid-39f75e48944b9ba4.calendar.live.com/~/calendar.ics,然后将这个ICS文件下载下来即可。

二、Google日历导入(同步)

1、登陆Google日历http://www.google.com/calendar,进入“日历设置”项,可以看到有导入导出选项。

2、点击导入日历,这里支持两种格式:iCal和CSV。上步我们导出的ICS格式即为ICal,故选择下载保存的ICS文件,直接导入即可。

 三、Microsoft   Outlook 与WLM日历及Google日历的同步

1.Outlook 与WLM日历的同步

只需要将将WLM下载下来的ICS文件直接导入即可,点击“文件”–“导入和导出”

导入结果如下图。注意:新日历导入会新建一个日历本,而直接导入则是将当前日历与所导入日历条目合并。

2、outlook日历与Google日历的同步

这个同步比较简单,只需要下载安装Google Calendar Sync,

下载地址:http://dl.google.com/googlecalendarsync/GoogleCalendarSync_Installer.exe

安装之后运行即可看到比较简洁的一个界面

这个网上介绍比较的多,也很详细,不再赘述了。

Google Picasa 如何设置、查看、取消隐藏文件夹

隐藏和取消隐藏文件夹

您可以选择从 Picasa 图片库视图中隐藏整个文件夹并对其进行密码保护。这不会影响您查看硬盘上的照片。以下是有关如何在 Picasa 中隐藏/取消隐藏文件夹的说明:

隐藏文件夹

  1. 在文件夹列表中,选择要隐藏的文件夹。
  2. 点击文件夹菜单。
  3. 选择隐藏

使用”平铺文件夹视图”时,所有隐藏的文件夹只会在文件夹列表底部的”隐藏文件夹”图片集中提供。如果您尚未创建”隐藏文件夹”图片集的密码,系统会提示您执行此操作。

 

虽然无法恢复忘记的密码,但您随时可以清除现有密码

 

取消隐藏文件夹 Continue reading

【转】Python中使用PIL的Image函数出错,巧用StringIO解决文件写入权限问题

问题】

已经实现了,将返回的jpg数据保存为jpg文件,然后用PIL的Image.open打开,并调用show显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
respHtml = crifanLib.getUrlRespHtml(captchaUrl);
# captchaDir = "captcha";
# #captchaPicFile = "returned_captcha.jpg";
# captchaPicFile = datetime.now().strftime('%Y%m%d_%H%M%S') + "_captcha.jpg";
# saveToFile = captchaDir + "/" + captchaPicFile;
# crifanLib.saveBinDataToFile(respHtml, saveToFile);
# print "save verify code pic OK, saveToFile=",saveToFile;
# openedImg = Image.open(saveToFile);
# print "openedImg=",openedImg;
# openedImg.show();

而此处,后来看PIL官网的解释中,发现有个frombuffer和fromstring,所以想要用这些函数,实现不需要保存所获得的jpg数据,而直接将此作为图像数据而打开,免去在本地建立多余的jpg文件的过程。 Continue reading

【转】腾讯的网站如何检测到你的 QQ 已经登录

在 QQ 已经登录的情况下,手动输入网址打开 QQ 邮箱 或者 QQ 空间 等腾讯网站,可以看到网页已经检测到本地 QQ 客户端已经登录,于是用户可以很方便地一键登录网站而不必再输入用户名密码。这实际上是典型的异构系统单点登录 SSO(single-sign-on)技术。网页怎么会知道我登录的 QQ 号码?腾讯是如何实现的呢?

Qzone_AutoLogin

 

 

QQMail_AutoLogin

网上有很多猜测,比如——

  • QQ 登录时在本地某地方存登录 ID 信息(Cookie 或文件),用 js 读,然后去服务器认证。但是现在的浏览器一般有沙箱功能,js 无法读到登录 ID;而且在清空 Cookie 后依然起作用。
  • 以 IP、CPU ID、硬盘 ID 等硬件设备 hash 做唯一标识,QQ 登录时在服务器记录此信息,js 验证。感觉这样依赖环境过多,QQ 不太可能采用此方法。
  • QQ 启动某端口监听,js 连接此端口。但是用 netstat 查看后,QQ 并没有监听端口。

有这么一个神奇的链接,http://xui.ptlogin2.qq.com/cgi-bin/qlogin 你一点开,它就检测到你登录了 QQ。通过查看页面源代码,我们可以发现一个关于 ptlogin 的 js 文件,这段代码中,描述了使用 ActivexObject 浏览器插件的过程,于是一切了然。 Continue reading

【转】揭秘最新黑帽SEO技术 [反向代理]

最近乌云社区里有位童鞋发了一个帖子:http://zone.wooyun.org/content/6103

说一个域名不知道用了什么手法居然绑定了李毅吧的url,既不是301重定向,也不是域名跳转,也不是域名转发。访问www.liyiba.com 这个域名感觉李毅吧仿佛单独成立了一个网站一样!而且这个域名的权重居然涨到了6!现在这个域名利用李毅吧带来的权重和流量已经独立建立论坛赚钱了!每日几十万的IP看的大家眼馋!

他是怎么做到的呢?

其实他利用的不是什么高超的手法,不是重定向,不是域名跳转,也不是域名转发,因为重定向,跳转,转发对SEO都是不友好的,而且丧失权重的!而且他们最终都是跳到http://tieba.baidu.com/XXXXX 根本和www.liyiba.com这个域名不一样。

那他是怎么做到的呢?

很简单-反向代理!没错就是反向代理!

玩过新浪SAE的同学都知道当初新浪SAE不给绑定域名,我们自己利用反向代理来覆盖其原来的二级域名!例如SAE送的二级域名:xxx.sinaapp.com 通过反向代理便可绑定自己的任意域名。

具体做法是找一个支持htaccess的便宜的空间,编辑一个htaccess文件为以下内容:

把这个htaccess上传到空间!再把这个空间绑定好你自己的域名:www.xxx.com

这样 xxx.sinaapp.com 就成功的绑定了 www.xxx.com 这个域名!

其实利用反向代理我们能把任何网站绑定自己的域名来盗取该网站的权重!等你的域名权重上升到一定程度就可以拿来建站赚钱了!!!!

本文转自:http://3c3c.ml/?p=560

两款Google Chrome浏览器SEO专业插件推荐

  1. SEOquate,类似IE状态栏在页面顶部显示该页面的收录数和各大搜索引擎PR、权重值,还支持页面关键词频率分析,提取高频关键词
  2. PageRank Status, 非常强大的插件,感觉是All in one 的那种SEO插件,强烈推荐试试。

本文为 Leo’s Dev Blog 原创,转载请明文注明出处:http://www.louqibin.me/dev/2013/08/26/recommend-two-seo-tools-of-google-chrome-plugins/

 

 

【转】浅析PageRank算法

很早就对Google的PageRank算法很感兴趣,但一直没有深究,只有个轮廓性的概念。前几天趁团队outing的机会,在动车上看了一些相关的资料(PS:在动车上看看书真是一种享受),趁热打铁,将所看的东西整理成此文。

本文首先会讨论搜索引擎的核心难题,同时讨论早期搜索引擎关于结果页面重要性评价算法的困境,借此引出PageRank产生的背景。第二部分会详细讨论PageRank的思想来源、基础框架,并结合互联网页面拓扑结构讨论PageRank处理Dead Ends及平滑化的方法。第三部分讨论Topic-Sensitive PageRank算法。最后将讨论对PageRank的Spam攻击方法:Spam Farm以及搜索引擎对Spam Farm的防御。 Continue reading

【转】十大不为人知的Google搜索技巧

前言:多数人在使用Google搜索的过程是非常低效和无谓的,如果你只是输入几个关键词,然后按搜索按钮,你将是那些无法得到Google全部信息的用户,在这篇文章中,Google搜索专家迈克尔.米勒将向您展示如何更智能、更高效地进行Google的系列搜索。

Google是一个非常精密成熟的搜索引擎,但大多数的用户都没有能完全地利用到它的能力。一般人就是在Google的搜索框中输入一两个关键字,然后点击“搜索”按钮,等着Google显示出它第一页的搜索结果。这是一个相当简单模式匹配算法的搜索,不幸的是,通常此时出现的大部分都是并不需要的结果。

其实,还是有更好的方式能够让搜索产生一些更少、更为准确的结果。你所需要做的事只是学习一些简单的技巧,你就能很快得到更多更好的Google搜索结果。 Continue reading

为什么邮件地址中用#等符号来代替@

解答:这是为了防止垃圾邮件,有些人写爬虫抓取网上的Email地址,然后群发垃圾邮件,所以一个稍微安全点的方法就是用#,%,$等特殊符号来代替@,但这种措施有时候也不安全,如果那个爬虫写的比较聪明的话,所以用更特殊的符号可能会更好,比如:admin@12345.com ,用admin艾特12345.com ,说明:请用@替代‘艾特’

 

除非注明,Leo’s Dev Blog文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.louqibin.me/dev/index.php/2013/08/08/为什么邮件地址中用等符号来代替.html

猛戳我回首页逛逛~~

 

【转】Google新版搜索引擎优化入门指南发布中文版

:日前,Google 搜索质量团队的新版 SEO 指南新增十种语言的译本:西班牙语、法语、德语、俄语、土耳其语、芬兰语、瑞典语、匈牙利语以及中文(简体与繁体)。

新入门教程丰富了内容,有了更多的图文例子,对词汇定义也更加完善,而谷歌机器人也强势回归。Google SEO 入门教程涵盖了网站站长需要考虑优化的诸多方面。这些方面(比如改善标题和描述元标签,URL结构,网站导航,网站内容的建设,锚文本……等等)适用于各种不同经验层次的网站站长和不同规模和类型的网站。

您可以到 goo.gl/seoguide 下载完整 32 页的 PDF 文件(英文原版简体版正體版),打印下来作为有用的参考资源。

 

本文转自:站长之家

本博客地址:Leo’s Dev Blog, 欢迎访问我的主页:访问主页