分类 学习笔记 下的文章

Mifare 门禁卡复制

背景知识

市场情况

现在中国市面上主要有两种门禁卡:
一种叫ID卡,是早期的非接触式电子标签,工作频段在 125kHz,芯片中只记录了一个ID号,不可以存储任何数据卡,无需任何权限即可读取。由于太容易复制已经基本退出市场。
另一种叫 MIFARE Classic,又叫 M1 卡,是 NXP 半导体公司的产品,属于IC卡的一种,由于成本低廉也是目前在中国市场上使用最广泛的门禁卡技术,使用场景包括且不限于门禁卡,还有饭卡、水卡等。工作频段在 13.56MHz,符合 ISO/IEC 14443 Type A (国内二代身份证是 Type B)标准,有数据存储空间并可反复擦写数据,数据读写都需要密码验证。



- 阅读剩余部分 -

Use LVM thin LV on cache LV

As of the LVM release 2.02.106, LVM supports the use of fast block devices (such as SSD drives) as write-back or write-though caches for larger slower block devices.
The cache logical volume type uses a small and fast LV to improve the performance of a large and slow LV. It's based on dm-cache(the kernel driver), so you can only use it on CentOS7.1/Ubuntu 15.04 or later.
For this article, I will assume you used Ubuntu 15.04.



- 阅读剩余部分 -

在 Ubuntu 上安装 Office 2010

    前几日感受到了 Wine 的强大魔力, 遂萌生在 Wine 里安装 Office 的想法. 到网上找了下, 发现已经有人确认了安装 Office 2010 的可行性, 不过 Office 2013 还是无法正常工作. 便决定在自己的 Ubuntu 上也安装一下, 这里做一下记录.

- 阅读剩余部分 -

Wamp Error 500

以前在本地调试PHP脚本一直用的是自己搭建的APM环境(Apache+PHP+MySQL).
今天写脚本要用到PHP 5.3的功能,我自己搭建的环境还是很久前的PHP 5.2 .于是打算更新下环境.
由于有任务在身,所以没有自己一一下载安装,而是直接使用WAMP.

谁曾想在安装就绪,添加虚拟主机时,出现了大问题.一旦配置文件里有虚拟主机,整个服务器直接报500错误.

研究多时,终于找到解决问题的办法.原来是因为没有添加默认虚拟主机的原因.

加入如下配置

<VirtualHost *:80>
 ServerName *
 DocumentRoot "D:/Wamp/www"
</VirtualHost>

OK,一切恢复了正常.

Moving Projects from GoogleCode to GitHub

Moving from Google Code to GitHub

The protocol outlined below may appear complex, but it looks more
intimidating than it really is. Moving a project takes about two to five
minutes once your GitHub account and your migration computer is
properly configured.

You need four things to move a Google Code SVN project to GitHub:

  1. A Google Code project to move
  2. A GitHub user account
  3. SSH keys, and
  4. A migration computer that is configured to migrate the
    project from Google Code to GitHub. (in this tutorial, we will use a
    Ubuntu server; but any other Linux/Windows/Mac computer, properly
    configured, should do the job)

- 阅读剩余部分 -

inline内联函数(声明前加inline还是定义前加inline)

(一)inline函数(摘自C++ Primer的第三版)
在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。
      inline int min(int first, int secend) {/****/};
      inline 函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline函数必须在调用该函数的每个文本文件中定义。当然,对于同一程序的不同文件,如果inline函数出现的话,其定义必须相同。对于由两个文件compute.C和draw.C构成的程序来说,程序员不能定义这样的min()函数,它在compute.C中指一件事情,而在draw.C中指另外一件事情。如果两个定义不相同,程序将会有未定义的行为:
      为保证不会发生这样的事情,建议把inline函数的定义放到头文件中。在每个调用该inline函数的文件中包含该头文件。这种方法保证对每个inline函数只有一个定义,且程序员无需复制代码,并且不可能在程序的生命期中引起无意的不匹配的事情。

(二)内联函数的编程风格(摘自高质量C++/C 编程指南)
关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用
如下风格的函数Foo 不能成为内联函数:
inline void Foo(int x, int y); // inline 仅与函数声明放在一起
void Foo(int x, int y){}
而如下风格的函数Foo 则成为内联函数:
void Foo(int x, int y);
inline void Foo(int x, int y) // inline 与函数定义体放在一起{}

- 阅读剩余部分 -

Ubuntu不启动XServer

修改/etc/init/gdm.conf, 在第12行的start on 加上条件 "and runlevel [35]", 保存即可,需要GUI时,直接执行 init 3 切换runlevel.


PS:环境为Ubuntu 10.04 LTS