• sql注入

    Forums: 

    img: 

    晚上 qq 群中有一个人提了一下 http://www.software.zjut.edu.cn/admin/ 中的登陆问题, 直言就是该网站登陆有 sql 注入的问题。一个网站的登陆验证一般是:

    1. 用户输入用户名和密码;
    2. 前端验证是否为空,是否有特殊字符;
    3. 后台验证是否为空和是否有特殊字符;
    4. 根据用户名和密码在数据库中搜索,看是否匹配;

    一般说来,上面的四步都必须有,第一步和第四步是逻辑必须的,第二步和第三步是为了方便和安全考虑的。这里值得一提的是:即使有第二步验证,第三步的验证也不能省略,因为前端的验证不是很可靠,用户完全可以跳过前端的 js 验证,然后直接发送认证请求,这是 C/S 模型的固有缺陷。

  • c语言处理时间和日期

    Forums: 

    img: 

    处理时间和日期很常用, 比如 me 们想简单看一下程序跑的有多快, 比如 me 们想记录日志(通常包括时间),再比如 me 们想知道今天星期几等。 c 的标准库 time.h 提供了处理时间和日期的类型和函数。 先说说 me 的感受吧, c time.h 中提供的日期处理中大量使用了内置于函数的 static 数据,这对于单线程程序来说无所谓,no problem, 但是总让人赶脚不爽 —— 非线程安全。 其次, c 提供的统计时间的函数有时候比较粗糙, 使用 time() 函数基本上只能统计到秒一级, 使用 clock() 函数可以统计到 1/CLOCKS_PER_SEC 秒一级(me 的一个实现是毫秒)。还是让 me 们说正事。

    类型

    time.h 定义了三种类型和 9 个函数, 内容很少, 不过功能很全。 三种类型: clock_t、time_t 和 struct tm , 前两种是算术类型,也就是类似于 int 或是 double 的类型, 通常应该是整型; 第三种是一个结构体,将日期分离开来。 clock_t 是计算的 cpu 时间, time_t 是日历时间, struct tm 是字段分离的日历时间表示。

  • c++统计时间

    Forums: 

    img: 

    统计程序运行时间是一个多么常用的一个功能, 然而很多时候么有告诉 us 怎么去做。 c 的 time.h 提供了自己的处理方法, c++11 也引入了自己的方法。 下面就是 c++ 中统计程序运行时间的一个例子。(统计运行时间,实际统计的是程序运行前后的时间差,而非程序跑在 cpu 上的准确时间。)

  • c++有理数类

    Forums: 

    img: 

    有理数其实就是分数,p/q形式的数。 c/c++ 虽然有整数,浮点数,却没有内置的有理数表示。 为了练习 c++ 类的书写, me 写了个一个简单的有理数类, 可以实现 + - * / 四则运算。

    写这个小程序完全是为了练手, 熟练 c++ 的使用。+ - * / 的思路都很简单,和平时 me 们手工计算的思路一样, 不过实现需要知道最大公约数 gcd 和最小公倍数 lcm 。 gcd 的求法使用的是众所周知的“辗转相除法”。

    处理 gcd 和 lcm 之外,程序更多的部分是重载 + - * / += -= *= /= 四则运算符, 和流输出 << 运算符, 以及在不够减的时候抛出异常。

    下面的代码仅供参考:

  • 自定义字面量

    Forums: 

    img: 

    字面量 literal 就是诸如 1234 、 0xfe、 3.14 、 2.71828f、 "hello,world"、 'x' 这样的量,这些都是对应类型的书写常量。 在数学或是物理中, 除了整数和浮点数表示外, me 们还常见诸如 1+2i 、32 kg 这样的表示,学汇编的恐怕还熟悉 10110011b 这样的表示(二进制形式)。 本来 c++ 从 c 那里只继承了一些基本类型的一些固有的表示方法,不过 c++11 对于这种功能进行了扩展,也就是 me 们可以自定义一些数据表示形式,比如 1+2i 表示复数, 1011b 是整数的二进制表示。

    c++ 的这种扩展是通过运算符 "" 的重载实现的。下面是一个复数 a+bi 表示的程序 demo :

  • 迭代法求平方根和立方根

    迭代法求值在数值计算中是一种常用的方法,思路也很简单:首先得有一个迭代公式,比如 $$ z = z - \frac{z^2-x}{2z} $$, 然后给一个初值比如 z = 1.0, 然后不断滴代入公式, 然后结果会不断滴趋近于要求的值,这里就是 x 的平方根。 下面是一些求平方根和立方根的迭代公式,这些公式是某些大家一不小心找出来的或是创造出来的,至于肿么找的或是创造的,这不是 me 关心的事,O__O"…

    Newton 算法

    平方根 : $$ z = z - \frac{z^2-x}{2z} $$

    Babylonian 算法

    平方根 : $$z = (z + \frac{x}{z})\cdot\frac{1}{2} $$

    立方根 : $$z = (2z + \frac{x}{z^2})\cdot\frac{1}{3} $$

    Tags: 

  • 手工开平方

    手工开平方

    现在有了计算器就是好,掏出计算器开平方完全不在话下,而且是高精度。比如 windows 下的 $$ \sqrt{3} $$= 1.7320508075688772935274463415059 。不过这里要介绍的是一种手工开平方的方法,可能以后永远都不会用上,但是方法就在那里,会不会不是方法的问题。

    先回顾一下试除法计算商,比如 $$ \frac{71}{3} = $$ ? 对齐位置,比如用 3 去除 7, 试着商 2, 余 1。余数添上后一位变成 11,然后除以 3, 试商 3, 余 2。再添加 0,变成 20, 除以 3, 商 6 ,... 所以,$$ \frac{71}{3} = 23.6... $$

    Tags: 

  • 元编程

    Forums: 

    img: 

    所谓的元编程(metaprogramming),就是编写能够操控其他程序的程序,或是编写编译期就能完成运行期任务的程序。编译器和解释器是前者的典型,而 c++ 的模板元编程是后者的典型。元编程在有些地方可以节省程序员不少时间,因为程序可以是“自动生成”的;有的时候可以提高运行效率,比如编译生成的可执行文件中已经完成了一些低级而耗时的工作;有时候可以提高程序的灵活性。

    能够用来编写元编程的语言叫元语言(metalanguage),也就是它们能够操控其他语言写的程序;被操控的语言叫对象语言(object language)。一门语言可以操控自己的技术叫做,反射(reflection)或是自反, Java、Golang 都提供放射功能。

    元编程一般的工作方式有三种:

  • 在sae上移植drupal7

    本篇文章介绍怎么从 drupal 官网的最新版本 —— drupal 7,进行修改让其可以在 sae 上安装,如果你只对安装感兴趣的话,请直接阅读这篇文章 http://www.lrj.name/node/1

    这里说明一点情况,关于 sae 的 storage 对本地 I/O 的移植代码,不是 me 写的,而是网上搜来的;这里 me 只是负责了整理;

    问题分析

    为神马官网最新的 drupal 7(.xx) 不能直接配置到 sae 上呢?因为 sae 是 sina 的东西,不是咱们的东西,所以,咱们在系统配置和文件创建、写上往往不具有某些权限,即权限问题是 drupal 不能直接安装到 sae 上的主要原因。

    Tags: 

  • 在sae上安装drupal7.19

    drupal 是个很好的 CMS 系统(me 现在对此持怀疑态度,主要是厌倦了它的频繁更新),sae 提供不错的主机服务(其实很垃圾, me 会告诉 u 这就是一个坑么 ! ),将 drupal 安装到 sae 上应该是很多人的想法,当然主要是使用 drupal 的人的想法。u 看到的这个博客系统就是使用的跑在 sae 上的 drupal。Sae 主要是提供主机服务,服务器 Apache、数据库 MySQL 和 PHP 都是提供好的,me 们只需要提交应用代码差不多就可以了。但是有个问题,sae 的主机,me 们往往没有创建和写文件的权限,所以将官网下载的 drupal 直接提交到 sae 上并不能正常安装。

    Tags: 

Pages