2018年4月27日星期五

一些个人数据管理需求(draft)

当前版本时间:2018年 4月27日 星期五 17时30分48秒 CST

作为计算机相关专业的,我总是希望能有更加自动化、智能的方法管理我自己的文件、数据等。经常是遇到具体问题我才感叹并思考,甚至下决心以后有空了要自己写一些脚本和程序,来解决现有软件无法解决的问题。然而过后很快就忘了。现在我写这个博文的目的就是要将这些记录下来。

首先大致可以分为几大类,之后再进一步细分:

  • 照片图片管理
  • web书签管理
  • 书籍管理(电子、实体)
  • 笔记管理
  • 个人文档管理(论文、报告、博客文章、日记)
  • 视频管理
  • 任务管理

2017年4月21日星期五

设置mactex将选中的公式用\begin{equation}和\end{equation}包裹起来

众所周知,mactex提供了一些宏命令,并且可以在mac的系统里设置快捷键。其中mathematics里的equation可以方便地添加公式,这对经常输入公式的人很实用。
然而今天我遇到一种情况,需要把已经输入的公式用\begin{equation}和\end{equation}包裹起来,现有的equation宏只提供了插入,并不能通过选中然后自动包裹起来。为此我对现有的宏做了一点修改。
修改前:
\begin{equation}
#INS#
\end{equation}
修改后:
\begin{equation}
#SEL##INS#
\end{equation}

2016年5月18日星期三

在Windows下进行并行?批量同时启动限定数量的不同参数的多python实例的方法。(How to start a limit number of program (python instances with different argv) at the same time)

标题很长,但是也不一定说清楚我要做的事。下面我举一个例子。

我的实验程序接受3个参数argv1,argv2,argv3作为输入,分别是3个文件路径,其中每个参数的可能情况都有若干种。比如argv1可能有6个文件,argv2有100个文件,argv3有2个文件。实验程序会计算并返回一个实数作为实验结果。


现在为了测试各种不同参数下实验结果是怎样的,并且为了将来画图,我要把每种参数组合都跑一边。懂点数学的人可以看出,实际上我程序接受的参数是一个三元笛卡尔积。正常情况下写for循环跑一个单进程程序(我分不太清进程和线程),要跑6×100×2=1200次,于是我们就看到一个python进程疯狂运行,在任务管理器里看到它占用了25%的cpu资源,因为我电脑是双核4线程的。这样显然很慢。就算丢到服务器上,服务器cpu是24线程的,每个线程并不快,如果我的实验程序只用一个线程也不能发挥服务器的优势。

并行本来就是一个坑,python里写并行不太容易,还有啥GIL之类的,完全不想学。此外我程序每次运行之间完全没有关联,也不用共享什么内存,输出结果保存到数据库里就是了,用的不同主键也不会冲突。于是我决定用Windows批处理start一堆实例,参数不同。为了防止它一次启动1200个实例卡死,我还每隔24个线程执行一个带/wait参数的,这样程序会在第24个实例启动后等它完成再启动新的一批实例,这样同时运行的实例不会太多,会约等于24个左右。

废话不多说,上代码。


 f = open("test.bat")  
 i = 0  
 for a in a1List:  
   for b in a2List:  
     for c in a3List:  
       if i%24==23:  
         f.write("start /wait python test.py %s %s %s\n"(a,b,c))  
       else:  
         f.write("start python test.py %s %s %s\n"(a,b,c))  
       i=i+1  
 f.close()  
其中a1List等中存的是argv1所有可能输入的文件路径,a2List中存了argv2的100个可能输入的文件路径……
之后只要愉快地执行test.bat就可以了。


2016年4月29日星期五

试用docker版Huginn遇到Gem::RemoteFetcher::FetchError: SSL_connect...An error occurred while installing mysql2 (0.3.20...

由于我刚开始学习docker,而且不会ruby,下边用语不一定准确。

我试用了docker版的Huginn,而且是用的windows版docker toolbox运行的,按照官方文档执行
4. Start your Huginn container using docker run -it -p 3000:3000 cantino/huginn
后来经过我研究,实际上它启动时会默认执行/scripts/init
遇到了这个错误:
Gem::RemoteFetcher::FetchError: SSL_connect...
An error occurred while installing mysql2 (0.3.20...
似乎是在安装mysql2的gem这步挂了。原因是因为在大天朝局域网连不到那个服务器。

我首先尝试给docker的容器或者docker machine从环境变量设置proxy,但是没有效果。
后尝试如下方法成功:

  1.  docker run -it -p 3000:3000 cantino/huginn /bin/bash
    这一命令效果是:不是默认执行默认的/scripts/init,而是启动一个shell
  2.  export http_proxy=192.168.99.1:1080
  3.  export https_proxy=192.168.99.1:1080
    这一命令的效果是在启动的容器里用环境变量设置代理,代理的地址指向的是宿主机windows的shadowsocks,在容器中运行route和ifconfig是看不到这个地址的。但是可以进入docker machine里(执行docker-machine ssh default进入)看到我宿主机的地址是192.168.99.1。这也使我了解了windows下用docker toolbox的三层从下到上的关系大概是是windows——docker machine——docker容器
  4. 在/app下执行bundle
    这步安装依赖,实际上在init里就是执行这个的时候挂了。
  5. 执行/scripts/init
    这两步实际上应该有更巧妙的办法,比如把环境变量写到init里什么的,然而init我看不懂,还是不乱动了。

2012年9月25日星期二

如何用科学的方法在网页中显示科学公式(MathJax+LaTeX)

这个是实验室项目提出的要求,最早先师姐让我解决上下标的问题,我采用<sub>和<sup>这两种html标签解决的这个问题。之后发现同时有上下标的情况没法解决。以下是更为科学的解决方案,显示各种科学公式毫无压力适用于HTML以及相关的JSP啊FTL啊PHP啊神马的Web页面貌似都能用。

首先简单介绍一下LaTeX这个高科技。
 http://zh.wikipedia.org/zh/LaTeX 
国外高端科技论文一般是不用Word这种东西排版的,一来Word是商业软件,二来Word各版本还不兼容,又不容易保证格式规范。一般都用LaTeX排版,你从网上下到的PDF文件都是用那个做出来的。我也分不清各种LaTeX以及TEX之间错综复杂的关系,知道个大概就行,反正我也没打算真学那一堆命令去输入公式。

渲染为公式——MathJax
在网页里将LaTeX公式渲染成跟Word公式编辑器编辑出来的一样的效果,需要MathJax,详情:
http://www.mathjax.org/
其实是用JavaScript、CSS之类的技术实现的,你可以把这个20MB大的东西下到你服务器或者电脑里用,也可以直接调用它的CDN,亲测用CDN更快。标签尽量靠前的位置插入:
在<head>标签尽量靠前的位置插入:
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>

?config= 后边跟的是配置,以什么方式输入以及以什么方式输出都在这里设置,具体可参见:
http://www.mathjax.org/docs/2.0/configuration.html#configuring-mathjax
这时候你网页上的LaTeX公式就会被渲染成应有的样子。

轻松写公式
那么如何不掌握那复杂的LaTeX命令而写公式呢?可以采用在线LaTeX编辑器: http://www.codecogs.com/latex/eqneditor.php
或者干脆用MathType,

用MathType输入公式(这个就简单多了),在编辑好公式之后,选项-剪切和复制选项,如图设置:

既在转换为其他文字里选LaTex(里面好几种LaTeX我分不清……貌似都差不多),取消那两个包括的勾勾。
现在用鼠标像选择文字一样选中公式,Ctrl+C,然后粘贴到网页里。上边例子中得到:
\[\sqrt {{b^2} - 4ac} + \frac{{ - b \pm \sqrt {{b^2} - 4ac} }}{{2a}}\]
这时候就需要修改下。如果你想要公式大一点像课本上公式定理的那样单独占一行,把包围公式本体的\[和\]改为$$和$$:
 $$\sqrt {{b^2} - 4ac} + \frac{{ - b \pm \sqrt {{b^2} - 4ac} }}{{2a}}$$
如果你想要公式小一点,跟你的文字放在同一行,则把中括号改为小括号:
\(\sqrt {{b^2} - 4ac} + \frac{{ - b \pm \sqrt {{b^2} - 4ac} }}{{2a}}\)
你问我为什么它不认识中括号?我也不知道,反正就这样了,我就这么用的有效果,谁弄明白了告诉我啊。


我们页面的数据是从数据库读出来的,到时候要求输入数据的人统一用MathType把公式弄好粘进去改一下括号就好啦,这样也不用特意培训他们去学LaTeX,我们也只要每个页面head部分加上一行引入js的代码就好了。
此外啰嗦几句。我是属于习惯用比较规整的代码去控制显示结果的,比如做页面一直用Notepad++去编辑HTML和CSS、JS,然后在浏览器里看结果。当然采用Dreamweaver这种可视化的编辑器拖来拖去很简单方便直观,但是不如写代码更接近本质,更加纯粹。
至于LaTeX排版这种高科技,我觉得我早晚要学习一下的,而且在中国的大学里滥用盗版Word非常不科学无视版权还要忍受调格式这么恶心的事情,理工科的孩子们真应该有这么一门课学习免费而又开放的LaTeX跟国际接轨,可以跟科技论文写作课放一起,或者学校拨点款给我们每人买套正版Office?

2012年8月5日星期日

Bootstrap的input元素变得很窄、显示不正常等情况的解决

某天,我写了个带表单的ftl页面,用的twitter bootstrap,结果用户名和密码的输入框上下距离变得好窄,也可以说是好矮,高一点的字幕显示不全。
折腾半天还是从网上找到了结果。
参见:
https://github.com/twitter/bootstrap/issues/170
在页面最上方加上<!DOCTYPE html>
结构变成如下
<!DOCTYPE html>
<html>
...
</html>
之后input的高度就对了。
当时原理没弄明白。
关于<!DOCTYPE html>:
http://www.w3school.com.cn/tags/tag_doctype.asp

这在XHTML的要求里似乎是必须的,在w3school的网站有XHTML的教程。我从此吸取教训,以后写html文件时,尽量符合XHTML的严格要求,保证页面在各种浏览器下(当然,IE实在不对就算了)正确显示。

windows 7 安装完第一次重启从硬盘引导后在黑屏处光标闪啊闪进不了系统的解决方案

本文写于2012-07-10
我决定近期把一些我以前发在别处的我觉得有价值的文章转发到这里,以便遇到这些问题的人搜索到。
博主有回帖必沉、不为人所关注的特性,若能对偶然路过的读者有所帮助,我深感欣慰。



今天,给一台Thinkpad E10安装win7。原来装的是xp系统,各种没杀毒软件,而且由于国产软件弄的千疮百孔。
从U盘引导后正常安装,之后重启,开始硬盘引导进入下一阶段,于是遇到了黑屏,左上角光标闪啊闪就是进不了系统启动页面的情况。
这不由得使我想起了研究生面试时计算机专业的同学被问的问题,系统是怎么启动的?我没学过相关知识完全记不得。
后来从Google上搜了一下也没有详细解决办法。
再后来看到一篇关于E10安装xp时修改BIOS的硬盘模式的文字,于是我进入BIOS设置检查了相关设置,将硬盘模式从compatible(兼容的)改为AHIC。
保存后重启,正常启动了。
——————废话分割线——————————
关于AHIC参见百度百科http://baike.baidu.com/view/915161.htm

最后吐槽一下,诚然操作系统、软件、硬件刚出来的时候有的会有兼容性问题,但是整天抱着旧的不放也会出现兼容性问题(过时),而且旧的无法享受更新升级带来的好处,被厂商抛弃的产品漏洞也不会再被修补。
至今甚至还有不明真相群众质疑xp的兼容性……那去装Windows 95好了。
再说一点题外话,我十分不喜欢C和C++,就因为常用的开发工具VC6.0在Windows7下运行非常容易挂掉,兼容模式也不太好用,还得弄xp虚拟机,有关C类语言在Windows下的开发都用最新的VS系列,虽然有免费的Express免费版,但是远不如旗舰版强大,此外这东西占用很大的硬盘空间,明明装到D盘,C盘下却需要2G以上的空间,而且杂七杂八的组件很多,请神容易送神难,一旦安装了卸载起来很麻烦,安装是一块进来的卸载要一个一个弄,还容易失败,还不如重装整个系统。相比之下Java语言有很大的优势,但是部署开发环境也有点麻烦。
关于操作系统,Linux的桌面版虽然有了很大进步,但是还是有点太复杂了。如果想尝试Linux,在诸多发行版中我推荐Mint的LXDE版。
最后的最后,爱护自己的电脑,远离国产流氓软件。