幻象客 - 博客分类页面

    使用C++遍历目录下的文件


    in C/C++ , 干货 , 程序语言 2017-03-30

    参考文档:http://sodino.com/2015/03/09/c-directory-io/#open_dir

    先上代码:

    #include <iostream>
    
    #include <dirent.h>
    
    void print_dir(DIR *dir) {
    
        struct dirent *file;
    
        // 遍历文件夹下的内容
    
        while ((file = readdir(dir)) != NULL) {
    
            printf("文件位置=%ld ", telldir(dir));
    
            printf("子文件:%20s  ", file->d_name);
    
            printf("\n");
    
        }
    
    }
    
    int main(int argc, const char * argv[]) {
    
        const char *dirPATH = "/Users/ckend/Documents";
    
        DIR *dir = opendir(dirPATH);
    
        print_dir(dir);
    
        return 0;
    
    }

    需要用到的头文件:"dirent.h"需要用到的结构及函数:"struct dirent""readdir()""opendir()""telldir()"

    一个个

    阅读更多...

    网站系统搬家记(利用印象笔记)


    in JavaScript , 闲谈 2017-03-24

    以前记录公众号文章的网站(https://huanxiangke.com/articles )是基于typecho的一个微型博客发布平台。最近发现typecho虽然非常简洁高效,但是满足不了我的一些特殊需求,而且维护起来也比较麻烦。于是将博客搬家到了Wordpress.

    其实后台系统搬家还是挺简单的,最主要是文章的搬家比较困难。由于之前那个博客系统,里面的不少图片都已经挂链了,所以还是决定重新导入文章。但是由于微信公众平台的反外链措施,我无法直接复制粘贴这些文章,而原文章的图片也全都丢失了,所以只能另寻他路。

    一张图一张图地保存太麻烦了,效率非常低下。于是我用到了网页版印象笔记的剪藏功能。只需要下载印象笔记的扩展插件,然后保存网页正文,并且标签设为“posts”即可。如图所示:

    印象笔记 应用

    保存到账号后,我们仅需要在WordPress里下载一个叫"EverNote"的插件即可进行同步,非常实用方便。

    印象笔记 应用

    不过值得注意的是,微信公众平台的图片加载还是实用了一种类似lazyload的方式,你需要拉下去才能把所有图片显示出来。否则你同步过去将是空的图片。

    欢迎关注微信公众号:

    幻象客:https://www.huanxiangke.com

    欢迎进入极致分享:https://alltoshare.com

    幻象客 二维码

    阅读更多...

    使用python破解一些密码问题的例子


    in Python , 程序语言 2017-02-23

    这是pythonchallenge上的第二关,比较简单。

    题目给了下面这个HINT:

    Python 破解密码

    以及一串看起来很乱的字母:

    g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyr

    q ufyr amknsrcpq ypcdmp. bmgle gr gl zw fyl

    b gq glcddgagclr ylb rfyr'q ufw rfgq rcvr g

    q qm jmle. sqgle qrpgle.kyicrpylq() gq pcam

    kkclbcb. lmu ynnjw ml rfc spj.

    根据图片里的规律,我们得知其是字母向右移动两位。那么原文也就是ASCII码减二的加密方式。这就是凯撒密码。

    你如果有耐心的话,可以一个一个的往右移两个字母,从而得出答案。但我们应该更追求更高效的方法。

    Python中有这样的两个函数:

    ord():返回一个字符的ASCII码

    chr():获取一个ASCII码,将它转换为字符

    我们或许可以利用这两个函数解密。

    核心代码:

    for each in text:
    
        if ord(each) >= ord('a') and ord(each) <= ord('z'):
    
            answer = answer + chr(ord(each) + 2)

    代码意思是这样的:检测字符串内的每一个字符,若它是小

    阅读更多...

    使用“向量空间搜索引擎”做字符识别


    in Python , 程序语言 2017-02-09

    参考文档:http://ondoc.logand.com/d/2697/pdf

    不要被这标题吓到了,其实核心内容非常简单。

    如果我们想要确认验证码是什么,就要有一个识别图片字符的过程。我们这里使用向量空间搜索引擎进行识别。

    参考文档中举了一个例子。三篇文章中cat,dog,mouse出现的频率分别是(3,1,4),(1,2,5),(2,3,0).那怎么计算哪两篇比较相似呢?

    参考文档给了一个解决方案是将文章cat、dog、mouse出现的频率看做“向量”,然后计算两个向量之间的余弦值(cos),越接近1则越相似。

    cos<文章1,文章2> = 0.895

    cos<文章2,文章3> = 0.405

    cos<文章1,文章3> = 0.490

    因此可以看出文章1和文章2更相似。

    把它转化成python代码:

    class VectorCMP:
    
        def ValueOfVector(self,Vector):
    
            total = 0.0
    
            for count in Vector.items():
    
                total = total + count ** 2
    
            return math.sqrt(total)
    
        def relation(self,Vector1,Vector2):
    
            DotP...

    阅读更多...

    使用python求出图片每一个像素的RGB颜色


    in Python , 程序语言 2017-02-07

    使用Python识别出图片中的每个像素的颜色,能够用来攻克验证码。

    阅读更多...

    详解argc,argv和C/C++几道易错题


    in C/C++ , 程序语言 2017-01-11

    argc即argument count. 顾名思义,是用户在命令行内输入的参数个数。argv即argument vector. 是用户输入的参数vector库(数组)

    int main(int argc ,char *argv[])

    char argv[] 即指针数组([]优先级别高于,于是就里面的每个元素都是char类型,要理解好 char (argv)[] 和 char *argv[]的区别),每一个元素内,存的都是参数,这些参数都是字符串。其实就是vector库。如果你这里暂时不理解,没关系,往下看。

    它其实就是记录了程序被执行时所传入的参数。包括打开程序的那条语句。如我保存了一个程序为test.exe, 在命令行执行这个程序并顺便带几个参数:

    test.exe x y z

    这样的话argc就是四个参数,分别为text.exe、x、y、z. 输出的话将是这样的:代码:

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[]) {
    
        cout << "参数个数是: " << argc << endl << "分别是:" << endl;
    
      for (int i = 0; i < argc; ++i)
    
           cout << argv[i] << endl;
    
       ...

    阅读更多...

    <分析>计算机男表白神器,用C/C++画出心型


    in C/C++ , 程序语言 , 闲谈 2017-01-09

    参考文档:http://mathworld.wolfram.com/HeartCurve.htmlhttps://www.zhihu.com/question/20187195

    使用的公式:

    用C++画心

    效果图:

    用C++画心

    公式仅仅是画出弧度,如果我们想要填充里面的东西,仅需要判断公式是否小于0,若小于零则打印星号:

    cout<< (a \* a \* a - x \* x \* y \* y \* y <= 0.0f ? '*' : ' ');

    (a即x^2+y^2-1,见下图完整代码)

    完整代码:

    用C++画心

    其中,第一个循环输出的是行,按照这个算法,应该是40行,第二个循环输出的是列,应该有80列。

    如果我们把行数改小,图形就会变矮。如:

    for (float y = 2.0f; y > -2.0f; y = y - 0.2f)

    用C++画心

    若我们把列等比例缩小。

    for (float x = -2.0f; x < 2.0f; x = x + 0.1f)

    其效果就是整个图形缩小。如图:

    用C++画心

    这样似乎理解依旧不够透彻,让我们更深刻地理解这个代码。修改代码为:

    用C++画心

    我们看运行结果是:

    用C++画心

    可见x=0,y=0就是图像的中心。其实这个程序是按照坐标轴进行绘制的。那我们就能做一些更有趣的改动了。

    cout << (a \* a \* a - x \* x \* y \* y \* y <= 0.0f && a \* a \*...

    阅读更多...

    爬虫抓取个人课表


    in Python , 爬虫 , 程序语言 2017-01-09

    今天突发奇想爬了一次课表。或许以后会有大作用。

    语言:python包:BeautifulSoup,requests, re.

    除了re,其他的都是以前讲过的,可以参加之前的推送:<技术向>爬取一个网站的信息

    re是python进行正则表达式所需要的包,我们爬取完课表需要用正则表达式进行格式化。

    下面开始呗。

    我们需要先得到cookie、User-Agent、Referer.Referer参数的作用:告诉服务器我是从哪个页面链接过来的User-Agent参数的作用:判断客户端使用的是什么浏览器的版本及类型

    首先登录你的教务网站,提取Cookie和User-Agent信息:

    爬虫抓取个人课表

    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.90 Safari/537.36''Cookie': 'ASP.NET_SessionId=dvzzem55duqbn245omfbmi55'

    然后我们还需要课表网站的链接,右键学生个人课表,复制链接地址:

    http://jwc.scnu.edu.cn/xskbcx.aspx?xh='这里会是你的学号'&xm='你的名字'&gnmkdm=N121603

    接下来就可以正式开始了:

    首先引入包

    from bs...

    阅读更多...

    网站发送邮件的"艺术"(phpMailer)


    in php , 干货 , 技术原理 , 程序语言 2017-01-02

    https://www.huanxiangke.com
    网站上的“联系我”板块使用的是一个自动发送邮件的功能。之前使用的是PHP的MAIL函数,当时没有意识到vultr(我的服务器商)封掉了25端口。所以如果之前大家给我发了邮件,可能要重新发了哈,抱歉。

    现在使用的是PHPMailer这个强大的类。配合SMTP服务器。而且它还能够发送附件。这里不需要太过于纠结SMTP是什么,我们只需要知道它是一种邮件传输协议,SMTP服务器其实就是发信的服务器,如果你是QQ邮箱,那么就是smtp.qq.com如果你不是QQ邮箱,也可以在那个邮箱的官方文档中找到。

    PHPMailer:https://github.com/PHPMailer/PHPMailer

    官方说明文档如下:

    <?php
    
    require 'PHPMailerAutoload.php';
    
    $mail = new PHPMailer;
    
    //$mail->SMTPDebug = 3;                               // Enable verbose debug output
    
    $mail->isSMTP();                                      // Set mailer to use SMTP
    
    $mail->Host = 'smtp1.example.com...

    阅读更多...