致大三上学期

很有意思的大学,到最后,慢慢的变得无助,变得潦草,这是我一直在思考的问题,却也无可避免的走向这种低落。也许只有这样才能看清一些东西,避免无谓的感觉良好。

在这学期,我还是得到了一些宝贵的东西,其中有我喜欢的专业课,它们构建了整个计算机的底层,为社会各行各业提供基础设施提供革新的动力,有我非常喜爱的歌手,但是很可惜,他走的时候我才发现他,有我的室友,夜谈会的主持者(现在他们已双双回家,留我写博客了),最后,还有暑实队的朋友们,有图像小组的队友,他们的存在给了我一些标记,让我更加记住一起走过的路。

先来谈谈专业课,通信与网络看了全书,最后在知乎上被颠覆,说要看另一本自上而下设计(也是Forouzan的作品),也就是应该从上层应用开始讲起,这样贴近生活和应用,可以让以后的学习就跟设计产品一样----怎么实现这种应用呢?假期应该读读这本书,还推荐一本经典的老师常说的谢希仁老先生的教材。

接着说说操作系统(OS),这也是我喜欢的课程,只是觉得老师不给力,没有增进自己对OS的兴趣和更深的理解(理解是后话,考试前看书还是可以理解一大半的)。我觉得老师的责任就是,鼓励学生思考和发问,尽己所能帮助学生解开疑惑,教学上尽量有趣一点,反正自己有学识,对学科有深刻的理解,那么为什么还要用死板的语言表述出来呢?要是我,肯定会解释的通俗一点,有趣一点,而且最重要的,让听众觉得这是能够理解的,好理解的,给他们信心。

数据库,刚考完这门,不说成败。老师很好,这个好体现在他的独立上,我想,他也是从一个普通的学生,靠着钻研发家的。那本权威的教材在他眼里漏洞百出(比如事务基础、触发器、存储过程等讲解的顺序就有问题,没解释事务就开始讲触发器了),很有意思的一个人,当然我也是学到了很多东西的,我也很希望以后能有编程的课,因为以后走上业务岗位,这个可能是关键的,但很可惜,不会有这些课了,顶多一个课设罢了。

数论,作为密码学的数学基础,数论让我可以较轻易的理解RSA,理解DH密钥交换,让我知道素数的神奇和伟大,然后知道它们的背后,是无尽的艰涩的推理,而且推理一遍忘记一遍,我们往往只记得住定理本身,却忘记了定理的基本证明,也就是背后的思想。数论老师人过中年,推理能力变弱了一点,以至于室友疯狂回答老师的疑问,也算是一番胜景,一种美谈。

算法,实在话考的不咋地,几个图算法没有完全自己推一遍就是不行,没有自己编程一遍更是不行,题目大多是国外大学的算法题,解法看起来简洁优雅,但考场上就是习得性无助,我只说对于算法。说到这里,想起罗胖时间朋友的跨年演讲,说到其中一只黑天鹅,也就是人工智能,一说到算法,那可是无可奈何,一个文科生,哈哈。但是算法仍然是我的重任,算法、数据结构这些,都是实践性强,应用性强的东西,这些学科的低能力提示着自己实践的缺失。

接下来,软件工程,老师经验丰富,做过大小一百多个软件,用他的话说就是一百多个软件系统。听他讲课很有意思,有魄力是可以看出来的。但是这门课的概念实在是多,我怎么也没记住。他说应该理解,之后用自己的话解释就好了,就相当于自己给出了一个定义,但是到考试的时候积重难返,令人揪心。

跟课配套的软件课设,真的是空降下来的,像是凑学分而来,但也就一个学分,而且文档顶严格,让人迷惑。但令人欣喜的是,我们还是完成了一个能称之为“软件”的东西,可以做一些基本的图像操作和特效。对Qt和C++也有了一定的掌握,对文档的书写也有了大概的经验。

最后,当考试结束,我们有时间整理一下,就有了上述网志。有人说网志应该有人读,应该得到推广,私以为写的太烂,不敢出手,但是一直这么跟写日记一样(貌似是周记),不跟人分享,也就没有交流,也就没有随之而来的相互提升,我觉得这是一种莫大的损失。

想起去年,开始写博客是跟着阮叔一起,他的博客以前莫名出现在百度或谷歌的记录上,我看到名字就觉得奇怪:不都是博客园和csdn吗,你这个人博客是啥意思嘛,还带着一个奇怪的名字?后来,渐渐了解阮叔,他身上有我喜欢的东西,比如当初写博客就有的那种死磕(认真),想让读者知道一个普通人是怎样坚持自己的独立意志的,他是怎么做到的,当然博客也是一种文化,网上有很多博主,他们分享的技术、生活等等,提供给我们不同的视点,生活由此变得更加丰富。

谈到为何写博客,我最认同的是第三条,因为我们确实习惯性的浪费时间,这一方面是由于生活的大部分都是无趣,另一方面则是因为我们没有整理好自己的思绪,没有做好合理地计划和准备。而写博客虽然也会花一些时间,甚至还比较多,但是却有益于知识的整理和交流,对于个人而言,也是一种不可忽视的发声工具。

致敬阮叔。我觉得他的那种追求知识理解事物的欲望很强烈,而且能坚持下来,对新东西有持续的热爱,这是难能可贵的。好比说,阮叔一个经济学专业的,喜欢文学,他自然没有办法学习计算机的专业课,但是他写了好多关于计算机原理的东西,大家可以去看。当然里面少不了理解不到位的东西,但是我很欣赏那种没法理解透彻也要尽力理解的态度。

外后天就要回家了,新年变得不再遥远,每当想起“过年”都会有种欣喜涌上心头,以后工作了,可能只能到过年回去一次,看望亲人,今早老爸打电话问我回家的事,不禁觉得要多陪陪他们。

愿大家都过个幸福年吧!

2016年总结

今天好像不适合总结,满脑子想的就是,我们一边探索,后面的东西慢慢遗忘,找不到那种过往的感觉了。

回想2016年,自己做了很多事:暑期之后,有了自己的博客站,有了第一个能称之为软件的作品,早些时候,在搬宿舍的念头下度过了两三个月,收获了另一种感悟,也就是,硬件是我们奢望的,当我们当下生活不好时,总希望换个环境,对自己的现状有点改变,但是,很多情况下,这种改变是极其有限的。很快就发现,老习惯还在,好心情还在。说到这里,想起了这一个月听的很多的科恩的歌(我也想早点碰到他,没想到发现他竟然是双十一那会他的离去),在《In My Secret Life》这首听起来很怪异的歌,有人解析说,当你打败无数敌人,回头来却发现没有更加靠近内心半点,这足够让人悲哀了。

那继续扯下去吧~我们迫切的想改变一些“软件”,改变晚睡的习惯,改变无意义的打开新闻客户端,改变每天的赖床,改变附和那些平平的歌曲,改变看手机那么近,改变每次保持吃干净饭却造成的肚子不舒服的强撑和光盘,改变内心世界,但我们的意志力比较薄弱,容易被长久形成的习惯颠覆,每次越来越懒,不想动用意志力,但是,不动用意志力的话,不也是一种浪费吗?

每次总结,想的都是方法论,都是满脑子的困惑。

每次整理杂件,里面的纷乱的笔记又勾起了我那时的思绪,可我却没有更多的时间去整理,但其实我早些时候就发现了,知识整理的重要性,自己也在关注知识管理频道,看来面对越来越多的信息,尤其是自己觉得重要的,思考过的,更应该有序的整理起来,便于大脑成块,也便于用的时候检索。

假期写一写《操作系统整理》,做几个能用的网页,完善下软件。

最后,新的一年,祝大家的生活都能更有意思,更有意义一点!

 

冬至

每次看到这个词,总不免心生温暖。

大学以前,家乡那边没有冬至吃饺子的习惯,对于本地的饺子“嗜好”,这种热衷,不是很能理解,可这到底是四季的轮回,是春节前的一个大的节气,最最重要的,这是冬天的召唤。

总有那么几个冬天,伴随着漫天的雪花,窝在被窝里,平房上面的积雪和雪人,烟囱里冒出来的袅袅炊烟,机灵又快活的麻雀,堰塘表面的冰层和热烟,都让我痴迷,当然还少不了鞭炮,少不了小伙伴,少不了妈妈的麻将声,那是最快活的,手冻住了也不用学习,当然作业还是要做的。

冬至,是一个初中地理里太阳直射南纬23.5°的日子,是昼短夜长最厉害的一天,对我而言,今天,也是心血来潮想写博客的一天。

人,就这样在时间里走着,慢慢就发现,能坚持的东西越来越少,自己的困惑越来越多,到最后,也落得一个安然。

闲的时候,希望可以读诗,既可以练普通话,也可以寄托一些情感,让心境辽远,好暂时逃离拥挤的岁月。

这个冬至,中午去吃回饺子,虽然没有家里的好吃,但入乡随俗一回吧。

操作系统概述

谈到我为何要写这么一个系列,因为我觉得,很多“学过的”东西,并不是你认为学懂了,就真的懂了的。

所以,我想通过这么一个回溯和复习计划,来记录自己学习操作系统的点滴,以备后用的同时也给别人一点启发吧。

-----------------------------------------------------下面正式开始吧~---------------------------------------------------------------

谈到操作系统,我们说的最多的恐怕还是微软系列(win10,以前我正在用的win8,还有win7,实验室的xp等等),开源的Linux和众多的发行版(Ubuntu,Fedora,Redhat等),还有个极客之作Mac,我们在上面写文档,图片处理,用浏览器体验丰富的来自世界各地的网页,用qq聊天,在网上做生意,组建技术社区,包括我正在浏览器里面写博客等,这些东西,构成了我们的现代生活。另外在移动端爆发的这几年,我们又成了低头族。很多公司都在制作自己的App,很可能还是全系列的,像这样,既有安卓,还有ios,也少不了h5网页应用,但毫无例外,它们都运行在操作系统上。

那我们如何了解这一几乎每天都在使用的重要软件呢?CPU、内存、硬盘、显卡、USB外设、网卡这些资源,我们作为用户应该怎么使用它们,程序员如何编写可以利用这些资源完成自己功能的程序?

这都需要操作系统的管理,它给用户提供了一个易于使用这些重要资源的界面,我们在上面运行cmd或者bash的命令,我们安装各种软件,需要的时候或者兴趣来了,我们还会写一些软件,完成客户指定的功能或自己的设想。

它接管的资源有处理机、主存、I/O设备(又称外设,包括使用最多的硬盘、网卡设备、声卡、显卡、键盘鼠标等等),在它之上,我们得以运行有用的程序、进行体验丰富的交互,而每一次更新,我们都会很欣喜,很好奇补充哪些高级的功能。

它由多模块构成,每个模块都有特定的功能:进程的调度机制保证了每个进程可以适当的在每一段时间占用各种资源,内存管理提供了进程要在主存中运行时的内存管理,文件系统可以提供文件的存取和权限控制,设备管理可以管理众多的外设。

下一节我们将介绍操作系统的种类和各自的优缺点。

调试小技巧

初学者调试程序的时候经常需要在命令行窗口停下来,查看运行结果,我们在C/C++代码的main函数的末尾,可以添加一些代码实现这个功能:

1, system(“pause”) --system里面可以嵌入任意的dos命令,如dir、cmd等等

2, getch() --等待从键盘输入一个字符,不回显,不需要回车

3, getche() --等待从键盘输入一个字符,回显,不需要回车

4, getchar() --等待从键盘输入一个字符,回显,需要回车

另外我们有时候可能需要从别人编译好的exe文件运行,并查看运行结果,这时候怎么暂停一下呢?最直接的方式就是在dos下输入执行文件运行,这样可以看到结果,但是有时输入路径很麻烦,带有中文还需要不停切换,所以分享一个简单方法,如下:

新建一个批处理文件.bat,如exe.bat,在里面添加如下内容:

@echo off --echo off表示后面的命令都不回显,而且提示符也不回显;加@表示本身也不回显

call %1 --调用拖入的可执行文件,%1应该表示拖入的文件其指针

echo. --输入空行,即回车一下

pause --这是重要功能,调用完成通过暂停来查看运行结果

END

In My Secret Life

前几天,意外在简书上看到有作者写的纪念科恩(Leonard Cohen)的文章,一来感叹自己对音乐了解太少,而且很久没关注了,二来让我坚定了要听一听他的歌曲的决心。那晚想早点睡,明早还有课,就没听。第二天下午室友们外出聚会,在出租车上,因为我头晕,就问旁边的室友要耳机,都没有后,其中一个提醒我外放就好,我就打开酷狗,第一首歌就是昨晚搜的科恩的这首歌,RT。当时真的没有心情(晕乎乎的),去听这种奇怪的歌,而且是跟室友们分享,我也怕落一个“freak”的名头,哈哈。

第一次亲密接触是在周六,一大早起来听,心很静。慢慢的,我发现他的歌喉,很有魅力,那种低沉的就跟游吟诗人诉说苦痛一般的沙哑的烟嗓子,听久了真的很上瘾,而有些歌,是没有这些魅力的,听一百遍也没有。

之后找到了包含此曲的专辑CD镜像,到处找他的信息,浏览了他的主页,发现他以前还是个小说家和画家,之后因着偶然的机会进入音乐创作。看到他的艺术作品,那些画像,想必是个有着丰富情感经历并且乐于观察的人。他的作品没有看过,据说年轻的他也着迷于东方玄学,来作为一种解脱。到底是个谜一般的男人,歌词简单却不容易懂,只好叹息阅历太浅。

但这并不妨碍我一遍又一遍的听他的歌,尤其是《In My Secret Life》(英文歌词附上),不断重复的In My Secret Life的旋律很美。我承认只听旋律和感情基调,歌词内容一般忽略,但这首歌的歌词实在是既简单又复杂,很迷惑我,所以在自主理解无望后,好不容易找到一篇好翻译。这篇日志就是为了记下这篇翻译的(实在感谢豆瓣用户):

我的秘密生活 《In My Secret Life》

今早看到你
你一闪即逝
看来对于过往我还是无法释怀
我是如此地想念你
眼中再无他人
在我的秘密生活里
我们依然有着肌肤之亲

愤怒时我却微笑
我欺骗 我撒谎
为了生存
我不择手段

其实我知孰为非
我知孰为是
在我的秘密生活里
为了真理 死不足惜

坚持住 我的兄弟
坚持住 我的姐妹
行动指令我已拿到
我将一直走到破晓
还将一直走入黑夜
去一次次穿越我的秘密生活的边界

通篇报章
令人唏嘘
命如草芥 无人关心
庄家想让你相信
一切非黑即白
好在在我的秘密生活里
世界并非如此简单

我三缄其口
我照单全收
无论是最新的流行语
还是古老的智慧

但我总是形单影只
心似坚冰
我的秘密生活
拥挤又寒冷

引用科恩的一句话,“万物皆有裂痕,那是光进来的地方”。

愿安息!

使用Cmake和MinGW重编译OpenCV库并在QT Creator上正确配置

环境很复杂,两周前花了大概两三个小时配置VS2013下的Opencv,由于MFC对Opencv支持不好并且上手慢,而我又不想重新学习C#,最最重要的是,Express版竟然没有MFC模块!所以我开始转手QT Creator。以前不知道VS可以直接使用QT的插件,那么就不用后来这么折腾了,记住,最重要的是学习Opencv的使用,而不是配置复杂的环境。

以下就是帮助大家解决环境问题的:(还是得解决:))

1,用Cmake生成Makefile(其中我遇到Qt-Dir-Not-Found的问题,按照这个教程顺利通过),之后命令行下make,make install;

2,添加环境变量(在Path下添加编译好的opencv/bin),并按照自己的opencv版本,比如我的是2.4.13,那么就修改为这个版本2413,把需要的include、链接文件写入.pro即可。如果是打开了Qt Creator测试程序发现可编译但是运行错误,这很可能就是链接库无法装载的问题,前面的环境变量一定要设置好,之后最好重启Qt Creator,载入新的Path,方可运行正常)

接下来就可以不用理会环境的问题了,Head in OpenCV~

phpbb论坛安装与使用

今晚重新安装了一遍Phpbb3,这是一款与Discuz论坛风格迥异的软件,想要尝试不一样论坛的朋友可以试用下面的方法安装:(本文使用centos7环境,请确保已经安装LAMP套件)

 

首先,进入phpbb中文网下载最新的中文安装包:

 

点击中文包,右键复制链接,使用wget + 复制的链接,进行下载,因为wget默认以最后一个/后的字符串作为文件名,实际上安装包是zip包,我们重命名如下:

mv xxx  phpbb3.zip

解压:

**unzip phpbb3.zip  **

重命名:

mv phpBB3 bbs(bbs目录就是你喜欢的网站路径了,可以自选)

然后用ifconfig命令自己的ip,后续访问论坛需要使用,即**你的ip/bbs,**复制到浏览器地址栏。

 

开始进入数据库配置:

mysql -u root -p(回车后输入你的数据库root密码,没有密码就直接进去了)

create database phpbb3; (为phpbb创建一个数据库,专门用来存放论坛数据)

grant all privileges on phpbb3. to phpbbuser@localhost identified by ‘your.password’ ;* (新建phpbbuser用户,指定your.password密码,并赋予用户对于phpbb3数据库全部权限,因为这个是要在后续论坛安装时使用的)

exit(退出mysql)

 

现在开始简单的网页向导安装吧

这跟windows下安装程序一样,一步一步提示。如下:

**你的ip/bbs,**复制到浏览器地址栏打开;

在这期间phpbb会检测你的mysql、php、apache安装好没有,并且需要一些文件夹和配置文件有没有可写权限,还需要你提供刚才创建的数据库用户名phpbbuser和密码,用于它操控,如下:

进入网站家目录:cd /var/www/html

修改bbs目录所有者为apache用户和apache组:chown -R apache:apache bbs

之后发现都可写了,这一步通过!

安装完成之后,bbs目录下的install目录就没用了,如果保留,可能被别人利用,造成意外损失。可使用删除命令rm -rf install

这样跟着走就可以完成论坛安装,新站长可以多尝试,并参考文档解决用户组权限、管理权限等问题。

参考鸟哥的网站:phpBB 最大的优点是可以进行外挂模组的开发,以建立个人的网页风格,我也在尝试个性化~

Enjoy!

 

 

编译基础

因为下学期没有编译原理的课程(真的很坑爹),但是这部分内容真的很重要的,懂了这些遇到相关知识也比较容易理解。

我们在Windows下安装一个程序,一般需要一个后缀为exe或msi的可执行文件,双击之后,如果是第一次安装,会出现安装向导,一步一步指示你选择安装目录,选择安装哪些套件(在VS等IDE中),是否创建桌面快捷方式等等,这么下来,程序就在操作系统的注册表里注册了自己的信息(包括自己的元数据,即程序位置;配置信息等),这样当我们使用快捷键Win+S时,就可以搜索程序的名字来快速打开它,而且程序还可以关联文件后缀,比如我们安装了Dev C++ IDE时,我们希望只要是.c , .cpp文件都用它打开,就可以关联后缀。关联后缀其实是让操作系统知道如何找到打开这种文件的默认程序(操作系统是知道默认程序的路径的)。

在linux命令行下,安装了一个程序,比如安装了vim,这时就可以直接用vim XX.txt打开某个文件,因为bash知道vim对应的二进制代码(机器代码)放在什么位置,可以直接调用它们来处理文本等。

下面我再从开发者的角度解释编译过程:

首先我们需要配置文件(configure脚本可以检测到不同的系统环境,执行这个脚本可以生成适合各个环境的Makefile),好让编译器知道标准库文件的位置、应该安装的位置、要安装哪些功能(模块)。你可以直接执行configure脚本,也可以传递给它一些参数以指定自定义安装目录、是否安装gdb调试模块(安装bochs模拟器时)等其他配置信息。(详见阮叔博客

compiler

这样就生成了Makefile,存放了各种依赖关系,告诉make命令如何编译和链接这些.c和.h文件。make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。这就是解决依赖。

预编译

工程中源文件需要使用某个或某些头文件,在第一次的时候编译这些头文件,后续在需要的时候直接用就行,这样节省了时间,提高编译效率。另外,调试时可以声明宏来指明是否编译这个头文件。

预处理:

去除头文件,执行宏替换,去掉注释。

编译

编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言。汇编语言是非常有用的,它为不同高级语言不同编译器提供了通用的语言。如:C编译器和Fortran编译器产生的输出文件用的都是一样的汇编语言。

汇编:

将编译生成的汇编代码转为目标文件,很多时候这个文件并不能直接执行,因为还需要一些额外的库函数,比如标准库,如果你opencv程序,还需要第三方的opencv的库函数,把这些库函数包括进可执行文件,就是下述的链接过程。

链接:

分为两种,静态链接是把需要的外部函数全部加载进可执行文件,动态链接是在程序运行时如果需要每个外部库,就加载进来,这么做的好处就是打包的程序文件较小,但是分发给其他用户使用时,他们必须安装对应的外部库。前者的程序文件较大,但是通用性强,后者文件较小,而且可以在内存中与其他进程分享这些外部库,但是需要其他用户额外安装这些库,比较麻烦。

安装:

经过链接,编译器在内存中生成了可执行文件,我们需要后续使用它,就需要保存到非易失的硬盘中,也就是相应安装目录了。

通知操作系统:

安装完成后,我们希望操作系统把它加入到一个索引表,便于我们搜索时快捷的打开程序,这就是开头提到的。在linux下,新安装的程序一般在/usr/bin下,输入新安装的程序,就会在这个路径下搜索并执行。

在我新安装的FreeBSD上执行 echo $PATH ,输出:

/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/home/freebsd/bin
这就是系统搜索命令的路径,而且一般是按照顺序搜索,如果系统命令与用户命令重名,可以指定完整路径解决。

至此编译和安装完成!

画外音:听说编译器是世界上第二复杂的东西,第一是操作系统,可我们数据库老师说database才是第二复杂的~~

博客迁移之路

其实DO的主机还是挺好的,国内访问速度也较快,教程也很详细实用,但就是有一个问题,对于我这个学生党而言,忒贵了。所以开启后续的博客迁移之路:(新旧主机均使用Centos7)

---------------------------------------跟着我左手右手一个慢动作-----------------------------

首先,把wp-content文件夹用SFTP(我使用的FileZilla软件)传送到本地windows,然后上传到新主机的wordpress安装目录下。因为wp-content目录下有我们的主题、sitemaps、插件,最最重要的是uploads文件夹,这存放着上传的图片,没有这玩意,以后打开新站点的博客,可能出现找不到图片的尴尬情况。

接着,按照同样的步骤把wp-config.php传到wordpress家目录下,大家都清楚这是wp的配置文件,里面存放着wp程序操作数据库的用户名密码,在这里有一个好方法,大家可以按照这个文件的内容在新主机上新建一个数据库+用户+密码,这样配置文件就可以直接用了。

之后wget一个跟老博客同样版本的wordpress.tar.gz,解压后删除wp-content和wp-config.php,之后放到wordpress家目录下,这样文件部分就解决了。

下面是数据库迁移:用phpmyadmin用默认方式导出wordpress的数据库,格式大概为wordpress.sql。在新主机上安装phpmyadmin,打开新站点ip/phpMyAdmin,导入原数据库,并在wp-options表的siteurl和home这两项修改原网址为新网址,这很重要,关系到能不能打开新站点的wordpress。(DO phpmyadmin 教程

这样直接通过 http://新站点ip/wordpress 就可以进去了,可以看到主页,但是点击任何一片博文,提示“the requested url /index.php was not found on this server. ”,这是因为我原来的博客修改了永久链接,需要在/etc/httpd/conf/httpd.conf修改允许重写(override),并且在wordpress家目录下的.htaccess文件修改为类似如下:

BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /wordpress/                                        //这是wordpress家目录,链接重写起始位置,如果你是xx,改为/xx/

RewriteRule ^index.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /wordpress/index.php [L]                //这是家目录对应下的index.php,如果你是xx,改为/xx/index.php

</IfModule>

END WordPress

搞定!