标签 知识 下的文章

模拟登录新手入门教程

阅读本文,你能得到一些Cookie和Session的基本知识,模拟登录的分析思路,但是具体代码请自行实现。

今天早上起来折腾了一下模拟登录,主要是以前从来没干过,以为很有难度——实际上并没有,折腾了大概一到两个小时就完全搞定了。

这次讲的主要是分析的思路,因为代码太难看了所以暂时不提供代码,等好看了在放出。

我们以上海海事大学数字校园平台为例,主要是他是比较简单的系统,为什么说简单,之后我们会做说明。

首先,我们来说一下本次使用的道具:

Firefox + Firebug
Postman
Node.js+superagent+cheerio(本文不需要)

- 阅读剩余部分 -

JavaScript 排列与组合

排列与组合在我们日常生活中其实也是挺常用的,包括在算法中,也算是比较实用的东西,但是排列组合也是一个难点,这里我们先从简单的出发。

最简单的是全排列和全组合,其中组合的思路更加简单易行,因此我们先从全组合说起。

在说之前,我们先来确定一下定义(数学渣只能从自己下定义开始以免误导读者),我们的全排列,指的是PNN,也就是有n个数字,坑也有n个,求全部的排列情况;全组合,则是除了空集外,n个字母能组成多少种可能性(不一定要全部使用)。

由此,我们开始了我们的全组合之旅:

- 阅读剩余部分 -

JavaScript 说说随机排序(洗牌程序)

在小鱼的gayhub看到了这样的一题,其中就需要用到洗牌程序,当然,我在看到排序算法的时候就想到这样可以用于排序,所以很快就有了第一个排序算法:

var shuffleHack = function(arr) {

    var result = arr.slice();

    result.sort(function() {

        return Math.random() - 0.5;

    });


    return result;

};


- 阅读剩余部分 -

Python 从多人聊天室开始谈系列 - 说说TCP

接下来我们开始说说TCP的问题,众所周知的,三次握手和四次挥手是核心指导方向,但对我们而言,更重要的是,我们应该知道,TCP,或者说socket有些什么问题:

粘包和拆包问题。

这是比较主要的一个问题,当然,如果我们使用了WebSocket,那么基本不需要考虑这个问题。

- 阅读剩余部分 -

Python 从多人聊天室开始谈系列 - Tkinter GUI

接下来我们差不多能聊起来了,剩下的就是解决上一篇中我们遗留的登出移除问题以及做一个界面,那样我们就能给更多的人用啦。

选择Tkinter,主要是,作为一个没有其他语言GUI基础的人,入门最简单粗暴的方法可能就是这个了。

关于Tkinter,网上的资源其实说不上太多,还是比较难找的,尤其是对于一个写惯了HTML/CSS的,其实是挺痛苦的。

Tkinter的布局教程可以看这里:http://effbot.org/tkinterbook/grid.htm

- 阅读剩余部分 -

Python 从多人聊天室开始谈系列 - 多线程

完成了上一个版本,我们会发现,根本聊不起来啊!

问题的关键在于,我们现在的程序,一次只能干一个事情,你让我等待输入了,我就不能好好输出了。

所以我们需要在此引入多线程的概念,多线程的概念,简单的来说,就是,我因为只有一个人,你让我去干一件事还可以,两件事我不行,那多加一个人,总可以干了。

那么阻塞呢,意思就是说:由于我干了这个,不能干那个,我们把这个现象叫做阻塞。

概念都理解了之后,我们知道了,只要多加一个线程就行了!

实现多线程有几种方法,具体来说,我们可以看一下这篇:
http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html

- 阅读剩余部分 -

Python 从多人聊天室开始谈系列 - Socket

接下来我们首先略过了Python的基础,这一部分,随便找一本Python的书看看就行了,习惯了没有;的人生之后,在必须的语句里记得加:,基本上你就进入了Python模式。

当然,由于赶时间,这里很多可能不是最优写法,大家可以去GitHub提出=v=。

官网Demo有云:

# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 50007              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
    data = conn.recv(1024)
    if not data: break
    conn.sendall(data)
conn.close()

- 阅读剩余部分 -

Python 从多人聊天室开始谈系列 - 起始

这次的操作系统课设要做聊天室,众所周知的是,Node.js家有强大的socket.io,官网的demo就能让你分分钟速写聊天室——但是并没有什么卵用。

从操作系统的角度,我们决定从底层出发,去挖掘一下究竟一个轮子是怎么样实现的。

首先先决条件,我们需要学习:

  • Python基础
  • Socket(TCP)知识
  • Thread(多线程)
  • GUI(Tkinter)

目标是最快的速度学习并实现我们的一个简单而且比较稳定的聊天室。

![多人聊天模式](media/%E5%A4%9A%E4%BA%BA%E8%81%8A%E5%A4%A9%E6%A8%A1%E5%BC%8F.png)

我们首先先来简单的了解一下Socket的模式:一个Client与一个Server建立连接,那么多个Client的情况,就需要把Server作为转发器来进行消息的转发,然后由Server推送到另一个Client中。

在GitHub中有完整的代码,接下来的介绍也是按照我的版本迭代顺序来的=v=:https://github.com/csvwolf/sky-chatting-room