Browsed by
月份:2014年8月

WordPress 源码学习 #01

WordPress 源码学习 #01

接着 #00 来继续写 ,我们上一期看到wp-blog-header那个文件 ,里面包含了wp-load 和 template-loader.php 我们按照顺序先来看

首先我们先自己测试一下 include 和 require的区别  根据这段实例代码

其中 ,INC是在include2.php内定义的常量,  有人说  inlcude和require的一个区别是 include会把文件包含在整个代码的最前面 ,而require不会 ,按照他的说法 ,这个代码运行的时候运行到底一个echo INC 就应该输出了  INC的值 可实际上  运行结果是未定义的常量  ,所以 ,这个说法是错误的  include 和require 都是在运行到这里的时候,才会把文件包括进去,而不是在一开始就包括进去 。 下面测试一下  ,如果require的文件不存在会怎样

把sample.php的第一个require的文件名改为 mengmengda.php(这个文件真的不存在哦~)  我们得到了这样的错误报告

Fatal error: require() [function.require]: Failed opening required ‘./mengmengda.php’ (include_path=’.;C:php5pear’) in F:WAMPwwwwplearnindex.php on line 4

果然是个FatalError  我们再试试把include的改为  mengmengda.php

index.php文件正常显示,除了报了两个警告以外,没有其它的问题  ,看来这就是include和require的区别了 ~

下面我们继续研究wp-blog-header.php里面require的那几个 ,首先深入研究wp-load.php

这段注释里面已经说明了,这个代码做了什么  来看一下注释:

也就是说 ,wp-load是一个引导程序(bootstrap),这个引导程序定义了ABSPATH绝对路径 这个常量 然后 会加载wp-config并且由wp-config来加载wp-settings这个文件,如果不存在wp-config那么就会要求用户创建wp-config.php  这个bootstrap也会在WP的父母目录下搜索wp-config这个文件,保证WP的目录不被触碰(逗号后面这句话没明白)  在内部这段代码必须以php4编译

下面是 wp-load的代码

error_reporting这个函数   就是设置报错级别的一个函数  ,  用法就是 error_reporting(CONSTANT1 | CONST 2| …)  设置了之后 系统会把你指定的类型的错误报告,其他的不报告 ,举个例子 ,如果是  error_report(0)那么 就不会报告几乎任何错误 ,上面那个sample.php的代码 会输出一行 INCLUDE1 然后由于编译错误 ,不能继续运行了, 但是由于你的报错级别设定,不会显示错误信息 。   而如果你把常量定为-1 即error_report(-1)那么PHP会报告所有已知的错误和警告

下面这段代码就是检查 wp-config.php是否存在了~

首先 ,如果这个文件(wp-config)存在于当前的目录下,那么就加载它   如果这个文件存在于WP的父母目录, 并且在当前目录的父母目录不存在wp-settings 这一文件,加载wp-config(没看明白)  如果都不是  就说明wp config还没被配置,这时候就会要求配置wp-config也就是下面的代码   我们来看一下else时候执行的代码    首先 ,获得$_SERVER数组里的$index为 PHP_SELF的变量值,这个值经测试为 /index.php,暂时猜测这个变量的值是目前你所在的网页的路径名 and 文件名  这里还需要再查阅资料 ,下面 我们先跳过wp_load_translations_early 以及下面的1个函数,因为这些函数都在**functions.php文件下 ,我们先来看 ,如果存在wp-config这个文件,会如何执行下面的代码 :

下面是 wp-config的代码 :

这个代码没什么太多需要说明的  ,它实际上就是做了很多定义的工作  ,定义了很多常量,然后在最后包含了  wp-settings.php这个文件  这个文件才是重头戏~

wp-settings.php这个文件需要很长时间来研究 ,这次就先到这里~下次开始研究wp-settings.php

 

 

WordPress 源码学习 #00

WordPress 源码学习 #00

开始学习研究开源代码 ,不过自己的PHP技术还很差 ,但是只要是有强大的搜索能力~ 以及一定的理解力 就可以呢{*≧∀≦}参考一下这个文章           

PHP函数库在这里

那就从根目录的index.php开始解析代码~~

index.php

只有两句代码: 我们分别来看一下~~

define是PHP的定义常量的语法

define函数的用法 : define(NAME,VAL,CASE_SENSITIVE);  没有什么需要过多说明的地方 ,define函数就是定义一个常量  然后参数列表也很明确 ,注意的是 常量不需要加美元符号 ($)

require函数 : require(‘FILENAME’) 语句包含并运行指定文件。   如果文件不存在 ,报Fatal Error  也就是说 ,如果文件不存在 这个函数的报错会导致这个网页无法加载 ,这个特性在很多时候还会用到  与它功能差不多的还有一个 include函数 不同的是如果文件不存在,只会报一个WARNING。这两个看情况使用

当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。

上面的代码既然调用了wp-blog-header.php那么我们下来就看这个代码~

wp-blog-header.php

这个代码也不是很难理解  一行一行一个函数一个函数分析~

isset函数 isset函数可以检测这个变量是否被定义了  用法 isset(var1,var2,var3…);其中第一个必须填

require_once函数       require_once(‘FILENAME’);

require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。

dirname()函数  函数用法   dirname(string $path)给出一个文件的路径 ,返回这个文件所在的目录的绝对路径   而__FILE__这个常量 ,是 预定义常量 也叫 魔术常量 详细介绍在这里  这里就理解为wp-blog-header这个文件的绝对路径就好~

dirname(__FILE__) 取到的是当前文件的绝对路径,也就是说,比起相对路径,查找速度是最快的。

 

上面的代码通过require_once函数把wp-load.php的代码包含进来了~ 我们一会儿再去看那个代码 下面先继续看 :

下一个部分是wp()函数 ,这是自定义的函数,而且这个函数多的定义不存在与当前的这个文件里(wp-blog-header.php),是定义在其它文件里的 ,下次继续~这次先到这里

DP题目列表

DP题目列表

转载非原创

※最近更新:Poj斜率优化题目

1180,2018,3709

 

列表一:经典题目题号:
容易:
1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178,

1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458,

1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926,

1936, 1952, 1953, 1958, 1959, 1962, 1975, 1989, 2018,

2029, 2039, 2063, 2081, 2082, 2181, 2184, 2192, 2231,

2279, 2329, 2336, 2346, 2353, 2355, 2356, 2385, 2392, 2424,
不易:
1019, 1037, 1080, 1112, 1141, 1170, 1192, 1239,

1655, 1695, 1707, 1733(区间减法加并查集),

1737, 1837, 1850, 1920(加强版汉罗塔), 1934(全部最长公共子序列), 1964(最大矩形面积,O(n*m)算法), 2138, 2151, 2161, 2178,
推荐:
1015, 1635, 1636(挺好的), 1671, 1682, 1692(优化), 1704, 1717, 1722, 1726, 1732, 1770,

1821, 1853, 1949, 2019, 2127, 2176, 2228, 2287, 2342, 2374, 2378, 2384, 2411
列表二:完整DP题目列表

1015 Jury Compromise
1029 False coin
1036 Gangsters
1037 A decorative fence
1038 Bugs Integrated, Inc.
1042 Gone Fishing
1050 To the Max
1062 昂贵的聘礼
1074 Parallel Expectations
1080 Human Gene Functions
1088 滑雪
1093 Formatting Text
1112 Team Them Up!
1141 Brackets Sequence
1143 Number Game
1157 LITTLE SHOP OF FLOWERS
1159 Palindrome
1160 Post Office
1163 The Triangle
1170 Shopping Offers
1178 Camelot
1179 Polygon
1180 Batch Scheduling
1185 炮兵阵地
1187 陨石的秘密
1189 钉子和小球
1191 棋盘分割
1192 最优连通子集
1208 The Blocks Problem
1239 Increasing Sequences
1240 Pre-Post-erous!
1276 Cash Machine
1293 Duty Free Shop
1322 Chocolate
1323 Game Prediction
1338 Ugly Numbers
1390 Blocks
1414 Life Line
1432 Decoding Morse Sequences
1456 Supermarket
1458 Common Subsequence
1475 Pushing Boxes
1485 Fast Food
1505 Copying Books
1513 Scheduling Lectures
1579 Function Run Fun
1609 Tiling Up Blocks
1631 Bridging signals 2分+DP NLOGN
1633 Gladiators
1635 Subway tree systems
1636 Prison rearrangement
1644 To Bet or Not To Bet
1649 Market Place
1651 Multiplication Puzzle
1655 Balancing Act
1661 Help Jimmy
1664 放苹果
1671 Rhyme Schemes
1682 Clans on the Three Gorges
1690 (Your)((Term)((Project)))
1691 Painting A Board
1692 Crossed Matchings
1695 Magazine Delivery
1699 Best Sequence
1704 Georgia and Bob
1707 Sum of powers
1712 Flying Stars
1714 The Cave
1717 Dominoes
1718 River Crossing
1722 SUBTRACT
1726 Tango Tango Insurrection
1732 Phone numbers
1733 Parity game
1737 Connected Graph
1740 A New Stone Game
1742 Coins P
1745 Divisibility
1770 Special Experiment
1771 Elevator Stopping Plan
1776 Task Sequences
1821 Fence
1837 Balance
1848 Tree
1850 Code
1853 Cat
1874 Trade on Verweggistan
1887 Testing the CATCHER
1889 Package Pricing
1920 Towers of Hanoi
1926 Pollution
1934 Trip
1936 All in All
1937 Balanced Food
1946 Cow Cycling
1947 Rebuilding Roads
1949 Chores
1952 BUY LOW, BUY LOWER
1953 World Cup Noise
1958 Strange Towers of Hanoi
1959 Darts
1962 Corporative Network
1964 City Game
1975 Median Weight Bead
1989 The Cow Lineup
2018 Best Cow Fences
2019 Cornfields
2029 Get Many Persimmon Trees
2033 Alphacode
2039 To and Fro
2047 Concert Hall Scheduling
2063 Investment
2081 Recaman’s Sequence
2082 Terrible Sets
2084 Game of Connections
2127 Greatest Common Increasing Subsequence
2138 Travel Games
2151 Check the difficulty of problems
2152 Fire
2161 Chandelier
2176 Folding
2178 Heroes Of Might And Magic
2181 Jumping Cows
2184 Cow Exhibition
2192 Zipper
2193 Lenny’s Lucky Lotto Lists
2228 Naptime
2231 Moo Volume
2279 Mr. Young’s Picture Permutations
2287 Tian Ji — The Horse Racing
2288 Islands and Bridges
2292 Optimal Keypad
2329 Nearest number – 2
2336 Ferry Loading II
2342 Anniversary party
2346 Lucky tickets
2353 Ministry
2355 Railway tickets
2356 Find a multiple
2374 Fence Obstacle Course
2378 Tree Cutting
2384 Harder Sokoban Problem
2385 Apple Catching
2386 Lake Counting
2392 Space Elevator
2397 Spiderman
2411 Mondriaan’s Dream
2414 Phylogenetic Trees Inherited
2424 Flo’s Restaurant
2430 Lazy Cows
2915 Zuma
3017 Cut the Sequence
3028 Shoot-out
3124 The Bookcase
3133 Manhattan Wiring
3345 Bribing FIPA
3375 Network Connection
3420 Quad Tiling ?

 

Virtual Contests #1

BNU Contest 8-28 A

BNU Contest 8-28 A

A. Magic Number

Time Limit: 2000ms
Memory Limit: 32768KB

64-bit integer IO format: %lld     Java class name: Main

A positive number y is called magic number if for every positive integer x it satisfies that put y to the right of x, which will form a new integer z, z mod y = 0.

Input

The input has multiple cases, each case contains two positve integers m, n(1 <= m <= n <= 2^31-1), proceed to the end of file.

Output

For each case, output the total number of magic numbers between m and n(m, n inclusively).

Sample Input

Sample Output

这个题就是找找规律,把满足条件的y都给写出来  就成了这个序列 1 2 5 10 20 25 50 100 125 200 250 500 1000 1250 。。。 可以看到 从第5个数开始 ,每5个数一组,相邻两组相同组内位置的数差10倍  而 2^32最大不超过 10^9所以最多只有 45个数 ,打表就能过

代码:

 

集训结束

这个假期的ACM集训就这么结束了 ,说实话形式很坑,不过和队友一起做题还是很棒的,最后一次比赛的题目几乎全是DP对DP无力的我们顿时感觉到什么叫DP大法好 = =这次开始一定要好好做DP了。

[MC][MCRedStone]红石教程01 初级红石电路

[MC][MCRedStone]红石教程01 初级红石电路

直接有中文版的教程

下面是我的学习笔记

以下是红石电路图例:  名称为 “MC红石模拟”(MCRS) 可以表示两层电路 多层电路就会用若干张”MC红石模拟” (MCRS)图来表示  或者动画

Redstone Simulator Guide.png

 

与或非门

或门

问题   这个图例的D图看不懂 ,我按照如下所示摆放 可是效果不对

现在处于卡壳中 。。。

请教了好几个大牛 ,终于知道这D是侧视图,而不是俯视图  以后看到电路如果是把电线画在了下面 ,那么

下面是做好的电路图 ,我采用了先填充了所有的方块然后按照图纸一个个挖掉的形式制作的

与门 , 这个图例也有点坑  A图的摆放 那两个点点是红石火把 不是红石线 。。虽然能理解 ,不过感觉看着别扭

A图

用Sina App Engine SAE开发微信平台 0

用Sina App Engine SAE开发微信平台 0

最近在用SAE开发自己学校社团的微信平台 ,PHP代码写的,由于刚刚接触微信平台 ,如何回复用户的消息就弄了半天,模拟登录什么的现在还没搞出来,只做了最简单的关键字回复和SQL调用

被动回复文本功能

首先总结一下微信的回复功能  微信的官方文档上的介绍

对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本、图片、图文、语音、视频、音乐)。请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器,只支持认证服务号。

如下是一个特定的XML结构

微信平台的回复消息不能简单的通过echo来回复 ,要通过如上所示的特定XML包来进行回复。

如下是一段回复文本的示例代码

这个函数就是微信回复的主体了 首先获取了 $postStr这个字符串  然后调用simplexml_load_string 把XML结构包加载到一个对象里$postObj  这里我们要回复一个消息XML包,内容包括    目的用户名   来源用户名 时间戳 消息类型 内容  FunctionFlag()  暂时不知道这个是干什么的,刚刚尝试了一下去掉也可以发送。

用户名是给每个关注同一平台的用户分配的不同名称,不同于用户的微信号,用户名是用复杂的字母数字组合在一起的(HEX值)  所以这里用户名要靠postObj保存下来,需要注意的是,在回复消息的时候  要用发送来的数据包的 来源用户名 作为ToUserName  把目的用户名  即自己的微信平台用户名作为FromUserName  很好理解 不做解释

这里用了%s来补要输入的文本的位置,只要后面调用sprintf  就会把%s换成相应的文本

$contentStr是内容字串,通过另一个函数生成 然后就填入了要发送的XML包 $resultStr

最后要 echo $resultStr 不然微信端是收不到消息的

在SAE用PHP对MySQL进行操作

SAE提供了默认的几个常量 在连接到数据库的时候需要使用

SQL服务器链接的函数是 : mysql_connect(HOST:PORT,USERNAME,PASS); 链接成功会返回一个字符串  否则返回false

检测SQL函数的故障 最好使用 mysql_error()函数,这个函数能清楚的显示出问题所在 ,因此调试SQL的时候可以开一个临时页面来调试 在浏览器上echo错误信息

SQL数据库的链接函数是 mysql_select_db(DATABASE,[可选参数$connstr]);

$connstr是mysql_connect 的返回字串,如果缺省默认为上一次链接返回的字串

注意  mysql_select_db第一个参数是链接的数据库的名称而不是数据表的名称 在SAE中都用SAE提供的常量代替自己输入

SQL调用查询语句的函数是  mysqk_query($QUERYSTR);  $QUERYSTR可以是任意一个语法正确的SQL语句,返回值为一个字串   这里假设为$queryResStr

SQL数据读入数组的函数是 mysql_fetch_data($queryResStr); 这里注意,, 参数是$queryResStr而不是$connstr。  如果遇到了问题就用mysql_error()进行调试就好~ 都可以解决的

下面是一段添加一条记录到数据库的代码

 

 

配置vim使其拥有自动添加程序文件头功能

配置vim使其拥有自动添加程序文件头功能

在Coding的时候 (for example C++) 大家肯定希望能够编辑器直接自动完成所有程序都需要的部分代码 比如 这一部分

甚至还想要把程序的创建时间和创建人以及文件名的注释头也自动完成 ,vim的话可以轻松的实现这个功能

 

vim这个文本编辑器支持很多强大的功能及插件 ,我们可以通过修改.vimrc文件来实现很多我们想要的功能

vimrc可以配置在多个地方,可以配置在你自己home的目录下 ,也可以配置在 /etc/目录下 前者的配置是局部配置 ,仅对你一人有效, 后者的配置是全局配置 ,对使用这个电脑的所有人有效,不过要注意的是,如果你在自己的home下配置了.vimrc那么你的vim的配置就是你home目录下的.vimrc而不是全局的,只有当home下没有的时候 才会去找全局的 即/etc/下的.vimrc这个功能也很合理 ,自己可以对自己使用的vim进行个性化配置

下面说明如何配置自动添加如上所示的头:

先上配置文件

这段配置文件其实很好理解 只要熟悉一点vim的人都能明白

这一句的作用是 如果用户新建了后缀名为 cpp c h java sh 的文档 ,那么就调用SetTitle函数

然后接下来是SetTitle函数主体:

一个判断结构判断是什么类型的文件 如果是sh的话 执行这一段

不是sh的话 执行下面一段

由于本人现在还不用java 写java页不准备用 vim,就摸人else就代表文件类型为C或Cpp了 因此我添加了这样的注释

这段注释中 call append是调用append函数  首先是添加的行号,line(“.”)+0  1 2 3 … 然后是添加的字符串 这里有两个地方用了自动的完成  ,一个是 filename  我使用

就可以获取文件名
建立时间也是同理

然后 下面那一段就是自动添加的一些宏和代码了 和上面是同样的道理  如下:

只要注意一下append函数调用的时候行号要修改就好了 其它的自己想自动添加什么就写什么

然后最后 把光标移到当前文件的末尾

这样就可以了 实际上就和我们在vim的normal模式下 点击G是一个效果,直观上代码也是这样的

 

把这个文件写好后 ,保存为.vimrc保存在 ~/目录下 (即你自己的家目录) 下次再启动vim时 如果输入这样的指令:

vim aaa.cpp

就会生成一个类似上面的头出来了~

就这么简单~