复制大量文件的shell
对google的sitemap服务端软件做性能测试时需要生成大量的文件
- #!/bin/bash
- #
- i=1
- while [ "$i" -le 300000 ]
- do
- cp sample.html $i.html
- echo copy succeed: $i.html
- i=$((i + 1))
- done
执行以后大概会占用25G左右的磁盘空间。
技术部活动和公司年会
1.2008年1月23日技术部组织去军都山滑雪。由于是第一次滑雪,屁股摔得极爽。滑雪确实很好玩,不过消费还是太高了,幸亏这次是公司掏钱,要是自己掏钱我就不去了。
2.2008年1月26日和27日公司在河北香河的中信国安第一城举办2007年度年会。年会上颁发的大奖都好诱惑人啊,明年争取能拿一个。今年没去年的温泉可以泡,开完年会都没啥可玩的,于是就在宾馆和同事一起打CS。
用Javascript操作硬盘文件
有一个日志文件格式是这样的4129,23|4074,25|4011,16|……每组以|分隔,前者是更新的模板ID,后者是该模板被关联的频道,需要统计模板的关联频道数并排序。
输入:
4129,23|4074,25|4011,16|……
输出:
模板ID 关联频道数
3261 871
523 824
2039 811
……
html代码
- <form>
- <input type="file" size="30" id="filePath" />
- <input type="button" value="分析" id="analyze" />
- </form>
javascript处理代码
- function $(el){ return document.getElementById(el);}
- var analyze = function(){
- this.analyze = 'analyze';
- this.filePath = 'filePath';
- this.readFlag = 1;
- this.writeFlag = 2;
- //匹配数据组的正则表达式
- this.regPattern = /^(\d+),(\d+)$/;
- this.cache = {result:{},array:[]};
- this.fso = new ActiveXObject("Scripting.FileSystemObject");
- };
- analyze.prototype = {
- start:function(){
- var _filePath = $(this.filePath).value;
- var pairArray = this.read(_filePath).split('|'),pair = null;
- for(var i = 0 ; i < pairArray.length ; i++){
- //如果正则表达式匹配成功
- //则pair[0]为全匹配,pair[1]为第一个子匹配,pair[2]为第二个子匹配
- pair = pairArray[i].match(this.regPattern);
- if(pair){
- if(this.cache.result[pair[1]] != undefined && this.cache.result[pair[1]] != null)
- this.cache.result[pair[1]]++;
- else
- this.cache.result[pair[1]] = 1;
- }
- }
- //从result拷贝到array,方便快速排序
- for(var i in this.cache.result){
- this.cache.array.push({templateId:i,channelCount:this.cache.result[i]});
- }
- this.cache.array = this.quickSort(this.cache.array);
- this.write(this.quickSort(this.cache.array),_filePath.replace('.txt','')+'_statistics.txt');
- alert('done!');
- },
- read:function(filePath){
- var _file = this.fso.OpenTextFile(filePath, this.readFlag);
- var _string = _file.ReadAll();
- _file.close();
- return _string;
- },
- write:function(array,filePath){
- var _file = this.fso.OpenTextFile(filePath, this.writeFlag,true);
- _file.WriteLine('模板ID 关联频道数');
- for(var i in array){
- _file.WriteLine(this.digitFix(array[i]['templateId'],4)+' '+ this.digitFix(array[i]['channelCount'],4));
- }
- _file.close();
- },
- quickSort:function(array,left,right){
- if(left == null && right == null){ left = 0; right = array.length-1;}
- var swap = function(i,j){
- if(i==j) return;
- var temp = _array[i];
- _array[i] = _array[j];
- _array[j] = temp;
- }
- var i, last,_array = array;
- if (left >= right) return _array;
- last = left;
- for (i = left + 1; i <= right;i++ ){
- if(this.compare(_array[i], _array[left]))
- swap(++last,i);
- }
- swap(left,last);
- this.quickSort(_array,left,last-1);
- this.quickSort(_array,last+1,right);
- return _array;
- },
- compare:function(x,y){
- return x['channelCount'] > y['channelCount'];
- },
- digitFix:function(number,count){
- var _string = number + '';
- var _count = count-_string.length;
- for(var i = 0; i < _count; i++)
- _string = ' ' + _string;
- return _string;
- },
- bind:function(el,type,fn,range,params){
- var _params = params == null || params.constructor != Array ? [params] : params;
- if (el.addEventListener)
- el.addEventListener(type,function(){fn.apply(range,_params)}, false);
- else
- el.attachEvent("on"+type, function(){fn.apply(range,_params)});
- },
- init:function(){
- this.bind($(this.analyze),'click',this.start,this);
- }
- };
- var aa = new analyze();
- aa.init();
简单的Javascript日历
资讯频道的美国大选专题需要一个像CNN大选专题那样的选举日历功能。看了CNN的实现方式,觉得它的代码有点复杂,于是就自己写了一个简单通用的Javascript日历。主要思路是:
1.每一个表示日期的TD标签分配一个日期字符串的id,该字符串记录了TD标签所表示的日期;
2.当点击表示日期的TD标签后,在this.cache.selectedDates中保存该日期,并执行callback函数对日期进行处理;
3.每一个日历实例由this._MODULE_ID_唯一标识。
对应的主要函数分别是render、selectDate和setMoudleId。
- //根据年份和日期呈现日历
- render:function(year,month){
- this.preRender(year,month);
- var date = new Date(year,month,1),dateString = '';
- var dayCount = this.dayArray[month];
- var preDayCount = date.getDay(),preDayCounter = preDayCount;
- var afterDayCounter = (this.dayArray[month]+preDayCount)%7 == 0 ?
- 0 :
- 7-((this.dayArray[month]+preDayCount)%7);
- var html = this.renderHeader()+'<div id="'
- +this.properties.contentClass+this._MODULE_ID_+'" class="'
- +this.properties.contentClass+'"><table>';
- html += this.renderWeekdays();
- html += '<tr>';
- //先补齐本月日期开始前的TD数
- while(preDayCounter-- > 0) html += '<td> </td>';
- for(var i = 1; i <= dayCount; i++ ){
- date = new Date(year,month,i);
- dateString = this.dateToString(date);
- //保存当前月的日期
- this.cache.currentDateStrings.push(dateString);
- if(this.isSelectedDay(date) && this.isToday(date))
- html += '<td class="'
- +this.properties.isDoubleDayClass+'" id="'
- +dateString+this._MODULE_ID_+'">'+i+'</td>';
- else if(this.isSelectedDay(date))
- html += '<td class="'
- +this.properties.isSelectedClass+'" id="'
- +dateString+this._MODULE_ID_+'">'+i+'</td>';
- else if(this.isToday(date))
- html += '<td class="'
- +this.properties.isTodayClass+'" id="'
- +dateString+this._MODULE_ID_+'">'+i+'</td>';
- else
- html += '<td class="'
- +this.properties.isDateClass+'" id="'
- +dateString+this._MODULE_ID_+'">'+i+'</td>';
- //如果满7个TD则换行
- if((i+preDayCount) % 7 == 0) html += '</tr><tr>';
- }
- //补齐本月日期结束后的TD数
- while(afterDayCounter-- > 0) html += '<td> </td>';
- html += '</tr>';
- html += '</table></div>';
- $(this.properties.holder).innerHTML = html;
- this.attachEvent();
- }
- //根据TD和它的id选取日期
- //首先设置该TD的className改变其外观,然后在this.cache.selectedDates中增加该日期.
- selectDate:function(element,elementId){
- if(this.properties.isMultipleSelect){
- if(this.cache.selectedDates[elementId] == undefined){
- element.className = this.properties.isSelectedClass;
- this.cache.selectedDates[elementId] = true;
- }
- else
- this.deleteSelect(element,elementId);
- }
- else {
- for(var i in this.cache.selectedDates)
- this.deleteSelect($(i+this._MODULE_ID_),i);
- element.className = this.properties.isSelectedClass;
- this.cache.selectedDates[elementId] = true;
- }
- if(this.properties.callback!=null
- && this.isFunction(this.properties.callback)){
- this.properties.callback(this);
- }
- },
- //设置实例的唯一标识this._MODULE_ID_
- setMoudleId:function(){
- var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
- for(var i = 0 ; i < 32; i++)
- this._MODULE_ID_ += chars.charAt(Math.floor(Math.random()*62));
- }
如果要基于这个例子来修改的话
1.如果想只改改日历的外观,修改相关的css部分即可;
2.如果想应用日历输出数据,还得写一个callback函数处理选取后的数据;
2.如果想增加功能,可以分别在this.cache和this.properties里面增加你想要的数据和参数,在calendar.prototype中修改或者增加相关的函数。
在线浏览地址(第二个样式和PageFlakes日历控件外观差不多,并附有一个简单的callback函数):http://panweizeng.com/others/example/calendar-simple/
完整的Javascript代码:http://panweizeng.com/others/example/calendar-simple/calendar-common.js


