最新文章

图说Android

android studio 思维导图 现 android 系统架构 3. manifest 文件说明 两种布局

(六)选项卡的设置

指定options_page属性后,扩展图标上的右键菜单会包含“选项”链接 对于网站来说,用户的设置通常保存在Cookies中,或者保存在网站服务器的数据库中。 对于JavaScript来说,一些数据可以保存在变量中,但如果用户重新启动浏览器,这些数据就会消失。 那么如何在扩展中保存用户的设置呢? 我们可以使用HTML5新增的localStorage接口 localStorage是HTML5新增的方法,它允许JavaScript在用户计算机硬盘上永久储存数据(除非用户主动删除)。 但localStorage也有一些限制,首先是localStorage和Cookies类似,都有域的限制,运行在不同域的JavaScript无法调用其他域localStorage的数据 其次是单个域在localStorage中存储数据的大小通常有限制(虽然W3C没有给出限制),对于Chrome这个限制是5MB 最后localStorage只能储存字符串型的数据,无法保存数组和对象,但可以通过join、toString和JSON.stringify等方法先转换成字符串再储存 通过声明unlimitedStorage权限,Chrome扩展和应用可以突破这一限制 小项目 查天气 manifest { "manifest_version": 2, "name": "天气预报", "version": "1.0", "description": "查看未来两周的天气情况", "icons": { "16": "images/icon16.png", "48": "images/icon48.png", "128": "images/icon128.png" }, "browser_action": { "default_icon": { "19": "images/icon19.png", "38": "images/icon38.png" }, "default_title": "天气预报", "default_popup": "popup.html" }, "options_page": "options.html", "permissions": [ "http://api.openweathermap.org/data/2.5/forecast?q=*" ] } options.html <html> <head> […]

(五)常驻后台

background可以包含三种属性,分别是 scripts 、page 和 persistent 如果指定了 scripts 属性,则Chrome会在扩展启动时自动创建一个包含所有指定脚本的页面 如果指定了 page 属性,则Chrome会将指定的HTML文件作为后台页面运行 通常我们只需要使用 scripts 属性即可,除非在后台页面中需要构建特殊的HTML——但一般情况下后台页面的HTML我们是看不到的 persistent属性定义了常驻后台的方式(默认为true)——当其值为true时,表示扩展将一直在后台运行,无论其是否正在工作;当其值为false时,表示扩展在后台按需运行,这就是Chrome后来提出的 Event Page。 Event Page 可以有效减小扩展对内存的消耗,如非必要,请将persistent设置为false。 小项目 检测博客是否在线 manifest { "manifest_version": 2, "name": "Blog在线状态", "version": "1.0", "description": "监视Blog是否在线", "icons": { "16": "images/icon16.png", "48": "images/icon48.png", "128": "images/icon128.png" }, "browser_action": { "default_icon": { "19": "images/icon19.png", "38": "images/icon38.png" } }, "background": { "scripts": [ […]

(四)跨域请求

tips:允许跨域示例 { ... "permissions": [ "*://*.wikipedia.org/*" ] } 每次发起请求,只要调用httpRequest函数,并传入要请求的URL和接收返回结果的函数就可以了。 为什么要使用callback函数接收请求结果,而不直接用return将结果作为函数值返回呢? 因为XMLHttpRequest不会阻塞下面代码的运行。(异步) function httpRequest(url, callback){ var xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { callback(xhr.responseText); } } xhr.send(); } 小项目 用户IP展示 manifest { "manifest_version": 2, "name": "查看我的IP", "version": "1.0", "description": "查看我的电脑当前的公网IP", "icons": { "16": "images/icon16.png", "48": "images/icon48.png", "128": […]

(三)操作用户当前浏览页面

tips: DomTree Manifest的content_scripts属性值为数组类型,数组的每个元素可以包含matches、exclude_matches、css、js、run_at、all_frames、include_globs和exclude_globs等属性。 其中matches属性定义了哪些页面会被注入脚本 exclude_matches则定义了哪些页面不会被注入脚本 css和js对应要注入的样式表和JavaScript run_at定义了何时进行注入 all_frames定义脚本是否会注入到嵌入式框架中 include_globs和exclude_globs则是全局URL匹配 最终脚本是否会被注入由matches、exclude_matches、include_globs和exclude_globs的值共同决定 简单的说,如果URL匹配mathces值的同时也匹配include_globs的值,会被注入;如果URL匹配exclude_matches的值或者匹配exclude_globs的值,则不会被注入。 content_scripts中的脚本只是共享页面的DOM,而并不共享页面内嵌JavaScript的命名空间。如果当前页面中的JavaScript有一个全局变量a,content_scripts中注入的脚本也可以有一个全局变量a,两者不会相互干扰。当然你也无法通过content_scripts访问到页面本身内嵌JavaScript的变量和函数。 小项目 manifest { "manifest_version": 2, "name": "永远点不到的搜索按钮", "version": "1.0", "description": "让你永远也点击不到Baidu的搜索按钮", "content_scripts": [ { "matches": ["*://www.baidu.com/"], "js": ["js/cannot_touch.js"] } ] } 在content_scripts属性中我们定义了一个匹配规则,当URL符合://www.baidu.com/规则的时候,就将js/cannot_touch.js注入到页面中。其中代表任意字符,这样当用户访问http://www.baidu.com/和https://www.baidu.com/时就会触发脚本。 右键单击搜索按钮,选择“审查元素”,我们发现Baidu搜索按钮的id为’su’。 cannot_touch.js function btn_move(el, mouseLeft, mouseTop){ var leftRnd = (Math.random()-0.5)*20; var topRnd = (Math.random()-0.5)*20; //Rnd 值为100或-100 var btnLeft = mouseLeft+(leftRnd>0?100:-100)+leftRnd; var […]

(二)Manifest文件结构

json 有两种结构 一种是键值对,即key:value 一种是纯值的 举个栗子: { "name" : "Harry Potter", "author" : { "name" : "J.K.Rowling", "birth" : 1964 }, "books" : [ "Philosopher's Stone", "Chamber of Secrets", "Prisoner of Azkaban", "Goblet of Fire", "Order of the Phoenix", "Half-Blood Prince", "Deathly Hallows" ] } manifest 必备内容 Chrome扩展的Manifest 必须 包含name、version 和 manifest_version属性,目前来说manifest_version属性值只能为数字2,对于应用来说,还必须包含app属性。 可套用模板 { "app": { […]

(一)MyBlock

准备工作 新建文档结构如下: myblock—-manifest.json |________img |________js |________popu.html 如上,其中js和img用来放js文件以及图片 代码部分及解释 manifest.json 如下: { "manifest_version": 2, "name": "我的时钟", "version": "1.0", "description": "我的第一个Chrome扩展", "icons": { "16": "images/icon16.png", "48": "images/icon48.png", "128": "images/icon128.png" }, "browser_action": { "default_icon": { "19": "images/icon19.png", "38": "images/icon38.png" }, "default_title": "我的时钟", "default_popup": "popup.html" } } name 定义了扩展的名称 version 定义了扩展的版本 description 定义了扩展的描述 icons 定义了扩展相关图标文件的位置 version 的值最多可以是由三个圆点分为四段的版本号,每段只能是数字,每段数字不能大于65535且不能以0开头(可以是0,但不可以是0123) browser_action 指定扩展的图标放在Chrome的工具栏中 […]

fluxion使用

安装 git clone, 解压即可 执行./Install.sh 安装 php-cgi失败 解决 apt-get install php5-cgi dhcpd 失败 解决 apt-get purge isc-dhcp-common#卸载依赖关系 apt-get install isc-dhcp-common#从新安装依赖关系 apt-get install isc-dhcp-server ./fluxion 使用 file not present

正则表达式IP

IP正则regexp: ((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) 开始分析: 1. 0~255. 有三个然后加一个 0~255 2. 所以左边就是 0~255. 3. 去除点 . 分析0~255 4. 200~ 249: 2 0-4 d 5. 250 以上 25 0~5 6. 0~99 d d? 7. 100~199 1 d d? 图解网站: 生成图

EnNote

Can you can a can like a canner cans a can? “情态动词-能”、“动词-开罐”、“名词-罐头” Can(能) you can(开罐) a can(罐头) like a canner cans(开罐) a can(罐头)? “你能像一个装罐工人那样开一个罐头吗?” Smell smelly. Taste tasty. “闻着臭,吃着香” two to two to two two 描述的是一个时间区间: 1:58--2:02, two to two是“两点差两分”, two two是“两点零二分”, 第二个那个to是介词“至、到”, Real eyes realize real lies. “好眼力识破真谎言”。 这句话读起来的感觉就像: “realize~realize~realize” 首先real eyes中,l+e产生连读; 其次real lies,两个l只发一个音即可。 […]

kali 漏洞利用

medusa -h target_ip -u uer -p passsword -M service u可替换为U后跟文件,同理p也可 M 后跟所攻击的服务(例如SSH) 2.

kali 扫描篇

ping 与 ping 扫描 fping 工具用来批量化扫描 fping -a -g 172.16.45.1 172.16.45.254 > host.txt -a 输出只显示活动主机 -g 指定范围 > host.txt 写出到文件 TCP连接扫描 nmap -sT -p- -Pn IP1-IP2 -s 扫描类型 T TCP ; S SYN; U UDP ; V Version; X Xmas; N Null; O Os -p- 扫描所有端口 -Pn 跳过主机发现阶段,对所有地址进行扫描 范围IP1连续到IP2 不连续可使用文件方法-iL File tips: Xmas 和Null扫描利用的是RFC文档 即当没有将SYN,ACK,RST标记(Xmas即为此种数据包)置位时,若端口开启,会忽略数据包,端口关闭,会返回响应。 […]

kali command note

lsof -i 用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具。以root用户来执行lsof -i lsof -i:端口号,用于查看某一端口的占用情况,比如查看22号端口使用情况,lsof -i:22 切换 root用户 su root netstat -tunlp 用于显示tcp,udp的端口和进程等相关情况,如图 ifconfig -a 以列表形式列出所有可用接口 ifconfig eth0 up 激活第一(0)个网络设备(网卡) ifconfig eth0 up 192.168.1.23 为第一个设备分配IP dhclient 自动配置 网站复制机 httrack 输入运行即可 提供至少两个参数 projectName & aimUrl cache 搜索引擎技巧 显示快照 cache:edu.+++.com locate theharvester ./thehaverster.py -d kula.com -l 10 -b google -l 限定搜索结果数目 -b 指定公有知识库,可填all -d […]

PyhonSocket

原文: https://blog.ansheng.me/article/python-full-stack-way-socket/ 对象实例化 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 参数一:地址簇 参数 描述 socket.AF_INET IPv4(默认) socket.AF_INET6 IPv6 ocket.AF_UNIX 只能够用于单一的Unix系统进程间通信 参数二:类型 参数 描述 socket.SOCK_STREAM 流式socket , for TCP (默认) socket.SOCK_DGRAM 数据报式socket , for UDP socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。 socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。 socket.SOCK_SEQPACKET 可靠的连续数据包服务 参数三:协议 参数 描述 0 (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议 Socket类方法 function intruductions s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。 sk.listen(backlog) 开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。 sk.setblocking(bool) 是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。 sk.accept() 接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。 sk.connect(address) 连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 […]

甘文迪

小镇的北边住着个糟老头。 ​ ​ 老头一身皱皱巴巴的衣服,像是用破烂的红布条子简单的缠了下一样。 ​听镇上的人说,这老头是个吸血鬼,在这住了百年,但是没喝过人血。 ​ 每当​夜深的时候,老头就会到镇上偷一两只鸡鸭,碰巧被人们看到的时候也少不了一顿打。 ​有那么几个冒失的小孩打算去老头的家里看看。 ​老头的家在镇的最北面,也算不上是家吧,那是个教堂一样的地方,老头就在里面住。 说是教堂,里面却没有耶稣,没有耶和华,甚至连个十字架都没有。 ​ 教堂很旧,破破烂烂,阴森森的,也没怎么有人去拜访过。 ​ ​镇上的人大部分都是流亡到这的,这教堂到底存在了多久也没人知道,倒是有个瞎眼的老太婆经常去教堂,老太婆不说话,也没人搭理她。 ​ ​孩子们到教堂的时候,差不多是半夜了,偌大的教堂没有一点声响,却不时地飞过几只蝙蝠,着实有点令人害怕。 几个大胆的孩子蹑手蹑脚地窥探着大厅的后面,那是个半球形的小空间,之所以窥探,是因为这里什么都没有,只有一口棺材。 ​ ​领头的脸上长满雀斑的胖孩子好像是这群孩子的头,他指了指群里看起来比较小的那个孩子,说:“甘文迪,你过去把它掀开。” ​ ​ 那个孩子仰起头,月光洒进来,刚好映衬其他稚嫩的脸庞,苍白的面孔上还略显稚嫩的五官,一双赤色的双瞳,秀气却又散发着一种淡淡的傲然。 ​ ​一股黑气散出,教堂里一群蝙蝠飞过,棺木被推开了。。。 ​ ​ 几个孩子脸上都是充满震惊的神色。 ​第二天,镇上的人都知道老头死了。 ​ ​​ 又过了好长一段时间,镇子的南面来了个披紫色斗篷的,来的这人询问住处,镇上的人并不友好,都不愿意和他招呼。 无奈他东问西问,最后只打听到镇上的墓地旁有个破草房。 来的这人也不怕,就去了那,别人问起,他就说:“替人看看墓,能想起一些事。” 镇上的人觉着他说话有些古怪,不敢搭理他。

Jquery重修基础学习

学习整理自菜鸟教程 使用说明炕翠+F 汽车遥控器常用频段 443,315 使用基础 引入Jquery的js文件(js文件夹下) <script src="js/jquery_3.1.js"></script> 通过$(元素)来返回一个可执行对象引用 该对象引用具有动作方法 事件方法: 常见方法名如下: 方法名 对应效果 click 点击 keypress 按键按住 submit 提交 load 载入 dblclick 点击两次 keydown 按键按下 change 当value改变 mouseenter 鼠标经过 keyup 按键弹起 focus 聚焦 scroll 滚动 mouseleave 鼠标离开 blur 失焦 使用方法: $(document).ready(function(){ $("p").click(function(){ $(this).hide(); }); }); (ready方法为加载完成后执行) 可见事件方法参数常为函数对象,而该函数对象常指定 何时何地(类似p.click即点击(何时)p(何地))发生何方法。 重点: load(url,data,function(response,status,xhr)) url ... data 是键值对 […]

github Push失败

问题: fatal: unable to access 'https:/***.git/': Failed to connect to github.com port 443: Timed out 摘自知乎: 在谷歌上查了很多办法都没有解决,有的方法是https连接模式改成ssh模式,或者是修改代理,比如: git config –global http.proxy 192.168.1.1:8083 但是都没有解决我的疑惑,然后我发现了一个问题,就是我根本没有使用代理,所以这样登录方式肯定会有问题。 我通过: git config –global http.proxy 查询到当前设置了代理,所以我取消这个设置: git config –global –unset http.proxy 再查询,已经没有了代理,然后再push,成功了! 作者:yun liu 链接:https://www.zhihu.com/question/26954892/answer/34770821 来源:知乎 著作权归作者所有,转载请联系作者获得授权。

Chapter_one

vulnerable 脆弱的 reserved 矜持的 In consequence 因此 inclined 倾向于 veteran bores向来无聊的人 detect 发觉 privy 知情的 griefs 悲痛 feigned 虚假的 Preoccupation 心事重重 levity 轻率 intimate 直接的 quivering 颤抖的 plagiaristic 剽窃的 suppressions 压抑 unmistakable 毋庸置疑的 snobbishly 自命不凡的 fundamental 基本的 decency 道德规范 In my younger and more vulnerable years my father gave me some advice that I’ve been […]

JSP内置对象

一,内置对象简介 JSP内置对象:web容器创建的一组对象,不需要new关键字就可以使用的对象。 JSP九大内置对象:out,request,response,session,application,page,pageContext,exception,config(前五个最常用) 二,web 程序的请求与响应模式 web程序的请求响应模式 用户发送请求(request) 服务器给用户响应(response) 三,out对象 缓冲区:内存中用来保存临时数据的区域。 out对象:JspWriter类的实例,是向客户端输出内容常用的对象。 常用的方法: 1. void println() 向客户端打印字符串。 void clear() 清除缓存区的内容,如果在flush之后调用会抛出异常。 voidclearBuffer() 清除缓存区的内容,如果在flush之后调用不会抛出异常。 void flush() 将缓冲区内容输出到客户端。 int getBufferSize() 返回缓冲区一字节数的大小,如不设缓冲区则为0。 int getRemaining() 返回缓冲区还剩余多少可用。 boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常 void close() 关闭输出流 四. get与post提交方式的区别 <form name="表达名" action="提交到的文件地址" method=“提交方式”></form> 表单有两种提交方式:get,post 1.get:以通过URL地址提交数据。提交的数据最多不超过2KB。安全性较低但效率比post方式高。适合提交数据量不大,安全性不高的数据。比如:搜索,查询等功能 2.post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。比如:注册,修改,上传等功能。 五. request 对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。他是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前该对象一直有效。 常用方法: 1. String getParameter(String name)返回name指定参数的参数值。 […]

php超全局数组

php超级全局变量列表 $_GET[] 获得以GET方法提交的变量数组 $_POST[] 获得以POST方法提交的变量数组 $_COOKIE[] 获取和设置当前网站的Cookie标识 $_SESSION[] 取得当前用户访问的唯一标识,以数组形式体现,如sessionid以及自定义session数据 $_ENV[] 当前php环境变量数组 $_SERVER[] 当前php服务器变量数组 $_FILES[] 上传文件时提交到当前脚本的参数值,以数组形式体现 $_REQUEST[] 包含当前脚本提交的全部请求,$_GET、$_POST、$_COOKIE的所有动作 $GLOBALS[] 包含正在执行脚本所有超级全局变量的引用内容 PHP系统常量 __FILE__ 当前PHP程序脚本的绝对路径及文件名称 __LINE__ 存储该常量所在的行号 __FUNCTION__ 存储该常量所在的函数名称 __CLASS__ 存储该常量所在的类的名称 __METHOD__存储该常量所在的类的方法的名称 PHP_VERSION 存储当前PHP的版本号,也可以通过PHPVERSION()函数获取。 PHP_OS 存储当前服务器的操作系统

Python 闯关

zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表 # coding:utf-8 import requests from PIL import Image,ImageDraw import urllib2 import re import StringIO def getChanllenge(p): return urllib2.urlopen('http://www.pythonchallenge.com/pc/' + p).read() def get_images(s): return Image.open(StringIO.StringIO(getChanllenge(s))) first = [146,399,163,403,170,393,169,391,166,386,170,381,170,371,170,355,169,346,167,335,170,329,170,320,170, 310,171,301,173,290,178,289,182,287,188,286,190,286,192,291,194,296,195,305,194,307,191,312,190,316, 190,321,192,331,193,338,196,341,197,346,199,352,198,360,197,366,197,373,196,380,197,383,196,387,192, 389,191,392,190,396,189,400,194,401,201,402,208,403,213,402,216,401,219,397,219,393,216,390,215,385, 215,379,213,373,213,365,212,360,210,353,210,347,212,338,213,329,214,319,215,311,215,306,216,296,218, 290,221,283,225,282,233,284,238,287,243,290,250,291,255,294,261,293,265,291,271,291,273,289,278,287, 279,285,281,280,284,278,284,276,287,277,289,283,291,286,294,291,296,295,299,300,301,304,304,320,305, 327,306,332,307,341,306,349,303,354,301,364,301,371,297,375,292,384,291,386,302,393,324,391,333,387, 328,375,329,367,329,353,330,341,331,328,336,319,338,310,341,304,341,285,341,278,343,269,344,262,346, 259,346,251,349,259,349,264,349,273,349,280,349,288,349,295,349,298,354,293,356,286,354,279,352,268, 352,257,351,249,350,234,351,211,352,197,354,185,353,171,351,154,348,147,342,137,339,132,330,122,327, 120,314,116,304,117,293,118,284,118,281,122,275,128,265,129,257,131,244,133,239,134,228,136,221,137, 214,138,209,135,201,132,192,130,184,131,175,129,170,131,159,134,157,134,160,130,170,125,176,114,176, 102,173,103,172,108,171,111,163,115,156,116,149,117,142,116,136,115,129,115,124,115,120,115,115,117, 113,120,109,122,102,122,100,121,95,121,89,115,87,110,82,109,84,118,89,123,93,129,100,130,108,132,110, 133,110,136,107,138,105,140,95,138,86,141,79,149,77,155,81,162,90,165,97,167,99,171,109,171,107,161, 111,156,113,170,115,185,118,208,117,223,121,239,128,251,133,259,136,266,139,276,143,290,148,310,151, 332,155,348,156,353,153,366,149,379,147,394,146,399] second = [156,141,165,135,169,131,176,130,187,134,191,140,191,146,186,150,179,155,175,157,168,157,163,157,159, 157,158,164,159,175,159,181,157,191,154,197,153,205,153,210,152,212,147,215,146,218,143,220,132,220, 125,217,119,209,116,196,115,185,114,172,114,167,112,161,109,165,107,170,99,171,97,167,89,164,81,162, 77,155,81,148,87,140,96,138,105,141,110,136,111,126,113,129,118,117,128,114,137,115,146,114,155,115, 158,121,157,128,156,134,157,136,156,136] im = Image.new('1', […]

Python bz2

import bz2 un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084' pw = 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08' print bz2.BZ2Decompressor().decompress(un) print bz2.BZ2Decompressor().decompress(pw) bz2一种压缩算法: > bzip2比传统的gzip或者ZIP的压缩效率更高,但是它的压缩速度较慢。从这点来说,它非常类似于出现的其它一些压缩算法。与RAR或者ZIP等其它不同的是,bzip2只是一个数据压缩工具,而不是归档工具,在这一点上它与gzip类似。程序本身不包含用于多个文件、加密或者文档切分的工具,相反按照UNIX的传统需要使用如tar或者GnuPG这样的外部工具。 在有些情况下,按照绝对压缩效率来讲bzip2不如7z和RAR格式。根据摩尔定律的持续效应,计算时间越来越少并且也变得越来越不重要,所以类似的压缩方法变得越来越流行。根据作者的说法,在所有已知的压缩算法中,bzip2可以排到百分之十到十五这样最好的一类算法中(PPM),尽管它在压缩速度时大致快两倍,而解压速度有六倍快。 bzip2使用Burrows-Wheeler transform将重复出现的字符序列转换成同样字母的字符串,然后用move-to-front transform进行处理,最后使用哈夫曼编码进行压缩。在bzip2中所有的数据块都是大小一样的纯文本数据块,它们可以用命令行变量进行选择,然后用从π的十进制表示得到的一个任意位序列标识成压缩文本。 起初,bzip2的前一代bzip在数据块排列之后使用算术编码进行压缩,由于软件专利的限制已经不再使用算术编码。

python 逆向播放gif

从头条看到的 from PIL import Image, ImageSequence from PIL import ImagePalette with Image.open('sd.gif') as im: if im.is_animated: frames = [f.copy() for f in ImageSequence.Iterator(im)] frames.reverse() frames[0].save('out.gif', save_all=True, append_images = frames[1:]) 路过大佬给看下错误,gif图能输出,就是报错 Couldn’t allocate palette entry for transparency “for transparency”) 一个python闯关: # coding:utf-8 import requests from PIL import Image import urllib2 import re import StringIO def getChanllenge(p): […]

Python闯关

# coding:utf-8 import requests import urllib2 import re def getChanllenge(p): return urllib2.urlopen('http://www.pythonchallenge.com/pc/' + p).read() import zipfile ##z = zipfile.ZipFile(getChanllenge('def/channel.zip')) import StringIO z = zipfile.ZipFile(StringIO.StringIO(getChanllenge('def/channel.zip'))) #print z.namelist() print z.read('readme.txt') def next(p): text = z.read('%s.txt'%p) m = re.match('Next nothing is ([0-9]+)', text) if not m: print text return m.group(1) zpp = [] p = 90052 for i […]

Python闯关pickle

# coding:utf-8 import requests import re def getChanllenge(p): return requests.get("http://www.pythonchallenge.com/pc/"+p).text banner = getChanllenge("def/banner.p") import pickle data = pickle.loads(banner) #print data >>> data [[(' ', 95)], [(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)], [(' ', 15), ('#', 4), (' ', 71), ('#', 4), (' ', 1)], ...] print '\n'.join([''.join([p[0]*p[1] for […]

编码规范

基本原则 结构、样式、行为分离 统一缩进(建议 两个空格) 文件编码统一 不带BOM的UTF-8 一律使用小写字母 省略外链资源 URL 协议部分(FTP等其他URL不省略) 统一注释 HTML 标签 自闭合无需闭合img input br hr 等 可选闭合需闭合 尽量减少标签 class & id 以功能或内容命名, 不以表现形式命名 以-分隔 属性顺序 id > class > name > data-xxx > src,for,type,href > title,alt > aria-xxx,role 属性统一使用双引号 语义嵌套及严格嵌套约束 参考:WEB标准系列-HTML元素嵌套 <li>用于<ul>或<ol>下 <dd> <dt> 用于 <dl>下 <thead> <tbody> <tfoot> <tr> <td> 用于 <table> […]

关于p标签不对齐问题

如图出现的不对齐现象: <html> <head> <title>sda</title> </head> <body align=center> <p>故人西辞黄鹤楼 <p>烟花三月下扬州 <p>黄鹤一去不复返 <p>白云千载空悠悠 <br> <img align=center src= "1.png"> </body> </html> 如图已修正 解决方法很多 但都差不多奉行的原则是语法标准问题 1. 将p标签补齐,p标签可以单独存在,但是规范写的话尽量还是补齐 2. p标签的text-align属性设置为center也可以解决 3. 由1发现的其实<br>标签并没有实现换行,而是像给了p的后标签做了一个补全一样,当将最后一个p标签换为</p>时,明显发现图片与文字之间多了一个空行,这个空行可以理解为p标签的功能补全或者说是br标签的功能执行? <html> <head> <title>sda</title> </head> <body align=center> <p>故人西辞黄鹤楼 <p>烟花三月下扬州 <p>黄鹤一去不复返 <p>白云千载空悠悠</p> <br> <img align=center src= "1.png"> </body> </html> 此外一个大佬说过: <br> 写在行头的话,如果前面一行正好显示到末尾,有可能会在两行间多空出来一行。把 <br> 标签写在行尾比较好。

HTML标签

<base> 标签为页面上的所有链接规定默认地址或默认目标。 通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。 使用 <base> 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括 <a>、<img>、<link>、<form> 标签中的 URL。 <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <base href="<%=basePath%>"> 关于request函数的介绍: equest.getSchema()可以返回当前页面使用的协议,http 或是 https; request.getServerName()可以返回当前页面所在的服务器的名字; request.getServerPort()可以返回当前页面所在的服务器使用的端口,就是80; request.getContextPath()可以返回当前页面所在的应用的名字;

Python闯关2

4.linklist 不断地抓网页,提取数字,然后更新网址即可 # coding:utf-8 import urllib2 import re def next_page(p): text = urllib2.urlopen('http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=%s' % p).read() m = re.match(r".*?([0-9]+)", text) print m.group(0) if not m: print text return m.group(1) p = 80992 next_page(p) for i in range(400): p = next_page(p)

http又来了

用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行 通信。发送端从应用层往下走,接收端则往应用层往上走。 我们用 HTTP 举例来说明,首先作为发送端的客户端在应用层 (HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。 接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的 数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。 在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给 链路层。这样一来,发往网络的通信请求就准备齐全了。 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。 当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。 图灵社区会员 Dylan.Y(yuanlongyoung@gmail.com) 专享 尊重版权 为了准确无误地将数据送达目标处,TCP 协议采用了三次握手 (three-way handshaking)策略。 接收端收到后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。 最后,发送 端再回传一个带 ACK标志的数据包,代表“握手”结束。 若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序 发送相同的数据包。 关于DNS(domain name system)