Rule-based Regular Routing Method

Upd: 代码来了 https://github.com/laekov/rbrrm 来 mark 一下我的 oop 组队大作业中窝肝的部分. 姚氏大作业果然有趣. 大概问题是这样的. 现在一个 pcb 上面有 (n*n) 的元件矩阵(忽略元件面积). 然后你要布线让每个元件都单独连着一条通往边界的电线, 我们管它叫这个点的 escape 路线. (最边上的就直接算作逃出去了) 然后电线只能横竖沿着格线走. 显然直接走是走不出去的. 所以你要找一个最小的 ( w ), 把原来的每行每列的中间都插上(w)条格线, 然后找一个总长最小 (或者如果你有其它的 feature 的话可以是尽量小) 的方案. 官方的的范围是 ( 80 ), 然后我算出来的 (80) 对应的 (w) 是 (23). 这个范围直接二分建图跑网络流已经非常吃力了. (或者直说要跑几天才跑得出来). 一个比较小的例子如图. 这个问题的标题叫作_rule based regular routing path_, 也就是说有某种直接用规则布线就可以了? 然后窝的第一个想法是神贪心, 然而在和大树讨论了很久之后也没有找到一种能让我们两个觉得靠谱且简洁优美的贪心. 然后窝就在想网络流是否有救. 在和 czr 讨论了一阵以及 czr 帮窝去 ieee 找了几篇 paper (btw, 校内网可以免费直接下 ieee 的论文不能更赞) 后发现了这么一个结论. 对于每个 ( w*w ) 的格子, 它的承载上限 (也就是说穿过这个格子的线的条数) 是 ( w )....

June 11, 2017 · 2 min · laekov

PD大作业

据说本学期程设的大作业是写个魔方. 看到别人都开动了, laekov就有点方. 所以laekov也开动了. 为了表现laekov很弱就随手记录一下好了. 10.21 晚上9点左右开始写魔方类. 支持三轴整体转动和四种八向扭动. 其实是用两轴转动和一种扭动组合出来的. 然后发现写得不太对. debug到12点搞定. 10.22 早上有运动会. 九点左右开始写层洗ai. 中午随便吃了点然后接着写. 全程没make. 大概一点左右写完开始debug. 两点惊闻有项目. 直到晚上六点半去听心理讲座接着debug. 晚上回寝室接着debug. 很多公式和判定都有小小的问题. 不过幸好函数都分开写了, 调试还算方便. 晚上九点左右能跑过随机了. core部分基本完结撒花. 顺手完善了一下document. 准备开始看qt. 10.23 懒死了不想看qt. 晚上决定图形还是就用h5写吧. Historical Comments lyzy at 2016-10-26T20:22:21 膜Qt大神 至今不会release lyzy at 2016-10-26T20:27:43 我还是没有名字 I still have no name Todavia no tengo un nombre. lyzy at 2016-10-26T20:28:57 怎么办 What to do ¿Cómo? lyzy at 2016-10-26T20:29:21 太年轻 too young muy joven

October 23, 2016 · 1 min · laekov

轮子们

一些可以用的轮子. passportjs 用户登陆/管理模块 zmq 消息队列. 处理后台各种不能异步的请求. openjudge-sandbox oj评测沙箱(还没搞懂) react 前端框架 angularjs 更重量更强大的前端框架 bootstrap css板子 nodegit 顾名思义 grunt 开发自动化 threejs h5的3d绘图 phoria 另一个h5的3d绘图 // 似乎star比上一个多, 然而没有文档, 玩ball喽 // 开始考虑要不要重写srk了然而没有时间>_<

September 19, 2016 · 1 min · laekov

MathJax简单配置

在网页上写数学公式怎么少得了MathJax. 然而这玩意因为功能复杂所以比showdown之类的库要难配置一些. 首先从Github上把它clone下来. 然后发现这玩意真的好大. 后来发现是有一堆迷之png. 别人家的cdn的速度从我这来看都不怎么样, 所以还是只能扔到自已的server上. 最简单的用法就是在html head里加一行 <script src='xxx/MathJax.js?config=default'></script> 然后它就会用默认配置在网页加载的时候把那些玩意给转换了. 这里有一个config的文件可以选择. 在unpacked里的default.js里有很详细的说明. (虽然是英文的) 看上去能用了? 然后问题来了. 我的前端是先加载网页框架, 再用js去加载内容, 然而内容加载出来的时候MathJax已经把活干完歇菜了. 显然应该有什么控制单元能随时更新某个element. google了一下发现MathJax有个子类控制单元叫Hub. Hub有个方法叫Typeset, 能重新检查页面. 于是这么写? $.post("xxx", {xx}, function(res) { $("#xxx").html(res.content); MathJax.Hub.Typeset(); }); 然而这样的话是不是我每加载一个listitem或者comment都要重新扫一遍整个页面啊? 卡死啦. 于是加了个triggerCount. 麻烦死了. 然后想想觉得没对, 肯定能直接改某个元素啊. 仔细看看document. Typeset([element[, callback]]) 对啊ovo可以直接指定element. 而且还各种类型都资瓷. 在类型这种问题上js比c高到不知道哪里去了. 于是代码写成 $.post("xxx", {xx}, functoin(res) { $("#xxx").html(res.content); MathJax.Hub.Typeset(getMyId()); }); 搞定啦. 然后config里还可以指定是用$$还是$之类的玩意. 然后似乎MathJax还自带Async一类的玩意? 感觉很赞.

March 20, 2016 · 1 min · laekov

shiruku.点赞

造出了一个功能叫点赞qwq. 想起上周和czr讨论点赞到底应不应该重新从后端获取数据.ovo 然而这一部分的前端写得好丑啊. 然而后端水平进步了的感觉好开心. (虽然还是丑) 主要是前端动态渲染的方式会让js各种回调于是很讨厌. 而且$.post的异步在这种时候确实会造成麻烦. jquery里面一个element被clone之后要先加到document里才能再修饰它的属性, 不然会有奇怪的事情OvO. 噢对laekov为了好玩允许一个人点0xf个赞. 为什么点赞只能点一个呢? 反正后端都写成这样了就多允许几个好了…(其实可以调成0xff或者0x3f3f3f3f什么的23333) 另外也受到了知乎的一些启发. 评论什么的东西其实都可以加这么一个玩意, 反正都写出了通用的接口, 只是多几个接入而已. 感觉这种通用性的思路很有价值.

February 28, 2016 · 1 min · laekov

shiruku.第三方登陆

听说造了登陆之后就没人愿意来评论了. 于是窝决定去造个第三方登陆. 于是花了一晚上造出了oauth组件. (其实有sdk的啊摔) 于是有了github登陆. 其实还有企鹅啥的. 然而企鹅就是强行降低网站的逼格这怎么行呢. (其实是企鹅强行要求sdk懒得搞了) oauth的登陆简单过程是酱的(有点三次握手的感觉) 网站要去第三方申请一个application. 然后会得到client_id和client_secret. 然后把登陆的链接接到指定的页面去, 用get把client_id和泥要哪些数据传过去. 网站会和用户交流人生(登陆). 然后会用get方式调用callback, 这个是在注册application的时候指定的. callback的get参数里有一种东西叫code. 这东西要用. 用code来换access_token. 把code和client_id和client_secret一起当post参数传给第三方指定的第二个url. 如果没错会返回access_token, 这玩意是真正用来换数据的. 用access_token再去第三方提供的第三个url来get用户的数据, 比如avatar_url什么的. 那这和登陆有啥关系呢? 在第3步的时候如果泥得到了正确的access_token, 泥就可以认为用户正确登陆辣~ 然后就发生了一件鬼蓄的事情: 窝在去和github换数据的时候, 莫名其妙地就被403了. 大概就是酱(get为粟) function getData($url){ $opts = array(\'http\' => array( \'method\' => \'GET\' ) ); $context = stream_context_create($opts); $result = file_get_contents($url, false, $context); return $result; } 赶紧google了一下发现github会按照心情拒绝php发送的请求. 于是窝假装窝不是php而是善良可爱的少年就好了啊2333.于是强行骗人. function getData($url){ $opts = array(\'http\' => array( \'method\' => \'GET\', \"header\" => \"User-Agent: Mozilla\" ) ); $context = stream_context_create($opts); $result = file_get_contents($url, false, $context); return $result; } 假装窝叫Mozilla....

February 21, 2016 · 1 min · laekov

shiruku.缓存

之前版本找list都是去硬盘里枚举一遍文件. 本地我有ssd速度还行. 传到服务器上就慢暴了. 因为有导入之前的博文加起来也有几百篇. 枚举一遍就要开将近1k个文件. 这里O(1000)和oi里的概念完全不一样啊ovo几乎就是要几秒的意思了. 然后没有发现php怎么把东西常驻内存里. 于是灵机一动拿单个文件来存常用的数据. 然后就叫它伪缓存好了. 按照时间和需要对缓存进行更新, 每次查询所有东西的list只需要开一个文件. 果然就快多了好感动23333.

February 20, 2016 · 1 min · laekov

Initial Commit

努力淦了几个月php, 终于在寒假结束前搞上线了. 开心. 之前写的东西实在太丑不能忍了所以造了个新的. 但是又舍不得万网的免费空间. 其实还有很多东西没写. 页面底部有github链接跪求star. 第三方登陆还没时间做. 私戳laekov得邀请码. 以及laekov真的很认真的做了UI. 虽然最后的结局是laekov在报复社会. 事实上laekov不具有造出好看的页面的能力ovo 于是可以愉快地log down一些其它的东西了好开心w. 虽然适配服务器有些周折ovo 于是挺晚了呢…明天再接着写ovo 接着写 原来的博客主要是写题解啊. 构架的时候就没想过要搞其它飞机. 于是后来就啥都干不了了. 想加个版块都挺痛苦. 另外前端后端的代码夹杂在一起不开心. 要api化(向czr学习). 以及把事情扔给前端做. (于是现在加载速度感人) 强行把php当nodejs用是什么样一种体验? @我自己ovoovo 反正每月10G的流量总用不完…所以就加图好了. 然而丑哭了qwq怪我喽. (找一个做美工的妹子当女朋友是laekov的人生追求23333)

February 20, 2016 · 1 min · laekov