Category: 编程、软件、技术

  • 用Vue和Slim改写Go4Pro.org

    本文推送到[go4pro.org]

    被BT群昵称为“狗屎皮”的Go4Pro.org自从2009年上线以来,一直没有什么访问量——因为技术的东西向来看的人少。

    狗屎皮上线后,经过两次的修订,但都基于现在回头看来十分笨重的Symfony架构。

    自从我将我自己的任氏有无轩改版,前端保持Symfony,后端改用Slim提供API后,就一直想将狗屎皮重新用更新的技术写一遍。正好我先是学习了React(Wiki链接),然后又学习了Vue.js(Wiki链接),并自发地用任氏有无轩作为试验品,对其进行了JS改写(但没有发布)。

    这段时间正好有点空。于是决定用Vue改写狗屎皮,并用Slim提供API服务。 我查了一下我的GitLab提交记录:

    1. API后端首次提交是在2018年10月2日,最后一次提交是在11月8日。
    2. 狗屎皮前端首次提交是在2018年10月3日,最后一次提交是在11月9日(但真正有意义的提交是在11月8日)。

    Ashampoo_Snap_2018年11月9日_16h58m12s_001_Chrome

    Ashampoo_Snap_2018年11月9日_16h58m26s_002_Chrome

    这样的编程不带有任何deadline,所以我也完完全全是在三天打鱼、两天晒网——这段时间更是有一本书在手上。 这次改写收获很大。用到了大量的工具:

    1. Postman用来调试API
    2. VSC用来编写Vue代码
    3. Netbeans用来编写PHP代码

    提升了编程水平:

    1. 总体来说,Vue框架是我更喜欢的,现在我已经基本不看React了。Vue的模板语法我很喜欢,至少很结构化。
    2. PHP还是世界上最好的编程语言。
    3. 这次用Slim编写API虽然只是第二次,但感觉已经非常喜欢这个框架。用它编写轻量级的后台真的很快。
    4. 渐渐抛弃了所谓的ORM,感觉这个框架很不错但是太臃肿,对我这样一个熟悉SQL的人来说,直接用SQL编写数据库操作语句反而觉得更快、更直接。
    5. 更喜欢用VSC来编程了。

    以上。

  • 数据库恢复

    【本文收录于[Go4Pro.org]

    4月24日早上手欠,不知道进行了什么骚操作,造成我的VPS上MySQL服务无法正常启动。

    以下是整个应急处理和数据库恢复过程。

    首先,我停掉了Apache2的服务,中断了WEB访问——因为反正也访问不了。

    然后,进入/var/lib/mysql目录,看到我之前的两个数据库的文件都还在,心里略微放心了一点。于是通过FileZilla将所有的idb和frm文件拷贝到本地。

    为了进行数据恢复,我在工作机上创建了一个虚拟机,装了一个MySQL服务器。以下操作以其中一个数据库rsywx的恢复为例。

    参照这篇文章的提示,进行如下操作。

    首先,在虚拟机MySQL中创建一个数据库rsywx。该数据库上次的全备份是在2月份,但是我们不会用这个备份来恢复,因为这要丢掉2个多月的数据。我们用这个数据库备份是为了生成rsywx数据库的表结构。我们先用这个备份恢复到2月份,然后执行以下命令:

    mysqldump –d –u root –p rsywx > rsywx.schema.sql 这会生成一个数据库表结构的SQL文件。

    由于数据库中表格间存在PK/FK关联,所以需要手工将所有FK相关的SQL语句删除。

    我们现在可以DROP这个rsywx数据库,再重新创建一个rsywx数据库。

    上面这个步骤完成后,下面是最重要的一步。在MySQL服务器中执行下列命令(建议用GUI完成,这样可以将结果导出):

    USE INFORMATION_SCHEMA;
    SELECT
    CONCAT(“ALTER TABLE `”, TABLE_SCHEMA,”`.`”, TABLE_NAME, “` DISCARD TABLESPACE;”)
    AS MySQLCMD FROM TABLES
    WHERE TABLE_SCHEMA = “dummy”;

    结果应该是类似这样的几行数据,rsywx中有几个表,就有几行:

    ALTER TABLE `rsywx`.`book_review` DISCARD TABLESPACE

    将结果导出,并重新执行。此时,所有的idb文件都将丢失。

    停止MySQL服务,将从生产环境备份下来的rsywx数据库中的所有idb文件拷贝过来。重新启动MySQL服务。

    然后运行 ALTER TABLE rsywx.book_review IMPORT TABLESPACE; 此时,rsywx数据库已经基本恢复完成。进行select操作时已经可以看到所有数据!

    接下来,是重新生成对应的PK/FK。

    注意,这一步有可能出错。请根据相应提示修改。而且一旦操作出错,会前功尽弃。

    所以,最好是在完成select操作看到数据后,先将数据dump出来备用。

    到这里,数据库恢复就已经完成了。

    此次数据库奔溃,是4个月来的第二次。教训是,数据库每日全备份非常重要,而且要用dump的方式备份,因为这是恢复数据最简单、最快的方法。以上方法只适用于实在走投无路的时候。

    Ashampoo_Snap_2018年4月25日_12h53m52s_001_Chrome

  • Vagrant+VirtualBox最新SSH登录

    操作系统:Windows 10 64位 Vagrant:2.0.2 VirtualBox:5.2.8 虚拟机Linux:ubuntu/xenial64

    ======以上是分割线======

    不知道从什么时候开始,Vagrant+VB+Ubuntu的虚拟机组合就不能使用常规的用户+密码登录,而强行改用密钥登录。

    使用vagrant up命令加载并启动虚拟机后,在宿主机端ping是可以连通的,而且如果我们在vagrant配置中设置显示vb.gui,也能正常使用vagrant/vagrant登录。说明虚拟机完成了正常的启动。

    以下就开始SSH的配置。

    vagrant up之后,会在虚拟机根目录下的.vagrant\machines\default\virtualbox中生成一个private_key文件,这里存放了我们虚拟机的私钥。与之对应的,在虚拟机中~/.ssh/authorized_keys中配置对应的公钥。

    在Windows中先用puttygen.exe调入这个private_key,然后用保存私钥的方式将它转换成我们的putty可以使用的OpenSSH格式并保存。

    在putty中创建一个对话,

    在其配置的Connection|SSH|Auth中设置需要使用的私钥文件。这样就可以解决登录的问题了。

    【本文收录于[Go4Pro.org]

  • Vagrant 1.9.3和Windows10

    【本文推送到[go4pro.org]

    最近升级到了Windows 10,Vagrant也升级到了1.9.3,Oracle VB也是最新的5.1.20。

    有几个小小的地方需要调整:

    VB Guest Addition

    需要对VBGA进行更新。手工的方法不是很好,推荐使用一个插件,在每次启动虚拟机的时候自动更新VBGA:

    vagrant plugin install vagrant-vbguest 

    安装好这个插件后,再也不用担心VBGA版本与VB不匹配的问题了。

    无法mount共享文件夹

    应该说,VB的共享文件夹还是很不错的一个东东。但是在上述操作系统、VB以及Vagrant的版本下,会出现:

    Vagrant was unable to mount VirtualBox shared folders. This is usually
    because the filesystem vboxsf is not available. 

    网上流传有两种做法。一种是修改d:\Vagrant\embedded\gems\gems\vagrant-1.9.3\lib\vagrant\util\platform.rb文件的206行:

    # Convert to UNC path
        \\\\?\\ + path.gsub(/, \\) //原来的样子
        # path.gsub(/, \\)  //需要改成的样子

    这个方法在Windows 10中不起作用,所以要用第二种方法:

    正常启动Vagrant并ssh到虚拟机后,输入如下的命令:

    sudo ln -sf /opt/VBoxGuestAdditions-5.1.20/lib/VBoxGuestAdditions/mount.vboxsf /sbin/mount.vboxsf

    这样就能解决。

  • 用Tonido构建自己的私有云

    两个月前我略略总结了一下同步、版本和备份的概念,今天我又测试了一下用Tonido来构建自己的私有云。

    什么是云?

    什么是云?简单地说,云就是“生活在远方”的东西。我们平时在电脑上工作,用Word写文章、Excel做表格、PowerPoint做课件,保存的时候一般都会选择保存在自己本地的硬盘上。这样保存的文件被称为是“本地文件”,因为它存留在本地硬盘中。

    如果没有特别的设置,这些文件是无法从外网访问的。很好,很清楚。

    Windows操作系统还提供了保存到One Drive的功能,或者你也可能选择将文件存入其他诸如此类的云盘中。这时你的文件就在“云端”了。哪怕你不在自己的电脑边,或者关闭了家里的电脑,这个文件也还是可以从云端进行访问。而且,这样的文件访问是“同步”的。你在另外一台电脑上修改了文件后,会在本机得到同步,避免了将文件拷贝来拷贝去的问题。

    但是,云盘有三个问题。

    首先,它不是端到端的。它需要一个中间媒介来保存文件。对于那些特别在意隐私性的人来说,这就意味着有个“中间人”会看到你的数据。

    当然,这个问题可以得到一定程度的缓解。比如选择比较有名誉的运行商,需要分享的文件进行加密等。

    其次,云盘会很不稳定。前段时间,国内掀起了一股云盘关闭的热潮。而且关闭云盘的那些公司还不是籍籍无名的小公司。另外,出于种种政策限制,谁都不知道啥时候你的文件就被莫名其妙地“和谐”掉了。

    第三,大部分云盘空间有限。如果只是一些文档的分享也就罢了,但是如果我要分享照片、音乐乃至视频的话……

    我的一个习惯是,如果一件事情不需要借助第三方也可以完成,那就尽量不要麻烦第三方,自己去解决。这么做也许需要多做一些事情,但是将所有流程控制在自己手里是最好的。

    什么是点对点的私有云

    不借助第三方存储空间的云就可以宽泛地称为私有云。所有提供私有云解决方案的厂商都会声明,不会转储你分享的文件。所以,只要你选择那些信誉比较好的软件,就不必担心分享的文件有被第三方看到的问题。

    私有云可以很好地解决上面提到的云盘的问题。你的电脑有多稳定,私有云也有多稳定;你的电脑有多大的硬盘,私有云也有多大的空间。但是它也有自己的弱点:因为它是点对点的,所以在分享的大部分时间里需要发起分享端在线(也就是开着电脑并运行相应的软件)。这会造成额外的电费和折旧。

    不过我认为,和更高的私密性相比,这是可以接受的副作用。

    另外,Tonido这样的私有云,虽然借助了一个中间机构进行远程访问中继,增加了一定的风险,但是好处在于对私有云的访问可以通过https协议进行,所以可以在公司网络中加以访问。

    注意:如果要分享公司文件,以便回家后继续工作,请检查公司的IT相关政策允许你这么做!

    安装、配置和使用

    在Tonido的官方网站(http://www.tonido.com/)可以下载Tonido的免费版本。安装很容易也很直观。

    初次运行程序时,会要求为你的电脑创建一个名字和密码。注意,这个名字必须是Tonido提供服务的所有电脑中唯一的名字,不能和其他用户重名。

    tonidoa

    名字取好后,就可以用XXXX.tonidoid.com来访问了。当然现在还不行,我们还要进行设置,选择分享什么目录。

    tonidob

    注意,不要选择“允许远程访问所有目录”,而是选择只“允许远程访问选定的目录”。然后在下一页,选择“允许索引”后,可以选择将你需要的文件夹加入共享。

    Ashampoo_Snap_2017.03.20_22h22m47s_003_Tonido

    好了!一切就绪,Tonido已经启动,你的私有云已经准备就绪!

    用电脑访问私有云

    你可以用http://xxxx.tonidoid.com的形式访问你的私有云,而在本机访问的话用http://localhost:10001的形式来访问。输入密码后就可登录:

    Ashampoo_Snap_2017.03.20_22h30m32s_004_Tonido在手机上登录

    如果Tonido只能支持PC的操作,那就太失败了。它也提供了Android和iOS下的应用。以下用iOS为例说明如何使用。

    首先在App Store中搜索Tonido,看到这个图标和描述就可以下载了(免费下载!):

    IMG_1028

    安装好后,添加你自己的服务器,输入密码后,就可以开始浏览远程分享的文件夹中的内容了:

    IMG_1029 IMG_1030

    是不是非常非常地方便?

    将自己的文件(文档、图片、视频)保存在自己的电脑中,随时和朋友分享,这应该是手机的一个应用之一!

    (本文收录于[go4pro.org]

  • 微信公众号、各类应用的隐私问题

    不知道最近大家是否在微信中收到过这么一条信息:

    IMG_0556

    我不知道发出这条消息的那位微信好友是出于什么目的:是真心地认为自己微信好友太多,也真心地认为不知出于什么原因被僵尸粉看上了,或者被别人屏蔽了,所以要从中知道自己真正的粉有多少;还是出于什么商业推广目的,因为在这条消息中明确出现了一个所谓平台的微信号;还是因为被感染了什么微信病毒,在自己不知情的情况下发送了这么一条信息;还是脑子进了水,根本没有对自己微信好友的隐私的保护?

    我的判断是:这位我的微信好友脑子进了水,相信了这种莫名其妙的平台提供的莫名其妙的服务,然后加了这个平台,给出了让这个平台访问自己所有微信好友(甚至可能包括手机通讯录)的权限,然后平台自动地开始发送这样的垃圾信息。

    别的我不多说。我想对这些TYTSTN的用户提醒一句:

    我和你,不管出于什么原因,成了微信上的好友。对此,你获知了我的个人数据:微信号(很多时候还是手机号),可以访问我的朋友圈以及朋友圈上所有公开的消息,以及这些消息中包含的我的个人数据。

    但是,我授权或者说允许你看到这些个人数据,并不意味着我同时授权你将我的个人数据与任何第三方分享!这是对我的隐私的赤裸裸的侵犯,你知道吗?

    对方得到我的个人数据,会派什么用途?你知道吗?

    打个不恰当的比方,我和你是朋友,你有一个我不认识的朋友对你说,来啊,把你的朋友介绍给我吧,我让他们发财。你在给出我的电话号码前,是不是应该问问他准备用什么方法让我发财?是不是应该问问我是不是有兴趣?而在得到我明确的同意之后,再将我的电话号码告诉你的这位朋友?

    到了网络之后,怎么连这点基本的规矩都不懂了呢?

    对不起……我撤回刚才那句话。不是你到了网络之后,不懂这些基本的规矩……而是因为在现实生活中,你连这点基本的规矩也不懂!是我错怪了你。

    还有微信,是不是出于CSR,拿点实实在在、严严厉厉的行动出来?

    说句题外话,在中国大陆,我真的不愿意从事所谓的互联网创新。一个没有底线、没有法律、也根本没有正常的商业运作的环境中,自然只有恶人在肆虐。我的道德操守不允许我这么做。

  • 同步、版本和备份

    在日常工作中,我们要和各种文件打交道。而创建、修改是最常见的操作。

    也同样是在日常工作中,我们也会有在多台电脑上工作的经历。比如说,在公司的电脑上创建了一个Excel文件,进行了一些输入但没有完成,想回家继续完成。但是又不想把公司的电脑带回家(或者是台式机而带不回家),这时该怎么办呢?

    一种方法是用U盘把文件拷贝带回家,或者用邮件把这个文件发回自己的邮箱回家收取后继续工作。当然也可以考虑将文件存放到网盘之类的方法。(当然,前提是这样做是公司IT政策允许的。如果公司IT政策不允许,那么看到此处就可以打住了。)

    这些方法都有一个缺点:都要手动地将文件“搬来搬去”,而一旦文件修改次数增加,来回拷贝时只能靠文件的更新时间作为“哪个是最新版本”的判断依据。但是这个判断有时是会有问题的。比方说,在公司进行修改后忘记更新到U盘或者网盘,而回家后在老的版本上继续工作等等。

    为了避免这个问题,我采用的是“同步”的方法,采用的软件是Resilio Sync。Resilio的前身是BitTorrent Sync,出品方是赫赫有名的BitTorrent协议的开发商。

    这是一个P2P的软件,不需要设置服务器,也不借助于任何公共服务,完全是一个私有云的架构。

    软件安装和设置都很简单,而且支持目前所有的主流操作平台:Windows,Linux,Mac,Android,iOS。在iOS和Android上,它还可以同步照片。这样一来,你再也不用担心照片丢失的问题。

    Resilio Sync还有一个“黑”应用场景,那就是可以同步电影。


    一个文件光有同步还是不够的。有时我们会修改文件,再修改,再修改……有一种做法当然很实际,就是不同的修改生成不同的文件(V1,V2……)。不过一般会推荐用标准的版本控制软件(Git,hg)去完成。

    使用版本控制最好是去国际上主流的版本控制站点注册一个账号,比如github或者BitBucket。虽然github名气更大,但是我更推荐BitBucket,因为它可以在免费账号的情况下生成私有仓库。

    Windows下git的客户端很多,我向大家推荐的是GitKraken或者SourceTree,而且这两个软件都是多平台支持,GitKraken更是全平台支持。

    有了版本,我们随时可以切换到不同的版本进行工作。

    在某些情况下,版本控制可以当做备份来用。


    最后我们谈一谈备份。我强调一点:一定要经常做备份。一些文件(特别是老照片)丢失的后果是无法弥补的。

    备份必须是在另外一个硬盘上进行,更好的是在另外一台机器上完成,如果有条件进行异地备份就完美了——不过这点要求太高了。

    我目前用的是SuperEasyBackup Pro,付费了。它的备份速度很快,特别是在后期增量备份的情形下。我的备份位置是一个独立的1T外挂硬盘,它一直挂在我需要备份的电脑的USB口上。


    新年就要来到,祝大家新年快乐,阖府安康!

  • 任氏有无轩维客上线

    我有两个主力站点。一个是“任氏有无轩”(藏书、读书、博客),这个也是我日常更新最多的站点。另一个是“任氏有无轩维客”(项目、资源),这个会在我完成了一些比较大的项目,而且这些项目不适宜放在“任氏有无轩”中时上传到维客站点中。

    维客站点其实已经开了一段时间,期间项目也在不断累积。这几天我用Spress这个软件对我的维客进行了完全的静态化。 所谓的静态化就是站点中所有的文件都是静态的HTML文件。这样做的好处是很明显的:

    • 完全的Markdown语法控制;
    • 完全的Twig引擎定制;
    • 更快的加载速度;
    • (也许)更好的SEO;

    目前在这个维客中有四个比较大的项目:《911调查委员会报告》《这本书叫什么?》《上帝创造了整数》《卫斯理全集》。 欢迎大家关注!

    附:桌面和手机浏览效果

    Ashampoo_Snap_2016.12.18_10h05m59s_003_Chrome Screenshot_20161218-101321

  • 一个很NB的插件:Zemanta

    最近在翻译一本书,讲的是搜索的未来发展。其中提到了这么一个插件:Zemanta

    这个插件的功能是:你在写作的时候,插件会在后台检测你的书写内容,并根据上下文建议相关的博客文章和图片。这是很了不起的一个工作啊!

    但是我写了这么多,大概是因为全是中文的原因吧,Zemanta的提示就是不出来啊!

    Zemanta

    So let me try some English content onward. Internet has become a phenomenon. I used it everyday. But there is a trap here: when the speed of Internet is increasing everyday, the blockade to outside world increased too. Yes, I mean in China. Government is blocking here and there. So using VPN becomes an essential task. (Up to here, the content suggestion is not appearing anyway.) I gave up here. I also would like to write a few more words about Shakespere. (Up to now, I switched to Browser extension, but still does not work at all.)

  • Microsoft Power BI初尝试

    最近测试了一下Microsoft Power BI Desktop。用的是我的藏书数据库。

    注意事项一:BID访问MySQL数据库需要安装MySQL .NET Connector,官方下载地址:http://dev.mysql.com/downloads/connector/net/

    注意事项二:BID不能单独Export图片,而只能用服务器端控件的方式显示。如下图。所以你还需要去官网下载Desktop并注册一个账号(特别注意:注册中的国家列表没有“中国”,但是你选择随便一个地方也无所谓;另外,不能用任何类型的免费邮箱)。

    还有很多要学习的地方。慢慢来。

    5.14补充:

    • 发现一个问题:我修改了图表,也已经publish,但是在本页面上还是显示老的图表。重新贴上BI里给出的链接还是老的图表。解决方法是克隆这个修改后的表格,再导出Web链接即可。