现在的web的js开发很方便啊,但是碰到iframe里的东西还是不方便看到变量的内容,所以就写了这么个看json内容的玩意,还可以当控制台输出用。

很简单,有需要以后开发新功能

/** 
 * Show json in a new page.(For debug)
 *
 * Licensed under the MIT or GPL Version 3 licenses.
 * @version 1.3
 * @author OWenT
 * @link http://www.owent.net
 * @history 
 * 		2012.12.27 
 * 			1. 改进JSON内对象循环引用时的导致的栈溢出问题
 * 			2. 引入层级路径
 * 			3. 引入锚点
 */
 
 /**
  * Object转为字符串
  * @param {Object} json Object对象 
  * @param {Number} tab 缩进数量
  * @param {Object} rules 应用规则
  * @param {String} path 当前路径
  * @return 生成的HTML
  */
function json2String(json, tab, rules, path) {
    var tabStr = "", singleTab = "    ", isClear = false;
    var txt = "";
    
    if (!rules) {
        rules = {
            id: "__json2string_process" + (new Date).getTime().toString() + (json2String.baseIndex ++),
            objs: []
        };
        isClear = true;
    }
    
    tab = tab || 1;
    if (!path) {
        path = "{ROOT}";
        txt += " ";
    }
    
    for (var i = 0; i < tab; i ++) {
        tabStr += singleTab;
    }
    
    if (!json && json !== 0) {
        txt += 'null';
    } else if (typeof(json) == "object") {
        var prefix = '{', suffix = '}';
        try {		
            if (toString.call(json).match(/array/i)) {
                prefix = '[';
                suffix = ']';
            }
        } catch(e) {
            // hoho ...
        }
        
        if (json[rules.id]) {
            txt += prefix + "此处引用 " + 
                json[rules.id] + "" + suffix;
            return txt;
        }
        json[rules.id] = path;
        rules.objs.push(json);
        
        txt += prefix + "
\r\n"; var first = true; for (var key in json) { if (key == rules.id) continue; if (first) first = false; else txt += ",
\r\n"; txt += tabStr + " " + "" + key + " : " + json2String(json[key], tab + 1, rules, path + "." + key); } txt += "
\r\n" + tabStr.substr(0, tabStr.length - singleTab.length) + suffix; } else if (typeof(json) == "string") { txt += '"' + json + '"'; } else if (typeof(json) == "number") { txt += '' + json + ''; } else if (typeof(json) == "function") { txt += '' + json + ''; } else { txt += json.toString(); } if (isClear) { for (var i = 0; i < rules.objs.length; ++ i) { delete rules.objs[i][rules.id]; } rules.objs = []; } return txt; } function showJson(json, title, windowName, dlg_opt) { json2String.baseIndex = json2String.baseIndex || 0; title = title || "Json viewer"; windowName = windowName || "result" + (new Date()).toGMTString(); if (window.jQuery && jQuery.fn && jQuery.fn.dialog) { $("
").append(json2String(json)).css({ "text-align": "left" }).dialog($.extend({ "modal": false, "title": title, "width": 640, "height": 480, "buttons": { "关闭": function() { $( this ).dialog( "close" ); } } }, dlg_opt)); } else { var wnd = window.open("about:blank", "_blank", "height=600, width=800, toolbar=no, menubar=no, resizable=yes, location=no, status=no", true); if (!wnd) alert("窗口被拦截!"); wnd.document.write("" + title + "" + json2String(json) + ""); } return wnd; }
  1. 更新对不同类型着色
  2. 如果载入了jQuery UI 则使用jQuery UI的Dialog打开,用于解决嵌套iframe时浏览器拦截问题
  3. 解决Object循环引用时栈溢出问题,同时增加引用的指向锚点

Licensed under the MIT or GPL Version 3 licenses.

其实这个部分是我觉得最没用的部分

新的字符编码

注:这部分仅测过GCC,VS暂不支持

在旧的标准C++中支持两种字符编码。

直接使用””将产生const char。

使用L””将产生const wchar。

新标准中增加了三种,即UTF-8、UTF-16和UTF-32。

这各部分主要是一些很实用和在一些地方帮助编译器自动推断类型的库和函数 首先是引用包装 类名 template< class T > class std::reference_wrapper; 这个类保存了对一个类实例、(成员)函数(指针) 构造时必须传入所引用的对象或引用对象的右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类的引用类型 get方法, 用于获取引用的对象 ()操作符, 用于执行引用的函数

绑定函数是我认为C++新标准里第二有用的库了 绑定库的使用环境是:

  • GCC-C++ 4.3 及以上
  • Visual Studio 2008 SP1 及以上
  • BOOST 1.25及以上(其中function是1.16及以上)

先来看一段代码

#include 
#include 
#include 
#include 

class button
{
public:

    std::function onClick;
};

class player
{
public:

    void play(void* sender, int param) {
        printf("Play: %d => %d\n", (int)sender, param);
    };
    void stop(void* sender, int param) {
        printf("Play: %d => %d\n", (int)sender, param);
    };
};

button playButton, stopButton;
player thePlayer;

void connect()
{
    playButton.onClick = std::bind(&player::play, &thePlayer, &playButton, std::placeholders::_1);
    stopButton.onClick = std::bind(&player::stop, &thePlayer, &stopButton, std::placeholders::_1);
}

int main () {
    connect();
    playButton.onClick(0);
    return 0;
}
// 以上代码参考boost中bind库示例代码,在G++ 4.6.1中测试通过

木有错,这是C++,并且很方便地实现了委托 这就是传说中的绑定库和增强型的函数对象 接下来一个一个来

这回的两个库没怎么用过,这里的记录就用VC++写了,使用G++和BOOST的时候和智能指针类似。

首先是Tuple

要注意的是这里G++,VC++和BOOST库的函数不太一样,所以使用的时候要注意没有使用到编译器和编译器相关的函数(特别是IDE的弹窗的方法要注意)。

C++ 0x/11 终于通过了,真是个很爽的消息。于是乎我决定对新的东西系统学习一下。

首先当然要从tr1开始,智能指针实际上我已经用过很多次了,但是为了完整起见,还是写出来记录一下。

当然,从简单到复杂,现在接触的部分不是很复杂,不过暂时够用了。

Linux 常用工具

  • enca: http://dl.cihar.com/enca/   文件名编码转换
  • iconv: 文件编码转换
  • convmv: 文件名编码转换
  • ldd: 查看可执行文件或动态链接库的依赖库
  • getconf: 查看配置信息(如getconf LONG_BIT可知当前系统是32位还是64位版本)
  • tcpdump: 监视网络服务
  • sync: 将缓冲区内容写入磁盘
  • echo 3 > /proc/sys/vm/drop_caches: 手动释放缓存
  • nm: 查看符号表
  • readelf: 查看ELF信息(Executable and Linkable Format)
  • man: 文档
  • top/htop: 查看最高占用
  • perf: 性能数据采集
  • sar: 系统信息采集
  • uptime: 系统1分钟、5分钟和15分钟的系统平均负载
  • free: 内存使用情况
  • iostat: 磁盘IO使用情况
  • pidstat: 查看进程状态
  • ipcs: 查看共享内存、消息、信号量信息,如:ipcs -m 共享内存
  • objdump –CS –l [bin文件]: 不反人类的反编译
  • strace: 系统调用跟踪
  • pstack: 查看当前调用栈
  • lsof: 查看打开的文件
  • ip addr: 查看ip地址

man [章节号] 手册名称:

Linq是.NET 3里新增的东西,我在软件工程课程设计里初步应用到一点,而且主要用在Lambda表达式上,今天算是在好奇心驱动下尝试了一下在数据库方面的应用。

在数据库数据层自动化上,Linq强大地让我很惊喜。

好久没写这种类型的代码,感觉真是退步了很多。 这是我第一次参加Google Code Jam,以前有过报名可是没有做过。 我发现Google Code Jam的题目使用经典算法的几乎没有,都是模拟或者数学题(起码我目前做过的几题是这样)

很多时候看到C/C++的一些奇妙的应用,每次都是惊奇一点时间就随风飘过了 现在我还是决定记录一下这些有意思的东西。

2010/04

a ^= b ^= a ^=b; 这是一个交换值得有意思的方式

// 统计1的个数的有意思的方式
int count_bin_one(int x) {
    return x? 1 +  count_bin_one(x & (x - 1)): 0;
}

2011/04

同学去爱立信参加笔试+面试碰到的问题 – 1

2010.12(装备处)

报销内容电脑维修(200元)
报告费用200元
实际报销200元
交付人马美怡(已交付)
当前状态已完成
笔记备忘已完成

2010.12(大财务)

报销内容张立鹏,外阜出差(544元)+市内交通(400元)
报告费用944元
实际报销544元
交付人外阜出差[何高奇](已交付)
当前状态已完成、已消除未报销金额
笔记备忘已完成

2011.03(大财务)

报销内容上次市内交通费用(600元)+ 文具(211.6元)+图书(405.30元)+快递费(30元)
报告费用1246.9元
实际报销1246.9元
交付人欧文韬(294.70元)、马美怡(714元)、张立鹏(38.20元)、胡钦骋(100元)、许之易(100元)
当前状态已完成
笔记备忘已完成

2011.03(装备处)

报销内容电脑维修(150元)、路由器(143元)、屏幕贴膜(55元)
报告费用348元
实际报销348元
交付人欧文韬(348元)
当前状态已完成
笔记备忘已完成

2011.06 (大财务)

报销内容交通费(400元)、图书(113.60元)、办公用品(33.10)
报告费用546.7元
实际报销546.7元
交付人欧文韬(100元)、胡钦骋(446.7元)
当前状态已完成
笔记备忘已完成

2011.06 (装备处)

报销内容移动硬盘(444元)、耳机(125元)
报告费用569元
实际报销569元
交付人胡钦骋(569元)、张立鹏(45)
当前状态已完成
笔记备忘已完成

2011.11(小财务)

报销内容微软Kinect体感设备(790元)、设备维修(770元)、移动硬盘(760元)、U盘(59元)、键盘(47元)
报告费用2426元
实际报销2424元
交付人何高奇(2320元)、许之易(106元)
当前状态已完成
笔记备忘已完成

2012.03(大财务)

报销内容 | 书费(218.8元)、交通费(595元)、打印费和邮费(343.8元) 报告费用 | 1157.6元 实际报销 | *元 交付人 | 欧文韬(142.4元)、许之易(234.0元)、张立鹏(281.2元)、马美怡(100元)、待定(400元) 当前状态 | 等待审核 笔记备忘 | 无

我们学校的资源列表(ECUST)

用Ubuntu的人,只要把有线和无线网络设置为IPV6自动,然后取消下面的需要IPV6

来建立连接就可以用校园网反问IPV6站点了。反正我就这么搞定了

all in http://ipv6.ecust.edu.cn

校内IPv6网络资源

学校做项目顺便写的,还是有点用的。

/***
 * JQuery扩展插件--提示信息
 *
 * 本函数用于创建提示信息
 *
 * Example
 * 
 *      var t = $.noticeMessage(msg, a, b);
 * 
 *
 *
 * function noticeMessage([msg, a,b])
 * @Param  {
 *      msg:    信息内容(默认: Notice Message!)
 *      a:      配置选项({expire: 过期时间(默认5秒), time: 过渡时间, from: {起始CSS样式}, to:{最终CSS样式}})
 *      b:      回调函数
 * }
 * @Return {jQuery(msgDiv): 产生的信息DOM组件的jQuery容器}
 *
 *
 * Example:
 * 
 *      var t = $.noticeMessage("Hello World!");
 * 
 *
 *
 * @Author      OWenT
 * @Version     1.0
 * @Link        http://www.owent.net
 */
jQuery.extend({
    noticeMessage: function (msg, a, b) {
        msg = msg || "Notice Message!";
        var option = { "expire": 5000, "time": 500,
            "from": { "background-color": "LightGreen", "opacity": "0", "position": "fixed", "bottom": "0px", "z-index": "1000",
                "font-size": "24px", "color": "DarkGreen", "padding": "3px", "font-weight": "bold"
            },
            "to": { "opacity": "1", "bottom": "+5px" }
        };
        var callback = function () { };
        if (a && jQuery.isFunction(a))
            callback = a;
        else {
            a = a || {};
            jQuery.extend(option, a);
            callback = b || function () { };
        }

        var msgDiv = document.createElement("div");

        jQuery(msgDiv).css(option.from).html(msg);
        jQuery(document.body).append(msgDiv);
        jQuery(msgDiv).stop().animate(option.to, option.time, callback);
        if (option.expire > 0) {
            setTimeout(function () {
                if (msgDiv) {
                    jQuery(msgDiv).stop().animate({ "opacity": "0", "bottom": "-5px" }, option.time,
                        function () { callback(); jQuery(this).remove(); });
                }
            }, option.expire);
        }
        return jQuery(msgDiv);
    }
});

写在最后补充一下,这个动机基本没什么用了

这是学校USRP项目需要而写的一个类,但是既然写出来了,以后也可能用到,就共享出来吧。

这个类用于解析网页URL的QueryString参数,或者也可以当做操作一些其他设置的类库。

本类库支持任意类型的值的记录,支持JSON语法,支持类似“a=b&c=d”作为设置参数,支持对数组和JSON的转换。

以前整理这个是心血来潮,现在仍然是心血来潮,把原文转移到这个博客里来

此文章由本人辛苦整理,转载请注明出处 http://www.owent.net

请不要用于非法用途,否则本人和本博客概不负责。

说明:本文件由《神奇古今秘方集锦》和《民间秘术大全》两部书组成,其中有

2010.10.11

要为出发做准备了,今天和Ultramanhu和Answeror一起去买了火车票,真是搞笑了,提前六天去买票,竟然动车没坐票了,难道世博就这么猛?只有买周四晚上出发的非动车卧铺票了。顺便带个三国杀什么的去玩,不过估计去的时候也没什么心思玩,等回来的时候再用吧。
回来的时候Answeror推荐我们去吃大娘水饺,然后就去了,我买了半斤水饺,花了25.5块,这么贵,果然学校外面就是贵啊,不过挺好吃的。起码比学校里的好太多了,而且那个水饺很有分量。
今晚协议到线段树的题竟然效率和不用线段树的一样,气死我了,明天看看别人怎么写的,然后改,顺便看看二维线段树,再顺便复习一下树状数组。

2010.10.12

本来打算好好看线段树的,结果线段树的基本操作是会了,可是还是不熟,这个很麻烦啊。今天一定要吧线段树搞定,明天整理一些以前写过的东西车上看看。
好吧,今天我们去买回程票(防止买不到坐票),结果售票员告诉我们明天才能买,原来我们说的提前六天是(12, 18],官方的是[12,18)。这个郁闷了,不过售票员的态度让我很不爽。
今天优化了昨天的线段树代码,发现用sort然后去重点的离散化竟然效率是用map离散化的10倍左右,太夸张了。
今天让同学帮忙交请假条来着,结果上课一半时间了他告诉我我们不是同一个老师,郁闷。更郁闷的是他们老师很猛,每节课都点名,而且点一个出去一个的那种点名,下课还特别晚,等他出来,我那个上课的老师早就下课走人了。等我赶到教室的时候灯都黑了,结果请假条没交成,只能下次上课去交了,真是麻烦。
今天等那个倒霉孩子的时候看到了一个帖子,有人遇见晓了,帖子地址:http://bbs.unistar.cn/dispbbs.asp?boardid=209&Id=58429
今天再把二维线段树看下就结束吧,明天看RMQ的ST算法,然后整理材料。

2010.10.14

昨天只是复习了一下算法,没看什么新东西,顺便把模板打印了,模板的厚度还可以接受,我的和Ultrahanhu的加起来110多页,上午还去南站买了票,结果前天没到时间还不能卖,昨天上午所有回来的动车坐票都卖完了,特快还没卧铺,只好买了硬座了,想想14个小时的硬座,好吧会坐到PP疼的。
今天上午收到天津同学的短信,说周六大降温,为了以防万一,我就多带点衣服过去了,两件衣服一条裤子,好像有点多了。很期待Ultramanhu会带多少东西去,不要带个旅行箱就好,等会带队老师来请客吃饭,不错哈,我早餐都没吃。
我把我所有的手机电池都带上了,路上听歌,顺便看看北方的WCDMA怎么样。
按照计划我们是明天中午到,然后去报到,然后去宾馆,然后去买天津到北京的车票,然后吃晚饭,然后没有然后了。
今天中午和杨老师一起去吃饭了,按他的说法,下午3:30就要去南站了,看来我们需要等火车等2个多小时啦。
今天下午就出发了,祝愿我们有个好成绩吧。

1.RangeMinimum、Maximum Query问题(计算单调区间内出现最多(少)的次数)

对元素的起点做离散化,再把离散化后的位置作为线段树的[l, r),记录次数为t.

对输入区间a, b:

如果(a = b){很好处理},

如果(a = b – 1){分别计算a、b的次数,取大(小)的一项},

题目链接:http://poj.org/problem?id=1474

写这题的目的是看完了zzy的论文,写了半平面交,验证一下正确性,结果发现我写的问题还是很多的。

题目大意是问能不能放一个摄像机,使得摄像机能看到整个多边形内部。

这题和1279和3130差不多,过了这题再去对付那两题就简单多了。