m2e 资源不拷贝的问题

之前一直被一个问题困扰,eclipse 运行的时候不把 resources 目录下的资源拷过去,导致运行时找不到文件。 稍微查一下就能发现 eclipse 把 resources 目录给 excludes ** 了, 查 so 可以看到这个回答 http://stackoverflow.com/questions/7754255/maven-m2eclipse-excludes-my-resources-all-the-time 大意是怕和 maven 的资源管理冲突, eclipse 把 resources 目录中所有东西都 exclude 了。当然手工把这条规则去掉能解决问题,但 maven update 一下问题又会回来了。 后来今天瞎查的时候发现 maven 的 lifecycle mapping 里 resources:resources phase 被忽略(ignore)了, 这个 phase 我之前查过恰好是拷贝资源用的。再看这条规则的来源是 workspace 于是在 eclipse 的全局 preference 里看了一下果然有这条规则,于是改完解决问题哦也

Linux 桌面歌词的搞

首先有个这个东西: http://www.sanfanling.cn/read.php?311 最开始找到的时候觉得很好用啊. 但是有几个不爽: 几个歌词下载源太烂了, 简直哭瞎. 我用的 amarok, 切换 track 的时候不能自动切歌词 搞 1 作为前虾米后网易新近网易线下用户, 拉歌词当然还是从网易拉比较好. 其实还有一个原因, 是自带的歌词引擎基本算挂完了, 太垃圾 从 https://github.com/cosven/FeelUOwn/blob/master/src/plugin/NetEaseMusic/api.py 拉到别人写的网易云音乐 api. 然后给这个东西加一个 engine (在 engines 目录下) 就行了 比如 cat engines/engine_net_ease.py #!/usr/bin/env python # -*- coding: utf-8 -*- import engine; from net_ease_api import NetEase; import json class net_ease(engine.engine): def __init__(self, proxy=None, locale=None): self.api = NetEase( […]

线程池典型错误一例

撸了个线程池设施. 经一位很厉害的前辈指点, 有不少可以优化的地方 犯傻逼了: sem_post(&sem); return lockfree_queue.push(v); 然后在 pop 那里, 先 sem_wait() 一看, 哎! 有东西, 于是到 queue 里取, 一看, 哎! 空的! 于是线程休眠, 继续等待信号. 此时主线程姗姗来迟, 终于把 v push 到 queue 里. 客户端阻在那儿, 直到海枯石烂, 天地为之变色.

撸汇编学习

汇编一直是弱项, 于是搞了一会浅薄的内容. 做个笔记. void foo() { int a, b, c, d; } int main() { foo(); int a=10; } 这里的流程是: main(): 把 rsp 赋值给 rbp 把 rsp – 10(或者某个数). 此时: rbp –> | | | rsp –> | 调用 foo rbp(main)–>| | | rsp/rbp –>| 初始化 a 到 d: rbp(main)–>| main | | rsp/rbp –>| […]

rand 相关

gcc 的 rand 使用 http://en.wikipedia.org/wiki/Linear_congruential_generator 生成随机数. 从 http://cpp.indi.frih.net/blog/2014/12/the-bell-has-tolled-for-rand/ 看, time() 作为种子, 因为 time_t 最小单位是一秒, 所以一秒内跑两次程序会得到同样的结果. 验证发现确实如此… 现在的标准推荐使用 http://en.wikipedia.org/wiki/Mersenne_twister, 好多语言在用它做默认生成器. 另应该记住 VS 的 rand_max 只有 32767, 所以 rand 范围只有 32768, 这点可以用来吐槽 MS, 真是太棒了

svn 作死心得

svn 不是分布式版本控制系统, 这个不是分布式很有讲究, 一个显著的表现是, commit 直接就发到服务器上了, 不会先在本地 ci 一下, 等 push 的时候再传到服务器( git way ). 如何让一个新的空分支 rebase 到另一个分支上? switch, svn switch, 把当前的 working copy 设置成另一个分支. 就是, 当前是 co 的分支 A, 但通过 switch, 可以让当前的代码转成分支 B merge, 把某个分支的代码 merge 到当前空分支上. 推荐使用 server url merge.

一个 通用的 add 设施 以及 is_container

写了一个通用的 add 设施, 原型如下: add(container_output, container_input) // 重载 1 效果: 把 container_input 里的所有元素加到(push_back) container_output 里 add(container_output, elements…) // 重载 2 效果: 把所有 elements 加到(push_back) container_output 里 实现上, 使用 enable_if 做函数决议. 为此写了一个 is_container 设施判断类型是否是 container. 该设施部分遵循 Container Concept 的定义. 主要是构造啊 swap 啊几个操作符啊查起来太麻烦了. 所以没加. 首先是 is_container 的实现: pp_cat.h, 做字符拼接. #ifndef BOOST_PP_CAT # define BOOST_PP_CAT(a, b) BOOST_PP_CAT_I(a, b) […]

new 在 lambda

看到一个问题,如何把 lambda 弄到 new 出来的地址上。 一开始的想法是:lambda 在声明的时候就已经是 rv 了,而 trivial move ctor 是 优先 move 的 bitwise copy,那肯定搞不定啊。 举例说: something = move([]{}); // 此时,某个匿名函数已经构造完毕,所以 这里的实际代码是: something.m_a = move(__unnamed.m_a); something.m_b = move(__unnamed.m_b); … 等于白搭。 但两次询问问题人后其确定 void* p = (void*) new sometype([]{}); 的语法是能够把 lambda 的构造弄到 new 出来的内存上的。于是开干吧。 首先查阅 gcc 源码,得知其 lambda 命名规则是 __lambda%d,%d 跟第 lambdacnt 个。所以 第 […]

优雅地同时遍历多个容器

问:给定容器 C1, C2, C3, … Cn, 且已知 size(C1) == size(C2) == … == size(Cn); 如何优雅地 for (c1, c2, c3… cn) in (C1, C2, C3, … Cn): // do something 意义:可能会有两个同样大小的变长容器(vector 啊 list 啊 map 啊 blabla),确认是同样大小了,希望对其中索引相同的元素做某些事情,这种需求不属于最常见的一类,但属于一般都会遇到的一类。 答: 为了直观感受 “不优雅”, “丑陋的”,展示一下现有条件下可能的实现: C1_T::iterator iter1 = C1.begin(); C2_T::iterator iter2 = C2.begin(); … Cn_T::iterator itern = Cn.begin(); for (; […]

瞎搞 std::cout 的构造和析构顺序

本文使用 gcc4.8, libstdc++. 引入 昨天侃爷提了个问题: struct foo { foo(const std::string& c) :_c(c) {} ~foo() { std::cout << _c; } const string& _c; } bar(“aaa”) ; 会炸, 为什么呢. 因为 “aaa” 会被赋予一个临时的 string, 然后这个临时 string 在程序结束的时候早挂了, 所以会 sf. 可是, 有没有可能是 cout 先被析构, 导致整个程序挂掉? 讨论 理论上, cout 应该是早于 bar 被声明的(extern), 所以它析构的也会比 bar 晚. 肚学长提出编译器在生成可执行文件的时候做了特殊处理, 我觉得 运行库 和 标准库 […]