从2015到2018,WEB与时光与我

Posted on Wed 10 January 2018 in 遗迹

故事

新的一年如约而来又不期而至,在感叹又年长了一些的同时,也是时候再来一次一年一度的告别与再见的仪式了。

我是一个有些执着于“记录”的人,从开始接触编程到现在有许多年了,过去的代码却还大多能找到,但是很散乱。于是从2015年起,我有了一个新的习惯:每年按照年份创建一个文件夹,在这一年中无论是郑重开坑,还是要做点繁重些的杂务,都在这个年份文件夹里创建一个目录来存放源码。当然太简单的代码用过就不必储存,基本上都随着IEP的关闭一起消失在茫茫内存之中了。

但是这样仍有些乱糟糟的,后来为了直观看出这些项目谁先谁后,于是在文件夹前面加了序号,成了“XX.项目名”这样的格式。

每一年开年的时候,就是和上一年的大部分代码说再见的时候了。创建好新一年的文件夹之后,我会挑选一些上一年的项目。如果项目还在写的话,我就把那目录复制一份到新一年的文件夹里,旧的就永远定格在那一天,这就是我的告别与再会。我觉得时光是一个有些神秘的词汇,而这些代码文本在一定程度上描绘了属于过去某段时光的我,因此也好像也具有了些别样的意义。可能大部分人都希望回到从前,但现实是只能在时光易逝的无奈中向前走着。而在翻阅这些目录的同时,也仿佛在审视自己的过去。

2015年

我们先从有记录的最早一年开始。2015年在web领域算是一个转折点,后知后觉地,我们可以说ES6的正式发布算是一个标志性事件,从此以后前后端分离成为主流的开发方式。但是事实上整个生态链的成熟更加功不可没,今天流行的众多框架和工具都在2014年左右立项,并在2015年基本成熟,包括Webpack …


Continue reading

2017总结:送君千里,终须一别

Posted on Mon 01 January 2018 in 遗迹

开篇

年少的时候,常常见到《写给十年后的自己》这样的作文题目,不知不觉,离那时却真的已有十年了。十年前的我带着对未来的迷茫和少年的无畏开始了高中生活,而十年后的我却早已忘记当年的梦想是什么。命运的无状借由时间之手刻在每一个人的身上,我们对新年的所想也渐渐从对未来的期待到对失去的恐惧。不过,应该只是一些平凡的想法吧,我向来所求不多。

在过去的一年里,果然年计划又不负众望的没有完成。不过好像比去年稍微好了一些?这也未必啊,去年可是搞了python lite解释器这样听起来吊吊的项目(虽然也暂时鸽置了)。

下面是年终总结:

游戏

游戏方面,首先是果断的交出了 Dota2 会员年卡,还是豪华版的,而且还又肝又氪的打出了小精灵至宝。不过老实说,对于TI7的结局我还是比较失望的。

另外通关了《晶体管》,总体来说是个不错的游戏。其他通关游戏还包括《迈阿密热线》两作和育碧的《看门狗》,以及一些在steam没有挂名的小游戏。

没有通关的游戏有《8 bit armies》(只打穿了一线任务)、《observer》(实在太晕了)。

此外还参与评测了《汐 Shio》、《飞虎队 …


Continue reading

记一次艰难的老版本VS完全卸载(VS2013)

Posted on Sun 31 December 2017 in 遗迹

山雨欲来

尽管被很多人戏称为“宇宙第一IDE”,但是Visual Studio在我印象中却一直不是最佳选择,这个老朋友我觉得只能说“还不坏”,不过正在变得越来越好。其实很多人可能不知道,VS的进化也是一个循序渐进的过程,从VS2012版本奠定了新的界面形态之后,后面不知道是不是冥冥之中自有天意,解决了好几个我吐槽过的问题:比如说没有在同名头文件源文件切换的快捷键(就像是vim的A插件,现在有了,Ctrl+K, Ctrl+O连按),比如丢人的C/C++新标准支持程度(VS2013以降有很大改观),比如太慢的启动速度和太臃肿的安装包(VS2017大为改善),还有比如不像是IDEA一样有重构功能和快速修复(VS2017最近也有了重构和Alt+Enter)等等。

我对VS的使用基本上是每隔两个大版本更新一次,几年来我的主要使用经历是:VS2008、VS2012、VS2017。那大家肯定会注意到了,说我胡说,因为标题上明明写的是VS2013卸载啊!这其实就有个说法了,其实原因是我在那段时间换了电脑。我原本VS2012 express用了好几年,感觉自己萌萌哒,结果换了电脑之后重新装VS,发现微软偷偷把VS2012的页面藏起来了,也不知道是为什么。装上2013之后我明白了,这明明就是VS2012 update5嘛!估计是怕自己改版本号冒充新版本的事情被人发现 …


Continue reading

一个软件工程师的焊接入门笔记

Posted on Sat 30 December 2017 in 遗迹

前言

从小到大,我几乎从未碰过电烙铁。对那些复杂的电子元件和电路板,我向来是敬而远之的。虽然作为一个软件工程师,我清楚地知道自己写的程序就是借助电流在它们之上跑来跑去从而对现实世界造成影响,不过绝大多数情况下,我都是在屏幕之内做文章。然而凡事总有例外。那天,我买了一片GSM开发板打算用来插副卡收辣鸡短信,收到货发现是一片PCB板,带两个单独的 10 Pin 排针,这意味着我要么选择退货,要么就得自己动手焊接了。

当我犹豫了半天,最后还是决定把它搞好的时候,这样的故事就拉开了序幕。虽然也只是一点微小的工作,我完成了曾经觉得自己不太可能的做的事情。有些让人意外的是,这并不像是我曾以为的那样困难。我对PCB焊接是完全的零基础,大学时代作为计算机专业也不知为何没有上过相关课程,反而是很多其他专业的同学有过这样的经历。不管怎样,这算是一项还算比较实用的技能吧,因此我将自己的入门经验分享一下,主要就是上手、简单的焊排针和抠元件,如果有问题请大家指正。

准备工作

首先要购买电烙铁、焊锡、电烙铁架、面包板(尽量大的那种),这是基本配置。电烙铁我买的是20多块钱30w的,100g一卷焊锡丝用了10块钱,感觉这能用好久了。再来一个六块五的烙铁架,用于挂烙铁和焊锡丝。面包板则是用于固定电路板的,通常电路板上排针都会设置在边缘而且对称,这样你将排针先插在面包板上 …


Continue reading

esp8266 萌新三连:刷机(MicroPython)、亮灯、联网

Posted on Sun 12 November 2017 in 遗迹

前言

书接上回。在前一篇《入手指南》之中我们已经比较详细的列举了 esp8266 的一些信息,所以这里就……还是要简单介绍一下这枚芯片。这是一枚主频在80/160mhz双模式并集成WIFI的32位物联网芯片,比1元硬币大一点,仅售10元,使用这枚芯片的简单的开发板价格也不超过20块钱,堪称物美价廉。

我们的目标是在这片小小的板子上运行一个缩水的 python 解释器 —— MicroPython,并让它连入我们的局域网WIFI。

坦白的说,这篇文章介绍的都是一些入门问题,不存在什么高深的操作,也是对我自己探索开荒过程的回顾,若有同路者,希望能以本文免去大家一小段奔波之苦。

P.S. 本文在 Windows 环境下完成

刷机

前文的选购中我们介绍了两种开发板,其实如无意外大家买到的接近20块钱的开发板应该都是这种样式:

也就是 Nodemcu 制式的开发板。这个开发板集成了 usb-ttl 芯片,因此你弄个 microusb 线就可以完成所有操作了。

那么首先下载固件:http://micropython.org/download

选择 esp8266-20171101-v1 …


Continue reading

python3 csv/xls/json/pickle 等序列化反序列化代码速查

Posted on Sun 12 November 2017 in 遗迹

全部

# pandas 秒天秒地
# 条件有限的时候再考虑别的
import pandas as pd
import numpy as np

df = pd.read_clipboard()
df = pd.read_csv(data_or_path)
df = pd.read_html(data_or_path)
df = pd.read_json(data_or_path)
df = pd.read_msgpack(data_or_path)
df = pd.read_pickle(data_or_path)

df.to_clipboard()
df.to_csv()
df.to_csv(fn)
df.to_excel(fn)
df.to_html()
df.to_html(fn …

Continue reading

python 3.5+ 协程自我挂起及其应用

Posted on Thu 26 October 2017 in 遗迹

前言

有段时间没有写文章了。说来惭愧,没写文章的一个主要原因是这个博客还不支持传图。

近来又颇懒惰,于是就长久的没有更新了……

P.S. 此文章实际写于《esp8266 系列芯片入手指南》之前

背景

网络编程中我们经常面对双方建立连接,两边同时可以收/发消息的情况。

例如说我们连接到某服务器,最简单的状态下,我们向服务器发送一条指令,然后直接等待服务器返回并读取出数据。 也就是这种情况:

import time
import serial

s = serial.Serial('COM10')
s.write(b'AT')
time.sleep(0.5)
assert s.read_all().strip() == b'OK'

为了保证返回结果能够正确,这个过程有两个问题:

  1. 永远必须等待一条指令执行完成返回后,才能执行下一条指令
  2. 服务器基本没有机会主动向我们发送数据

实际上这是一种极大的浪费,更为流行的做法是一边发送一边接收 …


Continue reading

esp8266 系列芯片入手指南!

Posted on Mon 23 October 2017 in 遗迹

前言

esp8266 这款芯片我是久闻其名。10块上下的价格,32位架构,支持wifi,迷你便携这些特性都很有吸引力。但硬件毕竟深坑不可轻入,直到不久前才终于按捺不住,买来玩了一下。

这块芯片可以在 80/160mhz 中切换,这在单片机中已经不低了。足够的性能加上32位架构,使得可玩性大大提升。

社区的大佬们也充分释放了他们的热情,目前在这块板子上除了C语言之外可以运行 Lua (nodemcu)、JavaScript (Espruino)、Python (Micropython),可以说是非常的多种多样了。

而我的短期目标是先在上面跑起来 Micropython,然后借此学习一下硬件世界的规则,长远一点的大概也会做个“智能某某”吧。

作为 esp8266 系列(计划中,咕)的开篇,这篇文章主要是讲述一些在购买和挑选过程中遇到的问题,希望对大家有所帮助。若有问题也不吝赐教。

芯片与开发板

我是没什么硬件方面经验的,因此直接选择了现成的开发板,淘宝大概17、18块钱的样子,引出大量引脚,自带复位按键,集成USB-TTL芯片。用microusb线直接连上电脑就可以直接通过串口来交互啦 …


Continue reading

关于《模式 - 有效事件: 可取代数十种设计模式》

Posted on Wed 20 September 2017 in 遗迹

原文地址: https://msdn.microsoft.com/zh-cn/magazine/mt795187.aspx?f=255&MSPPError=-2147217396

标题起的很吓人,但我认为也许只是一种从编程语言到配置文件的回归。

解决方案总是蕴含在问题之中。自相矛盾的是,OOP 旨在解决的一些问题(全局函数和数据)反而成为 OOP 无意间引发的问题的解决方案。如果你看看有效事件这种设计模式,首先会发现的是,在某种程度上,它是回归基本的,同时使用全局函数取代方法和类。然而,由于无需在有效事件的使用者和实现之间知道并共享签名或类型,因此与使用 OOP 相比,环境更像是黑盒。这样一来,可以轻松地进行交换,例如,将 SaveToDatabase 与 InvokeWebService 或 SaveToFile 进行交换。没有接口、类型、POD 结构和类,只有一个共用签名。只有优质的普通旧数据 …


Continue reading

一个自动转换音频为 opus 格式的小工具

Posted on Tue 19 September 2017 in 遗迹

这两天发现了除 ogg vorbis 之外的另一个开源免费无专利的音频格式,即 opus。

根据观察这格式也是 ogg 封装(ogg是容器格式,vorbis才是编码,常说的ogg格式实际上指的是vorbis编码格式),各方的支持度其实相当不错。

据大佬说比较优秀,特别是码率较低的时候,ogg会出噪音,而 opus 不会,而且编码速度极快。那么在游戏开发和语音通话等方面应该有上佳表现。

于是顺手写了一个自动转换器,编码器和脚本放在同一目录执行脚本,然后向 input 目录丢 ".wav", ".aiff", ".flac", ".ogg" 这几种格式的文件,会自动转换成同名的 opus 编码文件输出在 output 目录。

https://github.com/fy0/autoconv


博客系统更新 1.0.3

Posted on Sat 16 September 2017 in 遗迹

我记得听过这样一句话,是说如果上线的产品没有能够简陋到丢人的程度,那一定是速度太慢。

作为~~一代摸鱼王、~~精益求精信条的追随者与践行者,这种论调我自然是不屑的。

所以后果就是坑迟迟填不完。

因此前段时间忽然仿佛意识到了什么的我赶紧把这个半成品博客程序翻了出来,匆匆完善了一下就直接上线了。

上线之后几天进行了大量的 BUG 修正、功能调整与优化。果然开门丢人和关门丢人还是有很大不同吧!

而就在一个多小时前,本博客使用的 https://github.com/fy0/storynote 项目发布了 1.0.3 版本。

其中最重要的功能就是文章引用,具体效果就是发表的带引用链的文章,直接点击后到引用处,而点击评论则到内部。也就是你们在外面看到的绿色标题的文章了。

这也是我初版时就策划好的功能,因此不用改 topic 表。这样一来很多文章我也懒得写两份,也能较快的给空荡荡的博客填充一些内容。

我觉得 StoryNote 大概会在一两个版本后达到稳定状态,如果有人想要用遇到什么问题的话(我觉得应该没有),鉴于评论还不好用,那么可以到github给我提issue或者找到我邮箱给我发邮件。

本文就是这样了,下次再见!


开始准备填一个社区系统的老坑

Posted on Sun 10 September 2017 in 遗迹

几年前的时候挺想做个小社区,聚集一些志同道合的人搞事情,现在想想是有些年轻了。现在虽然时过境迁,但留下的坑还在,正好我的新后端框架需要一个项目来证明自己,所以我决定把这坑填了。

项目在这里:https://github.com/fy0/Icarus

链接里头内容是空的。几天前我建立了一个新的空项目把老代码顶掉了,因为偏差太严重~~(所以并不是删库跑路)~~。

老代码是一个旧时代那种MVC的 web 项目,主要基于 tornado、mako、peewee、coffeescript、sockjs等库,而且不仅要兼容 Python 2/3,还计划只用 sql 数据库并同时支持 MySQL/PostgreSQL/SQLite……

而新项目将是一个符合现在主流节奏的前后端分离的项目。数据库使用 PostgreSQL 和 Redis,后端使用基于 aiohttp 的新辣鸡框架并仅限 Python 3.5+,前端则是 vue 全家桶 …


Continue reading

修复 marked 配合 prism 进行语法高亮时,渲染代码块的格式错误

Posted on Sun 10 September 2017 in 遗迹

当前这个博客就是使用了这个渲染代码的方案,这也是我的亲身经历。

我相信与我遇到相同问题的人还有不少,下面来说说遇到的问题是什么,如何解决。

缘起

我一直觉得有一个地方不协调,那就是markdown引用代码的时候,我这里渲染出来代码没有背景颜色。之前我以为是默认样式本来如此,结果上篇文章加了很多代码发现与正文区分不开,很难看。于是就去看了 prism.js 官网之后发现默认样式是有背景色的,而我的没有,这很明显就出了偏差。

既然出了偏差,那就是要负责的。

那我们先来观察一下 http://prismjs.com 里面代码是怎么引用的:

<pre data-src="prism.js" class=" language-javascript">
    <code class=" language-javascript">
        ...
    </code>
</pre>

看上去不错,那我们渲染出来的 html 呢?

<pre>
    <code class="lang-javascript">
        ...
    </code>
</pre>

呃,其实我也不知道为什么 …


Continue reading

goaccess 配置记录

Posted on Sat 09 September 2017 in 遗迹

本来是计划弄一个站点统计的,初步意向是百度,结果发现被 adblock 默认规则屏蔽了。

拿关键字一搜发现不仅是百度,不少人专门将各种统计都配置成全家被屏蔽的状态,这可就不得了了。于是看看自建的web统计方案,基本上就是 piwik 一家独大。然而群众又表示这货很占资源,我这小服务器就还是算了吧。

后面又试图转战 VeryNginx,好嘛,这项目我也盯了很久了。谁知此项目毫无长进,访问统计废到不能再废,也是无法解决问题。

因此最后方案是 goaccess ,实际上这不是统计而是 nginx 日志分析。对单页应用来说肯定各种不准,但也无所谓了。我就随便看看大致情况,图个乐就行。

https://goaccess.io

ubuntu系统的默认源里有这个软件,但是版本是 0.9.x,我看到最新稳定版本是 1.2,那就按官方文档添加源吧。

echo "deb http://deb.goaccess.io/ $(lsb_release -cs …

Continue reading

新的旅程,又是一年夏末时

Posted on Wed 06 September 2017 in 遗迹

不属于我的开学季

不知不觉,已经来到了2017年的夏末。

从大一学会写留言板开始,也过去这么多年了。现在想来,当年翻开 web.py 教程的那一天绝对是值得纪念的一天。我也决计想不到,没过几年 web.py 项目的作者自杀了然后这项目也死了。

就像我想不到的其他很多事情一样。

而我在通过 web.py 入门的几个月后就转投了 tornado 框架,就这么一直用用用,用到现在。

缘起

说说这个博客程序吧。

也是从那时起,每隔一两年我都有些写一个博客程序的想法然后很快作罢。有一件事情是显而易见的:博客程序对 web 新手来说是一项极佳的实践。为什么这么说呢?作为经典入门项目留言板的豪华升级版,博客程序包含了文章、用户、标签、评论、管理界面等多种元素,同时涉及到初步的安全问题处理,技术上不会太复杂,知识点上覆盖的很全面,而且又有成就感还可以拿出去装逼,何乐而不为呢?简直堪称新手进阶项目的不二之选。

然而遗憾的是,作为 web 开发的老咸鱼,新手时代已经是我遥远的记忆了 …


Continue reading