文章目录

GPIO

仰望星空,脚踏实地~

一个简单的 servlet 容器

每一个 Servlet 程序都实现了

servlet 容器要做的工作: - 当要请求的 servlet 没有加载时加载它,然后调用一次 init 方法。 - 针对每个 request 请求,生成 Redquset 和 Response 对象。 - 调用该 servlet 的service 方法。 - 关闭时调用 destroy 方法,然后卸载类。

一个简单的 HTTP 服务器

按照 HTTP 协议

客户端发送: 方法 - URI - 协议/版本 请求头 请求内容

服务端返回: 协议/版本 - 状态码 - 状态描述 响应头 响应内容

可以通过

用 Java 编写一个死锁问题然后解开它

在这篇文章中,我将会写一段创建一个死锁情景的代码,然后再讨论解决这种情况下的解决方案。编写多线程程序的时候避免编写不正确的代码导致死锁总是一个挑战。

死锁就是这么一种情景,多于两个线程都各自占有着不同的资源锁,同时又都等在别的线程释放资源才能完成自己的工作,于是就产生了死锁。

GoAgent扶墙

实践表明,利用GoAgent翻墙是目前最稳定的一种免费翻墙方法。使用方法已经在网上转载泛滥了。

新的VPS 新的开始

逃离

逃离虚拟主机、逃离apache、逃离php、逃离WordPress,逃离熟悉的一切...

近来出现了许多以Github、DropBox、GoogleDriver、Evernote等为存储空间,以Markdown为书写格式的云博客。存储空间我不在乎,文章采用MarkDown的书写方式真是让人觉得回归本质啊~ WordPress也有Markdown插件,但是靠插件能解决问题么?完全不是一个味道啊。

用MarkDown书写博客的模式是定了,实现的方式可以有很多,但是都不甚满意。基于 Node.js 的Hexo 成为博客系统的最佳选择。

WordPress日志转Markdown还是有点麻烦的,试了GitHub上的wp2md,中途会中断,格式还是很乱。还有Farbox上的在线工具,格式还可以,只能分段转换。地址是:http://wp2md.farbox.com

别了Apache

Shell apt-get remove apache*

简单的本地服务器

WordPress虽说是一种简单的建博方案,但是由于插件众多,开发者良莠不齐等等原因,偶尔还是出现各种冲突错误。基于这种原因我们可以做一个本地的服务器。自己的电脑完全可以作为本地测试之用,但是难免影响平时的使用和娱乐,于是我们需要在虚拟机里安装一个系统作为服务器。

巨人的肩膀

之前一直用相对简单的单片机,写的是裸机程序,同时也是由于是学习阶段,所以固化了一种思想——所有东西都要自己做,所有东西都必须搞搞清除。现在更换到ARM9的平台上工作,工作模式变成了多人协作,维护一个不知道多少人维护了多少年的程序,瞬间就感觉不适应了,大的代码量一下子在都不知到从哪里看起。之前也有学习MFC的编程,层层API的结构和C++面向对象的思想,对编程风格影响深刻。其实不需要每个地方都看的,高度结构化的代码,只需要知道下层提供了什么,上层又需要什么,就可以了。适应新的思想之后,觉得以前需要不断查看寄存器手册来写的代码,简直就是浪费青春。或许我自己写的更高效更简洁,但是大多数时候是没有必要的。我要停止重新发明轮子的过程,更多的思考功能实现

基本排序算法-java 有更新!

排序算法是最基本的算法之一,是许多人开始学习算法的启蒙,对理解计算机软件编写有很好的帮助。大致可分为:插入排序、交换排序、选择排序和其他排序。

为了方便测试,先做了几个工具函数。

CGI-C++

用 C/C++ 通过 CGI 接口是可以用来做网页的,在Apache下已经实现过。现在换成 Nginx 只能用FastCGI接口,稍有区别。CGI接口下,每次访问会重新开一个进程,而FastCGI会把程序编程服务,永不退出,每次访问执行一遍,效率会好一些,怎么处理并发似乎比较麻烦,我还不懂。先尝试一下。

武装到链路层的加密通信方式

我把直接建立在物理层之上的一层协议叫做链路层。理论上不管你用的是什么通信协议和加密协议,在链路层看来都是0和1。根据物理层情况的不同,某些情形下链路层很容易直接暴露出来,比如说485通信方式。我只需要在485线路上搭上示波器就能情容易的观察到所有的数据。这种特性可能导致某些精心设计的加密协议毫无用武之地

BeagleBone Black 尝试

公司给买了Beaglebone Black的开发板,打算以后转移到Cortex-A8平台上来,让我先做一些准备工作。近来单板计算机是很火喽,但是拿到手还是很惊讶这么小的东西已经达到一般PC的能力了。

强转类型对象的方法依然使用自己的

面向对象的语言中,即使类型被转换,对象还是按照自己的真实类型调用方法。

C++ 类型定义: ```cc class Base{

public: virtual void say(void)=0; };

LINUX设备驱动程序入门

内核代码库

要想为linux 2.6.x 内核构造驱动模块,必须首先在自己的系统中配置并构造好内核树。跟之前的linux内核版本不同,先前的模块编写只需要有一套内核的头文件就够了,但是因为2.6内核的模块要和内核源代码树中的目标文件连接,通过这种方式可以得到一个更加健壮的模块装载器,但也需要这些目标文件存在于内核目录树中。

仿制 Jlink

根据小马哥提供的电路,仿制了一款Jlink,可以实现SWD协议方式的调试和下载程序。目前检测非常稳定,可以直接在线升级程序,可以在KEIL 4.60 以后的版本中正常使用。(部分老式盗版Jlink在KEIL 4.60 以后的版本中被识别为克隆版本,程序会自动关闭,需要手动修改SN码可以解决)

逻辑笔

决定制作一个逻辑笔,非常简单的东西,但是可以带来方便。首先看看别人怎么做的:有用门电路的,有用555的,还有各种MCU的。逻辑是:被测电压大于VCC电压的50%,认为是1;被测电压小于VCC的10%,认为是负;其余状态为悬空。重点是输入阻抗无穷大。考虑到手边的东西,决定使用运放的方案,制作原理图如下:

原理图

关于STM32的PB3引脚作为GPIO引脚时输出电平错误问题 有更新!

当仅使用SWD方式调试,也就是只用到两个引脚(SWDIO和SWCLK)时,其余的Jtag口可以配置为GPIO模式。这总是对的,也一直用了这么久了,没出过问题。但是在 KEIL4.54 版本时,这个引脚的电平就跟坏了一样???

DIY电感电容电阻测量仪

制作这么个东西,主要是验证几个电路,最后还能得到一个很好的工具。

SSH 额外用法

理论上只要有一台国外的电脑正在运行,通过SSH连接到它,然后通过它就能上网,因为SSH的数据是加密的,别人无法判断你传输的到底是什么数据,从而突破Great Fire Wall (GFW)的限制。可以通过租用国外服务器的方式,做一个自己的代理,但是这样花费太高了。也有很多免费提供的SSH主机,但是或多或少都有各种限制,而且不是很稳定。我找到一个还不错的,成功翻墙,Google.com、YouTube速度还不错,只是很奇怪上不了facebook。

OpenWrt文件共享(samba)

Samba是SMB的一种实现方法,主要用来实现Linux系统的文件和打印服务。Linux用户通过配置使用Samba服务器可以实现与Windows用户的资源共享。守护进程smbd和nmbd是Samba的核心,在全部时间内运行,nmbd程序使得发送请求的计算机可以浏览Linux服务器下的文档。有些OpenWrt版本下已经集成了Samba,可以通过Web简单配置,但是有时候也是有问题的。以下是我的配置,以供参考。

OpenWrt花生壳配置

花生壳动态域名解析跟其他域名解析不同的是IP地址不是固定的,而是经常会变化。由于家庭的PPPoE上网方式,电信提供商只是从IP池中选取一个临时使用,所以会经常变化。在家庭网下访问外网是没有影响的,但是外网要访问家庭网内部就很不方便(比如,远程路由器管理,自建WEB服务器)。

花生壳利用放置在内网的客户端获取对外IP,然后把域名解析到这个地址,有些时候还是很有用的。花生壳基础服务是免费的,可以到http://www.oray.com/peanuthull/download.php,注册或下载对应客户端,赠送免费二级域名。以下是花生壳在OpenWrt系统的路由器中的配置。