分类目录归档:程序生活

Program Life – Web

Bluehost 主域绑定到任意目录

 

发现自己的blog在public_html文件下的文件越来越多,而Bluehost所有后添加的域名绑定的目录都在这个文件下,所以这个目录变得越来越乱,这个问题终于在我晕头转向找不到需要的文件的时候得到了我的高度关注^_^,在晚上找到了解决办法,在这里分享给同样使用Bluehost的朋友。

修改 .htaccess 代码如下:

 

.com 
# .htaccess main domain to subfolder redirect 
# Copy and paste the following code into the .htaccess file 
# in the public_html folder of your hosting account 
# make the changes to the file according to the instructions.

# Do not change this line.

RewriteEngine on

# 修改yourdomain.com为你的主域.

RewriteCond %{HTTP_HOST} ^(www.)?yourmaindomain.com$

# 修改 ’subfolder’为你希望主域绑定到的目录的名字.

RewriteCond %{REQUEST_URI} !^/subfolder/

# Don’t change this line.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d

# 修改 ’subfolder’为你希望主域绑定到的目录的名字.

RewriteRule ^(.*)$ /subfolder/$1

# 修改yourdomain.com为你的主域. 
# 修改 ’subfolder’为你希望主域绑定到的目录的名字. 
# followed by / then the main file for your site, index.php, index.html, etc.

RewriteCond %{HTTP_HOST} ^(www.)?yourmaindomain.com$ 
RewriteRule ^(/)?$ subfolder/index.php [L]

C语言版“最炫民族风”

转载自:http://blog.renren.com/share/278396965/13080008716?from=0101010202&ref=hotnewsfeed&sfet=102&fin=2&ff_id=278396965

昨天看到有人用MATLAB合成出了《最炫民族风》,马上想到跟风,看能不能再恶搞一把,来个其他版本的。自然想到大一的时候用Turbo C编的一个播放器(其实是山寨飞哥在Turbo Pascal下的作品)。用的是超级老古董Turbo C 2.0,1988年的产品了,比我还老。不过之所以选古董是有原因的,里面有一个dos.h头文件,可以调用电脑主板上的蜂鸣器发声(台式机的“哔”声就是这个发出来的,现在的笔记本电脑就直接用音响发了),于是乎就用这东西拿下神曲了。程序和乐曲是分开的,乐曲以文件的形式读入,很要命地把《最炫民族风》全曲都输了进去。至于调号和变调我就懒得管了,统统C大调。效果放在最后面,大家听的时候注意保护耳朵。

 

 

 

继续阅读

各种倒计时JQUERY的解决DEMO,增正计时

[code lang=”js”]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>倒计时</title>
<script type="text/javascript" src="http://auto.sina.com.cn/683/2009/0901/jquery.js"></script>
</head>
<body>
<div class="daty"></div>
<div class="watch"></div>
<div class="djs"></div>
<script>
$(function(){
var timedate= new Date("2011/2/2");
var now = new Date();
var dates = timedate.getTime()-now.getTime();
var times =Math.abs(Math.floor(dates/(1000*60*60*24)));
jQuery(".daty").text("距离XX开幕还有"+times+"天");
})
$(function(){
function _fresh(){
var d2 = new Date();
d2.setHours(18,0,0,0)
var d0 = new Date();
var ts = (d2-d0)
__h=parseInt((ts/3600000)%24);
__m=parseInt((ts/60000)%60);
__s=parseInt((ts/1000)%60);
$(".watch").html("距离下班时间还有"+__h+"小时"+__m+"分"+__s+"秒")
var endtime=new Date("2012/01/19,12:20:12");
var xztime = new Date();
var ctime = parseInt((endtime.getTime()-xztime.getTime())/1000);
__d=parseInt(ctime/3600/24);
__h=parseInt((ctime/3600)%24);
__m=parseInt((ctime/60)%60);
__s=parseInt(ctime%60);
$(".djs").html("距离2012/2/2中午12:20:12还有"+__d+"天"+__h+"小时"+__m+"分"+__s+"秒")
}
_fresh()
var sh;
sh=setInterval(_fresh,1000);
})
</script>
</body>
</html>
[/code]

Java RMI之HelloWorld篇

 

Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
 
Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术。
大名鼎鼎的EJB都是建立在rmi基础之上的,现在还有一些开源的远程调用组件,其底层技术也是rmi。
 
在大力鼓吹Web Service、SOA的时代,是不是每个应用都应该选用笨拙的Web Service组件来实现,通过对比测试后,RMI是最简单的,在一些小的应用中是最合适的。
 
下面通过一个简单的例子来说明RMI的原理和应用,下面这个例子是一个简单HelloWorld,但已涵盖RMI的核心应用与开发模式。
 
/** 

* Created by IntelliJ IDEA. 

* User: leizhimin 

* Date: 2008-8-7 21:50:02 

* 定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常 

*/
 

public interface IHello extends Remote { 



    /** 

     * 简单的返回“Hello World!"字样 

     * @return 返回“Hello World!"字样 

     * @throws java.rmi.RemoteException 

     */
 

    public String helloWorld() throws RemoteException; 



    /** 

     * 一个简单的业务方法,根据传入的人名返回相应的问候语 

     * @param someBodyName  人名 

     * @return 返回相应的问候语 

     * @throws java.rmi.RemoteException 

     */
 

    public String sayHelloToSomeBody(String someBodyName) throws RemoteException; 

}
 

使用httpClient模拟登陆校内网并留言

转自:http://shengmo8611.iteye.com/blog/853034

使用httpClient模拟登陆校内网并留言
首先我使用的是一个叫做iehttpHeader的IE浏览器的插件将前传后打开IE浏览器后点击查看–iehttpHeader浏览器下方就 会出现交互信息了其安装件我已经放在附件里了如果你有火狐的话最好配合火狐debug一起使用因为有些时候iehttpheader得到的头部信息并不十 分的完整..我将我的
一部分头部信息以及代码凉一下,大家见笑了
登陆的头部信息:

 

[color=brown]POST /PLogin.do HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword,application/vnd.ms-excel, application/vnd.ms-powerpoint, application/QVOD, application/QVOD, */*
Referer: http://www.renren.com/PLogin.do
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
Host: www.renren.com
Content-Length: 171
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ick=c7782bec-a19a-4177-a4d8-ea2517415e6c; _r01_=1; _de=25733BD8775D04BB608BA0DF927B991F5212E40F3D18115C

email=cuiqiang8611@163.com&password=0532cuiqiang0532&origURL=http%3A%2F%2Fwww.renren.com%2Fhome&domain=renren.com&formName=&method=&isplogin=true&submit=%E7%99%BB%E5%BD%95[/color]

 

使用 jsoup 对 HTML 文档进行解析和操作

 

jsoup 简介

Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTML 中攫取你所需的信息和 扩展 HTMLParser 对自定义标签的处理能力。但现在我已经不再使用 htmlparser 了,原因是 htmlparser 很少更新,但最重要的是有了 jsoup 。

jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

jsoup 的主要功能如下:

1. 从一个 URL,文件或字符串中解析 HTML;

2. 使用 DOM 或 CSS 选择器来查找、取出数据;

3. 可操作 HTML 元素、属性、文本;

jsoup 是基于 MIT 协议发布的,可放心使用于商业项目。

jsoup 的主要类层次结构如图 1 所示:



图 1. jsoup 的类层次结构

图 1. jsoup 的类层次结构 

接下来我们专门针对几种常见的应用场景举例说明 jsoup 是如何优雅的进行 HTML 文档处理的。

 

继续阅读

Python 爬虫抓站 记录(虾米,百度,豆瓣,新浪微博)

python 下用到的库,urllib, urllib2, BeautifulSoup, cookielib, mechanize, re

看Firebug模拟浏览器行为。

1. 虾米

虾米不用登陆,没有IP限制,最简单。Python抓了下Xiami电台的试听数 里用的是

import urllib2

content = urllib2.urlopen('http://www.xiami.com/artist/top/id/1234').read()

每个歌手爬个两三页。把试听数10000以上的歌记下来。歌手id大概有11w。

处理网页用split, 正则表达式re.compile, BeautifulSoup都成。

( Beautiful Soup的中文文档 http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html )

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(content)

就能对soup操作了,支持正则表达式,譬如

soup.find('p', align=re.compile('^b.*'))['id']#可以从 <p id="secondpara" align="blah"> 中抓出 secondpara, 可以通过这个抓到a href=""中间的url



soup.find("b", { "class" : "lime" })#可以抓到 <b class="lime">Lime</b>



soup.find("b", { "class" : "lime" }).string #可以提取到<>与</>中间的内容 Lime。

2. 百度

如果想在空间里取米粒之类的操作就要登陆,mechanize比较好用。

 

import mechanize
import cookielib

# Browser
br = mechanize.Browser()

# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)

# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)

br.addheaders = [('User-agent''Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
r = br.open('https://passport.baidu.com/?login&tpl=mn')

br.select_form(nr=0)
br.form['username']='abcabcabc' #用户名
br.form.find_control("password").readonly = False
br.form['password']='123123123' #密码
br.submit()

 

然后可以试试开个百度窗口看看自己的用户名在不在网页里

 

content = br.open('http://www.baidu.com').read()

print 'cwyalpha' in content

 

3. 新浪微博

新浪微博的登陆很麻烦。网上有很多模拟SinaSSO登陆的做法,比如

http://chen.yi.bo.blog.163.com/blog/static/15062110920120151191189/

http://denger.iteye.com/blog/1039052

http://community.itbbs.cn/thread/19120/

http://blog.csdn.net/xiaojianpitt/article/details/6440561

继续阅读

孩子们为什么要学Python编程

 

这个问题,即使你说出许多理由也无济于事,需要依靠实际统计数字来说话。

4月6日,Black Duck Software, Inc. 发布一项内容十分周详的调查报告,题为”Open Source By The Numbers“(报告人是Rich Sands ),读后有感。

该调查发现,当今最活跃的编程语言是C/C++,跟随其后的是Java,Python,JavaScript等编程语言,如下图所示:

 

从上图可见,圆饼图左下方的淡蓝色扇形区域代表的就是Python编程语言。那么,我们为什么要孩子们学习Python,而不是学习C/C++和Java编程语言呢?该调查报告的最后结论是:”New live projects trending towards Python, PHP, JavaScript and away from C-family languages“,意思是说,新的活跃研究项目都倾向(trending towards)使用Python,PHP与JavaScript编程,而远离(away from)C编程语言大家族。

从某种意义上来说,Python模块化编程是近十年来软件开发的重大成就。英国”馅饼“小电脑首选Python编程是有根据的,我们应该给予足够的重视。实际上,Python的编辑环境”极妙“,很好使用并且容易”上瘾“(把人粘住)。孩子们喜欢在玩中学习,不能硬逼。……我很苦恼,至今找不到一位Python朋友。

中国的家长,往往一听说Python(大蟒蛇)编程,就叫孩子赶忙远离这玩意儿。这是天大的误会。请大家帮忙解释一下。

16 个对开发者非常有用的 JavaScript 库

 

编辑器:

1. CodeMirror

CodeMirror 是一款“Online Source Editor”,基于Javascript,短小精悍,实时在线代码高亮显示,他不是某个富文本编辑器的附属产品,他是许多大名鼎鼎的在线代码编辑器的基础库。

视频:

2. html5media

html5media是一个JavaScript音频/视频播放器能够让每一个浏览器都能够播放在HTML5多媒体标签中定义的多媒体文件。 对于不兼容的浏览器,该播放将采用支持Flash的FlowPlayer播放器来代替。

地图:

3. Gmap

GMAP3 插件用来将Google Maps插入到网页中,Google在其产品中已经提供了很简便的方法。但是GMAP3这个jQuery插件提供了更加简便的方法,特别是在使用一些高级功能时(如:overlays和callbacks)。

gmap3.jpg

图表:

4. JS Charts

继续阅读

【原创】使用Firefox+Tamper Data 来订火车票(比Firefox+firebug要更方便和灵活)

最近大家应该都看到了一篇使用Firefox+Firebug 来订火车票的帖子,我自己尝试过,可以成功,但是对大多数人来说,操作起来还不是很方便,因为需要在源码里去找对应的那个start_date的隐藏域, 我今晚尝试了使用Firefox+Tamper Data 来订火车票,发现这种方式更加方便,而且最重要的是直观,操作起来很易用。

先简要介绍一下Tamper Data,Tamper Data是Firefox的一个插件(其他浏览器好像也有对应的版本),这个插件可以拦截浏览器的Get和Post请求,相当于在浏览器和服务器之间搭了一个关卡,任何提交到服务器的Get请求或者Post请求都会先经过Tamper Data,这样的话,你就可以在提交到服务器之前任意修改你提交的数据了,而不用手工修改网页源代码,因为这个Tamper Data是以图形界面的方式来操作的,下面是我操作的流程

首先打开订票地址:https://dynamic.12306.cn/otsweb/ ,然后登陆,这步其实是很难的,没有登陆,再好的工具也白搭,建议在早晨8点前提前登录好,多试几次,一定可以的,这时就可以选火车票了,今天是5号,按道理最晚可以买16号的火车票,我就选择16号的车票,选择北京-长沙的,然后选择你想买车次,点击预订

这时可以看到预订该车次车票的页面

这时,第一个关键点来了,打开Tamper Data插件,点击工具->Tamper Data

浏览器会弹出Tamper Data插件的界面

点击Start Tamper

然后继续在该页面填写身份信息,点击提交订单

这时Tamper Data插件会弹出拦截信息提示,点击Tamper

最威武的来了,这时可以查看和修改所有参数了

 

为了演示,我把日期修改了15号,你买票的时候,应该在早晨8点提交的时候修改为16号(即后一天)

OK了,搞定,日期修改成功。当然了,硬座、硬卧那些信息也都是可以修改的。什么?你问价格能不能修改?反正在参数里都能看到,你可以试试,我估计是不行~~

 

 

最后,再简单介绍一下Tamper Data这个插件,这个插件是灰常强大的,用好了可以做很多事儿,我曾经用来修改一些SNS社区的游戏排行榜,在最后游戏结束时,浏览器(页面或者Flash)会向服务器提交你的分数,这时可以利用Tamper Data来修改提交到服务器的分数。

还能怎么用Tamper Data这个插件?你懂得~可以多研究一下

对了,忘了说Tamper Data的下载地址了,请用Firefox浏览器访问该地址进行安装:https://addons.mozilla.org/zh-CN/firefox/addon/tamper-data/