├── .gitattributes ├── .gitignore ├── .idea ├── .name ├── blog2md.iml ├── encodings.xml ├── misc.xml ├── modules.xml ├── scopes │ └── scope_settings.xml ├── vcs.xml └── workspace.xml ├── LICENSE ├── README.md ├── blog.csdn.net ├── Codeforces Round #183 (Div. 1) 303A Lucky Permutation Triple (强大的数学&想法题).md ├── Codeforces Round #185 (Div. 1) 311A The Closest Pair (“陷阱”题).md ├── Codeforces Round #206 (Div. 2) 355C (转化&枚举).md ├── Codeforces Round #217 (Div. 2) 370C Mittens (构造&贪心).md ├── Codeforces Round #227 (Div. 2) 387C George and Number (贪心).md ├── Codeforces Round #237 (Div. 2) 404B Marathon (fmod或long long表示浮点).md ├── Codeforces Round #237 (Div. 2) 404C Restore Graph (构造最短路径树).md ├── HDU 4741 Save Labman No.004 (异面直线距离&直线与平面的交点).md ├── LightOJ 1009 Back to Underworld (种类并查集).md ├── LightOJ 1062 Crossed Ladders (二分).md ├── LightOJ 1080 Binary Simulation (线段树&成段更新).md ├── LightOJ 1085 All Possible Increasing Subsequences (DP&离散化&树状数组).md ├── LightOJ 1203 Guarding Bananas (凸包最小顶角).md ├── LightOJ 1255 Substring Frequency (KMP模板).md ├── LightOJ 1258 Making Huge Palindromes (回文&KMP).md ├── POJ 2932 Coneology (扫描线判断最外面的圆&set维护最近的圆).md ├── POJ 3104 Drying (二分&最大化最小值).md ├── POJ 3273 Monthly Expense (二分&最大化最小值).md ├── Python version 2.7 required, which was not found in the registry.md ├── SGU 104 Little Shop of Flowers (DP&打印路径).md ├── SGU 108 Self-numbers 2 (另一种滚动数组).md ├── UVa 11178 Morley's Theorem (向量旋转).md ├── [置顶]Manacher 算法详解:O(n) 复杂度求最长回文子串.md ├── [置顶]搬家.md └── [置顶]程序员技术练级攻略.md ├── blog.daimajia.com ├── 2014年的末尾.md ├── AnimeTaste今日开源.md ├── AnimeTaste全平台用户破十万!.md ├── AnimeTaste开发完成.md ├── AnimeTaste开源计划.md ├── Html5 Web Socket.md ├── Responsive系列之知识储备 – Media Query – 熊孩子的故事.md ├── Responsive系列之知识储备 – SASS基础教程.md ├── Responsive系列之知识储备 – SASS高阶教程(1).md ├── Responsive系列之知识储备 – SASS高阶教程(2).md ├── 「问题解决」MongoDB dbexit really exiting now.md ├── 【Android问题解决】The application’s PagerAdapter changed the adapter’s contents without calling PagerAdapter#notifyDataSetChanged.md ├── 【Android问题解决】Unable to resolve superclass of Landroidsupportv4appWatson.md ├── 世界杯,玩儿嗨啦!.md ├── 从导航开始.md ├── 关于前几天的GDG演讲.md ├── 写在10万这个点上.md ├── 又是一发开源项目 AndroidImageSlider.md ├── 哦,又做了个库,关于动画的.md ├── 实在无聊,又撸了一个库….md ├── 我开始了一件需要坚持很久的事情.md ├── 我这几年的变化.md ├── 折腾了两天,终于发布了.md ├── 最有成就感的两个月.md ├── 最近的作品:我的故事.md ├── 此处记载我青春.md ├── 认识了少楠,我决定做件事情.md └── 请叫我做库达人.md ├── blog.phoenixlzx.com ├── 2014-01-31.md ├── 2014·夏.md ├── DNSMasq 建立自定义 DNS.md ├── Directshare - 一个简单的HTTP直链文件分享工具.md ├── IPv4 存在而 IPv6 不存在时对于 AAAA 记录查询的响应.md ├── Kancolle Broker - 舰娘直连游戏!.md ├── MongoDB 中文分字搜索.md ├── Nyaabot 为喵窝服务器构建的 IRC 机器人.md ├── SubLive 本地播放器的弹幕 API 服务器.md ├── Ubuntu 服务器配置简易指南.md ├── 「鹦鹉螺号」退役.md ├── 一个简单的 WordPress 备份脚本.md ├── 为 KDM 和 Ksplash 自定义壁纸.md ├── 为 Linux 服务器编写的 BDRip 脚本.md ├── 为国内用户加速 Apple 服务.md ├── 使用 Express.js 和 Formidable 上传文件.md ├── 使用 FFmpeg 制作 GIF.md ├── 使用 iptables 过滤 DNS 放大攻击.md ├── 修复 Arch Rollback Machine 磁盘占用.md ├── 关于 SSL 和 IPKVMVNC Applet 的笔记两则.md ├── 再一次开始.md ├── 制作更好的 GIF 另一种更好的办法.md ├── 在 Ubuntu 服务器上搭建 OpenConnect 服务器小记.md ├── 在异步方法中使用 for 循环,以及循环中包含异步方法的几点坑.md ├── 基于斐波那契数列给 MyPet 写了新的 exp.js.md ├── 新的 NJLUG 主站.md ├── 浏览器A到Z.md ├── 用优雅的方式在 OS X 中为单个应用设置语言.md └── 自动编译 DKMS 模组的内核 HOOK.md ├── blog2md.py ├── jianyan.me ├── Android 上传文件到服务器:理论与编码.md ├── Django 中设置 cssjsimages 路径的方法.md ├── Git 用的越早,你就活得越久.md ├── GitHub 秘籍.md ├── Java 与 C++ 混合编程——JNI 学习小记.md ├── Pillow 模块小记:在图片上添加文字.md ├── Python 爬虫学习——收集「有趣」信息(8月16日更新).md ├── blog2md 开发小记.md ├── re.compile() 函数的一个小改进.md ├── 如何写一个无 bug 的 minmax 宏?.md ├── 如何在 SAE 上正确地设置 Django 静态文件.md ├── 如何搭建免费静态博客——Hexo 与 GitHub 使用小记.md └── 访问网页的过程——常见网络传输协议汇总.md ├── mindhacks.cn ├── C++11(及现代C++风格)和快速迭代式开发.md ├── 逃出你的肖申克(五):看不见的牢笼(上).md └── 逃出你的肖申克(六):看不见的牢笼(下):柏拉图的洞穴.md ├── test.py ├── www.byvoid.com ├── C++語法分析中最讓人頭疼的歧義.md ├── CoffeeScript的全局變量污染與Node.js的模塊加載.md ├── icc的過程間優化和性能分析引導優化.md ├── 一段程序看懂比特幣原理.md ├── 你不知道的東西正在傷害你——淺談信息不對稱.md ├── 冰雪奇緣中的左翼符號.md ├── 大灾变.md ├── 如何處理C++構造函數中的錯誤——兼談不同語言的錯誤處理.md ├── 朝鮮並不封閉:《我們最幸福》札記.md ├── 橫貫西伯利亞小記.md ├── 比特幣——史上最瘋狂的虛擬貨幣.md ├── 比特幣的價值探討.md ├── 海參崴遊記.md ├── 海外實習面試記.md ├── 爲什麼投機是有益的.md ├── 用Go語言計算PageRank.md ├── 美國之行(三)紐約.md ├── 美國之行(二)硅谷與舊金山.md ├── 美國之行(四)我對美國的印象.md ├── 萊特幣連環爆倉事件始末.md ├── 誰說中國醫療差——談醫療制度.md ├── 越來越長.md ├── 過去一年的環球旅行.md ├── 關於阿里巴巴面試結果信息泄漏的一點說明.md ├── 非常規的自我實現——聽陸向謙講創業.md └── 高維世界與一維價值.md ├── www.cnblogs.com ├── Being a Hero.md ├── Best Sequence.md ├── Colored Sticks.md ├── Desert King.md ├── Design Tutorial Inverse the Problem.md ├── Design Tutorial Learn from Life.md ├── Design Tutorial Make It Nondeterministic.md ├── Group.md ├── Hard Life.md ├── Keywords Search.md ├── MUH and Cube Walls.md ├── Money, Money, Money.md ├── Network Wars.md ├── No Pain No Game.md ├── Rotate.md ├── The Number Off of FFF.md ├── Vases and Flowers.md ├── Wild Words.md ├── Word Puzzles.md └── 汇编小实验1.md ├── www.wdk.pw ├── 2014年年终总结(伪).md ├── DK博客微信公众号启用.md ├── Freelancer如何提高效率.md ├── Gmail的倒下.md ├── 一款健康APP的产品策划(初).md ├── 不创业的原因.md ├── 不厉害的故事和厉害的故事.md ├── 不折腾的四步备案攻略.md ├── 中国有没有科技媒体.md ├── 人类终极问题比高潮更刺激.md ├── 你有没有反骨?.md ├── 六人同睡——群体对局外人的影响.md ├── 写诗的日子.md ├── 冰天雪地奇妙夜.md ├── 取代Word的多种方法.md ├── 哀骀它.md ├── 四川理工校长在2014级新生开学典礼上的讲话.md ├── 失控的游戏.md ├── 媒体与极权.md ├── 密码保护:以及青春.md ├── 密码保护:情书选登.md ├── 平安夜奇遇记.md ├── 开拓者与慈善家.md ├── 当我们在聊意义时,我们在思考什么.md ├── 微博情绪分析器开发过程.md ├── 我与基督教.md ├── 我与麻辣理工.md ├── 探寻被忽视的真相.md ├── 探索暗网的攻略.md ├── 文明文明.md ├── 旋转,飘,远.md ├── 智慧与孤独.md ├── 朝三暮四的环境问题.md ├── 极客游戏——坦克大战AI编写.md ├── 树莓派菜鸟入门攻略.md ├── 漫谈Github与开源.md ├── 烟雨西湖.md ├── 生命游戏与遗传编程.md ├── 男人的浪漫.md ├── 结构化知识2.0.md ├── 网赚,微商,以及更多.md ├── 美国人在中国——一个伟大的老师的真实故事.md ├── 群媒体.md ├── 聊聊Growth hacker.md ├── 记一件小事.md ├── 趣译——或许是提高英语的最好方式.md ├── 逃课的轮回.md ├── 遁入红尘.md ├── 重庆大四团队产品— Infinity new tab.md └── 零花钱与生活费.md └── yuguo.us ├── 2013年中国开发者大会.md ├── 2013年终总结.md ├── 2014小结.md ├── 26岁生日快乐.md ├── 33号铺停止更新.md ├── 6月荐书单.md ├── Bigpipe用Nodejs的实现.md ├── Kindle Paper White——五星级产品.md ├── QQ空间的勇敢开发者.md ├── Ruby漫谈.md ├── iOS界面开发-API设计.md ├── iOS界面开发.md ├── 《响应式Web设计实践》:前端+后台=响应式.md ├── 《布道之道》.md ├── 《编写可维护的JavaScript》——野生JavaScript程序员必读.md ├── 《编剧的艺术》.md ├── 不可以放弃的事情.md ├── 介绍Reveal.js.md ├── 众妙之门3.md ├── 使用HTML5构建iOS原生APP(5).md ├── 使用HTML5构建iOS原生APP(6)——禁止链接呼出菜单.md ├── 制度与财富——读《为什么中国人勤劳而不富有》.md ├── 前端工业化1:自动化.md ├── 前端工业化2:缓存.md ├── 前端工业化3:VCS.md ├── 卓有成效的管理者.md ├── 我从《炉石传说》学到的.md ├── 我是怎么阅读的.md ├── 我的第一个app上架了【限免3天】.md ├── 新项目预研.md ├── 有兴趣就够了吗?.md ├── 激励与响应.md ├── 爱上北上广深.md ├── 第三次的时候把事情做好.md ├── 纸牌屋里的专业主义者.md ├── 腾讯三年.md ├── 达人访谈.md └── 重拾kindle.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | lib/ 17 | lib64/ 18 | parts/ 19 | sdist/ 20 | var/ 21 | *.egg-info/ 22 | .installed.cfg 23 | *.egg 24 | 25 | # PyInstaller 26 | # Usually these files are written by a python script from a template 27 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 28 | *.manifest 29 | *.spec 30 | 31 | # Installer logs 32 | pip-log.txt 33 | pip-delete-this-directory.txt 34 | 35 | # Unit test / coverage reports 36 | htmlcov/ 37 | .tox/ 38 | .coverage 39 | .cache 40 | nosetests.xml 41 | coverage.xml 42 | 43 | # Translations 44 | *.mo 45 | *.pot 46 | 47 | # Django stuff: 48 | *.log 49 | 50 | # Sphinx documentation 51 | docs/_build/ 52 | 53 | # PyBuilder 54 | target/ 55 | 56 | # ========================= 57 | # Operating System Files 58 | # ========================= 59 | 60 | # OSX 61 | # ========================= 62 | 63 | .DS_Store 64 | .AppleDouble 65 | .LSOverride 66 | 67 | # Thumbnails 68 | ._* 69 | 70 | # Files that might appear on external disk 71 | .Spotlight-V100 72 | .Trashes 73 | 74 | # Directories potentially created on remote AFP share 75 | .AppleDB 76 | .AppleDesktop 77 | Network Trash Folder 78 | Temporary Items 79 | .apdisk 80 | 81 | # Windows 82 | # ========================= 83 | 84 | # Windows image file caches 85 | Thumbs.db 86 | ehthumbs.db 87 | 88 | # Folder config file 89 | Desktop.ini 90 | 91 | # Recycle Bin used on file shares 92 | $RECYCLE.BIN/ 93 | 94 | # Windows Installer files 95 | *.cab 96 | *.msi 97 | *.msm 98 | *.msp 99 | 100 | # Windows shortcuts 101 | *.lnk 102 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | blog2md -------------------------------------------------------------------------------- /.idea/blog2md.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/scopes/scope_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) [2015] [EndlessCheng] 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # blog2md 2 | Translate your blog articles to markdown files! (Support [Hexo](http://hexo.io/) now) 3 | 4 | ## How to use 5 | ```python 6 | import blog2md 7 | 8 | my_blog = blog2md.Blog( 9 | "http://blog.csdn.net/synapse7/article/list/", 10 | entry_tag='span', 11 | entry_class='link_title', 12 | ) 13 | for article in my_blog.get_all_articles(): 14 | article.to_hexo( 15 | content_class='article_content', 16 | time_class='link_postdate', 17 | tag_class='tag2box', 18 | ) 19 | ``` 20 | 21 | Result: 22 | 23 | ![](http://endless.qiniudn.com/blogblod2md4.png) 24 | 25 | See [test.py](https://github.com/EndlessCheng/blog2md/blob/master/test.py) for more details. 26 | 27 | ## Notice 28 | There is a BUG in `html2text/config.py`: 29 | 30 | ```python 31 | # Wrap long lines at position. 0 for no wrapping. (Requires Python 2.3.) 32 | BODY_WIDTH = 78 33 | ``` 34 | 35 | Change 78 to 0 to disable wrapping before you run. 36 | 37 | ## License 38 | 39 | MIT 40 | -------------------------------------------------------------------------------- /blog.csdn.net/Codeforces Round #183 (Div. 1) 303A Lucky Permutation Triple (强大的数学&想法题).md: -------------------------------------------------------------------------------- 1 | title: Codeforces Round #183 (Div. 1) 303A Lucky Permutation Triple (强大的数学&想法题) 2 | 3 | date: 2014-03-15 12:35 4 | 5 | tags: [ACM, C++, codeforces, 算法, 数学, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://codeforces.com/problemset/problem/303/A ](http://codeforces.com/problemset/problem/303/A) 11 | 12 | * when n is odd, A[i] = B[i] = i 13 | * when n is even, there is no solution. 14 | * why? I f ![](http://espresso.codeforces.com/7a993ef5fb6c3995968a2b76f1df1b5257c6c2c6.png) , then ![](http://espresso.codeforces.com/b9cadc7df5f9446fa5653dd49910ee1e03e025bd.png) or just ![](http://espresso.codeforces.com/4fb1e17fc3e104447f5c6303697a8f55d2eecf0f.png) , where S = 0 + 1 + ... + _ n _ - 1 = _ n _ ( _ n _ - 1) / 2 . So, there must be ![](http://espresso.codeforces.com/0b6bf89cc6e463947cec28752e0a5062dbc17a91.png) . But when n is even, ![](http://espresso.codeforces.com/8bcfcfd002b6a18e8c5d7bb9203a92e657d3c091.png) . 15 | 16 | 17 | /*92ms,0KB*/ 18 | 19 | #include 20 | using namespace std; 21 | 22 | int main() 23 | { 24 | int n; 25 | cin >> n; 26 | if (n & 1) 27 | { 28 | for (int i = 0; i < n; i++) cout << i << " "; 29 | cout << endl; 30 | for (int i = 0; i < n; i++) cout << i << " "; 31 | cout << endl; 32 | for (int i = 0; i < n; i++) cout << (2 * i) % n << " "; 33 | cout << endl; 34 | } 35 | else cout << -1 << endl; 36 | return 0; 37 | } 38 | 39 | 40 | 41 | 42 | 43 | 【额外思考】 44 | 45 | 另一种构造方法如下,并且还满足了一个要求: 46 | 47 | 48 | 当n为奇数时,若要求AB两个排列不一样,怎么做? 49 | 50 | 可以把A序列设为n-1,n-2,n-3,...,1,0(公差为-1) 51 | 52 | 然后B序列设为0,2,4,...,1,3,5,...(公差为2) 53 | 54 | 这样C序列就是n-1,0,1,2,...(公差为1) 55 | -------------------------------------------------------------------------------- /blog.csdn.net/Codeforces Round #185 (Div. 1) 311A The Closest Pair (“陷阱”题).md: -------------------------------------------------------------------------------- 1 | title: Codeforces Round #185 (Div. 1) 311A The Closest Pair (“陷阱”题) 2 | 3 | date: 2014-03-15 13:15 4 | 5 | tags: [ACM, C++, codeforces, 算法, 数学, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://codeforces.com/problemset/problem/311/A ](http://codeforces.com/problemset/problem/311/A) 11 | 12 | 13 | 14 | 15 | 16 | If we ignore "break", _ tot _ will be up to ![](http://espresso.codeforces.com/66a19249b26d808e85ea349b8b84dee8a2090e0c.png) . 17 | 18 | Consider whether we can make such inequality _ d _ ≤ _ p _ [ _ j _ ]. _ x _ \- _ p _ [ _ i _ ]. _ x _ is always false. The obvious way is to ** make all points' x coordinates the same ** (WTF!!!). And we can just choose _ n _ distinct numbers to be all points' y coordinate. 19 | 20 | Thus the problem is solved. 21 | 22 | 23 | 24 | 25 | 26 | #include 27 | 28 | int main() 29 | { 30 | int n, k; 31 | scanf("%d%d", &n, &k); 32 | if (k >= n * (n - 1) / 2) puts("no solution"); 33 | else for (int i = 1; i <= n; i++) printf("0 %d\n", i); 34 | return 0; 35 | } 36 | 37 | 38 | 39 | 40 | 41 | 【扩展】 42 | 43 | 如果要求每个x的横坐标都不相同呢? 44 | -------------------------------------------------------------------------------- /blog.csdn.net/Codeforces Round #206 (Div. 2) 355C (转化&枚举).md: -------------------------------------------------------------------------------- 1 | title: Codeforces Round #206 (Div. 2) 355C (转化&枚举) 2 | 3 | date: 2014-03-14 20:17 4 | 5 | tags: [ACM, C++, codeforces, 算法, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://codeforces.com/contest/355/problem/C ](http://codeforces.com/contest/355/problem/C) 11 | 12 | 13 | 14 | 15 | 16 | 枚举i,左手操作了i次,右手操作了n-i次,然后重复次数可以直接算出来,所以答案就可以在O(n)的时间内算出来。 17 | 18 | 19 | /*30ms,4000KB*/ 20 | 21 | #include 22 | using namespace std; 23 | 24 | int a[100005]; 25 | 26 | int main() 27 | { 28 | int n, l, r, q1, q2; 29 | cin >> n >> l >> r >> q1 >> q2; 30 | for (int i = 1; i <= n; i++) cin >> a[i], a[i] += a[i - 1]; 31 | int ans = INT_MAX; 32 | for (int i = 0; i <= n; i++) 33 | { 34 | int tmp = a[i] * l + (a[n] - a[i]) * r; 35 | if (2 * i > n + 1) tmp += q1 * (2 * i - n - 1); 36 | else if (2 * i < n - 1) tmp += q2 * (n - 2 * i - 1); 37 | ans = min(ans, tmp); 38 | } 39 | cout << ans << endl; 40 | return 0; 41 | } 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /blog.csdn.net/Codeforces Round #217 (Div. 2) 370C Mittens (构造&贪心).md: -------------------------------------------------------------------------------- 1 | title: Codeforces Round #217 (Div. 2) 370C Mittens (构造&贪心) 2 | 3 | date: 2014-03-14 20:07 4 | 5 | tags: [ACM, codeforces, C++, 算法, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://codeforces.com/contest/370/problem/C ](http://codeforces.com/contest/370/problem/C) 11 | 12 | 13 | 14 | 15 | 16 | /*31ms,0KB*/ 17 | 18 | #include 19 | #include 20 | using namespace std; 21 | 22 | int C[5005]; 23 | 24 | int main() 25 | { 26 | int N, M; 27 | cin >> N >> M; 28 | for (int i = 0; i < N; i++) cin >> C[i]; 29 | sort(C, C + N); 30 | int cnt = 0; 31 | for (int i = 0; i < N; i++) cnt += (C[i] != C[(i + N / 2) % N]); 32 | cout << cnt << endl; 33 | for (int i = 0; i < N; i++) cout << C[i] << ' ' << C[(i + N / 2) % N] << endl; 34 | return 0; 35 | } 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /blog.csdn.net/Codeforces Round #227 (Div. 2) 387C George and Number (贪心).md: -------------------------------------------------------------------------------- 1 | title: Codeforces Round #227 (Div. 2) 387C George and Number (贪心) 2 | 3 | date: 2014-03-22 18:12 4 | 5 | tags: [ACM, C++, codeforces, 算法, 贪心, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://codeforces.com/contest/387/problem/C ](http://codeforces.com/contest/387/problem/C) 11 | 12 | 13 | 14 | 15 | 16 | /*31ms,100KB*/ 17 | 18 | #include 19 | 20 | char str[100005]; 21 | 22 | int main() 23 | { 24 | gets(str); 25 | int i, j, res = 0; 26 | for (i = 0; str[i]; i = j) 27 | { 28 | for (j = i + 1; str[j] == '0'; j++); 29 | 30 | ///当出现以下情况时,重置计数: 31 | ///右边的数长,或者在长度相等时(这时右边的数必为x000...0的形式),右边的数大 32 | if (j - i > i || j - i == i && str[0] < str[i]) res = 1; 33 | else res++; 34 | } 35 | printf("%d", res); 36 | return 0; 37 | } 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /blog.csdn.net/Codeforces Round #237 (Div. 2) 404B Marathon (fmod或long long表示浮点).md: -------------------------------------------------------------------------------- 1 | title: Codeforces Round #237 (Div. 2) 404B Marathon (fmod或long long表示浮点) 2 | 3 | date: 2014-03-20 09:40 4 | 5 | tags: [ACM, C++, codeforces, 算法, 精度, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://codeforces.com/contest/404/problem/B ](http://codeforces.com/contest/404/problem/B) 11 | 12 | 13 | 14 | 15 | 这题很容易出现精度误差,解决方法有两种: 16 | 17 | 1\. 分析知当d远大于a时,在计算除法时容易产生较大误差,故可以先用fmod把d减小。 18 | 19 | 2\. 因为输入的小数至多到小数点后4位,故计算过程中的结果完全可以用long long存下来,这样就不用担心精度的问题了,且此法具有一定的普适性。 20 | 21 | 22 | 23 | 24 | 25 | /*124ms,0KB*/ 26 | 27 | #include 28 | using namespace std; 29 | 30 | double a; 31 | 32 | void f(double len) 33 | { 34 | int c = ((int)(len / a)) % 4; 35 | len = fmod(len, a); 36 | if (c == 0) printf("%f 0\n", len); 37 | else if (c == 1) printf("%f %f\n", a, len); 38 | else if (c == 2) printf("%f %f\n", a - len, a); 39 | else printf("0 %f\n", a - len); 40 | } 41 | 42 | int main() 43 | { 44 | double d; 45 | int n; 46 | scanf("%lf%lf%d", &a, &d, &n); 47 | d = fmod(d, 4 * a); /// 若d远大于a,可以先 d %= 4*a 48 | for (int i = 1; i <= n; ++i) f(d * i); 49 | return 0; 50 | } 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /blog.csdn.net/Codeforces Round #237 (Div. 2) 404C Restore Graph (构造最短路径树).md: -------------------------------------------------------------------------------- 1 | title: Codeforces Round #237 (Div. 2) 404C Restore Graph (构造最短路径树) 2 | 3 | date: 2014-03-20 09:28 4 | 5 | tags: [ACM, C++, codeforces, 算法, 图论, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://codeforces.com/contest/404/problem/C ](http://codeforces.com/contest/404/problem/C) 11 | 12 | 13 | 14 | 15 | 思路:我们构造一颗最短路径树就行了。 16 | 17 | 若能够构造,边数必然为n-1(样例1的边数可以是两条)。 18 | 19 | 如何构造?从距离为1的点开始,逐渐往下加边,生成一颗k叉树。若在中间生成了大于k的叉,则输出-1。 20 | 21 | 22 | 23 | 24 | 完整代码: 25 | 26 | 27 | 28 | /*265ms,4436KB*/ 29 | 30 | #include 31 | using namespace std; 32 | 33 | vector dis[100005]; 34 | vector > ans; 35 | 36 | int main() 37 | { 38 | int n, k, d, m = 0; 39 | cin >> n >> k; 40 | for (int i = 1; i <= n; i++) 41 | { 42 | cin >> d; 43 | dis[d].push_back(i); ///统计距离 44 | m = max(m, d); 45 | } 46 | if (dis[0].size() != 1) 47 | { 48 | cout << "-1"; 49 | return 0; 50 | } 51 | for (int i = 1; i <= m; i++) 52 | { 53 | int edge = (i != 1), cnt = 0; 54 | for (int j = 0; j < dis[i].size(); j++) 55 | { 56 | if (edge == k) 57 | { 58 | edge = (i != 1); 59 | cnt++; ///换另一个点,即以后的边加到下一个点 60 | } 61 | if (cnt == dis[i - 1].size()) 62 | { 63 | cout << "-1"; 64 | return 0; 65 | } 66 | ans.push_back(make_pair(dis[i - 1][cnt], dis[i][j])); ///按距离逐渐加边 67 | edge++; 68 | } 69 | } 70 | cout << n - 1 << endl; ///由于构造的是一颗树(最短路径树),所以边数必然为点数-1 71 | for (int i = 0; i < ans.size(); i++) 72 | cout << ans[i].first << " " << ans[i].second << endl; 73 | return 0; 74 | } 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /blog.csdn.net/LightOJ 1009 Back to Underworld (种类并查集).md: -------------------------------------------------------------------------------- 1 | title: LightOJ 1009 Back to Underworld (种类并查集) 2 | 3 | date: 2014-03-24 16:35 4 | 5 | tags: [ACM, C++, lightoj, 并查集, 算法, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://lightoj.com/volume_showproblem.php?problem=1009 ](http://lightoj.com/volume_showproblem.php?problem=1009) 11 | 12 | 13 | 14 | 15 | 16 | 种类并查集实现(当然用二分图染色也可以) 17 | 18 | 19 | /*0.204s,2820KB*/ 20 | 21 | #include 22 | using namespace std; 23 | const int mx = 20000; 24 | 25 | int fa[mx * 2 + 5], rk[mx * 2 + 5], x[100005], y[100005]; 26 | bool has[mx * 2 + 5]; 27 | 28 | int find(int x) {return ~fa[x] ? fa[x] = find(fa[x]) : x;} 29 | 30 | void merge(int x, int y) 31 | { 32 | x = find(x), y = find(y); 33 | if (x == y) return; 34 | fa[y] = x; 35 | rk[x] += rk[y]; 36 | } 37 | 38 | int main() 39 | { 40 | int t, n, ans, cnt, u, v, fau, fav, i; 41 | scanf("%d", &t); 42 | for (int cas = 1; cas <= t; ++cas) 43 | { 44 | memset(fa, -1, sizeof(fa)); 45 | memset(rk, 0, sizeof(rk)); 46 | memset(has, 0, sizeof(has)); 47 | scanf("%d", &n); 48 | ans = cnt = 0; 49 | while (n--) 50 | { 51 | scanf("%d%d", &u, &v); 52 | x[cnt] = u, y[cnt++] = v; 53 | has[u] = has[v] = has[u + mx] = has[v + mx] = true; 54 | rk[u] = rk[v] = 1; 55 | } 56 | while (cnt--) 57 | { 58 | merge(x[cnt], y[cnt] + mx); 59 | merge(x[cnt] + mx, y[cnt]); ///切莫弄反 60 | } 61 | for (i = 1; i <= mx * 2; ++i) 62 | if (has[i] && fa[i] == -1) 63 | { 64 | fau = i, fav = find(i + mx); 65 | ans += max(rk[fau], rk[fav]); 66 | fa[fau] = fa[fav] = 0; ///已访问 67 | } 68 | printf("Case %d: %d\n", cas, ans); 69 | } 70 | return 0; 71 | } 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /blog.csdn.net/LightOJ 1062 Crossed Ladders (二分).md: -------------------------------------------------------------------------------- 1 | title: LightOJ 1062 Crossed Ladders (二分) 2 | 3 | date: 2014-03-26 18:57:00 4 | 5 | tags: [ACM, C++, 二分, 算法, lightoj, ] 6 | 7 | description: 8 | 9 | --- 10 | 11 | 12 | 13 | 14 | 15 | 16 | /*0.000s,1700KB*/ 17 | 18 | #include 19 | using namespace std; 20 | double EPS = 1e-8; 21 | 22 | int main() 23 | { 24 | double a, b, c, j, c1, h, k, x; 25 | int T, cas = 0; 26 | scanf("%d", &T); 27 | while (T--) 28 | { 29 | scanf("%lf%lf%lf", &a, &b, &c); 30 | h = k = x = 0; 31 | double lo = 0, hi = max(a, b); 32 | while (fabs(lo - hi) > EPS) 33 | { 34 | x = (lo + hi) / 2; 35 | h = sqrt(a * a - x * x); 36 | k = sqrt(b * b - x * x); 37 | c1 = (k * h) / (k + h); 38 | if (fabs(c1 - c) <= EPS) break; 39 | else if (c1 > c)lo = x + EPS; 40 | else hi = x - EPS; 41 | } 42 | printf("Case %d: %.7f\n", ++cas, x); 43 | } 44 | return 0; 45 | } 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /blog.csdn.net/LightOJ 1255 Substring Frequency (KMP模板).md: -------------------------------------------------------------------------------- 1 | title: LightOJ 1255 Substring Frequency (KMP模板) 2 | 3 | date: 2014-03-26 23:27:00 4 | 5 | tags: [ACM, C++, lightoj, kmp, 算法, ] 6 | 7 | description: 8 | 9 | --- 10 | 11 | 12 | 13 | 14 | 15 | 16 | /*0.068s,7548KB*/ 17 | 18 | #include 19 | using namespace std; 20 | const int mx = 1000005; 21 | 22 | char t[mx], p[mx]; 23 | int f[mx]; 24 | 25 | void getfail() 26 | { 27 | f[0] = f[1] = 0; 28 | for (int i = 1; p[i]; ++i) 29 | { 30 | int j = f[i]; 31 | while (j && p[i] != p[j]) j = f[j]; 32 | f[i + 1] = (p[i] == p[j] ? j + 1 : 0); 33 | } 34 | } 35 | 36 | int find() 37 | { 38 | int m = strlen(p), cnt = 0; 39 | getfail(); 40 | int j = 0; 41 | for (int i = 0; t[i]; ++i) 42 | { 43 | while (j && p[j] != t[i]) j = f[j]; 44 | if (p[j] == t[i]) ++j; 45 | if (j == m) ++cnt; 46 | } 47 | return cnt; 48 | } 49 | 50 | int main() 51 | { 52 | int tt; 53 | scanf("%d", &tt); 54 | getchar(); 55 | for (int cas = 1; cas <= tt; ++cas) 56 | { 57 | gets(t), gets(p); 58 | printf("Case %d: %d\n", cas, find()); 59 | } 60 | return 0; 61 | } 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /blog.csdn.net/LightOJ 1258 Making Huge Palindromes (回文&KMP).md: -------------------------------------------------------------------------------- 1 | title: LightOJ 1258 Making Huge Palindromes (回文&KMP) 2 | 3 | date: 2014-03-27 13:40:00 4 | 5 | tags: [ACM, C++, lightoj, kmp, 算法, ] 6 | 7 | description: 8 | 9 | --- 10 | 11 | 12 | 13 | 14 | 15 | 首先原串+翻转过来的串必然是一个回文串,但是二者在中间可以“融合”,而KMP算法恰好可以求出最大融合长度。 16 | 17 | 所以看翻转过来的串能匹配多少原串即可,答案就是len+(len-匹配个数)。 18 | 19 | 20 | 21 | 22 | 完整代码: 23 | 24 | 25 | 26 | /*0.140s,7548KB*/ 27 | 28 | #include 29 | using namespace std; 30 | const int mx = 1000005; 31 | 32 | char t[mx], p[mx]; 33 | int f[mx], len; 34 | 35 | void getfail() 36 | { 37 | f[0] = f[1] = 0; 38 | for (int i = 1; p[i]; ++i) 39 | { 40 | int j = f[i]; 41 | while (j && p[i] != p[j]) j = f[j]; 42 | f[i + 1] = (p[i] == p[j] ? j + 1 : 0); 43 | } 44 | } 45 | 46 | int find() 47 | { 48 | getfail(); 49 | int j = 0; 50 | for (int i = 0; t[i]; ++i) 51 | { 52 | while (j && p[j] != t[i]) j = f[j]; 53 | if (p[j] == t[i]) ++j; 54 | } 55 | return (len << 1) - j; 56 | } 57 | 58 | int main() 59 | { 60 | int tt; 61 | scanf("%d", &tt); 62 | getchar(); 63 | for (int cas = 1; cas <= tt; ++cas) 64 | { 65 | gets(t); 66 | len = strlen(t); 67 | reverse_copy(t, t + len, p); 68 | p[len] = 0; 69 | printf("Case %d: %d\n", cas, find()); 70 | } 71 | return 0; 72 | } 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /blog.csdn.net/POJ 2932 Coneology (扫描线判断最外面的圆&set维护最近的圆).md: -------------------------------------------------------------------------------- 1 | title: POJ 2932 Coneology (扫描线判断最外面的圆&set维护最近的圆) 2 | 3 | date: 2014-03-20 15:08 4 | 5 | tags: [ACM, C++, codeforces, 扫描线, 计算几何, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://poj.org/problem?id=2932 ](http://poj.org/problem?id=2932) 11 | 12 | 13 | 14 | 15 | 先给圆的最左端和最右端的点排个序,当两点x相同时,左端点排在前面。 16 | 17 | 然后就是扫描了, 18 | 19 | 若扫描到的是圆的左端点,就判断圆心(y坐标)在其上方且离其最近的圆是否包含此圆,以及圆心(y坐标)在其下方且离其最近的圆是否包含此圆,若包含就continue,不包含就insert到set中; 20 | 21 | 若扫描到的是圆的右端点,就从set中erase此圆(erase操作考虑了圆不在set中的情况) 22 | 23 | 24 | 25 | 26 | 完整代码: 27 | 28 | 29 | 30 | /*2282ms,5064KB*/ 31 | 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | using namespace std; 38 | const int mx = 40005; 39 | 40 | int n; 41 | double x[mx], y[mx], r[mx]; 42 | pair px[mx * 2]; 43 | vector res; ///答案 44 | set > out; ///最外层的圆的集合(维护圆心纵坐标) 45 | set >::iterator it; 46 | 47 | ///判断圆i是否在圆j内部 48 | inline bool inside(int i, int j) 49 | { 50 | return (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]) <= r[j] * r[j]; 51 | } 52 | 53 | void solve() 54 | { 55 | for (int i = 0, j = 0; i < n; ++i) 56 | { 57 | px[j++] = make_pair(x[i] - r[i], i); 58 | px[j++] = make_pair(x[i] + r[i], i + n); 59 | } 60 | int m = n * 2; 61 | sort(px, px + m); 62 | for (int i = 0; i < m; ++i) 63 | { 64 | int id = px[i].second % n; 65 | if (px[i].second < n) ///扫描到左端 66 | { 67 | it = out.lower_bound(make_pair(y[id], id)); 68 | if (it != out.end() && inside(id, it->second) || 69 | it != out.begin() && inside(id, (--it)->second)) continue; 70 | res.push_back(id); 71 | out.insert(make_pair(y[id], id)); 72 | } 73 | else out.erase(make_pair(y[id], id)); ///扫描到右端 74 | } 75 | sort(res.begin(), res.end()); 76 | printf("%d\n", res.size()); 77 | printf("%d", res[0] + 1); 78 | for (int i = 1; i < res.size(); ++i) printf(" %d", res[i] + 1); 79 | } 80 | 81 | int main() 82 | { 83 | scanf("%d", &n); 84 | for (int i = 0; i < n; ++i) scanf("%lf%lf%lf", &r[i], &x[i], &y[i]); 85 | solve(); 86 | return 0; 87 | } 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /blog.csdn.net/POJ 3104 Drying (二分&最大化最小值).md: -------------------------------------------------------------------------------- 1 | title: POJ 3104 Drying (二分&最大化最小值) 2 | 3 | date: 2014-03-22 10:10 4 | 5 | tags: [ACM, C++, codeforces, 算法, 二分, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://poj.org/problem?id=3104 ](http://poj.org/problem?id=3104) 11 | 12 | 13 | 14 | 15 | 一开始没注意k为1的情况,WA了一发。。 16 | 17 | 加个特判就过了。 18 | 19 | 20 | 21 | 22 | 完整代码: 23 | 24 | 25 | 26 | /*750ms,576KB*/ 27 | 28 | #include 29 | #include 30 | #include 31 | using namespace std; 32 | const int mx = 100005; 33 | 34 | int n, k, a[mx]; 35 | 36 | bool judge(int time) 37 | { 38 | int cnt = 0; 39 | for (int i = 0; i < n; ++i) 40 | { 41 | if (a[i] > time) cnt += ceil((double)(a[i] - time) / k); 42 | if (cnt > time) return false; 43 | } 44 | return true; 45 | } 46 | 47 | int main() 48 | { 49 | scanf("%d", &n); 50 | int l = 0, r = 0, m; 51 | for (int i = 0; i < n; ++i) scanf("%d", &a[i]), r = max(r, a[i]); 52 | scanf("%d", &k); 53 | if (k == 1) return printf("%d", r), 0; ///要特判k为1的情况!! 54 | --k; 55 | while (l + 1 < r) judge(m = (l + r) >> 1) ? r = m : l = m; 56 | printf("%d", l + 1); 57 | return 0; 58 | } 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /blog.csdn.net/POJ 3273 Monthly Expense (二分&最大化最小值).md: -------------------------------------------------------------------------------- 1 | title: POJ 3273 Monthly Expense (二分&最大化最小值) 2 | 3 | date: 2014-03-22 09:38 4 | 5 | tags: [ACM, C++, codeforces, 二分, 算法, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://poj.org/problem?id=3273 ](http://poj.org/problem?id=3273) 11 | 12 | 13 | 14 | 15 | 要特别注意l的初值选取,若这题输入的日开支可以是0的话,l应初始化为-1 16 | 17 | 18 | /*63ms,556KB*/ 19 | 20 | #include 21 | const int mx = 100005; 22 | 23 | int n, mon, a[mx]; 24 | 25 | bool judge(int m) 26 | { 27 | int sum = 0, cnt = 1; 28 | for (int i = 0; i < n; ++i) 29 | { 30 | sum += a[i]; 31 | if (sum > m) 32 | { 33 | if (a[i] > m) return false; 34 | sum = a[i]; 35 | ++cnt; 36 | } 37 | if (cnt > mon) return false; 38 | } 39 | return true; 40 | } 41 | 42 | int main() 43 | { 44 | scanf("%d%d", &n, &mon); 45 | int sum = 0; 46 | for (int i = 0; i < n; ++i) scanf("%d", &a[i]), sum += a[i]; 47 | int l = 0, r = sum, m; 48 | while (l + 1 < r) judge(m = (l + r) >> 1) ? r = m : l = m; 49 | printf("%d", l + 1); 50 | return 0; 51 | } 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /blog.csdn.net/Python version 2.7 required, which was not found in the registry.md: -------------------------------------------------------------------------------- 1 | title: Python version 2.7 required, which was not found in the registry 2 | 3 | date: 2014-03-26 10:27 4 | 5 | tags: [python, 注册表, ] 6 | 7 | description: 8 | 9 | --- 10 | 安装Python时没注册注册表?好办,把下面的代码放到你Python所在目录,运行即可。 11 | 12 | 13 | 14 | 15 | 16 | # 17 | # script to register Python 2.0 or later for use with win32all 18 | # and other extensions that require Python registry settings 19 | # 20 | # written by Joakim Loew for Secret Labs AB / PythonWare 21 | # 22 | # source: 23 | # http://www.pythonware.com/products/works/articles/regpy20.htm 24 | # 25 | # modified by Valentine Gogichashvili as described in http://www.mail-archive.com/distutils-sig@python.org/msg10512.html 26 | 27 | import sys 28 | 29 | from _winreg import * 30 | 31 | # tweak as necessary 32 | version = sys.version[:3] 33 | installpath = sys.prefix 34 | 35 | regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version) 36 | installkey = "InstallPath" 37 | pythonkey = "PythonPath" 38 | pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % ( 39 | installpath, installpath, installpath 40 | ) 41 | 42 | def RegisterPy(): 43 | try: 44 | reg = OpenKey(HKEY_CURRENT_USER, regpath) 45 | except EnvironmentError as e: 46 | try: 47 | reg = CreateKey(HKEY_CURRENT_USER, regpath) 48 | SetValue(reg, installkey, REG_SZ, installpath) 49 | SetValue(reg, pythonkey, REG_SZ, pythonpath) 50 | CloseKey(reg) 51 | except: 52 | print "*** Unable to register!" 53 | return 54 | print "--- Python", version, "is now registered!" 55 | return 56 | if (QueryValue(reg, installkey) == installpath and 57 | QueryValue(reg, pythonkey) == pythonpath): 58 | CloseKey(reg) 59 | print "=== Python", version, "is already registered!" 60 | return 61 | CloseKey(reg) 62 | print "*** Unable to register!" 63 | print "*** You probably have another Python installation!" 64 | 65 | if __name__ == "__main__": 66 | RegisterPy() 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /blog.csdn.net/SGU 104 Little Shop of Flowers (DP&打印路径).md: -------------------------------------------------------------------------------- 1 | title: SGU 104 Little Shop of Flowers (DP&打印路径) 2 | 3 | date: 2014-03-23 18:35 4 | 5 | tags: [ACM, C++, sgu, DP, 算法, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://acm.sgu.ru/problem.php?contest=0&problem=104 ](http://acm.sgu.ru/problem.php?contest=0&problem=104) 11 | 12 | 13 | 14 | 15 | 16 | /*15ms,142KB*/ 17 | 18 | #include 19 | using namespace std; 20 | const int mx = 105; 21 | 22 | int a[mx][mx], dp[mx][mx], f; 23 | 24 | void print(int i, int j) 25 | { 26 | if (i == 0) return; 27 | for (; dp[i][j] == dp[i][j - 1]; --j) 28 | ; 29 | print(i - 1, j - 1); 30 | printf("%d", j); 31 | if (i < f) putchar(' '); 32 | } 33 | 34 | void solve(int f, int v) 35 | { 36 | int i, j; 37 | for (i = 1; i <= f; ++i) 38 | for (j = i; j <= v - f + i; ++j) 39 | dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1] + a[i][j]); 40 | printf("%d\n", dp[f][v] - f * 100); 41 | print(f, v); 42 | } 43 | 44 | int main() 45 | { 46 | int v, i, j; 47 | scanf("%d%d", &f, &v); 48 | for (i = 1; i <= f; ++i) 49 | for (j = 1; j <= v; ++j) 50 | scanf("%d", &a[i][j]), a[i][j] += 100; 51 | solve(f, v); 52 | return 0; 53 | } 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /blog.csdn.net/SGU 108 Self-numbers 2 (另一种滚动数组).md: -------------------------------------------------------------------------------- 1 | title: SGU 108 Self-numbers 2 (另一种滚动数组) 2 | 3 | date: 2014-03-23 20:49 4 | 5 | tags: [ACM, C++, sgu, 算法, 数学, ] 6 | 7 | description: 8 | 9 | --- 10 | [ http://acm.sgu.ru/problem.php?contest=0&problem=108 ](http://acm.sgu.ru/problem.php?contest=0&problem=108) 11 | 12 | 13 | 14 | 15 | 我直接转的 [ http://www.cnblogs.com/staginner/archive/2011/12/24/2300689.html ](http://www.cnblogs.com/staginner/archive/2011/12/24/2300689.html) 16 | 17 | 他写得很好: 18 | 19 | 这个题目可以直接筛出来结果,但要注意几个问题:①数组不够大,但由于推断的时候前后影响的区间并不大,因此我们可以把数组循环使用,对数组操作的时候多加一个取模运算即可。②空间不允许我们先把所有结果都处理出来,因此我们可以在筛的过程中,标记一下当前筛出的是第几个数,如果是需要输出的,再存到指定位置去即可,这样只要开出K的空间来就可以了。③由于si可能是无序的,而我们在筛的过程中只能顺序找到,而我们又不能每次都花O(K)的时间去看看当前是不是要输出的,所以需要预先按si的值排下序,为了能够方便查找、更改,我们不能直接对si排序,但可以对si的标号按si的大小进行排序,同时还要注意si有可能有相同大小的值。 20 | 21 | 此外,取模运算的时候如果用位运算代替的话,会让效率高很多。 22 | 23 | 24 | #include 25 | #include 26 | #include 27 | #define MAXD 100010 28 | #define MAXK 5010 29 | const int D = (1 << 16) - 1; 30 | 31 | int N, K, a[MAXK], r[MAXK]; 32 | char d[MAXD]; 33 | 34 | int cmp(const void *_p, const void *_q) 35 | { 36 | int *p = (int *)_p; 37 | int *q = (int *)_q; 38 | return a[*p] - a[*q]; 39 | } 40 | 41 | int get(int n) 42 | { 43 | int res = n; 44 | while (n) 45 | { 46 | res += n % 10; 47 | n /= 10; 48 | } 49 | return res; 50 | } 51 | 52 | int main() 53 | { 54 | scanf("%d%d", &N, &K); 55 | int i, j, k, num, t; 56 | for (i = 0; i < K; i ++) 57 | scanf("%d", &a[i]); 58 | a[K] = 0; 59 | for (i = 0; i < K; i ++) 60 | r[i] = i; 61 | qsort(r, K, sizeof(r[0]), cmp); 62 | r[K] = K; 63 | memset(d, '\0', sizeof(d)); 64 | num = k = 0; 65 | for (i = 1; i <= N; i ++) 66 | { 67 | if (!d[i & D]) 68 | { 69 | ++ num; 70 | while (num == a[r[k]]) 71 | a[r[k ++]] = i; 72 | } 73 | t = get(i); 74 | if (t <= N) 75 | d[t & D] = '0'; 76 | d[i & D] = '\0'; 77 | } 78 | printf("%d\n", num); 79 | printf("%d", a[0]); 80 | for (i = 1; i < K; i ++) 81 | printf(" %d", a[i]); 82 | printf("\n"); 83 | return 0; 84 | } 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /blog.csdn.net/UVa 11178 Morley's Theorem (向量旋转).md: -------------------------------------------------------------------------------- 1 | title: UVa 11178 Morley's Theorem (向量旋转) 2 | 3 | date: 2014-03-27 16:35:00 4 | 5 | tags: [ACM, C++, 算法, 计算几何, uva, ] 6 | 7 | description: 8 | 9 | --- 10 | [http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2119](http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2119) 11 | 12 | 13 | 14 | 15 | 16 | /*0.025s*/ 17 | 18 | #include 19 | #include 20 | 21 | struct P 22 | { 23 | double x, y; 24 | P(double x = 0.0, double y = 0.0): x(x), y(y) {} 25 | void read() {scanf("%lf%lf", &x, &y);} 26 | void output() {printf("%f %f", x, y);} 27 | }; 28 | typedef P Vector; 29 | 30 | Vector operator + (const Vector &A, const Vector &B) {return Vector(A.x + B.x, A.y + B.y);} 31 | Vector operator - (const P &A, const P &B) {return Vector(A.x - B.x, A.y - B.y);} 32 | Vector operator * (const Vector &A, double p) {return Vector(A.x * p, A.y * p);} 33 | Vector Rotate(const Vector &A, double rad) {return Vector(A.x * cos(rad) - A.y * sin(rad), A.x * sin(rad) + A.y * cos(rad));} 34 | inline double Dot(const Vector &A, const Vector &B) {return A.x * B.x + A.y * B.y;} 35 | inline double Cross(const Vector &A, const Vector &B) {return A.x * B.y - A.y * B.x;} 36 | inline double Length(const Vector &A) {return hypot(A.x, A.y);} 37 | inline double Angle(const Vector &A, const Vector &B) {return acos(Dot(A, B) / Length(A) / Length(B));} 38 | 39 | inline P GetLineIntersection(const P &p1, const Vector &s1, const P &p2, const Vector &s2) 40 | { 41 | return p1 + s1 * (Cross(s2, p1 - p2) / Cross(s1, s2)); 42 | } 43 | 44 | P getP(P A, P B, P C) 45 | { 46 | Vector v1 = Rotate(C - B, Angle(A - B, C - B) / 3); 47 | Vector v2 = Rotate(B - C, -Angle(A - C, B - C) / 3); /// 负数表示顺时针旋转 48 | return GetLineIntersection(B, v1, C, v2); 49 | } 50 | 51 | int main() 52 | { 53 | int T; 54 | P A, B, C; 55 | scanf("%d", &T); 56 | while (T--) 57 | { 58 | A.read(), B.read(), C.read(); 59 | getP(A, B, C).output(), putchar(32); 60 | getP(B, C, A).output(), putchar(32); 61 | getP(C, A, B).output(), putchar(10); 62 | } 63 | return 0; 64 | } 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /blog.csdn.net/[置顶]搬家.md: -------------------------------------------------------------------------------- 1 | title: [置顶]搬家 2 | 3 | date: 2014-03-28 15:26:00 4 | 5 | tags: [endless, 搬家, ] 6 | 7 | description: 8 | 9 | --- 10 | 【2015年3月1日更新】 11 | 12 | 现在 logdown 已被墙,弃之。 13 | 14 | 最新的博客是  15 | 16 | 17 | 18 | 19 | \---原文--- 20 | 21 | 22 | 23 | 24 | 新博客森森地吸引了我。。 25 | 26 | 27 | 28 | 此后就不在CSDN上发文章了。 29 | 30 | 有评论的话还是会回复的。 31 | 32 | 33 | 34 | 35 | 博客上比较好的文章已经分类在中了。 36 | 37 | 38 | 39 | 40 | 【2014年6月22日更新】 41 | 42 | 新的个人静态博客——[简言](http://jianyan.me/)已经搭好,专门用来写些技术文章。 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /blog.daimajia.com/2014年的末尾.md: -------------------------------------------------------------------------------- 1 | title: 2014年的末尾 2 | 3 | date: 2014-12-30 22:03:41 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 一晃一年过去了,这一年,就是不停的折腾。 11 | 12 | 2月份的时候开源了EverMemo。 13 | 14 | 3月份买了第一部iPhone,以前总是觉得自己是个Android开发者,用iPhone是很不合适的。现在看来也没什么。 15 | 16 | 4月份的时候心里一直惦记着写一个Android开源组件,大多数研究生得给导师干活,不过我倒是活的蛮轻松的,因为我很少会跟实验室的老师打交道,总是默默的藏在角落干自己的事情,实验室的一枚老师也总是会庇护我,让我努力去做点儿自己喜欢的事情,几个Android组件也是在4-6月份集中写完的。 17 | 18 | 4-6月就那么一晃而过了,什么科研也没搞,就是在不停的做些开源的Android组件,5月份的时候参加了GDG的Google I/O直播,做了关于开源的闪电演讲,认识了不少新朋友。 19 | 20 | 还去参加了AnimeTaste五周年纪念日的活动,再次见到了少楠,小胖,小简姐还有其他AT!的成员们。 21 | 22 | 暑假没回家,百无聊赖的写完了[AndroidSwipeLayout](https://github.com/daimajia/AndroidSwipeLayout)。 23 | 24 | 8月份的时候CSDN发了一篇「[速来膜拜!20位活跃在Github上的国内技术大牛](http://code.csdn.net/news/2821086)」,被小暴光了下。 25 | 26 | 9月份的时候,忽然想把「[回望](http://blog.daimajia.com/story-of-me/)」做成一个产品,便建了个微信群,叫了我最好的朋友- [kalasoo](http://ming.today) / [明泽 ](http://ming-zhe.me)/ [宋只羊](http://s2003zy.com) / 江江 一起开启Impressive这个项目。 27 | 28 | 做Impressive期间,参加了GDG的DevFest,做了另一个关于学习Android中自我提升的闪电演讲。 29 | 30 | 10月末的时候,impressive的雏形便有了,经历了无知乐观后,整个团队陷入了很深的悲观情绪中,担心用户不会使用,担心场景不够强,直到一日在「雕刻时光」里大家一起拍桌而起,认为想到了一个绝好的idea,便冲动的停掉了这个还没有出生的项目,开启了另一个有趣的项目「[稀土 – 每天都有特别的人](http://xitu.io)」。 31 | 32 | 11月末的时候,经历了一个月的开发,小心翼翼的开始了Alpha内测,反响还不错。 33 | 34 | 12月末的时候,也就是我正在写这篇POST的前几天,敲定了天使轮的投资,下学期也打算休学完全投入进去了。 35 | 36 | 来年注定是忙碌的一年,但又无妨,悠闲是可怕的陷阱。 37 | 38 | 附上几张团队码代码图,看到了吗?从穿短袖的夏天到寒冷的冬季: 39 | 40 | 另外得感谢36kr,感谢天使汇,感谢Luc。 41 | 42 | [![](http://imagizer.imageshack.us/v2/800x600q90/742/Q6z9KY.jpg)](http://www.ming.today/timeline) 43 | 44 | ![](http://ww1.sinaimg.cn/mw690/610dc034jw1enoncsb0rbj21kw16oay4.jpg) 45 | ![](http://ww1.sinaimg.cn/mw690/610dc034jw1enongxwilfj20nq0hs77g.jpg) 46 | -------------------------------------------------------------------------------- /blog.daimajia.com/AnimeTaste今日开源.md: -------------------------------------------------------------------------------- 1 | title: AnimeTaste今日开源 2 | 3 | date: 2013-09-19 06:50:38 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 这是一个值得纪念的日子,今天AnimeTaste For Android开源了! 11 | 12 | 13 | 14 | 欢迎大家star,fork 甚至二次开发并且发布,我会关注每一个分支的发展情况,因为我爱开源。 15 | -------------------------------------------------------------------------------- /blog.daimajia.com/AnimeTaste全平台用户破十万!.md: -------------------------------------------------------------------------------- 1 | title: AnimeTaste全平台用户破十万! 2 | 3 | date: 2013-09-24 18:50:49 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 还没有下载的朋友们快去下载吧! 11 | 12 | Android戳这里: 13 | 14 | iOS戳这里: 15 | -------------------------------------------------------------------------------- /blog.daimajia.com/AnimeTaste开发完成.md: -------------------------------------------------------------------------------- 1 | title: AnimeTaste开发完成 2 | 3 | date: 2013-08-31 22:26:00 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 耗时两周,开发完成。 11 | 12 | 正式版本下载地址: 13 | 14 | ![](http://ww3.sinaimg.cn/mw690/610dc034jw1e885obnjy6j208c0b43zo.jpg)    ![](http://ww2.sinaimg.cn/mw690/610dc034jw1e885o9kjgzj208c0b40ty.jpg) 15 | -------------------------------------------------------------------------------- /blog.daimajia.com/AnimeTaste开源计划.md: -------------------------------------------------------------------------------- 1 | title: AnimeTaste开源计划 2 | 3 | date: 2013-09-11 18:41:01 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | [AnimeTaste 发布](http://blog.zhan-dui.com/?p=577)出去后,很多[小伙伴问我](http://blog.zhan-dui.com/?p=577),能不能开源这个App。 11 | 12 | 今天给大家一个正式的答复:**开!** 13 | 14 | 不过得等到稍微稳定一些的时候开放,目测还得2个月左右,我个人有些完美主义倾向,不会为了发布App而发布App。我也会一直完善这个App,不管是供大家学习还是二次开发,我都会全力给大家提供帮助。 15 | 16 | 之所以这么支持开源,源于自己大二的时候,GitHub出来两年(一年半?)之际,我注册了GitHub的账户,只是听说那是个开源社区,但是登陆进去一片茫然,不知道Git命令是什么,不知道版本控制是什么,只是单纯赶了个时髦,开源爱好者也成了自己标榜的噱头。 17 | 18 | 直到… 19 | 20 | 自己在开发小熊词典的的时候,遇到一个真真切切的问题:如何把Android 3.0以上的ActionBar,兼容到Android 3.0以下。随后为此展开各路搜索,StatckOverFlow告诉我:快去使用一个叫[ActionBarSherlock](https://github.com/JakeWharton/ActionBarSherlock)的库吧。 21 | 22 | 初学使用别人的库配置ActionBarSherlock是个很痛苦的事情,因为各种不会,不知道如何导入…导入后又是一堆错误…不但ActionBarSherlock出错,连自己原来的代码也冒出红色感叹号。 23 | 24 | 又是一番狂风暴雨般的搜索…. 25 | 26 | 花了三天左右,彻底明白了这些流程的头头尾尾,当ActionBar成功的在我的HTC Desire上跑起来时,惊、喜、成就感。 27 | 28 | 丢下手头的事情… 29 | 30 | 开始点下GitHub的 Explorer…. 那场景就像:整理书柜,无意翻开一本小说,却不曾想一下子陷了进去,进入到了小说的世界。 31 | 32 | [我的GitHub](https://github.com/daimajia) | [开源进度咨询](mailto:daimajia@gmail.com) 33 | -------------------------------------------------------------------------------- /blog.daimajia.com/Html5 Web Socket.md: -------------------------------------------------------------------------------- 1 | title: Html5 Web Socket 2 | 3 | date: 2013-03-29 22:33:28 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 一、出身 11 | 12 | HTML5 13 | 14 | 二、使命 15 | 16 | HTML5 Web Socket并不是像Ajax那样用来增强传统HTTP协议的功能,而是由w3c带来的全新的改变,尤其适用于在需要_实时通信(real-time)和 事件驱动(event-drive)_的web程序中。 17 | 18 | :扫盲real-time和event-drive 19 | 20 | real-time 即时消息,就类似于在线炒股,监控系统(如电厂即时电压,电流稳定性等),这类事务一般都需要实时而且可靠的消息,通常哪怕几秒的延迟都是难以忍受的。 21 | 22 | event-drive 事件驱动,就类似于当你按下 Alt+F4 的键盘组合键,浏览器会把这个当成一个关闭事件处理,在web中,就类似于新浪微博的私信提醒一样,有消息到来会通知浏览器弹出消息框。 23 | 24 | 现在网页通常使用ajax来实现此类架构,浏览器按一定的时间间隔不断请求服务器看有没有新消息到来,服务器不断做查询处理,而后返回相应数据,这是一种单通道式的响应(就好比一条单向公路),即客户浏览器只能通过HTTP协议主动联系服务器而后在建立的一个HTTP链接中服务器做出响应,随后该链接被中断,服务器无法主动联系用户浏览器建立连接做出改变或传递信息。 25 | 26 | 这样很多情况下,即便传递一个1byte的数据,都需要经过一段复杂的流程(各种协议头包装),而且会使实际的数据包变大很多。HTTP的设计本身就不是Real-time和Full-duplex(全双工)的。 27 | 28 | html5 Web Socket就将这条通道打通,能双向的交换信息(全双工),并且减少了数据包大小。 29 | 30 | 因而优势如下 31 | 32 | 三、优势 33 | 34 | 1. _Reducing kilobytes of data to 2 bytes (数据减少到2bytes)_ 35 | 2. __Reducing latency from 150ms to 50ms (延迟从150毫秒减少到50毫秒)__ 36 | 37 | 四、Web Socket出现前的尝试方案和解决方案 38 | 39 | 1. Polling (轮询):  浏览器按一定间隔发送http请求,服务器做出响应,类ajax。最好的情形就是服务器端新消息到来的间隔是已知的,不然会做出很多无意义的查询或处理行为。 40 | 2. Long-Polling (长轮询):  浏览器发送一个请求给服务器端,服务器端做出响应建立连接,并且保持一段时间的连接(通过阻塞来实现),在这一段时间内,如果服务器端收到与你相关的消息,就会给你发个response回来。如果在这一段时间内没有消息,则会主动断开连接。这个看似解决了问题,但是考虑一下,如果你的消息非常多,而且此时同时使用此服务的其他人消息也非常多,服务器是没法保证能够及时给你发回response,因为后台实现只能通过循环来处理。 41 | 3. Streaming (流): 在介绍这种解决方案之前,先要介绍一下 流 。最长接触到的 流 方式就是在线听歌的方式传递数据。将streaming 封装在 http协议中,浏览器首先请求服务器端,服务器建立连接,并且不再切断该连接,用类似传送音乐的形式远远不断的发送当前消息状态。 这种方式会使得IE永远显示网页未加载完成(不过可以解决)… 而且会加重服务器端的负载,极大的浪费服务器资源。在有防火墙或者代理环境下,防火墙会对数据进行buffering,并且扫描安全性,无疑又增加了延迟。 42 | 43 | 具体可以看以下链接: 44 | 45 | [IBM Developer](http://www.ibm.com/developerworks/cn/web/wa-lo-comet/) 46 | 47 | 四、如今有了web socket 48 | 49 | 1. 数据头被简化 50 | 2. 数据可双向发送 51 | 3. 文本和二进制帧均可发送,并且最小帧只有2bytes  Note:虽然可以发送2进制数据,但是由于javasccript不支持,所以客户端会忽略此种数据。不过可以在其他支持平台发送。 52 | 53 | 五、支持情况 54 | 55 | * IE 10+ 56 | * Chrome 4+ 57 | * Safari 5+ 58 | * Firefox 4+ 59 | * Opera 11+ 60 | 61 | 更多详细支持情况在[WikiPedia](http://en.wikipedia.org/wiki/WebSocket#Browser_support)上。 62 | 63 | 六、相关开源库/产品 64 | 65 | * [SocketIO](http://socket.io/) 66 | * [Sails](https://github.com/balderdashy/sails) 67 | * [Meteor](http://meteor.com/) 68 | * [PeerCDN](http://peercdn.com/) 69 | * [FireBase](https://www.firebase.com/) 70 | -------------------------------------------------------------------------------- /blog.daimajia.com/「问题解决」MongoDB dbexit really exiting now.md: -------------------------------------------------------------------------------- 1 | title: 「问题解决」MongoDB dbexit really exiting now 2 | 3 | date: 2013-07-01 15:59:41 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 如果你在启动MongoDB的时候,出现以下错误: 11 | 12 | Wed Apr 27 10:02:41 [initandlisten] shutdown: going to close listening sockets… 13 | Wed Apr 27 10:02:41 [initandlisten] shutdown: going to flush diaglog… 14 | Wed Apr 27 10:02:41 [initandlisten] shutdown: going to close sockets… 15 | Wed Apr 27 10:02:41 [initandlisten] shutdown: waiting for fs preallocator… 16 | Wed Apr 27 10:02:41 [initandlisten] shutdown: closing all files… 17 | Wed Apr 27 10:02:41 closeAllFiles() finished 18 | Wed Apr 27 10:02:41 [initandlisten] shutdown: removing fs lock… 19 | Wed Apr 27 10:02:41 [initandlisten] couldn’t remove fs lock errno:9 Bad file descriptor 20 | Wed Apr 27 10:02:41 dbexit: really exiting now 21 | 22 | 理论来说,是因为缺乏写权限,无法向/data/db/文件夹写入数据。 23 | 24 | 修复方法: 25 | 26 | **sudo chown `id -u` /data/db** 27 | 28 | **sudo mongo** 29 | 30 | 如果还有问题: 31 | 32 | **sudo mongo –repaire** 33 | -------------------------------------------------------------------------------- /blog.daimajia.com/【Android问题解决】The application’s PagerAdapter changed the adapter’s contents without calling PagerAdapter#notifyDataSetChanged.md: -------------------------------------------------------------------------------- 1 | title: 【Android问题解决】The application’s PagerAdapter changed the adapter’s contents without calling PagerAdapter#notifyDataSetChanged 2 | 3 | date: 2013-06-07 16:00:27 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 首先不得不说,ADT22就是个大坑,一旦更新,过去稍不符合规定的代码,统统会现出原形来。(其实就是ADT22变得严格了) 11 | 12 | > FATAL EXCEPTION: main java.lang.IllegalStateException: The application’s PagerAdapter changed the adapter’s contents without calling PagerAdapter#notifyDataSetChanged!  13 | 14 | 出这个错,是因为你的PagerAdapter中的数据变了,但是没有调用adapter.notifyDataSetChanged方法。 15 | 16 | 如果你的代码逻辑是这样的: 17 | 18 | > class XXX extends asynctask 19 | > 20 | > … 21 | > 22 | > doInBackground(…){ 23 | > 24 | > 1、**获取数据** 25 | > 26 | > 2、**添加到数据池** 27 | > 28 | > 3、**publicProgress()** 29 | > 30 | > } 31 | > 32 | > onPublicProgress(…){ 33 | > 34 | > 4、调用adapter的notifydatasetchanged方法 35 | > 36 | > } 37 | 38 | 在ADT22中,上面的代码肯定会报错的。为什么? 39 | 40 | 看下官方文档对[ support/v4/view/PagerAdapter](http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html) 的一个解释: 41 | 42 | PagerAdapter supports data set changes. Data set changes must occur on the main thread and must end with a call to `[notifyDataSetChanged()](http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#notifyDataSetChanged\(\))` similar to AdapterView adapters derived from `[BaseAdapter](http://developer.android.com/reference/android/widget/BaseAdapter.html)`. 43 | 44 | 出错原因:数据更新必须在main thread进行更新!!结束前还得调用 notifyDataSetChanged() !! 45 | 46 | 也就是说,必须得把上面的2步骤,移动到onPublicProgress中才正常。 47 | -------------------------------------------------------------------------------- /blog.daimajia.com/【Android问题解决】Unable to resolve superclass of Landroidsupportv4appWatson.md: -------------------------------------------------------------------------------- 1 | title: 【Android问题解决】Unable to resolve superclass of Landroidsupportv4appWatson 2 | 3 | date: 2013-06-06 07:26:19 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 之前一直在Eclipse上开发小熊词典,Google I/O上推出Android Studio后,就转到Studio上了,但是项目依赖的文件太多,配置总是失败(因为尝试的Git方式管理),就打算重新在Eclipse上配置好再导入到Android Studio中。但是…Eclipse编译通过了,当在手机上运行的时候就出问题了。问题很传统,就是ClassNotFound,这种问题普遍是由于Android.manifest文件中的类名或者包名写错的原因。网上解决方案一大堆,我再三检查根本不是这个问题,我还总是不相信自己的眼睛,删掉ANdorid:name 认真粘贴的路径。。。 11 | 12 | 但是,这种屌丝的作法根本不解决问题,依然爆出如下错误:(橘黄色是Warning 红色是Error) 13 | 14 | 1. **Unable to resolve superclass of Landroid/support/v4/app/Watson;** (149) 15 | 2. **Link of class ‘Landroid/support/v4/app/Watson;’ failed** 16 | 3. **Unable to resolve superclass of Lcom/actionbarsherlock/app/SherlockFragmentActivity; (161)** 17 | 18 | ….直到最后: 19 | 20 | 4\.  **java.lang.RuntimeException: Unable to instantiate activity ComponentInfo  java.lang.ClassNotFoundException** 21 | 22 | 连续搜索了很多此 **Unable to instantiate activity ComponentInfo ClassNotFoundException** (因为总觉得Warning是不足轻重的!)… 看了一堆stackoverflow的帖子,都类似类名出错….最后看到那个warning抱着试一试的态度搜了一下 **Unable to resolve superclass of Landroid/support/v4/app/Watson 在**GitHub的ActionBarSherlock的issue中终于找到了答案,而后百感交集啊。。。总结如下: 23 | 24 | 问题原因:更新到了SDK 22    具体看此处: [GoogleCode](https://code.google.com/p/android/issues/detail?id=55304) [GitHub Issue](https://github.com/JakeWharton/ActionBarSherlock/issues/857) 25 | 26 | 问题解决: 27 | 28 | 1. 右键项目,选择属性 29 | 2. Java Build Path – > Order and Export 30 | 3. 选中 Android Private Libraries 31 | 32 | 教训:不要忽略warning! 33 | -------------------------------------------------------------------------------- /blog.daimajia.com/世界杯,玩儿嗨啦!.md: -------------------------------------------------------------------------------- 1 | title: 世界杯,玩儿嗨啦! 2 | 3 | date: 2014-06-19 18:50:47 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 世界杯来啦,最近完全是当赌徒的节奏,赌球还真是个体力,脑力的双重考验! 11 | 12 | 最近最High的时刻!献上世界杯的主题曲合集,祝大家世界杯玩儿的开心! 13 | 14 | PS: 最近每天在[微博](http://weibo.com/daimajia)都有放押球记录,欢迎大家跟买。当然前提你要心态好啦! 15 | -------------------------------------------------------------------------------- /blog.daimajia.com/关于前几天的GDG演讲.md: -------------------------------------------------------------------------------- 1 | title: 关于前几天的GDG演讲 2 | 3 | date: 2014-11-01 04:59:40 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 上周天(2014/10/26),受邀参加了GDG的Devfest,这是我第二次以演讲者的身份参加GDG的活动了。 11 | 12 | 较早的时候韩大叔(GDG的组织者)叫我去讲一个小时,我其实挺想讲讲如何Android的触摸机制和Android自定义组件的,但是我在跟一群好基友一起做东西,准备起来也比较费时间,想想也就推掉了。临开始的前两天,韩大叔私信我活动还差十分钟,让我顶顶。 13 | 14 | 感觉时间较短,就答应了,临开始前一晚做了个PPT,感觉讲的还可以,没有诡异的现场敲代码,讲的都是些经验之谈,微博上反响也不错。 15 | 16 | 学Android其实也挺麻烦的,尤其是想做的很好。最开始我学Android最大的动力应该是赚钱,听人说App挂广告能赚钱。我就执着的做了第一个App,一个叫[无尽画廊](http://miracle.sinaapp.com)的东西… 那会儿本科2年纪吧应该,每天真的执着到不行,早上6点起来,边学边写,还得自己作图,还反编译了遨游浏览器手机版的UI,把图抠出来放进去,快7点40的时候就拿起书和同学一起上课去了,中午回来也是,熬到快一点,睡一会儿,下午继续上课,真的是拼到不行。 17 | 18 | 就那样,持续了两个多月,最后自己打包,挂上广告,上传到各个市场,坐等收钱…. 不过到现在也只收到了200多块,还没有取出来呢,感觉纪念意义好重要,所以就让他那么一直放着。 19 | 20 | Android进阶的时候应该是做AnimeTaste和EverMemo的时候(感谢少楠),一次次重构代码的时候,每次思考的越来越多,尝试各种新奇的小玩意儿,AnimeTaste和EverMemo最后也都开源了。 21 | 22 | 决定做自定义组件,最大的诱因应该是EverMemo在GridView的有个滑动删除的效果没有实现,一直耿耿于怀。 23 | 24 | 应该是从一个Google关键字开始的… “How to make custom widget”。 刚开始学起来还是挺吃力的,尤其是onMeasure这个函数,每次要重写,可是就是不知道怎么计算合适… 把[这个](https://www.youtube.com/watch?v=NYtB6mlu7vA)视频翻看了好几遍,然后各种试…. 25 | 26 | 自定义组件这种事情,折腾出来一次,再多折腾几次就熟了,也没啥了不起的。不会的时候看看Android源码,看看Android内部是怎么实现的一些效果,怎么定义的组件,其实也是挺简单的,只要坚持着做一些事情就好了。 27 | 28 | 恩,其实很多事情都没啥,喜欢的话,坚持着做就好了。 29 | -------------------------------------------------------------------------------- /blog.daimajia.com/写在10万这个点上.md: -------------------------------------------------------------------------------- 1 | title: 写在10万这个点上 2 | 3 | date: 2013-12-24 03:43:35 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![AnimeTaste 10万](http://ww4.sinaimg.cn/mw690/610dc034jw1ebtucdhupwj20rl0d9762.jpg) 11 | 12 | AnimeTaste 10万,忽然有感悟。 13 | 14 | 3个月不到,[AT Android](http://www.wandoujia.com/apps/com.zhan_dui.animetaste?pos=w/index/feed)版本便突破了10万用户,真的始料未及。 15 | 16 | 本科时候,最想干的一件事就是自己写一个未来会有十万用户量的App,没想到这一切已经来到。不过,似乎这会儿的心态又有些变化了,10万好像已经不能满足胃口了,变得贪婪,要做到更多,50万,100万,甚至1000万,就像曾经做好第一个App后看着每天最糟糕的时候只有十几,甚至几个新用户的时候,感觉10万真的是个遥遥无期的数字,今天回头看,一个人的战役打起来是多么的辛苦,又是做图,切图,还得写程序,写后台,找人帮忙测试,还得去传到各个市场(各个市场的恶心程度,只有传过一次才能深有感触),没有足够的时间去准确的定位App的目标,只是感觉到累,能坚持完感觉那会儿已经很彪悍了,[第二个App](https://github.com/daimajia/little-bear-dictionary)的流产也证明了一个人做App实在是太难了。 17 | 18 | 况且那时身边也没有一个志同道合的小伙伴能在关键时候去相互鼓励,一个人走黑路需要的胆量远大于两个人(感谢少楠和小胖)。 19 | 20 | 不过 21 | 22 | 可能一个人彻头彻尾做完一个App给我的最大的帮助是让我学会了,以及懂得了整个App的开发流程,逼得我去学习了很多知识,现在回头看来,这些被逼着磨砺出来的东西反倒对我帮助更大。 23 | 24 | 然而 25 | 26 | 站在今天的角度来看昨天:那时似乎对这个世界还是模糊的,当时我还大言不惭的对着妈妈说:“一个有10万用户的App就能拿到投资”,我通过这个信念在本科时候完成了第一个App,今天看来,“拿投资”依然是个时髦的词汇,但是我却清晰的认识到了他的难度,不会再去说这么傻,这么呆的话了(感谢少楠经常破冷水 :p)。现在,只想就像我的博客Title下的那句话一样:“我想写个好的App…”,去认真做好一个产品,去认识更多的优秀的有理想的家伙,剩下的能争取到就去努力争取,即便争取不到,一个好的App,也会像你的勋章一般,成为你整个人品质的一部分,他是你一段时间内的故事,你可以讲给别人听,你可以在高兴的时候打开他,你可以在沮丧的时候看看那些用户鼓励的评论,证明你的能力已经对某些人的生活产生影响,这些都是你存在的意义的一种直观感受和认可,你在尝试着努力去改变别人的生活,或许目前不像盖茨或是乔爷那样炸天,但是你已经在他们曾经奋斗的路上了,剩下的就是去努力超越他们吧! 27 | -------------------------------------------------------------------------------- /blog.daimajia.com/又是一发开源项目 AndroidImageSlider.md: -------------------------------------------------------------------------------- 1 | title: 又是一发开源项目 AndroidImageSlider 2 | 3 | date: 2014-06-05 03:51:35 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 最近闷声一周左右,打造了这么一款可能每个应用都会用到的组件——一个漂亮的Slider。 11 | 之所以做这个,是真心觉得没有一款Slider能让我觉得好看,觉得实用。![](http://ww1.sinaimg.cn/mw1024/610dc034jw1egzwrek519g20950fknpe.gif) 12 | 13 | 花了好久,兼容了Api 8+,包括动画喔~ 而且赋予了很强的自定义能力,比如自定义Indicators,自定义动画,自定义细节动画。 未来也会加入更多元素吧,最近也收集了好多风骚的指示器效果,打算做上十款左右漂亮的指示器,毕竟程序员们都没有审美。 14 | 15 | 哦,还有。 16 | 17 | 最近收到了一发实习(法国),一发工作(硅谷)。 18 | 19 | 能去湾区好激动! 20 | 21 | 记得初中上英[语课老师](https://www.google.com.hk/search?newwindow=1&safe=strict&espv=2&q=%E9%87%91%E9%99%B5%E4%B8%AD%E5%AD%A6+%E5%91%A8%E4%B9%83%E7%9C%81&oq=%E9%87%91%E9%99%B5%E4%B8%AD%E5%AD%A6+%E5%91%A8%E4%B9%83%E7%9C%81&gs_l=serp.3...0.0.0.19046.0.0.0.0.0.0.0.0..0.0....0...1c..45.serp..0.0.0.UNxitFo2ryI)问: 22 | 23 | “What’s your dream?” 24 | 25 | 我答: 26 | 27 | “I want to be a chairman, and have a communication with Bill Gates.” 28 | 29 | 十年了,那时的场景和我说的每一个单词都记得清清楚楚,奋斗了10年,好像离第二个理想更近了! 30 | 31 | **[GitHub](https://github.com/daimajia/AndroidImageSlider)  [Demo](http://jmp.sh/K3mBLCy)** 32 | -------------------------------------------------------------------------------- /blog.daimajia.com/哦,又做了个库,关于动画的.md: -------------------------------------------------------------------------------- 1 | title: 哦,又做了个库,关于动画的 2 | 3 | date: 2014-06-25 02:38:11 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 前几天,在GitHub上看到一个iOS的动画库,一个[Shaker](https://github.com/ArtFeel/AFViewShaker),感觉还挺漂亮的,我记得以前自己也做过一个,不过是给Dialog对话框做的,然后忽有灵感,想收集上一些好看的动画库,集合起来,减轻开发者的压力。 11 | 12 | 于是 13 | 14 | 借鉴了Animate.css,花了两天的时间实现了,我给他起名AndroidViewAnimation,push到了GitHub,欢迎大家使用和吐槽。 15 | 16 | [GitHub](https://github.com/daimajia/AndroidViewAnimations) 17 | 18 | ![](http://ww3.sinaimg.cn/mw690/610dc034jw1ehnv2r93jpg20bx0kokjl.gif) 19 | -------------------------------------------------------------------------------- /blog.daimajia.com/实在无聊,又撸了一个库….md: -------------------------------------------------------------------------------- 1 | title: 实在无聊,又撸了一个库… 2 | 3 | date: 2014-09-01 17:23:54 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 生产力跟生孩子一样,来了自己也挡不住… 11 | 12 | 小撸怡情,大撸伤身… 花了两周时间,也算是大撸了,确实挺伤身的。 13 | 14 | ![](http://ww1.sinaimg.cn/bmiddle/005BLbusjw1ejw6rn9ec3g308n0e74dx.gif) 15 | 16 | 特点: 17 | 18 | \- 两种模式 19 | \- 四个方向 20 | \- 可以嵌套在任何地方而不破坏触摸事件传递(这是最难的地方) 21 | \- 可以监听被隐藏孩子的出现百分比,并回调(可以用来完成滑动动画,第三个下拉的demo其实就有背景色过渡效果,以及星星的zoom的效果) 22 | 23 | AndroidSwipeLayout:  24 | 25 | 欢迎大家使用和吐槽~ 有新的想法和需求也可以随时提哒~  26 | -------------------------------------------------------------------------------- /blog.daimajia.com/我开始了一件需要坚持很久的事情.md: -------------------------------------------------------------------------------- 1 | title: 我开始了一件需要坚持很久的事情 2 | 3 | date: 2014-04-27 16:13:01 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 维护Blog是一件很痛苦的事情,尤其是在热情消退之后。 11 | 12 | 脑海里有事情想写,却没有时间,忽然一天有时间,却忘了要写点儿什么,就这样,距离上次写文章也就越来越久了。很多事情是以冲动开始,什么时候结束连自己都忘了。 13 | 14 | 前几天,我冲动了。 15 | 16 | 我忽然想办个新的博客,去收集Android上优美,实用的开发资源,然后让世界人看到。 17 | 18 | 不得不说,冲动是的高执行力的保证,不到一天的时间,我在ThemeForest上购买了一套主题,我在闲置的DO服务器上搭起了服务,安装好了Wordpress,发表了第一篇英文博文。 19 | 20 | 冲动吗,恩,冲动了!那就一直冲动下去吧! 21 | 22 | 现在每天早上第一件事情就是更新那个英文Blog,哪怕只更新一篇,选一张或者自己动手做一张优美的图片作为Feature Image,用碎成渣的英文扭扭捏捏的写下文章内容,然后编译一个或者几个开源项目,将Apk的Demo放在JumpShare上,留下GitHub的链接还有Apk的链接,简单的写两个单词作为SEO,轻轻的按下Publish,再去主页刷新一下看有没有出来,然后看着一个新生安安静静的躺在那儿,会心的一笑。 23 | 24 | 那一笑,乐在坚持,乐在分享。:smiley: 25 | 26 | PS: 27 | 28 | 我的最近:新办的站点是[Moo Droid](http://moodroid.com)(Moo是哞哞哞,Droid是Android),还收到了来自朋友们的明信片,每周和[YinMing](http://www.kalasoo.me/)讨论互联网和设计的点点滴滴,还在执着的做着[AnimeTaste](http://i.animetaste.net),最后锻炼身体和参加学校活动的频率有所增加。 29 | -------------------------------------------------------------------------------- /blog.daimajia.com/我这几年的变化.md: -------------------------------------------------------------------------------- 1 | title: 我这几年的变化 2 | 3 | date: 2014-10-16 18:12:58 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 几个时间点: 11 | 12 | —-本科了—- 13 | 14 | 2009: 我满怀憧憬的进入了我的大学(西北大学,以下称西大),作为新生,一入校就被组织去看学长们临走时候的一些分享,目的是让新生们对未来的四年有个规划。那会儿,坐在台上的学长,相互之间吹捧和调侃,给我一个错觉就是进腾讯,华为这样的公司已经算是一个不错的归宿了。 15 | 16 | 2009-2011:三年间读了很多书,自己研究了很多东西,做了一两个到现在用户量还没有过万的App,依旧没觉得西大给我带来了什么,只是给我提供了一个住的地方,我也在学校里没有深切的佩服过谁,因为确实没什么好佩服的,你问的问题在老师,同学那儿也得不到什么解答,他们也不会给你什么真的有用的建议。自己摸索最大的坏处总结下来大概是这种场景:毕业的前一年依旧觉得Python和Ruby是个小众的语言。 17 | 18 | 2012:感觉自己去工作完全没有竞争力,到目前为止投的唯一一封实习简历应该是腾讯的…人山人海,密密麻麻,笔试完后就没有了下文。 19 | 20 | 2013:感觉得去读个研缓一缓,浑水摸鱼的进了北师大,保研完后的几个月闲的要死,开始认真的逛起了GitHub,又申请了暑假的实习,那个实习完完全全的改变了我对很多事情的看法和未来研究生的日子。我开始做东西了,认认真真的做东西了。 21 | 22 | —-读研了—- 23 | 24 | 2013:我开始做AnimeTaste和EverMemo,受到很多国内市场的免费推广,感觉还不错,虽然一开始没这么想,但是现在看来,至少有个东西可以拿出手了。我也慢慢开始让自己变得有影响力起来(这个是刻意的),没有社交网络影响力的话,做个东西想要推广真的很让人很捉急!我开始认真搞起微博和博客来,原创或者转发点儿有用的开发资料,博客最早是技术文章,后来发现心得才是最有价值的。也同时参加一些线下活动,认识很多以前在西安完全见不到的人们,至少刚来帝都的一年让我很兴奋。 25 | 26 | 2014:AnimeTaste和EverMemo稳定后,一下又不知所措了。 只不过,越来越爱GitHub了,无聊的时候就做俩小东西push上去,稍微得到一点儿关注的时候,就时常会受到国内一些公司的Email,问我要不要去,我猛然发现GitHub是个不错的宣传平台,我开始做更多的小东西,慢慢收到中等公司,大公司的Email,直到后来有来自全球的公司发我邀请,当然也收到了Facebook Android Team Frank的邀请问我要不要去。 27 | 28 | —-开始想—- 29 | 30 | 收到的多了,好像也就变木了,不想去了,感觉没有挑战了,一份工作终究是一份工作,拿着不错的薪水,去了写写Android或者Node,22岁后的最能拼的时候,日子也就这么过了。当然,如果你只是单纯真爱着技术,那也还好,你不会想那么多,你喜欢稳定,你不爱冒险,你有家人要照顾,你得到了你最想要的,那也挺幸福的了。 31 | 32 | 不过 33 | 34 | 即便在大公司里当了一辈子工程师,又有几个人记得你呢。 35 | 36 | 其实,所有的有人存在的地方都是围城,一群人笑着进去,一群人笑着出来。唯有虔诚的去追逐自己想要的东西,才能到达最完美的世界。 37 | 38 | 加油吧! 39 | -------------------------------------------------------------------------------- /blog.daimajia.com/折腾了两天,终于发布了.md: -------------------------------------------------------------------------------- 1 | title: 折腾了两天,终于发布了 2 | 3 | date: 2014-05-02 20:03:32 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://ww3.sinaimg.cn/mw690/610dc034jw1efyrd8n7i7g20cz02mq5f.gif) 11 | 12 | 折腾了两天,终于发布了这个妖娆的ProgressBar,现在满心欢喜中。 ![:-D](http://blog.daimajia.com/wp-includes/images/smilies/icon_biggrin.gif) [ GitHub](https://github.com/daimajia/NumberProgressBar) 13 | 14 | 其实,实现原理也是蛮简单的: 15 | 16 | [![NumberProgressBar2](http://blog.daimajia.com/wp-content/uploads/2014/05/NumberProgressBar2.jpg)](http://image.daimajia.com/image/2014/05/NumberProgressBar2.jpg) 17 | 18 |   19 | 20 | 继承自View,添加两个方法,setMax , setProgress. 21 | 22 | 将这个View分成三个不同的区域: 23 | 24 | 1、已到达的区域 25 | 26 | 2、文字区域 27 | 28 | 3、未到达的区域 29 | 30 | 然后每次setProgress方法被调用的时候重新绘制整个Bar,重新计算三个区域所在画布的位置,然后通过Paint去绘制就好啦! 31 | 32 | 欢迎各路好汉使用和吐槽~  :0 33 | 34 | psps: 居然上了GitHub Trending啦~ 乌拉阿拉~ 35 | -------------------------------------------------------------------------------- /blog.daimajia.com/最有成就感的两个月.md: -------------------------------------------------------------------------------- 1 | title: 最有成就感的两个月 2 | 3 | date: 2013-11-02 21:17:30 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 过去的两个月或许是我最有成就感的一段日子。 11 | 12 | [AnimeTaste](https://play.google.com/store/apps/details?id=com.zhan_dui.animetaste)从9月3日全面发布以来,到今天(2013年11月2日),整整两个月,获得了62338个用户(现在平均每天都有1000-3000左右的新用户),而且拿到了[豌豆荚110期的设计奖](http://www.wandoujia.com/award/blog/com.zhan_dui.animetaste),被多家媒体曝光报道,和[少楠](http://www.zhihu.com/people/plidezus),[小胖](http://fuxiaopang.com/)的合作也超级愉快。认识到了那么一群有梦想的人,为之坚持的人。我看好AT的明天,或许AnimeTaste超越Vimeo也不一定哦~ 13 | -------------------------------------------------------------------------------- /blog.daimajia.com/最近的作品:我的故事.md: -------------------------------------------------------------------------------- 1 | title: 最近的作品:我的故事 2 | 3 | date: 2013-07-14 07:38:32 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 每个人都有故事,我在想有没有一个app能记录下我们每个人的故事和成长? 11 | 12 | 毕竟 13 | 14 | 一个人,不论贫穷还是富有,辉煌还是落寞,都有属于自己的精彩故事,让我来组织起来,让大家分享彼此的故事。 15 | 16 | 先不透露太多,上张截图,[查看大图](http://ww3.sinaimg.cn/large/d7ef5d23jw1e6lm7mw9nxj21400p0dnw.jpg): 17 | 18 | ![](http://ww3.sinaimg.cn/large/d7ef5d23jw1e6lm7mw9nxj21400p0dnw.jpg) 19 | -------------------------------------------------------------------------------- /blog.daimajia.com/此处记载我青春.md: -------------------------------------------------------------------------------- 1 | title: 此处记载我青春 2 | 3 | date: 2013-03-19 15:33:44 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 你好,Wordpress先生,我是代码家。 11 | 12 | 我正在骄傲的用着Wordpress写下即将本科毕业的自己。 13 | 14 | 他还会随着我走的更长远,记录我的艰难,记录我的成功和失败。 15 | 16 | 这是一篇简单的开始,希望我能和这个Wordpress默契合作,写下精彩的自己。 17 | 18 | Mr. WordPress,我已足够了解你,如果你还不了解我,我在你的笔记里写下了『关于我』,还请多多指教。 19 | 20 |   21 | -------------------------------------------------------------------------------- /blog.daimajia.com/认识了少楠,我决定做件事情.md: -------------------------------------------------------------------------------- 1 | title: 认识了少楠,我决定做件事情 2 | 3 | date: 2013-08-16 16:38:34 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 如何认识少楠: 11 | 12 | ![](http://tp3.sinaimg.cn/1644839342/180/5664463363/1) 13 | 14 | 少楠是我在简书的线下分享会认识的,发布会的前几日,无意间看到百姓网的微博发布一则Android/IOS开发者招聘([地址在此](http://weibo.com/1644839342/A3rP0815L))。我个人呢肯定不能全职(有学要上,而且正在实习),随手回复了下,没想到少楠同学主动私信我邀请我去百姓网坐坐聊聊天,恰巧周六在百姓网有简书同学的创业分享会。 15 | 16 | 读大学的时候,总有一种身边没有志同道合的朋友的感觉,找不到一个能和自己一同聊互联网,有相同知识面和见解,我只知道身边真心超爱这一行业的基本上没有。老师只想着如何得个更高的头衔,如何从学校搞的更多的钱,同专业的朋友们只想着如何找个好工作,考个名气大些学校的研究生。记得自己花1万4买下第一台Macbook Pro时,周遭宿舍很多人认为这是炫富,每次听到这些话我只是微微一笑,从不解释更多。我只是意识到对开发者而言,最好的开发工具就是一台高配置的Mac,是生活的一部分,是个人追求的一部分。 17 | 18 | 分享会: 19 | 20 | 聊得很投机~ 21 | 22 | 我理解的少楠: 23 | 24 | 少楠是懂互联网的一个人,有很多产品的想法,思考问题从用户的角度出发,有着小野心却苦于不懂开发的一个优秀的产品经理。 25 | 26 | 少楠热爱的动画事业: 27 | 28 | 少楠也是个热爱动画的人,至少从他和他的团队做的  和 [艾墨镇](http://aimozhen.com/) 就可以看出。 29 | 30 | 从我们的聊天里我知道艾墨镇一直是缺少Android客户端的。少楠是不会开发的,当我后来几天微信上决定给他做个Android客户端的时候,他在微信的回复是这样的: 31 | 32 | > ”你知道么,我等IOS开发者等了两年,php4年,安卓2年。“ 33 | > 34 | > 我回复说:”你是怎么活下来的“ 35 | > 36 | > “素材发给我,过几日开工。” 37 | 38 | 收到素材后,我又惊呆了。HOLO风格的设计图已经做好了…他自己也说,没事的时候就YY安卓客户端(囧),他真的等太久了! 39 | 40 | 在此给少楠一个承诺:少楠同学,等我好消息! 41 | 42 | 附上少楠YY设计图,以及[少楠微博](http://weibo.com/311031555?from=profile&wvr=5&loc=infdomain),和他的[个人站点](http://www.plidezus.net/),不能再多说了,因为我要开工了: 43 | 44 | ![](http://ww1.sinaimg.cn/mw690/610dc034gw1e7o7laankrj20k00zk44j.jpg) 45 | 46 | ![](http://ww4.sinaimg.cn/mw690/610dc034gw1e7o7leyl5fj20k00zkjwf.jpg)![](http://ww3.sinaimg.cn/mw690/610dc034gw1e7o7lbjrlxj20k00zkn4c.jpg) 47 | -------------------------------------------------------------------------------- /blog.daimajia.com/请叫我做库达人.md: -------------------------------------------------------------------------------- 1 | title: 请叫我做库达人 2 | 3 | date: 2014-08-10 15:11:07 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 恩,标题的意思你应该懂… 11 | 12 | 我**又**做了个开源的库,我给他起名叫[AndroidViewHover](https://github.com/daimajia/AndroidViewHover) ,是想让更多的应用用一种更酷的方式显示菜单和信息,而不是总想着跳转到新的Activity,感觉还蛮酷的,我最近点子蛮多,也算是蛮拼的(好多蛮)。 13 | 14 | 库的样子大概是酱紫的(图片有点儿大,请耐性等): 15 | 16 | ![](http://ww2.sinaimg.cn/mw690/610dc034jw1ej5iihjtl5g208z0f2npd.gif) 17 | 18 | 可以再[YouTube](http://www.youtube.com/watch?v=bsDQbMTtPvM)看看Demo的视频,也可以在[YouKu](http://v.youku.com/v_show/id_XNzUyODMwNjA0.html)看呐。 19 | 20 | 而且Api也炒鸡简单,上面四个效果每个效果都是10行代码以内([有代码为证](https://github.com/daimajia/AndroidViewHover/blob/master/demo/src/main/java/com/daimajia/androidviewhover/demo/MainActivity.java)),当时写的时候,还结合了[AndroidViewAnimation](http://blog.daimajia.com/2014/06/android-view-animations/)的效果进去,动画效果这块儿自然轻松了很多。 21 | 22 | 看到第二个图的娃娃头掉下来的效果么?这个动画效果是结合了[AndroidEasingFunctions](https://github.com/daimajia/AnimationEasingFunctions)的效果进去的,[AndroidEasingFunctions](https://github.com/daimajia/AnimationEasingFunctions)也是自己写的一个用来让动画更逼真的一个库(忘了发博文了)。 23 | 24 | 最后,欢迎大家使用哦! 25 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/2014-01-31.md: -------------------------------------------------------------------------------- 1 | title: 2014-01-31 2 | 3 | date: 2014-01-31 00:00:00 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 于是又到了新年,貌似我的年终总结还没写(啊咧? 11 | 12 | 于是这篇就是为了应付作业憋出来的 13 | 14 | 今天.. 哦不,昨天开始收各种ACG向的图片了。G+上发图的不少,所以我暂时还不用去翻 Pixiv 什么的。作为一只二次元的喵星人,硬盘里没点宅文化算什么呢喵? 15 | 16 | 似乎最近几天不少人在折腾 KDE。由来不清楚,总之就是有人问了关于 KDE 的问题,于是我在G+上发了一些 KDE 的截图、录屏以及一些配置什么的。慢慢发现周围越来越多的人开始问,「用xxx环境好换KDE不呢?」,「KDE能做这个么能做那个么?」,「这么多包怎么选呢?」… 等等的问题。作为KDE简体中文翻译组的成员(又来了(σ≧∀≦)σ) 能帮到别人还是非常欢心的嗯。 17 | 18 | 这么一来二去的自己也想开始折腾了www。KDE 的玻璃特效和二次元的风格是绝配哦~[钉子](http://dimpurr.com)说,「二次元向的主题就是萌妹子+半透明+光晕」,对此我深信不疑。今天..啊昨天翻了半天找到几张还算满意的壁纸,深色壁纸真心看过头了,想要点淡色清新的w 结果发G+之后无辜的[Bob酱](http://nya.io)被各种mention 2333 19 | 20 | ![yua](http://blog.phoenixlzx.com/static/img/posts/2014-01-31-desktop-1.jpg) 21 | 22 | 随后翻 Zerochan 发现了一张很有味道的东方壁纸~ 23 | 24 | ![Hakurei Reimu](http://blog.phoenixlzx.com/static/img/posts/2014-01-31-desktop-2.jpg) 25 | 26 | 嗯决定就是这张了w 顺便去掉了一直放在左侧隐藏的面板,把快速启动的程序丢到桌面目录里。一个是快速启动不像以前那样可以自动居中了(或者说我忘记怎么设置了…) 再一个选择文本的时候容易把那个该死的面板激活弹出来… 这样桌面不显得空,而且玻璃特效、Plasma 控件位置都和壁纸相当贴合~ 27 | 28 | 晚上照例是不看春晚的w 和大家一起疯狂玩Minecraft。去年还准备了[焰火晚会](http://www.tudou.com/programs/view/-O34AbY1ZmQ/),今年似乎很多op都回家不方便上线了,于是就没准备什么活动。虽然 红包肯定少不了的QAQ我足足发了1600个节操啊… 1.7版开始 Minecraft 变得特别大,因为有了很多新的背景音乐。我倒是挺喜欢原来的那些音乐,新版音乐虽然也有味道但是一个人玩的时候太恐怖了(ಥ_ಥ)。所以一直是关掉音乐,带着耳机loop境界の比方的OST。最喜欢的是「約束の絆」和「Judgmentじゃ!」。前者是补番的时候发现这插曲相当好听,以至于在OST发售之前就在萌购上预定了,拿到手之后一直在loop。后者是扫盘发到u2上,有人反馈这首音轨抓取有错误,我才去重新听的。说实话那时候我只听了「約束の絆」,因为好听到不想听其他的了。后来校正的时候发现「Judgmentじゃ!」也很好听,爱酱的声音完全变了啊!超级带感的说。专辑里还有其他一些音乐,听的时候会莫名难过,也许是第一次看完境界の彼方的时候哭了一晚上? 29 | 30 | 前段时间又看了「のんのんびより」,真是越来越羡慕在日本的乡村生活了… 顺便说一句,「のんのんびより」的OP和ED也非常好听哦~(「・ω・)「 31 | 32 | 啊我去终于算是快憋完了 33 | 34 | 每次都是罗嗦一大堆没用的东西.. 别看咱现在写作苦手,咱小时候的作文还是上过报纸的。现在代码敲多了,技术文档读多了,动漫看多了,越来越多的习惯于用简短的英语或日语来描述事物、动作或感情…汉语的使用能力已经比壕桥好不哪去了…壕桥的错别字连天估计我也不知道还能对他233到什么时候。——比如上句话你听懂了么? 35 | 36 | 嘛。日子总是这么一天天的过,在这里给大家拜新年的说~ 37 | 38 | ![HAPPY SPRING FESTIVAL](http://blog.phoenixlzx.com/static/img/posts/2014-01-31-pixiv40813042.jpg) 39 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/Kancolle Broker - 舰娘直连游戏!.md: -------------------------------------------------------------------------------- 1 | title: Kancolle Broker - 舰娘直连游戏! 2 | 3 | date: 2015-02-08 14:55:16 4 | 5 | tags: [Node.js, Anime, ] 6 | 7 | description: 8 | 9 | --- 10 | 废话:啊……我终于治好了自己的拖延症。 11 | 12 | 事情的起因,无非就是 2015 年的第一场大戏——舰娘国服。嘛。不多评论,大家心里都明白。之后用 nginx + SNI Proxy 配置了一个代理服务器方便大家在日本地区外玩舰娘。但是这种代理服务有一个很大的问题就是会引起恶意攻击,被用作 DDoS 攻击的肉鸡使用,因此日本法律也是禁止 VPN 服务器的。 13 | 14 | 这个 idea 出现的时候还在帝都,房间里没开空调没有暖气,4M带宽20人用还有人开迅雷,无奈只好烧朋友送的 4G 流量卡来维持网络需求。完全没有力气做事情的时候偏偏看到 DMM 那个变态到极点的登录验证…… 15 | 16 | 于是一直拖到回家之后碰上一大堆喵窝的活动… bangumi.moe 那边也在一直催着干活,直到今天我才良心发现用力让自己头脑清醒一点,认真分析了下 DMM 的登录验证。 17 | 18 | 整个过程大概是这样:客户端请求登录页面,页面中包含两个 token,加载完毕后一个 token 作为 header 数据,一个作为 XHR POST 请求数据发送给服务器,获得另外两个 token。这两个 token 将作为用户登录 email 和 password 的 key。用户登录时 post 给服务器的数据大概是下面这样: 19 | 20 | 21 | { 22 | 23 | "token": "11dde99d39af2287fc6eed02632ccbee", 24 | 25 | "login_id": "user@example.com", 26 | 27 | "save_login_id": 0, 28 | 29 | "password": "P@ssw0rd", 30 | 31 | "use_auto_login": 0, 32 | 33 | "dfdfa8466f24710893d99529acaaeef0": "user@example.com", 34 | 35 | "2760cb37702b03d10d92caf9daaaf675": "P@ssw0rd" 36 | 37 | } 38 | 39 | --- 40 | 41 | … 好了,看晕了吧。咱就不吐槽日本人脑子里到底在想啥了。总之来看代码 -> [Github](https://github.com/phoenixlzx/kancolle-broker) 42 | 43 | 原理就是登录后用 cookie 拿到游戏 link 的 apptoken,而这个游戏的 link 是不会验证日本 IP 的。 44 | 45 | 想测试效果的话,那么先关闭本地的各种舰娘代理,移除所有相关的 hosts,然后访问[这里](https://kancolle.phoenixlzx.com)。使用 DMM 帐号登录,成功的话会跳到舰娘的游戏页面。适用于所有在日本境外没有日本代理的情况下使用。 46 | 47 | 问:会不会有安全问题? 48 | 49 | 必须的。而且比 SNI 代理更不安全。但是反过来说,也是比 SNI 更安全的。因为 DMM 登录发送密码完全没有加密,只是靠 HTTPS。所以用这个程序的话: 50 | 51 | 1. 密码都是可以在服务端记录的。虽然程序里完全没有记录密码相关的代码,但是要加也不是难事。 52 | 2. 没有 HTTPS 的情况下,你发送的所有数据都是明文的。所以我做的这个 demo 用了 HTTPS 加密链接。 53 | 54 | 所以如果是有 HTTPS 加密且 deploy 这个程序的人比较靠谱的话,安全性还是有保障的。 55 | 56 | 至于大家是不是相信我……嗯这个看各位如何考量啦。 57 | 58 | 最后:我真的没玩过舰娘,我也不会去玩。 59 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/SubLive 本地播放器的弹幕 API 服务器.md: -------------------------------------------------------------------------------- 1 | title: SubLive 本地播放器的弹幕 API 服务器 2 | 3 | date: 2014-04-28 12:53:55 4 | 5 | tags: [Node.js, Anime, ] 6 | 7 | description: 8 | 9 | --- 10 | 昨晚 KNA 群里在讨论给本地播放器加弹幕功能。之前虽然听说过但是并未接触过所谓「弹幕池」的概念,但是星光菊苣说只要生成 SSA 字幕直接交给播放器挂上就成。并且,(虽然很想顺带吐槽 Zht 和我们争了半天最后槽点根本不在一个点子上orz) 少将也表示时效并不重要,不需要考虑播放器的字幕自动重载问题。 11 | 12 | 所以躺在床上的时候就考虑了下整体的架构。还是最拿手的 HTTP RESTful API,基本功能的话就是获取字幕和发送弹幕。大致的思路如下。 13 | 14 | * 客户端打开媒体文件后首先获得文件的 hash。有些播放器自动寻找字幕似乎是通过文件名.. 这样的话我改个名字岂不是彻底失效。不过用 hash 来做检索文件的唯一信息的话,不同压制组放出的同一部片源都会有不同的弹幕… 不过似乎也好,如果压制了字幕进去的话,有些针对字幕君的吐槽啊什么的.. 嘛于是就这样。 15 | * 服务端通过文件 hash 值来查找有无已存在的字幕文件。如果找到则直接发送文件给客户端,如果没有则在数据库中创建该条目,并生成新的字幕文件发送给客户端。 16 | * 客户端以约定好的数据格式发送弹幕信息。用户友好啊之类的(所见即所得什么的..) 就都是客户端的问题了.. 服务端拿到的应该是处理好的数据。 17 | * 服务端接收到新的弹幕后将其存进数据库,并追加到已有字幕文件。这样下次其他客户端再次请求该文件的时候就会看到弹幕。 18 | 19 | … 20 | 21 | 剩下的就不知道了,因为上面几条出来之后我就睡着了zzzzZ 22 | 23 | … 24 | 25 | 早上翘课写代码这种事情早就习以为常了… 更何况是(我已经不知道该如何吐槽)的老师的上机课…. 26 | 27 | 基本架构和功能大概 3 小时搞定,之前大概花了将近 1 个小时看 [SSA/ASS Subtitles](http://matroska.org/technical/specs/subtitles/ssa.html) 以及 Express 4.x 的文档。因为 [Express 4.x 开始命令行工具被单独分开](https://github.com/visionmedia/express#quick-start),害我半天没找到生成模板的命令… (你丫瞎改啥啊啊啊啊 28 | 29 | 编码过程里倒是没遇到啥坑,就是数据处理有点烦。因为没找到啥比较好的 SSA 字幕处理库,生成的时候都是手动处理,各种 `\+ '\n'` 什么的.. 30 | 31 | 以及,SSA/ASS 字幕的格式特性让 `Array.prototype.join` 得以利用,省掉不少麻烦。 32 | 33 | 于是源码在[这里](https://github.com/phoenixlzx/sublive)。在基础架构之上还可以很方便的添加大量其他功能,验证啊什么的.. 顺便我还木有做 POST 数据的检查。这个大概晚些时候会加上。 34 | 35 | 四月的荒废状态持续了 27 天宣告结束。嘛,挣脱五月病要感谢星光菊苣、Zht、少将以及 KNA 字幕组的所有小伙伴们 >///< 感谢你们~ 36 | 37 | 以后要继续加油喵!~ 38 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/「鹦鹉螺号」退役.md: -------------------------------------------------------------------------------- 1 | title: 「鹦鹉螺号」退役 2 | 3 | date: 2014-01-29 12:22:59 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 收到了ResellerClub的来信。 11 | 12 | [鹦鹉螺号](http://www.seainsight.me) 域名就要到期了。2012年2月19日注册,到现在也就是2年的时间。170余篇文章,说实话没多少是自己的。 13 | 14 | 自从加入 ResellerClub 以来,又做了Hexonet的代理。域名、数字证书、服务器,基本上想做个网站或者什么Web服务,找我可以一条龙搞定了。总有人这么说,你赚了不少钱吧。每到这时候我都只能摇头苦笑——扣掉各种手续费,一个域名一年有3块5块的利润就很不错了… 15 | 16 | 2013年下半年到2014年初的财务状况一直比较紧张。因为不满学校食堂的猪饲料(一盘菜可以倒出一锅油,还不是啥好油),一直带着jojo在外面吃,每天光吃饭就要花掉几十块大洋。服务器机房网络总是抽风,无奈在猫菊苣的各种诱惑下一狠心买了服务器托管到MultaCOM机房。Minecraft服务器和二小姐的合并又折腾了好一阵,买服务器、寄去托管什么的。还得感谢happyaron童鞋省掉了我一大笔托管的费用。萌DNS最一开始也只是想自己弄两台NS服务器用用,后来慢慢变成了多用户的域名管理平台我还专门写了个管理员页面…所以服务器也不能含糊了,于是一年2k的服务器费用,加上域名和证书的好几百。学期结束的时候突然心血来潮..额,其实也不算,因为X201i的性能是在太差了,蓝光都带不动的说 更别提Minecraft了.. 于是又破费入了一块240G Intel 530 SSD,一块1600×900的14寸高分屏,一只Express转USB3.0的扩展卡准备回家升级T420来用,加起来又近2k了吧。 17 | 18 | 为什么非得做不折腾会死星人呢…不作死就不会死,我怎么就不明白这个道理。何弃疗? 19 | 20 | (貌似「何弃疗」这词还是从我母校高中冒出来的?如果我还在郑集中学估计也会放弃治疗参加高考的吧..?) 21 | 22 | 所以这一段时间以来都很累…博客只适合记录生活和折腾经历,专门拿来做知识库备忘什么的还是用一个简单的Wiki吧。纠结了一晚,最后还是决定,「鹦鹉螺号」已经没有继续存在的价值了。它的主人已经没有力气再驾驶它驰骋汪洋了,是时候让它停靠休息了。 23 | 24 | 虽然只写了一点点,不过还是谨以此文纪念陪伴我2年的鹦鹉螺号吧。(喂! 25 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/一个简单的 WordPress 备份脚本.md: -------------------------------------------------------------------------------- 1 | title: 一个简单的 WordPress 备份脚本 2 | 3 | date: 2014-02-11 20:08:56 4 | 5 | tags: [WordPress, Script, Server, ] 6 | 7 | description: 8 | 9 | --- 10 | 居然会有人问我要这个东西… 我最不会写脚本了好吧呀! 11 | 12 | 真心觉得这货 Google 一下粗来一大坨 13 | 14 | 嘛不多说了.. 既然写了就发粗来让大家吐槽一下好了… 不光是 WordPress.. 只要是静态文件+MySQL的站都可以用。 15 | 16 | 17 | #!/bin/bash 18 | 19 | # settings 20 | 21 | mysqldbuser="wordpress" 22 | 23 | mysqldbpass="YourMySQLPassword" 24 | 25 | mysqldb="wordpress" 26 | 27 | webroot="/var/www/wordpress" 28 | 29 | backuproot="/root/backup/backups" 30 | 31 | temproot="/root/backup/temp/`date +%y-%m-%d`" 32 | 33 | temp="/root/backup/temp" 34 | 35 | logfile="/root/backup/backup.log" 36 | 37 | mkdir -p $backuproot $temproot/files 38 | 39 | # backup start 40 | 41 | echo "Backup start" >> $logfile 42 | 43 | echo $(date +"%y-%m-%d %H:%M:%S") >> $logfile 44 | 45 | echo "------------" >> $logfile 46 | 47 | # database backup 48 | 49 | echo "Dumping MySQL database..." >> $logfile 50 | 51 | mysqldump --user=$mysqldbuser --password=$mysqldbpass --databases $mysqldb > $temproot/db.$(date +"%y-%m-%d").sql 52 | 53 | echo "Done exporting database." >> $logfile 54 | 55 | # copy wordpress files 56 | 57 | echo "Copying website files..." >> $logfile 58 | 59 | cp -r $webroot $temproot/files/ 60 | 61 | echo "Done copying website files." >> $logfile 62 | 63 | # Compress backup files 64 | 65 | echo "Compressing backup files..." >> $logfile 66 | 67 | cd $temp 68 | 69 | tar zcf $backuproot/backup-$(date +"%y-%m-%d").tar.gz $(date +"%y-%m-%d") >> $logfile 70 | 71 | echo "Backup complete." >> $logfile 72 | 73 | # Cleanup 74 | 75 | echo "Cleaning up..." >> $logfile 76 | 77 | rm -rf $temp/* >> $logfile 78 | 79 | echo "------------" >> $logfile 80 | 81 | echo >> $logfile 82 | 83 | --- 84 | 85 | 真心的没有用到任何… 高级的东西。 86 | 87 | 保存为文件 `/root/backup.sh` 然后修改下前面几个变量,以 root 用户新建 cronjob 88 | 89 | `crontab -e` 然后敲 90 | 91 | `00 01 * * 1 /root/backup.sh` 92 | 93 | 保存。这样每周一的凌晨1点(当然是你的服务器时间..) 就会自动备份到 `/root/backup/backups` 下。懒得写自动删除… 于是手动删好了。 94 | 95 | 我要是被猫菊苣笑话了某人你可死定了 96 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/为 KDM 和 Ksplash 自定义壁纸.md: -------------------------------------------------------------------------------- 1 | title: 为 KDM 和 Ksplash 自定义壁纸 2 | 3 | date: 2014-02-11 17:45:36 4 | 5 | tags: [KDE, Artwork, ] 6 | 7 | description: 8 | 9 | --- 10 | 嘛非常简单的几个小步骤,不过KDE的KDM和启动屏幕不能直接自定义壁纸确实很讨厌。 11 | 12 | ### KDM 13 | 14 | 表示 KDM 相对简单所以先说了。首先是下载对应的 KDM 主题,然后解压到一个临时目录下。 15 | 16 | 我下载的是 Glassified,在 [kde-look](http://kde-look.org/content/show.php/Glassified+Splash?content=84124) 上非常受欢迎的一款玻璃效果主题。 17 | 18 | Glassified 主题解压后得到了 `background.svg` 和 `glassfied.xml` 等等文件。由于我的壁纸是 JPEG 格式而且本机没安装 Inkscape (放心 GIMP 不支持矢量图的…) 所以只好直接把图片切割并缩放为适合我屏幕分辨率的文件放进来,重命名为 `background.jpg`。因为文件变了,所以打开 `glassified.xml` 文件,查找 `background.svg` 并全部替换成 `background.jpg` 其实就替换了一处 19 | 20 | 接下来返回上级目录,把 `Glassified` 目录压缩为 `.tar.gz` 或 `.tar.bz2` 文件,就可以直接在 KDE 系统设置里安装了。(安装KDM主题需要root权限哦) 21 | 22 | ### KSplash 23 | 24 | Ksplash 其实也不复杂,就是比较蛋疼的是目录很多,一般自己用的话… 我反正是把和我分辨率靠不着边的目录都删了。一样是下载的 Glassified 主题,解压后得到以分辨率命名的目录,扫了一眼居然没有16:9的分辨率啊啊啊啊!虽然我更喜欢16:10但是这也太蛋疼了吧! 25 | 26 | 在 `1600x1200` 这个目录里找到了所有的文件。其他目录里应该只有 `background.png` 或者类似的文件。于是进入 `1600x1200` 这个目录,用博丽灵梦的壁纸覆盖了 `background.png`。需要注意一点,本本是16:9 1600×900 分辨率的(嗯就是这么奇葩又正常的分辨率) 所以灵梦的壁纸原本是 1600x900,被我缩放成 1600x1200。图片看起来是被压窄了,不过放心——KDE会自动帮你从1600x1200拉伸成适合屏幕分辨率的… 如果放的文件是1600x900或者其他16:9分辨率的话… 效果非常鬼畜哦 27 | 28 | 留给自己用的,所以把其他分辨率的都删掉了。如果想要做来分享,那么还需要把图像文件放缩放成正确的比例和分辨率放在对应的目录下。完成后返回上级目录,像KDM主题一样压缩成 `.tar.gz` 即可。不需要root权限,可以直接在系统设置里安装。装好了记得测试下哦。 29 | 30 | 下面上效果图。 31 | 32 | ![KSplash - Hakurei Reimu](http://blog.phoenixlzx.com/static/img/posts/2014-02-11-ksplash.jpg) 33 | 34 | PS. Glassifed 这款主题的链接貌似死掉好久了。于是顺便附上下载链接好了。Dropbox 访问不能的话.. 嘛我相信大家都有办法的对吧~ 35 | 36 | * [Glassifed KDM](https://dl.dropboxusercontent.com/u/2705405/Glassified.KDM.tar.gz) 37 | * [Glassifed KSplash](https://dl.dropboxusercontent.com/u/2705405/Glassified.ksplash.tar.gz) 38 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/为国内用户加速 Apple 服务.md: -------------------------------------------------------------------------------- 1 | title: 为国内用户加速 Apple 服务 2 | 3 | date: 2014-05-15 21:57:19 4 | 5 | tags: [Configuration, ] 6 | 7 | description: 8 | 9 | --- 10 | 偶然看到[雅诗的po](https://plus.google.com/105938465531761409080/posts/3EXLAUerxMD) 才发觉自己 DNS 的 Apple 服务加速已经几乎不能用了,速度非常慢。倒是挺奇怪的,因为自己做的 DNS 服务器对于整个 Apple 域的上游都是 V2EX DNS,难道是 V2EX DNS 出问题了? 11 | 12 | 总之先不管那些。现在来简单做一份 Apple 服务加速的配置。 13 | 14 | 稍微 Google 下 Apple 的服务地址,目前获得的地址如下: 15 | 16 | 17 | a{1-2000}.phobos.apple.com 18 | 19 | swdist.apple.com 20 | 21 | itunes.apple.com 22 | 23 | contentdelivery.itunes.apple.com 24 | 25 | --- 26 | 27 | 对应在国内的 CDN 地址是 28 | 29 | 30 | a1-a200.phobos.apple.chinacache.net 31 | 32 | swdist.apple.ccgslb.net 33 | 34 | itunes.apple.ccgslb.com.cn 35 | 36 | (最后一个没找到CDN地址..) 37 | 38 | --- 39 | 40 | 然后根据 114DNS 和 Google DNS 综合查询以上地址的 IP。顺便发现地址里有 `cnc`, `cncssr` 这样的关键字,于是正好尝试把 `cnc` 改成 `tel` 于是得到了电信节点的 IP。 41 | 42 | 现在写一个两句话的 js 脚本来生成一份针对 `a{1-2000}.phobos.apple.com` 的加速列表(废话这种东西能手写吗要累死啦),以达到尽可能将电信、联通的节点混在一起,保证各个 ISP 用户的下载速度。 43 | 44 | 45 | // Accelerate IPs for Apple download service. 46 | 47 | // apple-ips.js 48 | 49 | var ips = [ 50 | 51 | '221.192.144.12', 52 | 53 | '182.118.46.137', 54 | 55 | '124.95.150.148', 56 | 57 | '123.235.32.2', 58 | 59 | '119.84.69.17', 60 | 61 | '122.228.85.196', 62 | 63 | '115.231.150.15', 64 | 65 | '61.164.153.7', 66 | 67 | '183.57.28.18' 68 | 69 | ] 70 | 71 | for (var i = 1; i <= 2000; i++) { 72 | 73 | console.log(ips[Math.floor(Math.random()*ips.length)] + ' a' + i + '.phobos.apple.com'); 74 | 75 | } 76 | 77 | --- 78 | 79 | 然后 80 | 81 | 82 | ~> node apple-ips.js > apple.conf 83 | 84 | --- 85 | 86 | 就得到一份可以直接用的加速列表啦。 87 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/使用 FFmpeg 制作 GIF.md: -------------------------------------------------------------------------------- 1 | title: 使用 FFmpeg 制作 GIF 2 | 3 | date: 2014-02-19 14:03:05 4 | 5 | tags: [FFmpeg, Anime, Multimedia, ] 6 | 7 | description: 8 | 9 | --- 10 | 貌似好久之前秋水学姐就问过如何制作 GIF,回想当时制作境界の彼方中「約束の絆」的[GIF动画](https://plus.google.com/u/0/+PhoenixNemo/posts/RqPTgGrksLV),现在也已经把命令忘光了。所以觉得还是稍微做个笔记。 11 | 12 | 只需要用到 FFmpeg。绝大多数发行版都已经将它收录官方仓库,通过包管理器就可以安装。 13 | 14 | 假设我们需要转换的视频文件是 `input.ogg`,输出的GIF文件是 `output.gif`。这里不讨论如何截取视频中的段落(因为命令太繁琐了)等视频剪辑的问题,需要转换的视频已经经过简单处理,可以直接使用。 15 | 16 | 基本命令: 17 | 18 | 19 | ffmpeg -i input.ogg output.gif 20 | 21 | --- 22 | 23 | 第一次制作的gif就是这么来的。然后当我试图上传到 Google+ 的时候发现… 24 | 25 | **区区几百KB的视频片段制作出来的GIF竟然有20M之巨啊!** 原视频是1080p 50fps的 flv 26 | 27 | 于是需要两个参数,一个是缩小分辨率一个是减少帧数。50帧确实少见,但是一般来讲 gif 有15帧左右就比较流畅了。命令 28 | 29 | 30 | ffmpeg -i input.ogg -s 640x320 -r 15 output.gif 31 | 32 | --- 33 | 34 | 很多人喜欢把 `-r` 选项放在前面… 按照某个早就忘记在哪的邮件列表里的说法,`-r` 放在 _输入文件_ 的 **后面** 才是输出文件的效果。上面的命令出来的结果就是分辨率为`640×320`,帧率为15的gif了。`640x320` 中间是小写字母 `x` 别像某人一样特地复制了一份 `×` 进去… 35 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/修复 Arch Rollback Machine 磁盘占用.md: -------------------------------------------------------------------------------- 1 | title: 修复 Arch Rollback Machine 磁盘占用 2 | 3 | date: 2014-05-17 15:59:48 4 | 5 | tags: [Server, Ubuntu, Linux, Filesystem, ] 6 | 7 | description: 8 | 9 | --- 10 | 最近发现 downgrade 失效了,降级啥包都是直接错误退出。然后排查的时候发现是 Arch Rollback Machine 挂了,原因是——磁盘不足。 11 | 12 | 检查后发现 pm2 的日志有 7G,850天前的包有5000多个,365天内的包有10万余,磁盘已经被吃得满满当当。 13 | 14 | 日志好说,因为没啥特别有用的东西也不用拿来做分析,直接删掉就好。Felix 也把 850 天前的包全部删干净了。不过再次检查的时候 `df -h` 显示依旧是磁盘被吃满的,而 `df -ih` 显示 inode 占用没有问题。猫怀疑是有文件句柄还开着,但是把所有可能的进程杀掉之后依旧没有变化,排除。另外一个现象是文件删除进程完成后过了一段时间磁盘开始有少量空闲空间了,可能是磁盘缓存…? 15 | 16 | 于是靠着这空出来的 900M 多点的空间执行了几个操作:把有 HTTP flood 漏洞的 Node.js 0.10.16 升级到最新版 0.10.28,将包同步的 cronjob 降低到每天执行一次,压缩旧的 NGINX 日志。 17 | 18 | 以及用户一直要求的包归档功能,实际上是已经有了的,但是并没通过 NGINX 配置来实现(Pia!<(=o ‵-′)ノ☆猫) 所以准备把归档功能写到 API 服务端里。因为之前很有预见性的同步的时候把每天的包数据库按照 `/year/month/day/repo` 的结构保存起来(然后这部分的数据库文件就有 30G!),所以用户按照这个路径来请求包数据库的时候直接把对应的数据库文件丢给客户端,请求包文件的时候则直接从包目录里丢过去。这样的话其实从一个较早的时间结构最后请求一个较新的包文件也能拿到….不过这个不是问题,因为包归档给 pacman 用的话,有哪些包还是 pacman 要读数据库的。 19 | 20 | 包归档的 index 确实花了不少时间,目前的实现貌似也不很好,虽然貌似还挺快的,但是也挺吃硬盘的…而且一连好几次手残敲错了东西、少加了分隔符、加了冗余的配置变量…. 总之就是爆肝熬夜的效率超级差,4点多基本上没问题的时候已经能感觉到身体很不舒服了… 21 | 22 | 然后是一觉睡到第二天中午。觅食归来给 A.R.M 的 KVM 虚拟机硬盘增加了 100G。执行 `resize2fs` 的时候报错说已经达到最大空间,删掉 swap 之后依旧。接下来干了一件很作死的事情——把所有分区删掉了,然后按照原来的分区方案重建了新的分区。Reboot 之后 lsblk 是对了,但是 df -h 依旧是原来的分区。一叶说是 resize 没成功,要进 LiveCD 里面 resize2fs。不过我没镜像… 按照一叶的建议挂上 VNC 进 recovery 然后 fsck,再正常进系统执行 `resize2fs`,成功。 23 | 24 | 回过神来的时候发现这种作死的行为我居然手都没抖一下 = = 几百G的数据呐… 25 | 26 | 晚上还要做字幕,再去休息下好了… 27 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/再一次开始.md: -------------------------------------------------------------------------------- 1 | title: 再一次开始 2 | 3 | date: 2014-01-02 12:02:22 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 换博客程序的想法早就有了。不愧是不折腾会死星人,一路从 wordpress.com 换到独立的 WordPress 再到 Jekyll,13年8月份的时候还自己写了个博客程序 /w\ 11 | 12 | 不过无奈自己能力不够,Node.js 写的博客程序也不是那么舒服。WordPress 看过源码之后才发现比自己想象中的复杂得多——不然也不会成为最受欢迎的 CMS+Blog 系统。 13 | 14 | 前段时间 [+Bob Yuan](https://plus.google.com/u/0/+BobYuan/) 来找我注册域名,我顺便推荐了 Hexo 给他。不过惭愧的是那时候我也没有用过 Hexo… 虽然很想用。2014新年当天晚上在[少将](https://plus.google.com/u/0/103175359999284392656/)家和[C菊](https://plus.google.com/u/0/+CeeCirno/),[Zht](https://plus.google.com/u/0/+ZhtKannagi/),[色枫铃](https://plus.google.com/u/0/102594404609241222783/)以及[JOJO](https://plus.google.com/u/0/117271460125855897345/)一起看红白吃火锅,吃到开心的时候来邮件通知说 MultaCOM 机房的机器上线了要我去配置。 15 | 16 | 当我搞定服务器的时候其他人都吃完收桌子了QAQ 所以只好继续帮客户迁移虚拟机。我自己的服务器也在凤凰城 SecuredServers 机房,所以这次也是顺便一起迁过来。整理了一下,除了自己写的几个 Node.js 程序,也就剩下 [鹦鹉螺号](http://www.seainsight.me) 了。写了好长时间的博客,170篇文章全部被 Google 收录。虽然大部分是转载的 17 | 18 | 果然时间长了就是舍不得扔,平时拿来转载一些好玩的东西也是可以的。何况这里还有一大堆分享的文件以及 List Yo’s files 这等好用的插件在。不过还有不少其他人的 WordPress,看了一圈发现都好久不更新了——而且都是一开始写了两篇后面就再也没更新的。所以就丢在原来的服务器上不管了。至于这个博客,想来想去还是放在 Github 上。一个是 Uptime 一个是 CDN,最重要的是不要钱 19 | 20 | 于是就趁着复习周刚开始的这几天空闲把这个 Hexo 搞定吧。罗嗦了这么多,估计今天早上想写文章的思路早就不知道丢哪去了。既然有了专门的 WordPress 来做转载记录,那么这里就尽量保证原创吧~代码写了不少了不过一直没想好如何记录学到的很多经验。目测…还是需要个类似知识库的东西啊。好羡慕猫大大的[Felix Wiki](http://wiki.felixc.at) 21 | 22 | 嗯.. 于是就这样。 23 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/制作更好的 GIF 另一种更好的办法.md: -------------------------------------------------------------------------------- 1 | title: 制作更好的 GIF 另一种更好的办法 2 | 3 | date: 2014-03-25 11:11:46 4 | 5 | tags: [FFmpeg, ImageMagick, Anime, Multimedia, ] 6 | 7 | description: 8 | 9 | --- 10 | 之前使用 [FFmpeg 制作 GIF](http://blog.phoenixlzx.com/2014/02/19/make-gif-with-ffmpeg/) 被 zyo 吐槽 [明显的网纹](https://plus.google.com/107142103119739092775/posts/asBTCqCnP9A),于是找到了更好的办法。 11 | 12 | 需要:FFmpeg 以及 ImageMagick。 13 | 14 | 依旧不讨论如何截取/剪裁视频文件的问题。例如我们这里要转换的视频文件为 `clip.mp4`,首先使用 ffmpeg 转换成一个个的 PNG 文件,保持纵横比,宽为320像素,帧率为20。为防止文件名混乱,先建立一个 `png` 目录。 15 | 16 | 17 | mkdir -p png 18 | 19 | ffmpeg -i clip.mp4 -vf scale=320:-1 -r 20 png/output%05d.png 20 | 21 | --- 22 | 23 | 接下来使用 ImageMagick 的 `convert` 工具来把 png 连接成 gif。顺便做优化来缩小文件体积。 24 | 25 | 26 | convert -layers Optimize png/output*.png clip.gif 27 | 28 | --- 29 | 30 | 这样就得到了图象效果更好的 `clip.gif` 文件了。不过还有一个问题,不管是本地图象查看器还是浏览器里,这gif都像幻灯片似的。本来觉得是帧率的问题,但是就算是尝试了原帧率一样不行。[Google 之发现了问题…](http://superuser.com/questions/569924/why-is-the-gif-i-created-so-slow) 31 | 32 | 解决方案在[这里](http://humpy77.deviantart.com/journal/Frame-Delay-Times-for-Animated-GIFs-214150546)。不使用 `-delay 0` 或者是大于 `6/100` 的值。 33 | 34 | 所以刚才的命令可以稍微修改下。几次测试后发现对于我的原视频(23fps),`4/100` 最合适。 35 | 36 | 37 | convert -layers Optimize -delay 4/100 png/output*.png clip.gif 38 | 39 | --- 40 | 41 | 这样制作出来的 gif 效果就非常赞啦。虽然比之前多了一个步骤,但是确实是制作了更好的gif,是更好的方法。 42 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/新的 NJLUG 主站.md: -------------------------------------------------------------------------------- 1 | title: 新的 NJLUG 主站 2 | 3 | date: 2014-05-07 11:46:09 4 | 5 | tags: [Node.js, ] 6 | 7 | description: 8 | 9 | --- 10 | 南京 Linux 用户组有一段时间没有聚会了。偶然想起来之前我用 Jekyll 折腾的那个主页,随手敲了主页地址… 啊啦,还基本上没变啊… 11 | 12 | 嘛虽然自己写了那么几个东西,不过在组里待了也有一段时间也学到了不少东西。用户对社区的回报应该就在这时候展现出来吧。 13 | 14 | 依旧是 Express.js 框架,依旧是 Bootstrap。不过这回不想用数据库了,改用文本存储。除了主页和关于,顺便集成一个 Planet 在里面。RSS feed 的话,除了遍历一遍 upsert (不存在的添加,已存在的跳过)之外没想到什么更好的办法。实际上本来就是 RSS 没必要存储所有的文章,更何况又不是做之前想做的类似 Google Reader 的东西。 15 | 16 | 目前的 Planet 工作方式为首先检测是否存在文章数据文件 `posts.array`,如果不存在则读取 `planet.list` 中的订阅链接,获取到文章后 push 到一个数组中,按照发表日期排序并保存在 `posts.array` 里。到底是先排序再保存还是先存进去,渲染页面的时候再排序,这个稍微纠结了下。因为自己的配置文件里更新频率是 1 hour, 而且似乎每次更新到的文章数量还挺多的。所以保存时排序的话,则每天固定排序23次;如果渲染时排序的话,就看每天能有几个访问了…. 然后发现自己在这种小问题上纠结个毛毛啊啊啊啊啊。 17 | 18 | 排序后保存进文件之前和从文件读出之后要有两个 JSON 操作。保存之前 `JSON.stringify(posts)` 转换成字符串再保存,否则文件里是 `[[object Object], [object Object]]`。读出来之后 `JSON.parse(posts)` 再转换成对象数组,否则直接就一字符串没办法处理。 19 | 20 | 接下来就是主页和关于。因为不想写用户系统了所以就不发文章了吧… 关于可以是万年不变的页面,首页的话,显示最近的公告好了。最简单的实现就是存两个 markdown 文件然后用 marked 渲染出来插在页面里。 21 | 22 | 全部的源码在[这里](https://github.com/phoenixlzx/NJLUG-site)。 23 | 24 | 目前似乎域名还没解析,田华兄也未必决定用这个.. 所以效果的话戳[这里](http://njlug.phoenixlzx.com)看。 25 | 26 | 然后顺便说一句.. 现在已经健忘到我已经忘记刚刚想起来要写的东西了_(:з」∠)_ 27 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/浏览器A到Z.md: -------------------------------------------------------------------------------- 1 | title: 浏览器A到Z 2 | 3 | date: 2014-03-10 16:26:48 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 貌似很好玩的样子? 11 | 12 | * **A** amazon.cn 13 | * **B** bbs.archlinuxcn.org 14 | * **C** cp.ultrakvm.com 15 | * **D** drive.google.com 16 | * **E** expressjs.com 17 | * **F** foundation.zurb.com 18 | * **G** github.com 19 | * **H** he.net 20 | * **I** ituring.com.cn 21 | * **J** jsfiddle.net 22 | * **K** kde.org 23 | * **L** lixian.xunlei.com 24 | * **M** moedns.com 25 | * **N** npmjs.org 26 | * **O** ovh.com 27 | * **P** plus.google.com 28 | * **Q** qingcloud.com 29 | * **R** readthedocs.org 30 | * **S** stackoverflow.com 31 | * **T** twitter.com 32 | * **U** u2.dmhy.org 33 | * **V** versaweb.com 34 | * **W** wiki.archlinux.org 35 | * **X** xehost.com 36 | * **Y** yande.re 37 | * **Z** zh.minecraftwiki.net 38 | 39 | 发现各种不科学 = =… 而且这也只是我最近的记录而已吧 →_→ 40 | -------------------------------------------------------------------------------- /blog.phoenixlzx.com/用优雅的方式在 OS X 中为单个应用设置语言.md: -------------------------------------------------------------------------------- 1 | title: 用优雅的方式在 OS X 中为单个应用设置语言 2 | 3 | date: 2014-11-11 07:42:27 4 | 5 | tags: [OS X, ] 6 | 7 | description: 8 | 9 | --- 10 | 买到 CLIP STUDIO PAINT Pro,激活之后发现不给启动,显示 `Unsupported OS` 并退出。搜索了下发现是因为语言设置的问题导致,需要将系统环境设置为应用所支持的语言才能运行。 11 | 12 | 嘛。日本人做事情也是让人无话可说,那么多应用都没有多语言支持的… 用能支持的语言来显示就好了嘛。 13 | 14 | 话说回来,我一开始设置的系统语言是简体中文,虽然后备语言加了 English 和日本語,不过有些不能自动变更语言的应用在更换系统语言为 English 之后变得很别扭。于是寻找可以单独设置应用语言的方法。 15 | 16 | 用惯了 Linux 再用 OS X 其实并没有那么容易的改变习惯… 当我准备尝试单独 export 一份 locale 再运行 app 的时候 OS X 直接告诉我不适用我的表情简直和伊莉雅一样。 17 | 18 | … 19 | 20 | 睡了一觉起来继续 Google。找到了可以单独为应用设置语言并且 launch 的 app [Language Switcher](http://www.tj-hd.co.uk/en-gb/languageswitcher/),看起来不错,但是每次启动 CLIP STUDIO PAINT 都要先打开这货,这不是我想要的效果。 21 | 22 | 于是最终找到一个合适的解决方案:用 `defaults` 命令。 23 | 24 | 原帖在[这里](http://hints.macworld.com/article.php?story=20061001065101830)。 25 | 26 | 设置 CLIP STUDIO PAINT Pro 语言环境命令: 27 | 28 | 29 | defaults write jp.co.celsys.CLIPSTUDIOPAINT.lip AppleLanguages '("en-US")' 30 | 31 | --- 32 | 33 | 其中 `jp.co.celsys.CLIPSTUDIOPAINT.lip` 可以在应用的显示包信息 -> Contents -> Info.plist 中找到。 34 | 35 | 执行后就可以直接双击启动啦~ 36 | 37 | 最后献丑一张w 38 | 39 | ![Kira\( > ◡╹\)~](http://blog.phoenixlzx.com/static/img/posts/2014111601.png) 40 | -------------------------------------------------------------------------------- /jianyan.me/Django 中设置 cssjsimages 路径的方法.md: -------------------------------------------------------------------------------- 1 | title: Django 中设置 cssjsimages 路径的方法 2 | 3 | date: 2014-09-18 21:30:00 4 | 5 | tags: [Django, ] 6 | 7 | description: 在 settings.py 的最后一行你可以看到 STATIC_URL = '/static/' 这句话,在其后面加上: 8 | 9 | --- 10 | 在 settings.py 的最后一行你可以看到 `STATIC_URL = '/static/'` 这句话,在其后面加上: 11 | 12 | 13 | STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static') 14 | 15 | STATICFILES_DIRS = ( 16 | 17 | ('css', os.path.join(STATIC_ROOT, 'css').replace('\\', '/') ), 18 | 19 | ('js', os.path.join(STATIC_ROOT, 'js').replace('\\', '/') ), 20 | 21 | ('images', os.path.join(STATIC_ROOT, 'images').replace('\\', '/') ), 22 | 23 | ) 24 | 25 | --- 26 | 27 | 然后把你的 css/js/images 那些文件夹都丢进 static 文件夹中(此文件夹应建立在你的 view.py 所在目录下) 28 | 模板里面这么写: 29 | 30 | 31 | 32 | 33 | --- 34 | 35 | 如果设置之后出现了与 Unicode 有关的错误,打开 `/Python27/Lib/mimetypes.py`,在 import 语句之后加入: 36 | 37 | 38 | if sys.getdefaultencoding() != 'gbk': 39 | 40 | reload(sys) 41 | 42 | sys.setdefaultencoding('gbk') 43 | 44 | --- 45 | -------------------------------------------------------------------------------- /jianyan.me/Git 用的越早,你就活得越久.md: -------------------------------------------------------------------------------- 1 | title: Git 用的越早,你就活得越久 2 | 3 | date: 2014-07-04 21:30:00 4 | 5 | tags: [Git, 杂谈, ] 6 | 7 | description: 这是我最近这段时间使用 Git 的感受。Git 的核心功能是版本控制,基于此,我们可以: 8 | 9 | 利用其强大的「历史」功能,我们可以把一些频繁修改的东西(不仅限于代码),都使用 Git 来管理。这样,我们可以轻松找回 n 天前删掉的代码或文字。 10 | 利用其强大的「分支管理」功能,我们可以将 11 | 12 | --- 13 | 这是我最近这段时间使用 Git 的感受。 14 | Git 的核心功能是版本控制,基于此,我们可以: 15 | 16 | 1. 利用其强大的「历史」功能,我们可以把一些频繁修改的东西(不仅限于代码),都使用 Git 来管理。这样,我们可以轻松找回 n 天前删掉的代码或文字。 17 | 2. 利用其强大的「分支管理」功能,我们可以将某一项目的编码过程拆分成「受精卵-卵裂-原肠胚-器官形成-出生-发育」,同时再推广 Java 类库的设计思想,从而简化软件开发流程。 18 | -------------------------------------------------------------------------------- /jianyan.me/Pillow 模块小记:在图片上添加文字.md: -------------------------------------------------------------------------------- 1 | title: Pillow 模块小记:在图片上添加文字 2 | 3 | date: 2014-12-09 17:00:00 4 | 5 | tags: [Pillow, PIL, Python, ] 6 | 7 | description: 1. 图片来自 [知乎](http://zhuanlan.zhihu.com/zhihu-product) 2. 颜色参考了 [Adobe Color CC](https://color.adobe.com/zh/explore/most-popular/?time=all) 3. [RGBA color space](http://en.wikipedia.org/wiki/RGBA_color_space) 4. [Python 练习册,每天一个小程序](https://github.com/Show-Me-the-Code/show-me-the-code) 8 | 9 | --- 10 | 首先 `pip install Pillow` 安装 Pillow 模块。(这名字挺萌的) 11 | 12 | 直接上代码: 13 | 14 | 15 | # -*- coding: utf-8 -*- 16 | 17 | import urllib 18 | 19 | from io import BytesIO 20 | 21 | from PIL import Image, ImageDraw, ImageFont 22 | 23 | PIC_URL = "http://pic1.zhimg.com/3676e9bd6_l.jpg" 24 | 25 | DRAW_WORD = u"①" 26 | 27 | TRANSPARENT = (255, 255, 255, 0) 28 | 29 | SOFT_RED = (243, 90, 74, 255) 30 | 31 | rsp = urllib.urlopen(PIC_URL) 32 | 33 | data = rsp.read() 34 | 35 | fp = BytesIO() 36 | 37 | fp.write(data) 38 | 39 | fp.seek(0, 0) 40 | 41 | base_image = Image.open(fp).convert('RGBA') 42 | 43 | fnt = ImageFont.truetype('CALIBRI.TTF', base_image.size[0] / 4) # FreeTypeFont 44 | 45 | fnt_size = fnt.getsize(DRAW_WORD) 46 | 47 | txt_image = Image.new('RGBA', base_image.size, TRANSPARENT) 48 | 49 | ImageDraw.Draw(txt_image).text((base_image.size[0] - fnt_size[0], 10), DRAW_WORD, fill=SOFT_RED, font=fnt) 50 | 51 | out = Image.alpha_composite(base_image, txt_image) 52 | 53 | out.show() 54 | 55 | --- 56 | 57 | 效果图: 58 | 59 | ![](http://endless.qiniudn.com/blogpillow.bmp) 60 | 61 | 参考资料: 62 | 63 | 1. 图片来自 [知乎](http://zhuanlan.zhihu.com/zhihu-product) 64 | 2. [RGBA color space](http://en.wikipedia.org/wiki/RGBA_color_space) 65 | 3. [Python 练习册,每天一个小程序](https://github.com/Show-Me-the-Code/show-me-the-code) 66 | 67 | 附上最近发现的一个好网站:[Adobe Color CC](https://color.adobe.com/zh/explore/most-popular/?time=all) 68 | -------------------------------------------------------------------------------- /jianyan.me/blog2md 开发小记.md: -------------------------------------------------------------------------------- 1 | title: blog2md 开发小记 2 | 3 | date: 2015-03-09 09:10:00 4 | 5 | tags: [Python, 爬虫, markdown, Beautiful Soup, html2text, ] 6 | 7 | description: 傲游、360 等浏览器有一个小功能:阅读模式。 How to do that? 8 | 9 | --- 10 | 本文项目地址: 11 | 12 | # 缘起 13 | 14 | 傲游、360 等浏览器有一个小功能:阅读模式,效果如下: 15 | 16 | ![](http://endless.qiniudn.com/blogblog2md.png) 17 | 18 | 转换后 19 | 20 | ![](http://endless.qiniudn.com/blogblog2md2.png) 21 | 22 | 去掉了一些杂七杂八的东西。 23 | 24 | How to do that? 25 | 26 | 识别出那些「垃圾标签」然后去掉就行,比如下图的 `
`。 27 | 28 | ![](http://endless.qiniudn.com/blogblog2md3.png) 29 | 30 | # 编码 31 | 32 | 知道原理后编码就简单了。 33 | 34 | 1. `requests.session().get(url).content` 获取 HTML 文本; 35 | 2. 通过 `BeautifulSoup` 中的 `extract()` 函数来「修剪」网页; 36 | 3. `html2text(html)` 将 html 转成 markdown 文本,然后写入文件,搞定。 37 | 38 | 这里指出 `html2text` 的一个 bug:在 `html2text\config.py` 文件中有这么一行 39 | 40 | 41 | BODY_WIDTH = 78 42 | 43 | --- 44 | 45 | 这会导致转换后的 markdown 中某段文字莫名其妙地被换行,将其修改成 46 | 47 | 48 | BODY_WIDTH = 0 49 | 50 | --- 51 | 52 | 即可。 53 | 54 | 如果要获取博客的全部文章的话,还需要爬虫爬更多页面的信息,详见 [源码](https://github.com/EndlessCheng/blog2md)。 55 | -------------------------------------------------------------------------------- /jianyan.me/re.compile() 函数的一个小改进.md: -------------------------------------------------------------------------------- 1 | title: re.compile() 函数的一个小改进 2 | 3 | date: 2015-03-19 21:35:00 4 | 5 | tags: [Python, 正则表达式, ] 6 | 7 | description: Python 中的 re.compile() 函数可以「格式化」复杂的正则表达式,从而方便理解。但是像 literal 48 这句话,还需要我们自己转换一下 ASCII 对应的字符。不妨自己 DIY 一下源码。 8 | 9 | --- 10 | Python 中的 `re.compile()` 函数可以「格式化」复杂的正则表达式,从而方便理解。 11 | 12 | 比如执行 `re.compile(r"0\d{2}-\d{8}|0\d{3}-\d{7}", re.DEBUG)` 后得到: 13 | 14 | 15 | literal 48 16 | 17 | branch 18 | 19 | max_repeat 2 2 20 | 21 | in 22 | 23 | category category_digit 24 | 25 | literal 45 26 | 27 | max_repeat 8 8 28 | 29 | in 30 | 31 | category category_digit 32 | 33 | or 34 | 35 | max_repeat 3 3 36 | 37 | in 38 | 39 | category category_digit 40 | 41 | literal 45 42 | 43 | max_repeat 7 7 44 | 45 | in 46 | 47 | category category_digit 48 | 49 | --- 50 | 51 | 但是像 `literal 48` 这句话,还需要我们自己转换一下 ASCII 对应的字符。不妨自己 DIY 一下源码。 52 | 53 | 将 `Lib/sre_parse.py` 的 `SubPattern` 类中的 `dump()` 函数末尾的 `print av, ; nl = 0` 修改成 54 | 55 | 56 | print av, 57 | 58 | if op == "literal" or op == "not_literal": 59 | 60 | print "(%s)" % repr(chr(av)), 61 | 62 | nl = 0 63 | 64 | --- 65 | 66 | 就可以显示 ASCII 码对应的字符。(10 会以 `\n` 打印出来) 67 | -------------------------------------------------------------------------------- /jianyan.me/如何写一个无 bug 的 minmax 宏?.md: -------------------------------------------------------------------------------- 1 | title: 如何写一个无 bug 的 minmax 宏? 2 | 3 | date: 2014-11-01 21:30:00 4 | 5 | tags: [C, macro, GHC, ] 6 | 7 | description: 今天看了下 GHC 的源码,在 [Rts.h](https://github.com/ghc/ghc/blob/master/includes/Rts.h) 中,有如下宏定义: 8 | 9 | --- 10 | 今天看了下 GHC 的源码,在 [Rts.h](https://github.com/ghc/ghc/blob/master/includes/Rts.h) 中,有如下宏定义: 11 | 12 | 13 | #if defined(SUPPORTS_TYPEOF) 14 | 15 | #define stg_min(a,b) ({typeof(a) _a = (a), _b = (b); _a <= _b ? _a : _b; }) 16 | 17 | #define stg_max(a,b) ({typeof(a) _a = (a), _b = (b); _a <= _b ? _b : _a; }) 18 | 19 | #else 20 | 21 | #define stg_min(a,b) ((a) <= (b) ? (a) : (b)) 22 | 23 | #define stg_max(a,b) ((a) <= (b) ? (b) : (a)) 24 | 25 | #endif 26 | 27 | --- 28 | 29 | 那么问题来了:为什么不直接定义下面那种宏? 30 | 原因在于传入的 a,b 可能是一个有副作用的表达式,比如 `++a`,使用下面这种宏会产生一个及其隐秘的 bug(谁知道哪天程序出错了 bug 会在这里)。 31 | 个人觉得这真的是一个 GHC 的 bug.. 32 | 替代方案就正如源码中写的,使用 `typeof`,不过这需要 C 扩展支持。 33 | 参考: 34 | 35 | 1. [macros - MIN and MAX in C - Stack Overflow](http://stackoverflow.com/questions/3437404/min-and-max-in-c) 36 | 2. [Typeof - Using the GNU Compiler Collection (GCC)](https://gcc.gnu.org/onlinedocs/gcc/Typeof.html#Typeof) 37 | -------------------------------------------------------------------------------- /jianyan.me/如何在 SAE 上正确地设置 Django 静态文件.md: -------------------------------------------------------------------------------- 1 | title: 如何在 SAE 上正确地设置 Django 静态文件 2 | 3 | date: 2014-12-29 19:00:00 4 | 5 | tags: [Django, SAE, ] 6 | 7 | description: 只需要加几行字。 8 | 9 | --- 10 | 1.目录结构如下:(请无视 `.idea` 文件夹) 11 | 12 | ![](http://endless.qiniudn.com/blogsae-django-static.png) 13 | 14 | 2.`config.yaml` 只需要两行: 15 | 16 | 17 | libraries: 18 | 19 | - name: "django" 20 | 21 | version: "1.5" 22 | 23 | --- 24 | 25 | 3.`settings.py` 里面这样写: 26 | 27 | 28 | STATIC_ROOT = '' 29 | 30 | STATIC_URL = '/static/' 31 | 32 | STATICFILES_DIRS = ( 33 | 34 | os.path.join('static'), 35 | 36 | ) 37 | 38 | --- 39 | 40 | 4.`urls.py` 只需要加上你的 view 就行。 41 | 42 | 5.模板里面这样写: 43 | 44 | ![](http://endless.qiniudn.com/blogsae-django-static2.png) 45 | 46 | 搞定。 47 | 48 | PS:`USE_TZ` 要设置成 `False` ,否则插入时间到数据库的时候会变成 UTC 时间而不是北京时间。 49 | 50 | 参考资料: 51 | 52 | 1. [Managing static files (CSS, images)](https://docs.djangoproject.com/en/dev/howto/static-files/) 53 | 2. [The staticfiles app](https://docs.djangoproject.com/en/1.5/ref/contrib/staticfiles/) 54 | 3. [Settings Documentation](https://docs.djangoproject.com/en/1.5/ref/settings/) 55 | -------------------------------------------------------------------------------- /jianyan.me/访问网页的过程——常见网络传输协议汇总.md: -------------------------------------------------------------------------------- 1 | title: 访问网页的过程——常见网络传输协议汇总 2 | 3 | date: 2015-01-13 18:10:00 4 | 5 | tags: [网络传输协议, ] 6 | 7 | description: 1. 解析输入的 URL,找出其中的域名。2. 将域名通过 UDP 协议发送给域名服务器(DNS),通过逐层查找获得域名对应的 IP 地址,返回给用户主机。 8 | 9 | --- 10 | 计网学完了,整理下。 11 | 12 | 1. 解析输入的 URL,找出其中的域名。 13 | 14 | 2. 将域名通过 UDP 协议发送给域名服务器(DNS),通过逐层查找获得域名对应的 IP 地址,返回给用户主机。 15 | 16 | 3. 通过三次握手协议建立起用户主机与目标主机的 TCP 连接。 17 | 18 | 4. 用户的请求消息包括请求路径,文件名等信息,给消息加上 HTTP 头,递交给传输层。 19 | 20 | 5. 传输层为请求消息加上 TCP 头,包括源与目标端口号,传输序列号等信息,如果请求消息过长还需要对其进行分段,将加过头部的消息交给网络层。 21 | 22 | 6. 网络层给消息添加 IP 头组成分组(IP 头包括源与目标 IP 地址、分段信息、控制信息等内容),并将这些分组交给数据链路层。 23 | 24 | 7. 用户主机检测 ARP 缓存表,看有没有关于目标主机的 MAC 地址信息,如有没有的话通过代理 ARP 协议获取。 25 | 26 | 8. 给分组加上 LLC 头,在 MAC 子层中给帧添加 MAC 头与尾成帧,添加源于目的 MAC 地址,校验信息等内容,帧与帧之间添加分隔自断后交给物理层存储。 27 | 28 | 9. 数据链路层通过某种协议(如 CSMA/CD)控制帧的传送,将这些帧在子网广播。 29 | 30 | 10. 子网路由器获取这些帧后检查目标 MAC 地址,发现与自身 MAC 地址相同,将其接收,去掉帧头和尾将剥离出的分组递交至网络层,网络层通过分析 IP 头获取目标 IP 地址并在路由表中进行检索,选择一条合适的输出线路,把分组重新交给数据链路层按照新的 MAC 地址进行封装成帧,通过某种协议(如 PPP)把帧发送给下一个路由器。 31 | 32 | 11. 经过一次货多次的重复路由过程,这些帧到达目标主机所在子网路由器。 33 | 34 | 12. 子网路由器通过 ARP 协议获取目标主机的 MAC 地址,利用这个地址将分组重新封装成帧传至目标主机。 35 | 36 | 13. 目标主机将截取的比特流按照帧分隔字段截取成帧,把去掉 MAC 头尾,LLC 头的分组向上递交给网络层,网络层剥去 IP 头将消息递交至传输层,传输层去掉 TCP 头将消息递交给应用层。 37 | 38 | 14. 应用层通过分析 HTTP 请求消息生成应答,以相同的方式把应答信息传送给用户主机的应用层,通过三次握手协议释放 TCP 连接。 39 | 40 | 15. 浏览器解释应答信息进行显示。 41 | -------------------------------------------------------------------------------- /www.byvoid.com/C++語法分析中最讓人頭疼的歧義.md: -------------------------------------------------------------------------------- 1 | title: C++語法分析中最讓人頭疼的歧義 2 | 3 | date: 2013-05-22 11:19:26 4 | 5 | tags: [C++, 語法分析, 編譯, 編譯器, C++11, 歧義, 函數聲明, ] 6 | 7 | description: 8 | 9 | --- 10 | # 11 | 12 | C++是個特別複雜的語言,其複雜性不僅體現在開發模式上,也體現在語法分析上。許多人都遇到過嵌套模板參數的歧義問題,如`vector> v`,在有些編譯器上會被解析爲`vector < vector < int >> v`,但新的編譯器都已經解決了。而最讓人頭疼的歧義則是[Most vexing parse](http://en.wikipedia.org/wiki/Most_vexing_parse): 13 | 14 | 15 | class Timer { 16 | public: 17 | Timer() {} 18 | }; 19 | 20 | class TimeKeeper { 21 | public: 22 | TimeKeeper(const Timer& t) {} 23 | int get_time() {return 0;} 24 | }; 25 | 26 | int main() { 27 | TimeKeeper time_keeper(Timer()); 28 | return time_keeper.get_time(); 29 | } 30 | 31 | 以上代碼中出現歧義的是`TimeKeeper time_keeper(Timer());`,因爲它有兩種理解方式: 32 | 33 | 1. 定義一個`TimeKeeper`類型的對象,並用`Timer()`作爲初始化參數。 34 | 2. 聲明一個名叫`time_keeper`的函數,它的返回值類型是`TimeKeeper`,參數是一個函數指針,這個函數指針指向的函數的返回值是`Timer`,無參數。 35 | 36 | 很明顯我們想要表達的是第一種意思,但很不幸編譯器會默認理解爲第二種。Clang++會給出以下錯誤: 37 | 38 | 39 | timekeeper.cc:15:21: error: member reference base type 'TimeKeeper (Timer (*)())' is not a 40 | structure or union 41 | return time_keeper.get_time(); 42 | ~~~~~~~~~~~^~~~~~~~~ 43 | 44 | 之所以產生這種歧義,是因爲這幾個原因: 45 | 46 | 1. C++的函數在使用前需要聲明,定義和聲明是可以分離的。 47 | 2. C++的函數聲明的參數可以只有類型,沒有名稱,如`int max(int, int);`。 48 | 3. C++的函數聲明的參數名在類型名後可以加`()`,如`int max(int (a), int())`。 49 | 4. C++的函數聲明可以在函數體中。 50 | 51 | 最優美的解決方案是使用C++11的統一初始化語法: 52 | 53 | 54 | TimeKeeper time_keeper{Timer()}; 55 | -------------------------------------------------------------------------------- /www.byvoid.com/CoffeeScript的全局變量污染與Node.js的模塊加載.md: -------------------------------------------------------------------------------- 1 | title: CoffeeScript的全局變量污染與Node.js的模塊加載 2 | 3 | date: 2013-06-30 00:14:56 4 | 5 | tags: [JavaScript, CoffeeScript, Continuation.js, 命名空間, 全局變量, 編譯, JIT, Node.js, 模塊, 加載, 設計開發, ] 6 | 7 | description: 8 | 9 | --- 10 | # 11 | 12 | 最近發現[Continuation.js](/project/continuation)的一個Bug:命令行使用`-c`開啓緩存模式的時候,有時候更新了代碼緩存不會更新,這個Bug時隱時現,難以捕捉。今天發現這個Bug升級了,不僅僅是在緩存模式的時候會有問題,即時沒有開啓`-c`一樣會發生這個問題。再到後來發現這個Bug只在CoffeeScript代碼中出現,於是就鎖定了目標開始調試。 13 | 14 | [Continuation.js](/project/continuation)和CoffeeScript一樣支持動態加載編譯,就是可以在Node.js中使用`require`的方法加載原始代碼,運行時編譯。這樣的好處不言而喻,給用戶提供了一致而透明的接口,無需事先編譯好再加載。具體的實現方法是,修改`require.extensions`下面的回調函數,把加載定向到自定義的函數來處理,最後再調用`require.main.compile`運行編譯後的代碼。 15 | 16 | `require`和`module`是Node.js運行時的兩個重要變量,所有模塊的運行其實都是在一個這樣的函數中的: 17 | 18 | 19 | function(module, require) { 20 | // Your code 21 | } 22 | 23 | 所以`require`和`module`是模塊內的全局變量。`require.extensions`是一個對象,用於根據擴展名註冊`require`的回調函數,默認情況下,`require.extensions`是這樣的(Node.js 0.10.12): 24 | 25 | 26 | { 27 | '.js': function (module, filename) { 28 | var content = NativeModule.require('fs').readFileSync(filename, 'utf8'); 29 | module._compile(stripBOM(content), filename); 30 | }, 31 | '.json': function (module, filename) { 32 | var content = NativeModule.require('fs').readFileSync(filename, 'utf8'); 33 | try { 34 | module.exports = JSON.parse(stripBOM(content)); 35 | } catch (err) { 36 | err.message = filename + ': ' + err.message; 37 | throw err; 38 | } 39 | }, 40 | '.node': function () { [native code] } 41 | } 42 | 43 | 在Node.js代碼中使用`require(filename)`時,實際上會根據`filename`的後綴擴展名依次來選擇加載的回調函數,例如我想增加一種自定義的自動加載類型`.byv`,只需設置`require.extensions['.byv']`即可。同理,也可以修改已有的後綴的加載函數,[Continuation.js](/project/continuation)就是這麼做的(修改了`.js`文件的加載函數)。 44 | 45 | 爲了透明支持CoffeeScript,[Continuation.js](/project/continuation)修改了`.coffee`的加載函數,在自定義的回調函數中調用CoffeeScript模塊,調用CoffeeScript編譯,然後再使用Continuation.js編譯。問題就在這裏,是加載CoffeeScript的時候`require.extensions['.coffee']`被修改了。閱讀CoffeeScript的代碼(版本1.6.3),發現在`'coffee-script'`模塊中,有這麼幾行代碼: 46 | 47 | 48 | if require.extensions 49 | for ext in ['.coffee', '.litcoffee', '.coffee.md'] 50 | require.extensions[ext] = loadFile 51 | 52 | 這段代碼不應該在加載CoffeeScript模塊中運行,而應該在通過命令行運行`coffee`命令的時候運行,可惜CoffeeScript沒有注意到這一點,應該算是一個Bug吧。給CoffeeScript提交了一個推送請求 ,等待審覈中。 53 | 54 | 更新:這個issue被標註爲重複,已經在 合併了,CoffeeScript 2.0.0(未發佈)以後默認已經取消這個特性了。 55 | -------------------------------------------------------------------------------- /www.byvoid.com/icc的過程間優化和性能分析引導優化.md: -------------------------------------------------------------------------------- 1 | title: icc的過程間優化和性能分析引導優化 2 | 3 | date: 2014-06-03 15:35:25 4 | 5 | tags: [編譯, 鏈接, 優化, 全局優化, 過程間優化, 性能分析引導優化, 彙編, 代碼生成, icc, gcc, llvm, ] 6 | 7 | description: 8 | 9 | --- 10 | # 11 | 12 | icc([Intel C++ Compiler](https://software.intel.com/en-us/c-compilers))是一個非常厲害的編譯器,對優化計算密集型的程序遠超其他任何編譯器,如gcc、llvm、Visual C++。 13 | 14 | icc提供了**過程間優化(Interprocedural Optimization)**技術,可以幫助編譯器在不同的目標文件之間進行全局優化。傳統的編譯器的編譯過程是編譯每個源文件到獨立的目標文件,然後再通過鏈接器將目標文件鏈接成可執行文件。傳統的編譯器的編譯優化主要集中在每個源文件內部,鏈接過程比較簡單,因此每個文件都是獨立的,而icc提供的過程間優化打破了這一限制。 15 | 16 | 過程間優化可以對整個程序進行全局優化,而不是僅僅在單個文件、單個函數或者單個代碼塊內部優化。過程間優化可以減少過程之間重複計算、內存的低效訪問以及簡化迭代過程,通常會採用內聯函數的方式。過程間優化還可以重排代碼的順序以優化內存的分配方式和局部性。 17 | 18 | 通過指定編譯參數`-ipo`,icc可以開啓過程間優化,icc將在編譯時生成特殊格式的目標文件(中間語言),並在鏈接時進行進一步的編譯和過程間優化,如圖所示: 19 | 20 | ![](https://www.byvoid.com/upload/blog/icc-ipo-pgo/ipo.png) 21 | 22 | 使用icc啓動過程間優化的方式是在編譯參數中加上`-ipo`參數,還要設置環境變量`AR=xiar`,使用Intel的版本代替默認的`ar`。 23 | 24 | **性能分析引導優化(Profile Guided Optimization)**通過分析程序運行時的實際行爲,將結果反饋給編譯器,使得編譯器可以重新安排代碼以減少指令緩存問題和分支預測誤判,從而獲得性能的提升。性能分析引導優化通過實際執行代碼統計出運行頻率最高的部分,編譯器通過這些信息可以更加針對地優化代碼。性能分析引導優化分爲三個階段: 25 | 26 | 1. 第一步是生成分析程序。在這個階段,編譯器創建一個有采樣注入的可執行程序。在icc中使用的編譯指令是`-prog-gen`,以及`-prof-dir=[dir]`。 27 | 2. 第二步是運行第一步生成的被注入採樣分析的程序,每次運行這個程序,都會生成`-prof-dir`指定的目錄下生成一個動態信息文件(dynamic information file),將會被最終編譯時使用。 28 | 3. 第三步是最終編譯的步驟。第二次編譯的時候,動態信息文件會合併成一個彙總文件。通過彙總文件,編譯器會嘗試將最常使用的執行路徑優化。 29 | 30 | ![](https://www.byvoid.com/upload/blog/icc-ipo-pgo/pgo.png) 31 | 32 | 過程間優化和性能分析引導優化可能會相互影響,性能分析引導優化通常會幫助編譯器生成內聯函數,這會幫助過程間優化的效率。性能分析引導優化對分支預測效率的提升最有效果,許多分支執行的可能性無法在編譯時判斷,而通過性能分析引導優化,編譯器可以針對經常執行的分支(熱代碼)和不經常執行的分支(冷代碼)生成高效的彙編代碼。 33 | 34 | 使用性能分析引導優化的方法如下: 35 | 36 | * 第一階段:編譯參數中加上:`-prof-gen=srcpos -prof-dir=/tmp/profdata`。其中`-prof-dir`是存儲性能分析文件的目錄。 37 | * 第二階段:運行編譯好的程序,然後運行`profmerge -prof_dir /tmp/profdata`生成彙總文件。 38 | * 第三階段:重新編譯程序,使用參數:`-prof-use=nomerge -prof-func-groups -prof-dir=/tmp/profdata`。 39 | 40 | 這樣最終生成的代碼就是經過性能分析優化過後的了。 41 | 42 | 以上方法在icc 14.0.2上試驗通過。 43 | 44 | ## 參考 45 | 46 | * [Intel® C++ Compiler XE 13.1 User and Reference Guide](https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/index.htm) 47 | * [Intel® C++ Optimizing Applications](http://www.ucl.ac.uk/isd/staff/research_services/research-computing/services/unity/environment/intel_cc___optimizing_applications.pdf) 48 | -------------------------------------------------------------------------------- /www.byvoid.com/一段程序看懂比特幣原理.md: -------------------------------------------------------------------------------- 1 | title: 一段程序看懂比特幣原理 2 | 3 | date: 2014-03-21 03:14:27 4 | 5 | tags: [比特幣, 原理, 挖礦, 區塊, 區塊鏈, 交易, 散列, 挖礦難度, 私鑰, 簽名, ] 6 | 7 | description: 8 | 9 | --- 10 | # 11 | 12 | 自從比特幣火起來以後,網上對比特幣的解釋可謂汗牛充棟,紛繁複雜。但對於程序員來說,最直接的方式莫過於直接看程序代碼了。嫌比特幣代碼龐雜沒關係,我找到一段簡明扼要的代碼,用來理解比特幣再好不過了。 13 | 14 | 以下這段程序轉自[知乎上Wu Hao的回答](http://www.zhihu.com/question/20941124/answer/16668373)。 15 | 16 | 17 | function mine() 18 | { 19 | while(true) 20 | { 21 | longestChain = getLongestValidChain() 22 | 23 | -- A number that changes every time, so that you don't waste 24 | -- time trying to calculate a valid blockHash with the same 25 | -- input. 26 | nonce = getNewNonce() 27 | 28 | currentTXs = getUnconfirmedTransactionsFromNetwork() 29 | 30 | newBlock = getNewBlock(longestChain, currentTXs, nonce) 31 | 32 | -- http://en.wikipedia.org/wiki/SHA-2 33 | -- and this is what all the "mining machines" are doing. 34 | blockHash = sha256(newBlock) 35 | 36 | if (meetReqirements(blockHash)) 37 | { 38 | broadcast(newBlock) 39 | -- Now the height the block chain is incremented by 1 40 | -- (if the new block is accepted by other peers), 41 | -- and all the TXs in the new block are "confirmed" 42 | } 43 | } 44 | } 45 | //////////////////////////////////////////////////////////////// 46 | function sendBTC(amount) 47 | { 48 | sourceTXs = pickConfirmedTransactionsToBeSpent(amount) 49 | tx = generateTX(sourceTXs, targetAddrs, amount, fee) 50 | signedTx = sign(tx, privateKeysOfAllInputAddress) 51 | broadcast(signedTx) 52 | } 53 | //////////////////////////////////////////////////////////////// 54 | 55 | 下面是我的解釋: 56 | 57 | 挖礦過程就是不斷從比特幣網絡中獲取所有未確認交易`getUnconfirmedTransactionsFromNetwork()`,把它們打包成一個區塊並掛載目前最長的區塊鏈上`getNewBlock(longestChain, currentTXs, nonce)`,然後計算新的區塊的散列值`sha256(newBlock)`,如果散列值正好滿足挖礦難度了`meetReqirements(blockHash)`,那麼就挖礦成功了。所謂挖礦難度,指的是要求的二進制散列值小於某個閾值,閾值越小,挖礦的難度就越大。 58 | 59 | 付款過程就是把一些有餘額的已確認交易拿出來作爲發送地址`pickConfirmedTransactionsToBeSpent(amount)`,然後根據目標地址支付一定交易費生成新的交易`generateTX(sourceTXs, targetAddrs, amount, fee)`,並用錢包私鑰對交易簽名`sign(tx, privateKeysOfAllInputAddress)`,然後廣播出去。 60 | -------------------------------------------------------------------------------- /www.byvoid.com/冰雪奇緣中的左翼符號.md: -------------------------------------------------------------------------------- 1 | title: 冰雪奇緣中的左翼符號 2 | 3 | date: 2014-03-12 21:02:20 4 | 5 | tags: [冰雪奇緣, 左翼, 迪士尼, 電影, 女性主義, 平等主義, 全球化, 陰謀論, 自由主義, 稷下學宮, ] 6 | 7 | description: 8 | 9 | --- 10 | # 11 | 12 | ![](https://www.byvoid.com/upload/blog/frozen/frozen.jpg) 13 | 14 | [冰雪奇緣](https://zh.wikipedia.org/wiki/%E5%86%B0%E9%9B%AA%E5%A5%87%E7%BC%98)(Frozen)最近火得要命,主題曲「Let it go」更是紅得發紫。在我看來,這是一部迎合了美國左翼價值觀的電影,有衆多符號可以證明這一點。 15 | 16 | ## 女性主義 17 | 18 | 主角Anna和Elsa都是有性格、有思想的女性,而非過去迪士尼童話中爲愛情而生的公主的經典形象。雖然「花木蘭」、「勇敢傳說」中的女主角已經打破了這一點,但要說專門弘揚女性獨立意識,還是冰雪奇緣。 19 | 20 | ## 平等主義 21 | 22 | 男主角Kristoff出身貧寒卑微,但卻可以和Anna公主平起平坐,最後還能贏得芳心。 23 | 24 | ## 反全球化 25 | 26 | Weselton公爵作爲Arendelle最重要的貿易夥伴派來的代表,竟被描繪爲一個跳樑小丑,正好迎合西方左翼反全球化的嗜好。 27 | 28 | ## 陰謀論 29 | 30 | Hans王子接近Anna公主目的只是爲了奪取王位,熟悉的陰謀論調。 31 | 32 | ## 反傳統 33 | 34 | 主題曲「Let it go」整首歌都在表達這一觀點,譬如「I’m never going back, the past is in the past」、「That perfect girl is gone」。 35 | 36 | ## 自由主義 37 | 38 | 主題曲「Let it go」中唱到「It’s time to see what I can do, to test the limits and break through. No right, no wrong, no rules for me, I’m free!」前一句體現出的是積極自由主義(Liberty to),後一句是消極自由主義(Liberty from)。兩句話一舉贏得了左翼和右翼,迪士尼真是高明。 39 | -------------------------------------------------------------------------------- /www.byvoid.com/比特幣——史上最瘋狂的虛擬貨幣.md: -------------------------------------------------------------------------------- 1 | title: 比特幣——史上最瘋狂的虛擬貨幣 2 | 3 | date: 2013-04-16 13:54:04 4 | 5 | tags: [Bitcoin, 比特幣, 分佈式系統, 工作量證明, P2P, 貨幣, 經濟學, 投機, ] 6 | 7 | description: 8 | 9 | --- 10 | # 11 | 12 | 今天我在清華大學「搜索引擎技術基礎課程」的討論上做了一個報告:比特幣——史上最瘋狂的虛擬貨幣。現在公開放出來,歡迎大家討論。鏈接見此: 13 | 14 | [演示文稿](http://byvoid.github.io/slides/bitcoin/index.html) 15 | 16 | ![Bitcoin](http://byvoid.github.io/slides/bitcoin/bitcoin-cash.jpg) 17 | 18 | 另外推薦:[我的所有演示文稿](http://byvoid.github.io/slides/) 19 | 20 | 注:這個演示文稿只是對比特幣十分簡要的介紹,更多細節推薦 [bitcoin的技术和金融缺陷](http://zhiqiang.org/blog/finance/techinical-and-financial-deficit-of-bitcoin.html) 21 | -------------------------------------------------------------------------------- /www.byvoid.com/越來越長.md: -------------------------------------------------------------------------------- 1 | title: 越來越長 2 | 3 | date: 2014-03-20 02:46:56 4 | 5 | tags: [博客, 文章, 長度, 點滴發現, ] 6 | 7 | description: 8 | 9 | --- 10 | # 11 | 12 | 最近發現近一兩年來我的博客文章有越來越長的趨勢,讀起來費勁,每次寫起來也很費勁。 13 | 14 | 應該寫短一些,多寫一點,立此爲證。 15 | -------------------------------------------------------------------------------- /www.byvoid.com/關於阿里巴巴面試結果信息泄漏的一點說明.md: -------------------------------------------------------------------------------- 1 | title: 關於阿里巴巴面試結果信息泄漏的一點說明 2 | 3 | date: 2013-10-25 23:23:49 4 | 5 | tags: [阿里巴巴, 面試, 泄漏, 職業生涯, ] 6 | 7 | description: 8 | 9 | --- 10 | # 11 | 12 | 從昨天開始網上流傳的一張圖片(阿里巴巴面試結果)屬於被泄漏出的信息,此事已經由阿里巴巴集團開始調查責任人。 13 | 14 | 由於面試溝通的一些問題,有些細節並不完全準確,在此澄清。 15 | 16 | 此外,我尚未簽署阿里巴巴集團的任何文件。 17 | -------------------------------------------------------------------------------- /www.cnblogs.com/Design Tutorial Learn from Life.md: -------------------------------------------------------------------------------- 1 | title: Design Tutorial Learn from Life 2 | 3 | date: 2014-10-06 18:01:00 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | [Codeforces Round #270](http://codeforces.com/contest/472) B: 11 | 12 | 题意:n个人在1楼,想要做电梯上楼,只有1个电梯,每次只能运k个人,每移动一层需要1秒。问最小的是时间把所有人送到想去的楼层。 13 | 14 | 题解:贪心,每次选择楼层数最大k个人,用优先队列维护一下即可。 15 | 16 | 17 | 1 #include 18 | 2 #include 19 | 3 #include 20 | 4 #include 21 | 5 #include 22 | 6 using namespace std; 23 | 7 const int N=2004; 24 | 8 int n,k,temp; 25 | 9 int main(){ 26 | 10 scanf("%d%d",&n,&k); 27 | 11 priority_queueQ; 28 | 12 for(int i=1;i<=n;i++){ 29 | 13 scanf("%d",&temp); 30 | 14 Q.push(temp); 31 | 15 } 32 | 16 int ans=0,tt=k; 33 | 17 while(Q.size()>k){ 34 | 18 tt=k; 35 | 19 ans+=(Q.top()-1); 36 | 20 while(tt--) 37 | 21 Q.pop(); 38 | 22 } 39 | 23 if(Q.size()>0) 40 | 24 ans+=(Q.top()-1); 41 | 25 printf("%d\n",ans*2); 42 | 26 } 43 | 44 |   45 | -------------------------------------------------------------------------------- /www.cnblogs.com/Money, Money, Money.md: -------------------------------------------------------------------------------- 1 | title: Money, Money, Money 2 | 3 | date: 2014-10-03 11:05 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | acdream1408: [ http://115.28.76.232/problem?pid=1408 ](http://115.28.76.232/problem?pid=1408) 11 | 12 | 题意:给你一个x,让你构造a,b,是的na+bm可以组成大于x的所有的数。a>1,b>1,但是不能组成x. 13 | 14 | 题解:这一题一开始sb。可以想到的是,所有的数(>=2)都可以由一个2和一个奇数组成。所以2和x+2,就是一个解。并且如果x是偶数,这是无解的。 15 | 16 | 17 | 1 #include 18 | 2 #include 19 | 3 #include 20 | 4 #include 21 | 5 #include 22 | 6 using namespace std; 23 | 7 int main(){ 24 | 8 long long a; 25 | 9 while(~scanf("%lld",&a)){ 26 | 10 if(a%2==0)printf("0 0\n"); 27 | 11 else{ 28 | 12 printf("%d %lld\n",2,a+2); 29 | 13 } 30 | 14 31 | 15 } 32 | 16 33 | 17 34 | 18 } 35 | -------------------------------------------------------------------------------- /www.cnblogs.com/The Number Off of FFF.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EndlessCheng/blog2md/0202cd0b0e0ba0fb16b2a5b36919dd84775a6dcb/www.cnblogs.com/The Number Off of FFF.md -------------------------------------------------------------------------------- /www.cnblogs.com/汇编小实验1.md: -------------------------------------------------------------------------------- 1 | title: 汇编小实验1 2 | 3 | date: 2014-11-04 14:28:00 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 进入DEBUG后,首先用命令R查看当前DS内容,记录此值,假设为X。在DEBUG下汇编、调试完成下列功能的程序。 11 | 12 | 1):将内容F000:2000H起30H个字数据传送到内存X:1000H开始处 13 | 14 | 这里是把一个单元的数据复制到另外的单元,而且是连续的数据,所以肯定要用到循环,由于这两个DS内容的不同,所以再进行复制的时候,要对ds进行复制操作,具体的看如下的代码。 15 | 16 | 17 | 1 MOV CX,30 18 | 2 MOV SI,2000 19 | 3 MOV DI,1000 20 | 4 AGAIN:MOV BX,F000 21 | 5 MOV DS,BX 22 | 6 MOV AX,[SI] 23 | 7 MOV BX,073F 24 | 8 MOV DS,BX 25 | 9 MOV [DI],AX 26 | 10 INC DI 27 | 11 INC SI 28 | 12 LOOP AGAIN 29 | 13 INT 3 30 | 31 | 2)测试内存X:300H开始的10H个字节数据,计算其中正数、负数、0的个数,并将结果分别存放在X:400H开始的三个内存单元中 32 | 33 | 这里是统计连续单元里面的整数,负数,0的个数。可以直接用cmp,0 进行比较,如果 ==0 则跳转 JE,如果大于0 则跳转 JG,如果小于0,则跳转 JL。同时也需要loop 34 | 35 | 我用si,di,dx来分别统计0,正数,负数的个数。具体看代码。 36 | 37 | 38 | 1 MOV CX,10 39 | 2 MOV BX,300 40 | 3 MOV AX,[BX] 41 | 4 X :INC BX 42 | 5 CMP AX,0 43 | 6 JE X1 44 | 7 JG X2 45 | 8 JL X3 46 | 9 X1:INC SI 47 | 10 JMP X4 48 | 11 X2:INC DI 49 | 12 JMP X4 50 | 13 X3:INC DX 51 | 14 JMP X4 52 | 15 X4:LOOP X 53 | 16 MOV BX,400 54 | 17 MOV [BX],SI 55 | 18 INC BX 56 | 19 MOV [BX],DI 57 | 20 INC BX 58 | 21 MOV [BX],DX 59 | 22 INT 3 60 | 23 61 | -------------------------------------------------------------------------------- /www.wdk.pw/2014年年终总结(伪).md: -------------------------------------------------------------------------------- 1 | title: 2014年年终总结(伪) 2 | 3 | date: 2015-01-01 10:07:16 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/ss.jpg)此刻是2015年的凌晨,我回想起2014年的寒春。那时的我在北京流浪,现在的我在四川醉倒。世界多么奇妙,妙到颠毫。 11 | 12 | 孔明灯上写满了心愿,在酒洒下的时刻飞起,灯影绰绰,照亮了一片漆黑的夜空,像一颗星星。我被食物辣的呛出眼泪,而歌声悠扬。 13 | 14 | 我是个悲观的人,这个世界让我忧伤,但这个世界却是洒脱的,它赤赤条条的奔来,又风风火火的离开,你望着它,像一块石头。 15 | 16 | 白酒加啤酒的威力不可小觑,我曾经自吹说白酒一公斤,啤酒随便拎,但是五百毫升的白酒啤酒混合下肚,却已然觉得头晕脑胀,想做点出格的事情了。 17 | 18 | 已经过去的这一年,看上去波澜不惊,但事实上却汹涌澎湃,这是我真正成熟的一年,这是转折的一年,这是上帝怜悯的注视着我的一年。 19 | 20 | 这一年的开始,是在北京,那是我人生的第一次真正意义上的离家。千里外,独自一人,面对世界,心存美好,无所畏惧。 21 | 22 | 这是一个美好的时代,这是一个浮躁的时代,这个时代你可能幸福,也可能悲伤,但是你只能向前,一往无继的向前,破釜沉舟的向前,此外再也没有别的路可走。 23 | 24 | 这一年我学会了很多,也荒废了很多,赢得了很多,也辜负了很多,人永远在得失之间徘徊,这是关于终极意义的错愕。 25 | 26 | 遗憾嘛,是有不少的,其实,你会不会也觉得,没有遗憾,也是一种遗憾? 27 | 28 | 我买了kindle,读了不少书,看了许多场电影,也听了新的歌,认识了很多不认识的人,但除此之外,我还是那个我,北京的风吹的我耳朵生疼,四川的雨淋的我阵阵发冷。炖牛肉的香气袅袅不散,烤猪肉的味道不过如此。 29 | 30 | 草莓的摇滚,乐山的江边,碧峰峡的谷底,拧着果酒的夜晚,吃着烤串的山巅,寒风如刀,笑颜如春。 31 | 32 | 想想,我依然贫穷而孤独的面对着这座星球,看着它尘烟飞起。我翻过青春,爱过四季,追随着远方的日月,用笔写着古老的篇章。人们来了又走了,我也注定归于虚无,然而背后的东西却长存。 33 | 34 | 这年,我从一个理科生变成了文科生,我从一个码农变成了作家, 35 | 36 | 当然,我的挂科还是没有变, 37 | 38 | 但其实,我从来没有变。 39 | 40 | 人们都觉得时间是一条线,但时间却是一个圆,我希望2015年,回归1025年,那一年,北宋首都街边开了家早餐店,那一年,拜占庭皇室遇到了点麻烦。 41 | 42 | 我和我认识的人们,在十个世纪前的阳光下,喝喝茶,晒太阳。 43 | 44 | 光阴隐灭,恍然如此。 45 | 46 |   47 | 48 |   49 | 50 |   51 | -------------------------------------------------------------------------------- /www.wdk.pw/DK博客微信公众号启用.md: -------------------------------------------------------------------------------- 1 | title: DK博客微信公众号启用 2 | 3 | date: 2014-12-16 03:49:00 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | > 这篇文章是通过微信公众平台推送的 11 | 12 | 我叫王登科,目前读大三。 13 | 14 | 我当初注册这个公众号的时候还没有自媒体的概念,我注册只是为了这个酷炫的名字,但在注册之后,我却开始连续的在网络上写我的独立博客,至今已经坚持了超过一年。(我的博客你可以通过点击最下面的阅读原文来访问) 15 | 16 | 一年之后,我审视自己的博客,发现已经有不少人看了,这让我很欣慰。然而在某个夜黑风高的晚上,一束明暖的月光照进我的窗子,我心里忽然回想起曾经注册后生灰的公众号,于是我做了一个艰难的决定。 17 | 18 | 我决定重新运营这个公众号 19 | 20 | 直白来说,就是在这个公众号上面发文章。 21 | 22 | 我写的文章涉及很广,从大学生活,互联网,到电影音乐书籍再到美食和散文,我当过多年理科生,通过转专业又当了文科生,我能确保的就是无论是文科生还是理科生,都能看得舒服。 23 | 24 | 以下有几点要说明一下: 25 | 26 | * 我的文章每周只推送一次 27 | * 每个月我的推送不会超过四次 28 | * 我自认为我写的文章比较适合大学生 29 | * 文章以原创为主(90%),但不保证不转载,当然我会注明转载 30 | 31 | 感谢你读到这,是时候说再见了。 32 | 33 | 也许我已经错过了自媒体的最好的时机,但是我还是觉得这件事挺有意思。 34 | 35 | 你不转发到朋友圈我完全理解,我不怪你,因为你还不了解我,不过你敢不敢赌一把,先转了再说? 36 | 37 | 作为一个写文章的,我已经说了太多废话,无论如何,让大家久等了,我现在回来了,我会好好写文章,让我们一起用傲娇高冷有聊的文字,去攻陷代购党,干翻自拍狗,气死鸡汤文 38 | 39 | 谢谢 40 | 41 | > 其实这个公众号最主要的目的是同步博客文章,以后就又多了一个发布的渠道,欢迎大家关注 42 | 43 | 二维码: 44 | 45 | ![](http://susefood.u.qiniudn.com/superdk.jpg) 46 | 47 | 微信号:superwdk 48 | -------------------------------------------------------------------------------- /www.wdk.pw/Gmail的倒下.md: -------------------------------------------------------------------------------- 1 | title: Gmail的倒下 2 | 3 | date: 2014-12-29 19:11:30 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 这几天,我发现我的foxmail无法收取Gmail的邮件,于是寻找原因,发现我国的墙似乎有一次升级,并且屏蔽了Gmail的SMTP/IMAP/POP3服务器,这意味着,国内的所有人都无法通过客户端收发Gmail邮件。 11 | 12 | Google的网页在前段时间全部被墙,而现在又将SMTP/IMAP/POP3服务器屏蔽,这样一来,如果没有梯子,没有人再可以使用Gmail服务。不仅如此,如果接着再将屏蔽彻底一点,那么Gmail与国内邮箱的通信将被切断。 13 | 14 | 我对这个消息感到出离的震惊和愤怒。我人微言轻,但我还是感到我该说点什么。 15 | 16 | Gmail是Google推出的邮件服务,也是世界上最受欢迎的邮件服务,邮件服务和网站不同,邮件是人们用来保持联系的,现在的即时通讯软件层出不穷,但永远无法取代邮件的位置,因为它在人类现代沟通中起着不可取代的作用。 17 | 18 | ![](http://susefood.u.qiniudn.com/gmails.jpg) 19 | 20 | 封掉Google,youtube等一批国外网站,也许只是让人眼睛瞎掉罢了,而封掉Gmail,则是砍掉手,封住嘴,堵住耳朵,让人再难和外界保持联系。 21 | 22 | “我向来是不惮以最坏的恶意,来推测中国人的,然而我还不料,也不信竟会下劣凶残到这地步” 23 | 24 | 或许终有一天,我们只能使用国内的126,QQ邮箱互发着邮件,普通人再也不能发信息到国外,而国外的消息也发不进来,那时候企业需要严格的审查才能做外贸,那时候人们终于生活在局域网之中,这让我不寒而栗,我曾以为这样的事情绝不会发生,我曾以为这个世界终将更加开放,但是Gmail的被封,却让我心寒到了极点,寒到连姑娘都忘了。 25 | 26 | 国内有很多人使用Gmail,作为个人邮箱或工作邮箱,其强大而简洁易用让我们感受连接的魅力,让我们提高工作的效率,让我们保证沟通的即时。我可以说,Gmail是影响着无数人的生活的,然而,在没有任何通知公告的情况下,一夜之间将这个举足轻重的服务完全屏蔽,并将激愤的舆论之声视若罔闻,这个国家强力运转的的社会机器几乎让我感到绝望。 27 | 28 | 有一个时代,人们不敢说真话,有一个时代,人们说不出话,究竟哪个时代更加让人忧伤,我并不知道。我只知道,毛主席告诉过我们,敌人的攻势越是猛烈,就越说明他们害怕了,他们撑不住了。毛主席还教导我们,世界上最怕认真二字。我觉得,伟大的国家终会找到正确的道路。 29 | 30 | 一个Gmail倒下了,千万个Gmail没有站起来。还站着的只有孤零零的几个人,在方寸间艰难踱步,而远方道阻且长。岁月里,人们沉睡,人们大笑,人们娱乐至死,而后,人们中再也没有人。 31 | 32 | 当热,你们要相信,我所说的一切,都是错的。 33 | -------------------------------------------------------------------------------- /www.wdk.pw/一款健康APP的产品策划(初).md: -------------------------------------------------------------------------------- 1 | title: 一款健康APP的产品策划(初) 2 | 3 | date: 2014-10-31 09:20:52 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | > 某公司的remote小测试,叫我『设计一个健康APP的原型。(功能、受众由你来定,只要在大健康的范畴之内均可,要求有趣好玩)』,于是就有了这篇策划。原创,但感兴趣的可以拿去随便用,做出来了别忘了赞助我。 11 | 12 | ## 名字: 13 | 14 | 善食 (Food4Health) 15 | 16 | ## 功能概述: 17 | 18 | 对用户的每日饮食饮水进行分析,告诉人们该多吃什么少吃什么,如何安排食物饮水,并嵌入菜谱,帮助人们烹饪出健康美味的食物,在健康与美味中取得平衡,以此帮助人们养成健康的生活习惯,享受更和谐的生活。 19 | 20 |   21 | 22 | ## 市场分析: 23 | 24 | 随着生活水平的提高,饮食健康越来越受到人们的重视,但是,这种重视目前往往只体现在人们线下的食材选择上面,我们会关注地沟油,关注餐厅丑闻,但是鲜有人关注我们日常生活每顿饭的健康,而这,其实是饮食中最为重要的一环。人们会用手机看菜谱,但是没有人用手机规划菜谱和食物,而这个需求是存在的——人们想知道自己吃的健康不健康,人们需要一个可以装在口袋里的营养师,不仅如此,饮食更是人类生活中重要的文化。我们在饭桌上增进感情,同样的,用关注朋友家人的饮食健康的方式来关心人也是温情的。这两者结合在一起,就是善食,也正是其存在的目的。 25 | 26 |   27 | 28 | ## 使用流程: 29 | 30 | * 添加食物/饮水/水果:用户点击APP下方正中间的『+』,弹出选择食物/饮水/水果,当用户选择食物的时候,进入食物添加页面,默认文本框,用户可以在此输入吃的东西,输入内容有自动联想。此外用户也可以点击文本框旁边的照相机图标来拍照,系统分析图像中有哪些食物,并将这些食物转换为文字自动填入文本框,用户可以编辑修改,同时图像识别系统也会在用户的不断校正中变得越来越精确。当用户选择饮水/水果的时候,则只需选择饮了几杯水或吃的水果种类即可,不需输入文本。 31 | * 食物推荐:在主页面下半部分,以按钮的形式,呈现对用户的推荐菜谱,这是基于用户已经摄入的营养和尚未达到每日所需的指标来推荐的,用户点击可以查看菜谱。 32 | * 菜谱:用户点击推荐的菜谱中某个菜品的名称(如炒青菜),进入菜谱,其中图文并茂的教给用户如何做这道菜,最后会有这道菜的营养表。用户可点击右上角进行收藏操作。收藏的菜谱可通过点击『食物』——『我的收藏』来查阅 33 | * 搜索:在APP的最顶端有细长的搜索框(参考微信),用户可以在此搜索食材/菜品/水果的营养成分或做法。 34 | * 添加朋友:在『朋友』——『添加朋友』中可以通过手机号和昵称来搜索朋友,若手机号尚未注册,则询问用户是否免费发送一条邀请朋友使用APP的短信。若昵称尚未注册,这提示此昵称尚未注册。若手机号或昵称已经注册,这对另一个用户发起请求。另一个用户收到推送,点击同意后双方成为好友。 35 | * 好友操作:用户在『朋友』页面可以查看朋友列表,点击某个朋友的头像,进入此朋友的主页,在主页里面可以看到这个朋友今天吃的食物,喝的水和营养摄入等,用户可以点击右上角来提醒朋友吃饭,喝水和注意营养等操作。 36 | * 数据查看:在『我』页面,用户不仅可以看到今天的饮食饮水和营养,还可以通过滑动操作来查看以前的饮食饮水和营养情况。 37 | * 社交化分享:用户饮食,饮水,营养情况都可以通过点击按钮分享到微信/微博等等,分享的内容是生成的图片,下部是APP的下载链接。 38 | 39 |   40 | 41 | ## 功能点: 42 | 43 | * 识图——通过图片自动分析出其中包含哪些食材 44 | * 营养分析——分析出食物的营养成分(基于对食材数据库的掌握) 45 | * 轻菜谱——对于推荐的食物,点击即可查看制作方法、 46 | * 不同策略——减肥达人型,养生保健型,快乐吃货型等,不同策略对应不同的营养和不同的食物推荐策略 47 | * 报表——图形化的方式让用户轻松掌握自己每天摄入的营养 48 | * 社交——可以关注自己在意的人(家人,朋友))每天吃了些什么,提醒喝水,提醒吃饭,等等 49 | 50 |   51 | 52 | **×原型图画的太丑暂时不好意思拿出来** 53 | 54 |   55 | 56 | ## 其它: 57 | 58 | * 关于营养识别:无需精确到量,方向正确就行,这对于普通的营养需求足够了。 59 | * 对于数据的利用可以做出很多有趣的东西,例如朋友间的比拼等等 60 | * 随着用户的增加,对国人饮食结构的数据会越来越庞大,这也会反映群体整体的情况,说不定与流行病,社会事件,心理状态都有关系。 61 | 62 |   63 | 64 | PS:这个策划远远不是产品文档,只是一个初步的构想,但是也有我很多的思考,这不是仅仅完成一次remote测试,而是一个我真心觉得不错的idea。 65 | -------------------------------------------------------------------------------- /www.wdk.pw/不创业的原因.md: -------------------------------------------------------------------------------- 1 | title: 不创业的原因 2 | 3 | date: 2015-01-23 19:41:28 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/chuangye.jpg)以前我总跟别人说,现在的互联网产品,有百分之三十是没有价值的。 11 | 12 | 当年的确是太年轻了,说话也非常欠考虑,随随便便信口开河,现在我应该道个歉,以前的话是不对的,经过了几年的观察体验,也自己尝试了一些东西,现在我不并觉得互联网上有百分之三十的产品是没有价值的。 13 | 14 | 至少得有百分之七十。 15 | 16 | 其实说『没有价值』是不对的,存在就是合理的,北极的冰块和赤道的沙粒,都是有价值的,但是,当其价值远达不到其所标榜的程度,甚至还带来了远高于价值的噪点的时候,我们对这价值就要怀疑了。 17 | 18 | 想一想,如果我在古代,那么我要么当个倒拔垂杨柳,吃肉又喝酒的和尚,要么当个骑鹤种树,修道捉鬼的道士,要么就行走江湖,白酒十八碗,牛肉来三斤,要么就吟诗作对,风流倜傥。但我绝对不会想去创业,去开个王二特色肉包子铺,或者去招一堆姑娘,修一座青色的楼。 19 | 20 | 现在我们讲创业,它是事业,它是梦想,它是激情,它是一切狗血的终点。然而若干年前,却并不是这样,那时候街上的包子铺老板并不比教书先生更代表梦想和激情,而如今的激情和梦想则大都被创业这两个字承包了。 21 | 22 | 科尔(Cole)把创业定义为:发起、维持和发展以利润为导向的企业的有目的性的行为。我觉得这个对创业的解释非常合适。在历史的以往任何时代,创业都不如现在这么有情感号召能力,这是因为『利润』这两个字太冰冷了,以往的创业往往只是简单的资源整合或商业,而现在的创业则更多的带有『创造』的内涵。创造的背后是改变,是革命,是滚滚而来的利润,也是极其巨大的价值。带有创造的创业,是如今的创业让人热衷的最重要原因之一。 23 | 24 | 很少有创业者会说,我做这个是为了赚多少多少钱,而会说,我们改变了哪些哪些,我们提高了哪些哪些,我们创造一个更美好的世界。这话很漂亮,但很多时候只是一种意淫。 25 | 26 | “文化革命”里流传着一首红卫兵诗歌《献给第三次世界大战的勇士》,写两个红卫兵为了解放全世界,打到了美国,“战友”为了掩护“我”,牺牲在“白宫华丽的台阶上”。王小波由此说,解放的欲望可以分两种,一种是真解放,比如曼德拉、圣雄甘地、我国的革命先烈,他们是真正为了解放自己的人民而斗争。还有一种假解放,主要是想满足自己的情绪,硬要去解救一些人。这种解放我叫它瞎浪漫。 27 | 28 | 同样的,我们也可以说,这个世界上有一些事情需要去改变,有一些东西需要被创造,比如聚合信息的搜索引擎,比如联通个人的即时通讯,比如接地气的电子商务,做这些是有价值的,有巨大的价值。还有一种创造或者创业,主要是想满足自己的创业情结,硬要去改变一些东西。这种创业我叫它瞎扯淡。 29 | 30 | 不可否认,大多数产品都是有一定价值的,但是背后也有很多噪点,翻一翻应用商店社交软件的分类,玲琅满目的社交产品,也许能让你多认识几个人,但却浪费你大量的时间,让人更加浮躁。我手机上有一大半的APP我基本上没有打开过第二次,当然也怪我当时不该手贱,但这无论如何多少说明了现在产品市场的浮躁。 31 | 32 | 物质的丰富提高了人们的精神层次,我们从未如此关注过自己的理想和激情,这造就了选秀的空前繁荣,也造就了创业的天生光环。资本涌入,坐地圈钱,这个游戏你得玩。 33 | 34 | 我看见优秀的创业者,心生敬意,他们有名或无名,默默践行着自己的理想,没有高声疾呼,没有振臂大喊,然而价值终将体现,财富也将由精神王国流向现实世界。我也看见噱头和炒作,包装的灯光如此耀眼,却磨灭了产品本来的光彩。 35 | 36 | 很多人觉得我应该创业,也像在创业,可是只有我自己知道我还差得远,不是说我不会忽悠,而是我认为创业是一件艰苦卓绝的事情,它需要资源,需要勤奋,需要体力,需要品格,自然它也创造价值,有所改变。这不是口号,却是初心。我现在假装创业,运气好绝对有可能拿到投资,甚至小火一把,但这始终只是忽悠罢了,价值太小,噪点太多。 37 | 38 | 我想,为了一个『创业梦想』去创业的,多半会失败;而明确知道自己想做什么的人,可能才会真正创造出有价值的东西。 39 | 40 | 我现在不创业,不是因为我不想,而是因为我不能保证能做出有价值的事情,也不愿给这个浮躁的世界再增加噪点。但如果某天我灵光一闪,饭桌顿悟,我也可能会抄起家伙对着大伙吼一句,走,跟我干。到时候,你也来帮忙。 41 | 42 | 最后说一句,如果你问我我做的[酷燃网](http://www.coolirand.com/)啦,[麻辣理工](http://imsuse.de/)啦,[趣译](http://quyi.sinaapp.com/)啦这些算什么,我会说,那算折腾。 43 | -------------------------------------------------------------------------------- /www.wdk.pw/不折腾的四步备案攻略.md: -------------------------------------------------------------------------------- 1 | title: 不折腾的四步备案攻略 2 | 3 | date: 2015-02-26 22:28:43 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/beian.jpg) 11 | 12 | 备案是广大站长和个人开发者都甚为头疼的一件事情,它繁琐,复杂,等待时间长,所以在很多时候,我宁可花一周开发一个网站,也不愿意花一周去备案。但是,国情如此,不备案的网站只能放在国外和香港的服务器上,速度会大打折扣,同时还有若干开发者服务需要网站备案才能使用。在[程序员客栈](http://www.proginn.com)这个项目里面,我们一直被访问速度困扰,很多用户表示访问速度已经影响了他们外包工作的处理速度了,因此我们下定决心,一定要备案了。 13 | 14 | 所以,当你想真正做大,在国内做点事业的时候,你就必须备案。 15 | 16 | 幸运的是,备案也许并非我们想的那么复杂和繁琐,下面我就结合我自己的经历讲一讲不折腾的备案攻略。 17 | 18 | 1.申请阿里的免费主机 19 | 20 | 自己去搞工信部的那一套来备案,显然属于折腾,我们不折腾。阿里云有一套备案系统,可以帮助你做大部分工作,而条件则是拥有阿里云的服务器,我们可以申请免费的主机,这样使得成本降到了最低。免费主机的申请地址是:  ,这个主机是万网的,但万网是阿里旗下的,所以照样可以使用备案系统。 21 | 22 | ![](http://susefood.u.qiniudn.com/beian1.jpg) 23 | 24 |   25 | 26 | 2.填写资料 27 | 28 | 注册阿里云的账号,登录它的备案系统: ,然后新建一个备案,并在此填入你的个人资料和网站信息,信息也不算多,诸如姓名身份证号,住址,电话,邮件什么的,网站信息只需要网站名字,网站域名和网站类型即可。 29 | 30 | ![](http://susefood.u.qiniudn.com/beian2.jpg) 31 | 32 |   33 | 34 | 3.上传资料 35 | 36 | 这里有几部分内容:1.身份证正反面照片。2.幕布照片。3.核验单扫描件。 37 | 38 | 身份证正反面照片没什么说的吧,麻烦一点的可能是后两个。但其实也不太麻烦。幕布照片是网站的创建者在阿里云的特定幕布下的半身像,你可以到和阿里云合作的照相馆去拍摄,也可以申请阿里邮寄给你幕布,这样你在家就可以拍了,邮寄幕布是免费的。而且邮寄过来的幕布可以多次使用。 39 | 40 | 核验单是一个需要填写的网站真实性单子,上面只需要你填写很少的信息,官方要求是打印下来,填写好,再扫描后上传,可是这明显太麻烦了,我们应该有更容易的方法。我直接把这张单子的图片放到PS里面,然后选了一个手写体字体,在上面打好了信息,保存,然后上传,成功通过。 41 | 42 | ![](http://susefood.u.qiniudn.com/beian3.jpg) 43 | 44 | 哈哈,很难看出来这并不是手写上去的吧。 45 | 46 | ![](http://susefood.u.qiniudn.com/beian4.jpg) 47 | 48 |   49 | 50 | 4.邮寄资料 51 | 52 | 第二步里面的『核验单』,除了上传图片,还得邮寄三份到阿里云备案处,这个就需要你打印出来然后用笔填写了,所幸填写的并不多,三分钟就可以搞定。然后随便找个快递,寄过去吧。我用的圆通,三天到,当然你可以用顺风,更快一点。 53 | 54 | 以上四步做完,你就老老实实等待管局的短信吧, 55 | 56 | ![](http://susefood.u.qiniudn.com/beian5.jpg) 57 | 58 | 以上,是不是很简单?我用这个方法并不仅备案了程序员客栈的网站(),还备案了自己的个人网站。如果你还觉得麻烦,可以去程序员客栈提问,我们会有专人在技术圈解决类似问题的。 59 | 60 | 再放出我备案的一个网站: 61 | 62 | 这个是没备案走的国外线路:[http://x.coolirand.com](http://x.coolirand.com/) 63 | 64 | 大家可以感受下速度差别 65 | 66 |   67 | -------------------------------------------------------------------------------- /www.wdk.pw/中国有没有科技媒体.md: -------------------------------------------------------------------------------- 1 | title: 中国有没有科技媒体 2 | 3 | date: 2015-03-09 17:15:33 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/yuzhou.jpg) 11 | 12 | 这篇文章的题目是一个问句,下面给出我的答案先: 13 | 14 | 中国只有IT媒体和科普媒体,没有科技媒体。 15 | 16 | 在百科的解释中,科学与科学技术是两个可以互相转变的概念,也就是科学可以说成是科学技术,科学技术也可以说成是科学。所以,科技媒体,是应当关注科学技术,关注科学的。 17 | 18 | 2014年的中国十大科技媒体排行榜里面,出现的10个媒体,诸如虎嗅,36kr,i黑马等等,它们都是只关注互联网的媒体,互联网自然算是科技的一种,但仅仅因为互联网这一方面而冠以科技媒体的名称,我认为未免有点不科学。 19 | 20 | ![](http://susefood.u.qiniudn.com/kj.jpg) 21 | 22 | 这是新浪科技的首页导航,你觉得这是科技么?互联网带给大多数人的错觉之一就是,让人以为科技就是互联网,是IT,是电子商务。但事实上,这只是科学的沧海一粟,当我们把对科技的关注都局限于互联网的这些事情的时候,我们对这个真实世界的好奇心就会被减弱。 23 | 24 | 我认为这是一件忧伤的事情。 25 | 26 | 还有一个例子是果壳,果壳可能是最接近科技媒体的网站了,但其实它更偏向科普,果壳关注生活中的科学,你在上面可以找到生活常识小文章,但你没法看到你感兴趣的领域的专业文章。科普是一项伟大的事业,但是科普之后,才是真正的科技。 27 | 28 | 科普媒体是人人都可以看的,互联网媒体是绝大多数人都可以看的,但是科技媒体有一定的起点,并不是每个人都看得懂,但是它为能够看懂的人提供的价值也非其它媒体可比。 29 | 30 | 你可以随便举出三个科学家,看看他们是否都属于上个世纪或更早以前。为什么现代当代活着的科学家你除了霍金一个都不知道?是因为科学家数量变少了吗?肯定不是,如今的科学家数量比以前高一个量级。是因为大家看不懂了吗?我并不认为离子对撞机对于21世纪的普通人来说比日心说对于16世纪的普通人来说更难理解。最可能的原因,我认为是极度丰富的现代娱乐消散了人们对于世界的好奇心。 31 | 32 | 16世纪的人们干完农活会回看着星空思考着世界的运转,21世纪的人们上完班只会看一眼被雾霾笼罩的天空,然后玩游戏刷微博看电视剧聊微信看八卦新闻上草榴社区。 33 | 34 | 玩摇滚的喜欢说一句话,不要向操蛋的生活屈服。搞科学的可以嘲笑他们,因为科学家们可以说,不要向宇宙屈服。 35 | 36 | 我们这个世纪的科学并非停滞不前,事实上,科学从来没有停止过。 37 | 38 | 早在20世纪的第一天,英国物理学家汤姆逊就说了几句话:“以力学为基础的经典物理学大厦已经峻工,后辈物理学家只能做一些零碎的修补工作。但在物理学晴朗的天空,还有两朵小小的令人不安的乌云。”这两朵乌云就是后来的“相对论”和“量子力学”,它们带来的暴风雨使得经典物理学大厦摇摇欲坠。随着科学的不断发展,它们构建了焕然一新的物理大厦,也给人们带来了新的世界观。 39 | 40 | 岂止是物理。化学,生物,电子,环境,天文,甚至哲学,都在不断的更新发展,只是我们生活的节奏已经快到让人对周遭慢一些的变化根本看不过来的程度了,所以我们才会仅仅知道新款手机,知道智能硬件,知道电商网站,而对这些优秀产品背后的伟大定律不闻不问。 41 | 42 | 普通人需要了解科技吗?实话是,不需要,人只要做好自己相关的事情就好了,就可以享受科技带来的种种便利了。但是,这多少有点遗憾。就像在黑客帝国中,在母体内的世界其实还不错,但总有人会想看看真正的世界是什么样子的。 43 | 44 | 我上面提到的所有媒体,都是很好的媒体,但他们实在不能称之为科技媒体。科技媒体应该介于科普媒体和论文期刊之间,并非所有人都喜闻乐见,但能帮助有好奇心的人们更好的知道这个世界。 45 | 46 | 国内有科技媒体吗?据我所知没有,如果有,请告诉我。 47 | 48 |   49 | 50 |   51 | 52 |   53 | 54 |   55 | -------------------------------------------------------------------------------- /www.wdk.pw/人类终极问题比高潮更刺激.md: -------------------------------------------------------------------------------- 1 | title: 人类终极问题比高潮更刺激 2 | 3 | date: 2014-11-14 22:28:23 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/xjcy.jpg) 11 | 12 | 昨天看了星际穿越。 13 | 14 | 这是我最近几年看过的最优秀的电影,没有之一。 15 | 16 | 整部电影可以用三个问题来概括。 17 | 18 | * 前半部分的问题是,我们花费无数金钱和资源,去探索未知的宇宙,却看不到任何回报,这是否值得。 19 | * 后半部分的问题是,渺小的人类,在无垠的宇宙中,如何生存。 20 | * 而贯穿整部电影的问题则是,古老的爱与未来的科技,孰能拯救世界。 21 | 22 |   23 | 24 | 这是一部非常硬的科幻,里面涉及的很多知识都涉及到物理学,天文学,这让我几乎有一半的影片时间都在给旁边的妹子科普科学知识。难能可贵的是,融入了这么多理论知识和大胆想象的电影,却没有很多很离谱的漏洞,虽然不能说完满,但足够自圆其说。 25 | 26 | 这不是一篇影评,为了不剧透,我尽量不讲情节,就聊聊这三个问题。 27 | 28 | 事实上,这个世界上一直有不少人不理解航天事业的意义,曾经赞比亚修女玛丽·尤肯达(Mary Jucunda)给NASA的科学副总监恩斯特·施图林格博士(Ernst Stuhlinger)写过一封信,信中问他,目前地球上还有这么多小孩子吃不上饭,他怎么能舍得为远在火星的项目花费数十亿美元。 29 | 30 | 施图林格很快给尤肯达修女回了信,同时还附带了一张题为“升起的地球”的照片,这张标志性的照片是宇航员威廉·安德斯于1968年在月球轨道上拍摄的(照片中可以看到月球的地面)。他这封真挚的回信随后由NASA以《为什么要探索宇宙》为标题发表。 31 | 32 | 关于这篇文章可以在这里看到:(译言网) 33 | 34 | ![](http://susefood.u.qiniudn.com/sqdq.jpg) 35 | 36 | 这篇文章我读过好几次,每一次都为NASA的这位科学家的热忱和远见卓识所感动。人类,一颗孤独的星球上的孤独的智慧生物,面临着无数的问题,饥饿,贫穷,罪恶,难填的欲望,无尽的争端,我们就像是一群井底之蛙,喋喋不休的在狭小的井底自生自灭,然而,永远有一部分勇者,敢于突破看似无法突破的限制,飞向井外去探索未知的真相。我们从蛮荒走来,曾经的漫长岁月,我们大多数都吃不饱饭,中世纪的德国皇帝,理想是全国每户人家周五晚上都能喝上温暖的肉汤,而现在大多数人都可以每天晚上喝肉汤,如果我们不因为周五晚上能够喝上肉汤就停止对更美好的生活的追求,我们就不应该怀疑把目光放在未来的太空项目的价值。探索宇宙,和研究物理,研究数学一样,是对这个世界的无穷奥秘的追寻,是对人类存在的终极意义的探索,我们能够骄傲的屹立在浩瀚宇宙之间,不是因为我们的科技多么发达,不是因为我们的文化多么灿烂,也不是因为我们的身体如何强健或大脑如何智慧,我们之所以孜孜不倦的向着远方光年外的世界发送着友好和平的电波,都是因为,人类永不放弃,永不停下,用不胆怯的探索精神。如果我们不去探索,那和咸鱼又有什么区别。 37 | 38 | 从另一个功利的角度来看(当然这功利没有什么错误),航天科技也改变了每个人的生活,最初,最先进的科技都被运用于太空事业,或由研究太空科学而发现,而后,这些先进科技被运用在普罗大众的生活之中,由此带来的改善影响深远。 39 | 40 | 探索太空是前所未有的巨大挑战,和太空相比,地球上最危险的穷山恶水都像是海绵宝宝的梦乡一样美好。大多数人的经验就局限在地球之上,我们对时间,空间,速度,以及物理法则的了解,都只限于地球,而这些经验在宇宙里面却显得捉襟见肘。在质量极大的黑洞附近,一个小时等于地球的七年,而在另外一些地方,你度过的漫长岁月只是地球的一瞬,时间可以被压缩,空间可以被拉伸,黑洞,引力,时间,维度在无穷无尽的宇宙中组成了一首关于死亡和奇妙的绚烂之歌。 41 | 42 | 很多时候我都觉得,生命起源于巧合,如果在亿万年前生命刚开始的时候,地球的氧含量低一点,或者臭氧层薄一点,或者离太阳近一点,远一点,质量大一点或小一点,可能地球就会像我们太阳系的其它行星一样了无生气了。按照凯文凯利的说法,生命系统的演化存在某一个奇点,在此前生态系统极其脆弱,在此后则非常强健。人类有这么发达的科技,却依然灭不了老鼠,除不了蝗虫,事实上,就算把所有核弹在地球上引爆,最多也只会灭掉人类自己,而地球的生态系统还会继续下去,甚至发展出新的生物。人类在宇宙中面临着同样的问题,我们要搬家,就得找到一个适合人类居住的生态系统。这个系统要能够容纳人类的干预,还要足够健壮,能够继续持续下去。但是,如果存在这样一个地方,没有理由不存在着像人类一样的智慧生物,如何与这些智慧生物相处和交流,是关于文化和交流的更深层次的思考。 43 | 44 | 圣经里面说,“神是爱”。我注意到一个很有趣的现象,就是现实生活中,我们能够理解,能够量化的东西,在宇宙中却是不适用的,而难以理解,不能量化的东西,却是不被宇宙所改变的,比如人类情感,求生意识,等等。生命的奥秘和宇宙的奥秘在某种程度上是一样的。星际穿越的拯救之道就是爱,我读过一本叫做情种起源的书,爱情不一定靠谱,但爱是靠谱的,虽然它带有太多象征意义,但是爱和探索精神一样,是我们赖以存在的精神财富。我们不能靠科技,科技属于机器人,只有将科技与人类精神相结合,人才能够自救。 45 | 46 | 我在很长的时间都会浮现出电影里面那美妙绝伦的土星光环和飞船在陌生星系对接的史诗搬的震撼配乐。从三体到失控到文明再到星际穿越,最近我总是有意无意接触到这些关于世界奥秘的东西,难道我就是那个被选中的孩子?这个还不确定,但确定的是,当我们把目光从琐碎的油盐酱醋与斤斤计较的爱恨情仇转移到更广阔的遥远世界的时候,尘世的快感将离我们远去,那超凡脱俗的,是比高潮更淋漓尽致的刺激。 47 | 48 |   49 | 50 |   51 | -------------------------------------------------------------------------------- /www.wdk.pw/你有没有反骨?.md: -------------------------------------------------------------------------------- 1 | title: 你有没有反骨? 2 | 3 | date: 2015-03-15 20:56:33 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 多年前,我爸就掐着我的后脖子说,你这小子有反骨,以后要反。 11 | 12 | 那时候的我抱着一碗热汤饭并不为所动。 13 | 14 | 更早的时候,也不知道是在四川的哪儿,诸葛亮也指着魏延说,这小子有反骨,快给老子推出去砍了。魏延是个军事的奇才,受到刘备重用,却不受诸葛亮待见,诸葛亮死了也没把兵权给他,所以他琢磨杀了杨仪夺回兵权,反被杨仪派马岱给杀了,并诛灭了三族。 15 | 16 | 事实上我并不认为魏延是想谋反,作为一个军事奇才,他想夺得兵权很可能只是为了展示自己的军事才华,我觉得魏延可能比诸葛亮更想北伐。但他终于因为『谋反』的罪名被杀了。虽然杨仪最后也没什么好下场,但这只让人们感叹政治斗争的残酷。 17 | 18 | 生在社会主义的美好时代,我想我是没有能力也没有勇气去谋反的,但这个时代『反骨』也许包含着另一种意义,就是不甘于现状,且总有着自己的假想敌。 19 | 20 | 我是一直有假想敌的,从小学到大学,首当其冲的就是学校。小学的时候还并不明显,中学则凸显了出来,我把上学的意义完全当成了与学校做斗争。初中时候我的理想就是偷偷潜入学校的广播室,然后在每周一全校的升旗仪式的时候让放国歌的喇叭放莫扎特的『西风吹拂』,我必须把脚放在广播室的桌子上,把手放在后脑勺上面,眯着眼睛,面带微笑。然后在全校女生的注视下被保安架出去。 21 | 22 | ![](http://susefood.u.qiniudn.com/xiaoshenke.jpg) 23 | 24 | 那个清晨,操场的师生肯定会觉得错愕,然而久被考试和补课折磨的莘莘学子却感受到了突破学校牢笼的自由。他们愣在那里,“有一种鸟是关不住的,因为它的羽毛实在是太华丽了”。 25 | 26 | ![](http://susefood.u.qiniudn.com/caochang.jpg) 27 | 28 | 我意淫这个场景意淫了整整三年,然而却终于没有实现,初中最后分班的时候,老师同学一起在那悲伤的痛哭,我就知道,这座学校是不会被大家想象成敌人的。 29 | 30 | 我当时还写文章,对学校和老师口诛笔伐,歌颂自由,鄙视考试。现在想来却很可笑,我之后几乎再没有遇到过这么好的老师,但我却三番五次的挑衅这些好老师。有的同学对我的评价奇高,觉得我是能挑起第三次世界大战的人,我想可能就是因为我当时口无遮拦被当成了有革命精神? 31 | 32 | 当我进入大学之后,我觉得大学比高中更值得批判,它臃肿,迂腐,官僚,形式化。所以我拒绝参加班会,拒绝参加那些『必须到场』的活动,也鄙视在学生会任职的同学。我大一的时候做麻辣理工,还写了若干文章,就是想聚集一些人,然后跟学校叫板。后来我们校长被送进号子里面了,食堂又出了几个新菜品。我又觉得这事儿没什么意思了。 33 | 34 | 我写代码的时候一心当个作家,而写作的时候却想着做个程序。按道理来说,现在互联网风潮正起,创业也有自带光环,但我却偏偏觉得,这个世界不怀好意,最被吹捧的,却是错的。 35 | 36 | 有时候我也会迷惑,我到底是因为想显示自己与众不同而『反』,还是因为我执迷于『改变』,但最后我还是坦然,无论如何,这个世界需要不一样的声音,我不能忍受异口同声和千篇一律。 37 | 38 | 小时候我的确标新立异口无遮拦,但现在我更冷静的看这个世界,却依然发现无数的问题,它们是需要被『反』的。传统行业落后的生产力,体制下滋生的蛀虫,不合理的规定造成的不公平,这些都是即将会改变也必须被改变的。 39 | 40 | 借用乔布斯的苹果当年的一段广告词,把它改一改:总有些人,会把落后,畸形,不公,丑恶,暴力,极权当成自己的假想敌,并且天经地义的认为自己能够改变它们,他们特立独行,他们桀骜不驯,他们惹是生非,他们格格不入,他们用与众不同的眼光看待事物,他们不喜欢墨守成规,他们也不愿安于现状。你可以赞美他们,引用他们,反对他们,质疑他们,颂扬或是诋毁他们,但唯独不能漠视他们。因为他们改变了事物。他们是别人眼里的疯子,但他们却是我眼中的先驱。 41 | 42 | 我一直在小打小闹,但也许有一天会大打大闹,当然也可能继续小打小闹下去,无论如何,我觉得挺有意思的。 43 | 44 | 那么,你有没有反骨? 45 | 46 |   47 | -------------------------------------------------------------------------------- /www.wdk.pw/六人同睡——群体对局外人的影响.md: -------------------------------------------------------------------------------- 1 | title: 六人同睡——群体对局外人的影响 2 | 3 | date: 2014-09-13 09:30:58 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![http://susefood.u.qiniudn.com/qt.jpg](http://susefood.u.qiniudn.com/qt.jpg) 11 | 12 | 我在寝室,发现一个有趣的现象,很多时候,一个下午,寝室里面坐着六个人,其中如果有四个爬上床去睡觉,那么剩下的两个不久也会爬上床去睡觉。如果只有一两个人开始睡觉,则不会这样。 13 | 14 | 注意,我说的是下午,而非晚上,晚上睡觉是大势所趋,而在一个下午,对困的感受是因人而异的,六个人同时困得想上床睡觉的几率是非常小的,但是,据我的观察,只要出现超过一半的人上床睡觉,那基本上剩下的人都会在不久后感到困倦并且上床睡觉。不用怀疑,我就经常是这剩下的人之一。 15 | 16 | 观察到这个现象,让我感到很有趣,我又想到了另一个现象,即哈欠的传染,对于哈欠的传染,已经有了很权威的研究。 17 | 18 | > “打哈欠传染”是指人类从社群生活的祖先那里沿袭下来的一种肢体语言。在古猿社群中,它的重复出现,表达着“我困”的含义。所谓的“传染的哈欠”其实就是 “哈欠模仿”,是一种心理暗示,与感冒传染等不同。当你看到他人打哈欠时,视觉会刺激大脑皮层,刺激神经反射,发生的一种本能现象。 19 | 20 | 在哈欠的案例中,最为重要的是『心理暗示』,可是,仅凭旁人的一个肢体语言,就产生心理暗示,并且做出打哈欠的这个动作,还是让人觉得非常神奇。 21 | 22 | 和打哈欠不同,睡觉这事的实行成本更高,你需要爬上床(上下铺),脱衣服,还得放下手头的事情,睡一觉。 23 | 24 | 我不知道这是巧合还是某种暗示影响,但睡觉这个问题,让我感受到群体对个人的巨大影响力。 25 | 26 | 这种影响不是强烈的,明显的,可见的,而是隐藏的,潜移默化的,我们可能根本注意不到这种影响。 27 | 28 | 而事实上,这种影响无处不在。 29 | 30 | 一个沉迷游戏的孩子住在一个学霸寝室,那他很快就会晋升为一个新学霸;一个学霸住在一个学渣寝室,那他稍不注意就会变得和其他人一样。这不是我在这想当然,而是有无数活生生的例子。 31 | 32 | 勒庞的乌合之众分析了群体的心理状态和思维方式,但是却几乎没有提到群体对于群体外的个人的影响。而我认为,这种影响是不可忽视的。 33 | 34 | 有些群体是强关系,比如同为某党成员,同为某个协会的会员,同为某家公司的职员等等。也有些群体是弱关系,看上去可能不是群体,但是由于生活习惯,生活方式,生活态度等方面都有不少共同之处而形成了一个不可见的群体,比如一些人都睡懒觉,一些人都喜欢吃面不吃饭,一些人都喜欢叫外卖,一些人都喜欢玩某种游戏,一些人都喜欢跑步。 35 | 36 | 事实上,群体对个人的接触越多,造成的影响越大。这个是显而易见的——地球另一端的群体对你肯定很难造成影响,而朝夕相处的群体就另当别论了。 37 | 38 | 我们经常说环境改变人,而我认为环境的本质就是群体。 39 | 40 | 我们应当重视群体对群体外的人的影响,因为这种影响不是教训,不是命令,不是谈话,你根本看不到它。但是某个时刻,你恍然发现自己变得和从前如此不同,这个时刻,你就该注意了,如果是好的改变,就继续下去,如果是不好的改变,就悬崖勒马。 41 | 42 | 坚持自我是一件如此困难的事情,以至于你在多年后回头看,会发现预定笔直的道路偏的如此之多。我们的生活充斥着不同的群体,他们会给人造成各种各样的影响,小的,大的,好的,坏的。这时候,最重要的事情莫过于,在某个时刻停下来,扪心自问,我该这样么? 43 | 44 |   45 | 46 |   47 | 48 |   49 | -------------------------------------------------------------------------------- /www.wdk.pw/写诗的日子.md: -------------------------------------------------------------------------------- 1 | title: 写诗的日子 2 | 3 | date: 2014-12-14 18:22:06 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 我在高中的时候写了很多诗,那时候荷尔蒙和肾上腺素都肆无忌惮的分泌,我一天到晚愤世嫉俗,忧国忧民,风流倜傥。 11 | 12 | 对不起我又无耻了,最后一个是我意淫的。 13 | 14 | ![](http://susefood.u.qiniudn.com/aige.jpg) 15 | 16 | 我的创作高峰是语文课,我很庆幸我这一生遇到的所有语文老师都是好老师,这种『好』在小时候体现为敦敦教诲,在成长的时候则是循循善诱,而在更后面的时候,就体现为放手不管。我高中语文课基本不交作业,那本辅导书都是空白的,每次上课的时候都要用一只手捂着练习册,心惊胆战。好在老师特别相信我,从来不检查我的练习册。我记得有一次还因为我考试分数不错在课堂上表扬我,要大家多观察我,向我学习。台下笑声一片,大家都知道我是怎么学的,如果都学我,那老师估计得气得吐血而亡。 17 | 18 | 一开始写诗的时候我喜欢玩一个小技巧,就是在诗里面藏一些东西,比如我写愤青的诗,会夹一些爱情,我写情诗,会加点国事进去。这并不是某种文学的追求,而是一种类似于彩蛋的东西,我乐此不疲,写了很多这种没人看得出来的东西。 19 | 20 | 写诗是一种性价比很高的文学活动,随时随地都可以开写,而且字数一般不多,最重要的地方在于,就算你写的很烂,别人也不一定看得出来,文章的质量很好说,但诗就不这么容易了,别人说你写的烂,你可以说他看不懂,就连『天上的白云真白啊/真的,很白很白/非常白/非常非常十分白/极其白/贼白/简直白死了/啊——』这样的诗也是名作,所以,诗是更抽象的艺术,特别适合自娱自乐。 21 | 22 | 我遇到天气好写诗,遇到天气不好也写诗,遇到漂亮姑娘写诗,遇到不漂亮的姑娘当然就不写诗了,我还写诗思考这个世界,用烂俗的话来说,就是歌颂光明,诅咒黑暗。后来我渐渐的懒了,写出的诗倒多了一些悲天悯人的情怀。可见情怀这东西不是忙碌来的,闲的蛋疼的人才会有情怀。这么说好像也不太对,我觉得情怀是人人都有的,但只有在身体灵魂在同一个节奏的时候才会体现出来,并且感受得到。 23 | 24 | 诗大致分成两种,一种是现代诗,一种是古体诗,我两种都写。说来奇怪,虽然古体诗更悠久,但现代诗的逼格更高,当然,前提是你不要写的像上面的白云那么直白,其实就算你写的像那样,别人不也照样发表了么。 25 | 26 | 写诗的当然要读诗,我那时看了很多国外的诗,比如泰戈尔,普希金,聂鲁达,叶芝,雪莱,西梅内斯,当然莎士比亚,爱伦坡这些也是看的。看得多了,我就觉得我混的特别烂,因为外国的诗人一般都写『你的金苹果』或者『洁白的身体』,这个弄得我很尴尬,因为我只有红苹果,还是焉的,更别提洁白的身体了,所以我写『洁白的云朵』,但这样写就弄得跟小学生作文一样,想了想,还是写忧国忧民的诗吧。 27 | 28 | 高中的时候我挑了一些写的诗,写成了一本小册子,送给了一个挺喜欢的姑娘,然后她就和别人谈恋爱了。 29 | 30 | 后来我觉得我的诗有让人感受到青春的力量,当然当时不这么觉得,我当时觉得这世界这他妈没天理。 31 | 32 | 写诗是一种正在消失的行为,就像很多逐渐远去的东西一样,曾经在一个时代辉煌,又在一个时代沉寂。这个世界一刻不停的运转,我们长了又长,变了又变,我却恍然觉得,一回头发现,多年前的我就站在不远处,迎风傻笑,满地口水,如此傻逼,如此青春。 33 | 34 | 现在的我拿起笔写写段子写写文章,运转如飞,但再写不出从前的诗。 35 | 36 | 操 37 | 38 | ![](http://susefood.u.qiniudn.com/geshi2.jpg) 39 | 40 |   41 | 42 |   43 | -------------------------------------------------------------------------------- /www.wdk.pw/取代Word的多种方法.md: -------------------------------------------------------------------------------- 1 | title: 取代Word的多种方法 2 | 3 | date: 2014-10-14 00:01:18 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![http://susefood.u.qiniudn.com/word.jpg](http://susefood.u.qiniudn.com/word.jpg) 11 | 12 | 在接收麻辣理工稿件的时候我发现,大多数同学都是把稿子写在Word上面,然后用QQ传送文件的方式发给我。我很感谢这些辛苦写作的同学,但是不得不说,在互联网如此深入人心的今天,我们确实有很多优秀的方式,可以取代大部分应用Word的场景。 13 | 14 | ### 为什么我们不应该使用Word? 15 | 16 | 不可否认,Word,如同所有office办公软件一样强大,但是对于普通人而言,我们只是需要简单的文字录入和排版,使用Word,笨重且缓慢,如果要共享给其它人,还需要传文件,这非常降低效率。正因为此,我们需要一些轻量级的,简单易用,可以轻松共享的工具。 17 | 18 | ### 1.印象笔记 19 | 20 | ![http://susefood.u.qiniudn.com/word2.jpg](http://susefood.u.qiniudn.com/word2.jpg) 21 | 22 | 印象笔记可能是最有名的此类工具代表了,它能记录文字,声音,图像甚至涂鸦。印象笔记的高级版价格不菲,但是就是免费版,也足矣满足我们的绝大部分需求了。印象笔记在Web网页,手机客户端,电脑客户端等多种平台都能工作,不仅如此,其优雅的界面和简单的使用,让人用起来得心应手。 23 | 24 | 我们可以在自己的印象笔记里面新建一条笔记,在这个笔记里面写文章,然后点击上端的共享按钮,复制公开链接,就可以让其他人通过这条链接查看你的文章。 25 | 26 | ![http://susefood.u.qiniudn.com/word3.jpg](http://susefood.u.qiniudn.com/word3.jpg) 27 | 28 |   29 | 30 | 如果你的这篇文章有更新,那么别人访问公开链接也会随时看到最新的部分。我有在印象笔记写作的习惯,不仅仅因为它能创建公开链接,更重要的原因在于,它会自动为你保存内容,让你不会担心突然的宕机会让已经写的内容丢失,这点也是Word的硬伤。不仅如此,使用印象笔记,你还可以轻松的管理你所有的文章,这点也是Word无法做到的。 31 | 32 | ![http://susefood.u.qiniudn.com/word4.jpg](http://susefood.u.qiniudn.com/word4.jpg) 33 | 34 |   35 | 36 | ### 2.简书 37 | 38 | ![http://susefood.u.qiniudn.com/word5.jpg](http://susefood.u.qiniudn.com/word5.jpg) 39 | 40 | 简书号称最好的中文阅读和写作平台,事实上,它的确是的。简书的写作界面极其优雅,能够让你沉入写作的氛围中,简书也提供两种编辑器可供选择,普通青年可以选择富文本编辑器,而文艺青年则会选择markdown编辑器,顺便提一句,简书的markdown编辑器也是非常优秀的。 41 | 42 | ![http://susefood.u.qiniudn.com/word7.jpg](http://susefood.u.qiniudn.com/word7.jpg) 43 | 44 | 在简书的文章完成后,可以点击发布,从而获取一条公开链接,让其他人都可以通过这个链接来查看这篇文章。唯一遗憾的是这样的链接是完全公开的,其他人可以通过很多方式查看到这条链接,不过据说简书也会做半公开的链接,到时候用简书来实现文章的协作会变得更加有用。 45 | 46 |   47 | 48 | ### 3.Tower 49 | 50 | 如果一个团队经常性的使用Word完成工作,那这个团队可能需要一个货真价实的协作工具了,比如Tower。 51 | 52 | ![http://susefood.u.qiniudn.com/word8.jpg](http://susefood.u.qiniudn.com/word8.jpg) 53 | 54 | Tower的其中一项功能就是在线文档,创建后在其中完成写作和编辑,团队的每个人都可以访问和编辑,这种方式能够最大的加大效率。此外,Tower还有很多功能,能够让团队协作亲密无间,让办公效率成倍提高。 55 | 56 | ![http://susefood.u.qiniudn.com/word9.jpg](http://susefood.u.qiniudn.com/word9.jpg) 57 | 58 |   59 | 60 |   61 | 62 | 以上是我列举的三个能够替代Word的工具,事实上还有很多优秀的工具,但是上面的三种也足够了。时代在发展,世界在进步,新的,优秀的工具更新迭代,层出不穷,我们应该随时保持对新事物的好奇心,不断尝试闻所未闻的东西,因为这些东西不仅改善我们的生活和工作,更改变着世界。 63 | -------------------------------------------------------------------------------- /www.wdk.pw/哀骀它.md: -------------------------------------------------------------------------------- 1 | title: 哀骀它 2 | 3 | date: 2014-12-21 08:38:09 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/aiyita.jpg)(题图:我也不知道是谁)知乎上面有人提问,说长得丑没人喜欢怎么办? 11 | 12 | 当然,这种问题我是没有资格和体验回答的,但是我还是回答了,我给这位忧伤的题主讲了『哀骀它』的故事。 13 | 14 | 哀骀它是个生活在春秋时期卫国的人,他最大的特点就是丑,有多丑呢?简直丑的吓人,不仅五官歪瓜劣枣,还驼背,脖子上还长了个瘤子,想想都觉得一阵鸡皮疙瘩,我们都知道古代人比起现代人不那么漂亮,但是丑的像哀骀它那样的还是惊天地泣鬼神了。但最让人奇怪的是,他虽然这么丑,却很受欢迎,有多受欢迎呢?男人和他相处,都守着他不愿离开,照现在的话来说,直男和他在一起统统变弯。而姑娘呢?那就更吓人了,姑娘们和他相处之后纷纷说,宁愿做哀骀它的小妾,也不愿做高富帅的正妻。 15 | 16 | 这样的答案引起了知乎广大知友的好奇,大家纷纷问我哀骀它到底有何牛逼之处,是否是特别有钱,是否是地位很高,是否博学多才,其实都不是,在庄子的记载中,哀骀它无权无势,也并不多金,至于智商,也不见得比别人多多少,这事放到现在我们不解,放在当时也有很多人好奇,比如我们的鲁哀公同学,鲁哀公听闻了哀骀它的事情感到十分不可思议,就跑去亲自看了看,一看,果然丑的吓人,但鲁哀公没有被吓跑,反倒鼓起勇气和他住了一个月,一个月后,当然没有你们想的鲁哀公被掰弯的故事,但是鲁哀公却觉得哀骀它十分可爱,甚至想把国家都交给他去治理,哀骀它也没有说答应,也没有说不答应,磨叽了一下勉强接受了,管理了几天国事,就跑了,留下的鲁哀公怅然若失,觉得失去了一个非常亲密的人,之后甚至一天都快乐不起来。 17 | 18 | 不快乐的鲁哀公跑去找孔子,问孔子这到底是怎么回事,孔子却讲了一个耐人寻味的故事 19 | 20 | 孔子说自己有天在楚国压马路的时候,看到小猪在已经死去的母猪身上吃奶,吃了一阵发现母猪已经死了,于是纷纷跑开了,小猪为什么会跑开呢?因为死掉的母猪已经不是它们的母亲了,虽然这时候形体尚在,但是由于生命的消失,某种内在的东西也不在了。猪也好,人也好,都会爱自己的父母亲友,但是爱的却并非那个外在的形体,而是某种内在的东西,这种东西是和生命有关的,生命在,你的爱就在,而一旦生命走了,无论是你多爱的亲人情人,你都会觉得有点可怕。古代的文化经常会有『内外』一说,内和外,往往是区分而不同的。哀骀它虽然在『外』丑的惊人,但是这却仅仅是『外』的东西,哀骀它的内在是道德充沛的,道德修养到完美的地步,本身就是一种美,这种美的吸引力尤甚外貌,按照孔子的原话,哀骀它『才全而德不形者也』 21 | 22 | 如果问『如何才能像哀骀它那么受欢迎?』,答案恐怕就是『才全而德不形』了。 23 | 24 | 『才全』很难,但却不是最难的,最难的是『德不形』,历史上有非常多的天才和伟人,他们在历史上留下了难以抹去的光辉,但是我觉得他们并不一定都过得快乐,有才的人往往是孤独的,他的才华既是开荒的利刃,也划出了与这个世界的分界线,旁人摄于其光辉,总是望而却步,这样的孤独是绝对意义上的孤独。『才』其实可以往广义的方向去理解,长的好看,有钱,活好,有才华,这些都是广义上的『才』,『才』是一种『硬资本』,哀骀它的才还在这些才之上,他是有大智慧的,孔子的原话是:『“死生、存亡、穷达、贫富、贤与不肖、毁誉、饥渴、寒暑,是事之变、命之行也。日夜相代乎前,而知不能规乎其始者也。故不足以滑和,不可入于灵府。使之和豫,通而不失于兑。使日夜无隙,而与物为春,是接而生时于心者也。是之谓才全。』 25 | 26 | 但是才全并非受欢迎的全部条件,事实上很多才全的人是惹人讨厌的,最重要的还是后面的『德不形』,孔子举了水的例子,说水这样的东西就是德不形的,它的内里激荡,表面却纹丝不动,水的平是绝对的平,这种平甚至可以成为某种自然的法则,而德的不形,使得万物不能离开。 27 | 28 | 哀骀它的故事其实是庄子写的,只不过调皮的庄子一贯喜欢借用孔子的嘴巴来说他自己的想法,哀骀它在充满奇异想象与神奇故事的《庄子》中显得并不独特,但是却给人留下了无尽的想象。 29 | 30 | 我不能写一篇《哀骀它练习手册》,让大家看着学习,然后开始自动吸引身边的妹子来做小妾,或者让你的老板给你甚至加薪,当然,你要学习哀骀它的外形还是不难的,往自己脸上泼点硫酸再把背隆起来估计就差不多了,不过我不建议你这么做。我相信哀骀它是存在的,至少是存在过。 31 | 32 | 现在很多人无缘无故特别自卑,觉得自己长得丑,觉得自己没钱,觉得自己脾气烂,然后跑到网上求助求解,恰巧又被我看到了,我只有搬出哀骀它的故事,你想想,再丑总不会比哀骀它长得丑吧,哀骀它可以让姑娘们争当其小妾,我们差点,但只找一个当正室应该还是不难的。 33 | 34 | 我们往往只注重追求『才全』,这种硬资本的确是自身价值的体现,但是要获得生命的大和谐,还是要有内在的修炼,做到有德而德不外露。 35 | 36 | 要我说,『才全而德不形者』,是应该放在励志金句或心灵鸡汤排行榜上做头条的。 37 | 38 |   39 | -------------------------------------------------------------------------------- /www.wdk.pw/失控的游戏.md: -------------------------------------------------------------------------------- 1 | title: 失控的游戏 2 | 3 | date: 2014-12-10 17:37:05 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/shikong.jpg) 11 | 12 | 现在的大部分游戏,都是以『控制』为主的,玩家通过键盘鼠标手柄操纵杆,控制游戏中的人物,道具,装备等等。玩家通过这些『控制』来满足内心关于『控制』的欲望,并且在这控制之中找到满足感,成就感。 13 | 14 | 而我在[Codegame](http://codegame.org)玩的坦克大战却并非这一类游戏,[Codegame](http://codegame.org)是你去写一套算法,然后用这套算法去控制你的坦克,游戏开始之后,你能做的就只是看着两台坦克对战,他们的灵活性,战斗力以至于『智能』都取决于你的算法。 15 | 16 | 如果把普通的游戏称之为『控制游戏』,那么[Codegame](http://codegame.org)的AI坦克大战就算是『失控的游戏』了。 17 | 18 | AI坦克大战虽然乐趣无穷,但是只有极少一部分人能够体会,因为玩家需要具备不错的逻辑思考能力,编程基础,当然,还要有一颗童心。坦克大战随着杯赛的落幕趋于平静,但是我却不断的想,以此为发展,会不会出现更好的游戏? 19 | 20 | 事实上,AI坦克大战并非第一个失控游戏,数十年前,两位科学家就曾编写过名为『磁芯大战』的游戏,这个游戏其实就是两个计算机程序在虚拟系统内互相复制自己,侵占计算机资源,胜者就是最后还存在程序,两个科学家玩的不亦乐乎,后来他们的程序发展成了计算机病毒,并席卷全球,当然这是后话了。 21 | 22 | 看看我们现在的游戏,游戏制作者几乎洞悉了一切,所有的功能和操作都已经被详细的规定了,玩家只能在游戏制作者规定的范围内无忧无虑的互相玩耍,但是,一旦玩家突破制作者的界限,就会立刻显出真实世界的荒芜——游戏崩溃,数据错乱。于是所有玩家在坐在哪里,像抽风般的点击鼠标,敲击键盘,控制者游戏中的英雄左走走,右走走。挥剑一砍,精确到小数点后五位数的攻击函数立即开始运转,一系列运算后呈现在屏幕之上,变成一道闪耀的星火。震动和音效挑逗着游戏者脆弱的神经,但是这却早被开发者冷漠的看在眼里。 23 | 24 | 游戏中的偶然,其实都是设计者逻辑的必然。 25 | 26 | 现在让我们来想一想失控的游戏会是什么样子。 27 | 28 | 失控的游戏世界里,唯一的必然,就是没有必然。这里的游戏对象不再受玩家的提线木偶般的控制,它可能顺从你,可能忤逆你,一场战斗,你无法预料敌人,你也无法预料自己,你建立法则,你给予智慧,但你不会知道到底会发生什么。上帝造人,之后却不再控制任何一个人,失控的游戏,是游戏制作者的游戏,是上帝的游戏。一旦普通人了解这种乐趣,就会觉得之前的那些游戏索然无味。至于失控的游戏以哪种方式来体现,这个还有赖于更加智慧的大脑去开拓。 29 | 30 | 在控制的游戏中,成就感来自于感官和物质,而在失控的游戏中,成就感则来自于精神世界。 31 | 32 | 控制的游戏弱化人的思考能力,而失控的游戏则强化人的思考能力。 33 | 34 | 我们需要更多更有意思的失控的游戏。 35 | -------------------------------------------------------------------------------- /www.wdk.pw/媒体与极权.md: -------------------------------------------------------------------------------- 1 | title: 媒体与极权 2 | 3 | date: 2015-01-20 01:09:02 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/gutou.jpg)最近读了奥威尔的1984,看完后猛然回想起这学期学过的传播学,心里爬过一阵细密的恐惧。 11 | 12 | 布罗茨基说,文学必须干预政治,直到政治不再干预文学。这句话还暗含了一个意思,就是文学是有能力干预政治的,当然,政治也有能力干预文学,事实上,政治什么都干预。 13 | 14 | 和文学相比,媒体有着更即时,更普遍的力量,如果说文学的力量是慢慢见效的中药,那媒体的力量就是猛烈的激素,一篇报道可能引起激愤的群情,一个新闻可能造成集体的恐慌,当然,媒体也可能是正能量的散发者,新梦想的领路人,但媒体的力量确实是太强大了。早在第一次世界大战至20世纪30 年代,人们就发现了媒体的这种力量,并且发展成一种名为『魔弹论』的观点,认为传播媒介拥有不可抵御的强大力量,它们所传递的信息在受传者身上就像子弹击中身体,药剂注入皮肤一样,可以引起直接速效的反应;它们能够左右人们的态度和意见,甚至直接支配他们的行动。 15 | 16 | 媒体最初由机构或群体打造,然而随着技术与文化的发展,人们开始质疑没有监管的媒体,这促使着『公民新闻』的发展,公民新闻指的是,新闻不再只由专业新闻机构采集和发布,而由每个普通人经手,同时人际传播也在一定程度上替代传统的媒体传播方式,随之发展而来的由达尔西提出的一项基本权利也成为了人权的标配——传播权,即每个人都有权利将自己的经验,思想,观点,通过合法的手段和渠道加以传播。 17 | 18 | 公民新闻和个人传播,促使的是媒体的自我克制和新闻的健康发展,然而,媒体的力量没有减弱。我们可以注意到,历史上的所有极权,往往都伴随着对媒体的绝对控制和对个人传播权的肆意切断。这其实就是因为极权对媒体力量的恐惧。 19 | 20 | 所谓极权,其实就是极少部分上等人通过少部分中等人,剥削和控制极大部分下等人,所有法律,所有规则,都是为巩固这一利益体系的稳固而服务的。极权并非一无是处,古代人类对抗外敌和凶恶的自然条件,极权有极高的指挥效率,同时由于资源的有限,不得不有多级分化。然而现代社会创造的财富足够让每个人都丰衣足食,并在可以接受的范围内有贫富差距。极权的唯一目的就是维护这一利益体系,所以它千方百计的迫使下等人陷入困苦的生活中,并不断浪费着剩余价值。极权是一座金字塔,看似稳固,但下层的根基一旦破裂,最上面将会顷刻坍塌,这就是极权恐惧媒体的原因——媒体有让下层动荡的力量。 21 | 22 | 古代王朝流行玩文字狱,就是一种对媒体的控制。有人可能会问,言论的威胁和媒体的威胁哪个对极权威胁更大?事实上,他们的威胁都是一样的,本质都是媒体的威胁,传播学中有一个理论叫做『两级传播理论』,这个理论表明来自媒体的信息并不是立即传播给每个受众,而往往是先抵达意见领袖,意见领袖再对接收的信息进行分析,判断和加工,传递给人群中不大活跃的部分。要知道,这个理论是早在二十世纪就提出了的,那时候根本没有微博,而意见领袖却是一直存在的。任何人都有可能成为意见领袖,而他的言论则可能有广泛的传播,所以,对于媒体的控制和对于言论的控制,本质上是一回事,即对内容和渠道的控制。 23 | 24 | 机械而暴力的『控制』是不得要领的,是容易失败的,所以这控制来的往往温柔的多。拉扎斯菲尔德在总结媒体负面功能的时候提出:**最关键的一项媒介负面功能就是麻醉精神**。娱乐至死或许是其中一个方法,当人们都在娱乐中麻醉的时候,媒介的另一些作用就会被弱化到几乎不可见。拉扎斯菲尔德同时说到,**大众媒介持续不懈的宣传会使人们完全丧失辨别能力,从而不假思索的顺从现状**。这正是极权需要的,所以极权控制的媒体一定会持续不断的输出一些重复的内容,重复的精神,重复的思想,让人们信以为真。朝鲜的新闻或许就是一个例子。 25 | 26 | 极权一定会塑造偶像,这偶像不一定是某个人,当然也很有可能是某个人,还有可能是某个组织或某个目标,使得人们趋之若鹜,千方百计的加入或靠拢。极权还一定会塑造敌人,会纪念战争,会给予所有孩子关于敌人和战争的教育,让每个人都有对于敌人的憎恨,因为聚集在一起的人们总要有一种相同的情绪,若不是因为爱,就只能因为恨。再一次,比如朝鲜。 27 | 28 | 极权之所以热衷控制媒体,不只是因为媒体对于现在的力量,还因为媒体有着影响过去的能力。所谓过去,其实只是指人的记忆和流传的资料,资料篡改了,记忆模糊了,过去也就改变了。极权政治一定会有模糊不清的过去,文过饰非的遮掩,自相矛盾的说辞。纳粹德国便是如此。 29 | 30 | 人类只不过是苍茫宇宙中细微不辨的一点星火,我们自以为渺小,又自以为伟大,然而我们终将消失在太阳的第二个轮回之中,谁都将不存在。但即便如此,我仍然相信人能影响宇宙。也正因为如此,我才写了这篇文章。希望中国人民的朋友,朝鲜早日走向自由富强的道路。 31 | 32 |   33 | 34 |   35 | -------------------------------------------------------------------------------- /www.wdk.pw/密码保护:以及青春.md: -------------------------------------------------------------------------------- 1 | title: 密码保护:以及青春 2 | 3 | date: 2015-02-02 05:14:33 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 这是一篇受密码保护的文章,您需要提供访问密码: 11 | 12 | 密码: 13 | -------------------------------------------------------------------------------- /www.wdk.pw/密码保护:情书选登.md: -------------------------------------------------------------------------------- 1 | title: 密码保护:情书选登 2 | 3 | date: 2015-02-02 05:13:46 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 这是一篇受密码保护的文章,您需要提供访问密码: 11 | 12 | 密码: 13 | -------------------------------------------------------------------------------- /www.wdk.pw/平安夜奇遇记.md: -------------------------------------------------------------------------------- 1 | title: 平安夜奇遇记 2 | 3 | date: 2014-12-25 08:48:34 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/pinganye.jpg) 11 | 12 | 今天是圣诞节的前一天,我决定晚上多吃点。 13 | 14 | 于是我去买了一个牛肉汉堡,一个鳕鱼汉堡,再加一块大鸡排。 15 | 16 | 当我提着一袋汉堡往宿舍走的时候,正遇上学校涌出汹涌的人潮,他们脸上都挂着灿烂的笑脸,在寒冷的风中,比我提着的汉堡上面的芝麻粒还要鲜艳。 17 | 18 | 吃完汉堡,我感到饱足,这原始的幸福,已让我满足。我走出寝室,来到水果摊前,买猕猴桃 19 | 20 | 水果摊前摆满了苹果,但是我要买的是猕猴桃,当我问老板要猕猴桃的时候,老板问我要的是不是苹果。 21 | 22 | 我说不是,我要猕猴桃,老板很奇怪,说今天应该是送苹果的,我告诉老板我只是喜欢吃猕猴桃而已。 23 | 24 | 老板说好,从店后面拿出了猕猴桃。 25 | 26 | 周围的男生女生手挽手走过,鄙视的看着我手中的猕猴桃。猕猴桃看上去土里土气,但是比苹果好吃,也比苹果营养,这是真的。 27 | 28 | 我走到操场上,有人在放孔明灯,中西结合,感觉挺好,不过风有点大,刚起飞就被烧着了,摇曳在空中,像一团鬼火,我有一种冲动,拿出我的遥控直升机,控制它撞向那几坨孔明灯,感受旋翼绞碎纸张和火焰的快感。不过我没有这么做,因为我的飞机,还在家里,落满了灰。 29 | 30 | 走着走着,遇到了我认识的姑娘,我对她说你好,她摸出一个苹果给我,我拿着吃了,说味道不错。 31 | 32 | 这时操场上来了一群大嗓门的人,他们被指挥着喊着一个人的名字,我知道那是表白。为了保护我的智商不被拉底,我离开了操场。 33 | 34 | 回到寝室,室友问我为什么不帮他带猪蹄,我说圣诞节吃猪蹄,你太老土了。其实,主要的原因是我身上只剩了二块五,只够买猪蹄的一个指头。 35 | 36 | 夜色深了,我站在阳台吃猕猴桃,看着漆黑的天边,远处泛着星星点点的光,那是属于人们的不眠之夜。 37 | 38 | 星星闪了闪,圣诞老人在云层划过一道痕迹,他把礼物抛下,落到人们的头上,人们高兴的抬起头,然后,一不小心就被砸死了。 39 | 40 | 我看见圣诞老人他老人家,眨了下右眼。 41 | 42 |   43 | -------------------------------------------------------------------------------- /www.wdk.pw/开拓者与慈善家.md: -------------------------------------------------------------------------------- 1 | title: 开拓者与慈善家 2 | 3 | date: 2014-12-25 22:52:22 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/kaituozhe.jpg)(题图:思考的爱因斯坦)前几天,Google创始人Page在TED演讲的时候说,如果自己死了,宁愿将数十亿财产捐给像伊隆·马斯克这样的资本家来改变世界,也不愿将钱捐给慈善组织。(马斯克是个研究火箭,太空,做电力汽车(特斯拉)的商业与科技天才) 11 | 12 | 此话一出,立即引起了广泛的讨论,有人鄙视有人赞赏,然而,我几乎立即联想到另一个富可敌国的有钱人,比尔盖茨。比尔盖茨在他人生的后半部分,几乎将自己的全部精力投入到慈善事业中,他为非洲的饥饿儿童和肆虐的疾病花了数以亿记的财富,他现在仍然在热忱而智慧的进行着他的慈善事业。 13 | 14 | 这个世界上最聪明和最有钱的两个人,对待财富却有截然不同的做法,但是我们却很难说谁更高尚,或者谁更智慧,他们的做法实际上对应着两种对待这个世界的态度,一个是开拓者,一个是慈善家。 15 | 16 | 开拓者具有高瞻远瞩的视野,慈善家则有悲天悯人的情怀,NASA是开拓者,特里萨嬷嬷是慈善家,这个世界由开拓者剧烈的改变,却由慈善家温柔的维持。很多人看到一年后,却看不到十年后,Page看到的是十年后甚至百年后的人类未来,比尔盖茨则着眼于苦难的现实,深入切肤之痛的贫瘠,并行之有效的帮助这些人们。 17 | 18 | 你不能说Page冷漠,也不能说比尔盖茨愚蠢,拯救全人类功德无量,拯救一个人也功德无量,事实上,如果这世界上的企业家都是开拓者或慈善家就好了,那么这世界上的财富一半会投入未来,一半会捐给现在,但遗憾的是,这世界上大多数富人都既无开拓的智慧,也无慈善的热心,他们只是躺在自己的财富上面腐烂,财富的处理是每个人的自由,然而财富的处理也反射着每个人的胸怀。 19 | 20 | 对于无钱无势的芸芸众生来说,我们可能这辈子也做不到周济天下或者改变未来了,然而,我们依旧可以是开拓者或者慈善家。用最大的努力,让自己和家人生活的滋润幸福,这就是慈善家,而给予下一代良好的教育,你就已经开拓了未来。 21 | 22 | 普通人做的事情写不进丰碑,可丰碑也写不尽。我们身处时代和信息的洪流,Page或比尔盖茨所做的,只是影响着普通人,然而每个普通人,才真正影响着世界。 23 | 24 | 当然,如果有一天你有钱了,我还是希望你做个慈善家,并且别忘了这还有个写博客的穷小子。 25 | -------------------------------------------------------------------------------- /www.wdk.pw/当我们在聊意义时,我们在思考什么.md: -------------------------------------------------------------------------------- 1 | title: 当我们在聊意义时,我们在思考什么 2 | 3 | date: 2014-10-17 18:15:50 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![http://susefood.u.qiniudn.com/mean.jpg](http://susefood.u.qiniudn.com/mean.jpg) 11 | 12 | > 这篇文章的阅读量抽风了,请无视 13 | 14 | 很有些时候,我会想,我写这些没什么人看的文章有什么意义呢,我花那么多时间看一些听都没听过的书有什么意义呢,是啊,意义,这个词把一切因果关系和中间过程都浓缩成我们可以看到的现实世界的益处,这又有什么意义呢。 15 | 16 | 圣经里面说,虚空的虚空,虚空的虚空,一切都是虚空。人类干了辛苦了几千年积累的文明,被这句话否定的一文不值。 17 | 18 | 我们通常认为旅行比睡觉有意义,赚钱比花钱有意义,滚床单比滚雪球有意义,可是若站在更高的角度上去看,就会觉得这些事情本质上没有多大区别。我们所有人都认为帮助别人比好吃懒做有意义的多,可是那漂浮在虚空的声音却说,你,王二,扶老奶奶过马路,你,小李,你一天好吃懒做,但你们都是卑微的人类。 19 | 20 | 蒙田是个很懒的作家,他为自己辩解到:我怎么会什么都没干呢,我这不是活过来了么。 21 | 22 | 凯文凯利更是无意义的粉丝,他喜欢看着一群机器人打来打去,这些机器人的演出被称为毫无意义的演出。凯文凯利把它们描述为群体的失控,而在他看来,这种失控背后是分布式计算以及世界万物的秘密。 23 | 24 | 每个人都得干些什么,可是不是每个人都明白我们为什么要干这些,直到有个叫佛洛伊德的人跳出来告诉我们,人类做所有事情的驱动原力都是力比多。这个力比多是好听的说法,用直白的说法说出来就是荷尔蒙,再直白一点,就是性欲,更直白一点,那就没法说了。但是这个力比多并不是我们看某些不太健康的内容感受到的那种力比多,而是无意识的。人类的发展,文明的建设,世界的进步,都是在其驱动下。但是,这又有什么意义呢? 25 | 26 | 深究意义这个词,就是深究人类所有终极问题的答案,虽然这个答案已经有了——42,但是我们却没有足够的能量让计算出这个结果的超级电脑给我们解释清楚。 27 | 28 | 信命的人相信一花一草,一举一动皆蕴含深意,并且早已注定。宗教的神往往是终极意义所在,可我还是忍不住问,意义到底是什么。 29 | 30 | 我每天早上醒过来,睁开眼睛看见数年前的阳光照耀在今天的这片大地上面,这些阳光供给整座星球以能量。其间蕴含着充足的空气和水,无数生物繁衍与此,生生死死,起起落落,循环往复。 31 | 32 | 冥冥之中,自有天意。 33 | 34 | 以前我在文章中写过,一个人若在生活中遇到不顺心的事情,就可以想想宇宙,想想时间,想想生命,想着想着就觉得人类的渺小,生命的卑微,未知的神奇,也就不困于生活繁琐的桎梏之中了。后来觉得,这个办法其实是阿Q精神的变种,只是不像阿Q同学那么占别人便宜,是阿Q精神的友好版,但是却终究只是自欺欺人。 35 | 36 | 比上厕所没带纸更忧伤的事情是,连想意义本身也是一件没有意义的事情。 37 | 38 | 问题在于,意义是否存在与你我之间? 39 | 40 | 人类是一个庞大的群体,一个人是一个独立的个体,而一群人则不再是多个个体了,而是另一个全新的个体,随着数量的增加,这个个体越发的清晰,当整个人类汇聚一起的时候,我们除了看到历史和文明,还看到了一个庞然大物,它由每个人组成,却并不属于任何人,少量个体的消失和增加不损其风貌,它巨大,它迟缓,它威力无穷。它的挥手是五千年的文明,它的咆哮是历史巨变的震颤。当每一个人组成这个庞然大物的时候,我们究其意义才有意义。虽然我现在还并不确定这意义到底是什么。 41 | 42 | 但无论如何,个人实在是太渺小了,渺小到在沧桑的时空中激不起一丁点火星,任何人想他自己的意义的时候,他并不能得到满意的答案,因为这意义并不存在于某个人身上,而在每个人身上,在所有人组成的这个失控的群体身上。 43 | 44 | 就我个人而言,我更愿意把这种存在于每个人身上,而不是某个人身上的,引导我们在纷繁的宇宙中迈向未来的东西称之为,人的神性。 45 | -------------------------------------------------------------------------------- /www.wdk.pw/我与基督教.md: -------------------------------------------------------------------------------- 1 | title: 我与基督教 2 | 3 | date: 2014-09-06 18:52:48 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![http://susefood.u.qiniudn.com/cross.jpg](http://susefood.u.qiniudn.com/cross.jpg) 11 | 12 | 我承认我不是一个虔诚的信徒,或者说,不是通俗意义上或传统意义上的虔诚的信徒。 13 | 14 | 基督教不是一个要求刻板的宗教,和佛教,伊斯兰教比起来,算得上相当厚道,你可以结婚,你也可以吃牛肉吃猪肉,但是,即便如此,圣经中的很多要求也不是每个人都能做到的,比如,福音书里说到 15 | 16 | > “不要与恶人作对。有人打你的右脸,连左脸也转过来由他打” 17 | 18 | 这个对我就很难做到,有人要是打我的左脸,我估计会踢他的屁股。 19 | 20 | 在高中之前,我不认识任何一个基督徒,也没看过圣经。我信过不少东西,比如十二点钟对着镜子削苹果会见到鬼,比如年少的梦想终会实现,比如付出和回报是等值的,但是我从来没想过我会信基督教。 21 | 22 | 高三的时候,随着作业的增加,我看的小说也开始增加,西方的,中国的,杂七杂八,看得越多,我心中越沉淀出一个东西,那就是基督教。 23 | 24 | 那时候遇到很多杂七杂八的事情,让我变得开始怀疑这个世界,周围越来越多我看不懂的东西,与此同时,我感受到不一样灵性,这说起来就玄了,但这个世界本来就不是我们想象的那样简单平淡,容易理解的,它是复杂的,奇妙的,充满未知的。我们有时候在这个小星球上活的滋润了,就幻想征服宇宙,可是我们连银河系都出不了,更别提银河系外面亿万个比银河系还更庞大的星系了。从一粒沙跳到另一粒砂上面,就宣称征服了沙漠,这就是人们近年来干的蠢事儿。 25 | 26 | 对基督教的信仰我不知道该说成是偶然还是必然,亦或许这世界上没有什么偶然和必然,每一个可能性都意味深长。那时候我看村上春树,看卡夫卡,看马尔克斯,看博尔赫斯,看西梅内斯,我心中开始有一种强烈的好奇驱动我去了解基督教,在网上看了很多东西,还有外国的基督徒给我发来的问候邮件,这让我感到进一步的必要。 27 | 28 | 我依然记得高二夜晚那个清冷的圣诞节,我一个人饥寒交迫的背着破烂的双肩包,去这座城市最繁华的地方寻找教堂。虽然时光久远,但那个晚上的诸多细节依然历历在目。 29 | 30 | 后来我在教会里面参加了很多活动,印象最深刻的是某次聚会,人非常多,大家一起唱一首赞美诗叫做『耶稣!耶稣!』,这首歌不像一般的赞美诗那么有气无力,而是像摇滚一样充满力量和节奏,唱诗班也不是一群穿着白衣服的小屁孩,而是一个乐队——有吉他手,主唱,贝斯和架子鼓,这首歌的震撼超乎想象,我只觉得教堂的屋顶都要被掀翻,手中的歌单被声浪震的颤动不已。人们忘乎所以,像举行古老仪式般的全情投入,在这嘈杂的环境下,我感到每个人都有一层神圣的光辉。 31 | 32 | 基督教里面,神是三位一体的,这三位分别是圣父,圣子和圣灵。圣父是主耶和华,圣子是主耶稣,圣灵的名字就叫圣灵,它运行在现实世界,坚固我们的信心,扶助我们的软弱,它不可见,但是可以被感受,大部分人之所以信教,都是由于内心被圣灵感召的缘故。有着严肃唯物世界观的人可能已经看不下去想骂我了,但我还是要说,我的确被圣灵感动了,最有力的证据就是,如果没有被圣灵感动,那我为什么会说自己被圣灵感动呢。 33 | 34 | 大学后,我接触到家庭教会,也认识了更多的信教的朋友。虽然我相信某些东西,但是我知道我仍然不是一个虔诚的教徒,不仅如此,我甚至算不得一个标准的信徒,我懒惰,贪恋世间之物,从没给教会捐过钱,也厌烦神父们冗长的讲道。虔诚的信徒们认为我这种人和异教徒一样不得好死,但我并不在乎他们的看法。 35 | 36 | 信仰其实是这样一种东西,你会稀里糊涂就开始相信,但此前,打死你都不会相信。或许我们也可以这么理解,如果有神灵运作,那么人的力量是微弱的,你信与不信都只是天数的注定,而时候到来——你自会走上既定的道路,或坚强,或羸弱,或与人相同,或与众不同。 37 | 38 | 无论如何,愿上帝与你同在。 39 | 40 |   41 | -------------------------------------------------------------------------------- /www.wdk.pw/我与麻辣理工.md: -------------------------------------------------------------------------------- 1 | title: 我与麻辣理工 2 | 3 | date: 2014-10-25 16:28:45 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![http://susefood.u.qiniudn.com/mllgme.jpg](http://susefood.u.qiniudn.com/mllgme.jpg) 11 | 12 | 不得不承认,『麻辣理工』是一个糟糕透了的名字,充斥着不和谐的元素融合和某种盲目山寨的金属感,让人想起乡村非主流。 13 | 14 | 但是,它却改变了我人生轨迹的太多太多。 15 | 16 | 大一的时候我住在黄岭坡,漫山遍野都是发黄发绿发青发红的树,而我的寝室外面就是一片广阔的田野,我坐在那个简陋的寝室,在快腐朽的木头桌子上面写着代码。我现在是个小白,那时候更是小白,一个小白写程序,真是特别痛苦,为了解决问题,我经常忙到深夜,断电之后,各种不知名的蚊虫开始出没,我友好的招呼着隐翅虫和蜜蜂,它们在我的电脑面前翻飞,隐灭的虫影和屏幕上跳动的字符一起,组成了那个漫长夏日的夜晚之舞。 17 | 18 | 最初的几个不眠之夜的产物就是麻辣理工,这是一个四川理工本校的微信平台,那是2013年早期,微信公众平台还没有泛滥起来,能查课表的微信平台简直是绝无仅有。其实我也不是一下就做出了查课表的功能,第一版只有几句机械的自动回复,后来才不断的加入了智能回复,查课表,甚至交友等功能,最多的时候,功能一共超过20个。 19 | 20 | 与其说麻辣理工是一个给同学的工具,不如说是我练习的道具,我的编程知识,我对互联网的关注,我的眼界和内心,都因为对这个小玩意儿的开发变得丰富起来。 21 | 22 | 事实上,它带来的好处远不止这些。 23 | 24 | 麻辣理工的功能完善后,我在学校的贴吧推广,收到了很好的效果,上千名同学成为了用户,这小小的成功给我了做一款面向全国大学生的微信平台的信心,虽然这个想法不成熟,但是我还是做了,于是就有了青葱大学生。 25 | 26 | 青葱大学生主打大学交友功能,在那个公众平台除了发文章外毫无创意的年代,显得与众不同,因此受到了36kr的报道。36kr是国内首屈一指的科技媒体,它的关注让我真正有投身互联网洪流的感觉。而后我因为36kr认识到许多杰出的创业者和投资人,也从这些人学到了更多。 27 | 28 | 无论是后来的北京实习,还是各种remote工作,甚至是我现在对产品的热爱和对未来方向的把握,都是当初从麻辣理工开始的连锁反应一步步确定的。 29 | 30 | 我不知道未来会是如何,但我知道,如果当初没有做这个东西,我的人生会完全不同。 31 | 32 | 但这些都不是最重要的。 33 | 34 | 麻辣理工最重要的一点是,让我直接或间接的认识了很多朋友。有的是学校的,有的是校外的,但是其中不少人成为了我珍视的朋友,机缘巧合,莫过如此。这也是我曾有过的最大的财富。 35 | 36 | 有时候回想当初,真是觉得一切就是那么巧合,像极了安排好的剧本,人生的趣味尽在于此。岁月莫能名,你知道,我也是个说谎的人。 37 | 38 | 福尔摩斯说,生活即为一条锁链,其本质可以从任何一段中显现出来,那么我大学以来的生活,麻辣理工就是其中最重要的一环。 39 | -------------------------------------------------------------------------------- /www.wdk.pw/探寻被忽视的真相.md: -------------------------------------------------------------------------------- 1 | title: 探寻被忽视的真相 2 | 3 | date: 2015-03-23 12:48:12 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | > 这是我这周创办的[麻辣理工周刊](http://malaligong.sinaapp.com)的卷首语 11 | 12 | 高中时的某个秋天,我曾和几个同学去青城后山游玩,他们在小亭聊天的时候,我漫无目的的往人迹罕至的地方散步。 13 | 14 | 走到一处小溪旁边。水清见底,泠泠然而空无一物。我在溪边走来走去,赞叹着这山间清泉的纯净,却又为它的单调感到遗憾。 15 | 16 | 后来我坐到边上一块石头上面发呆,冷风吹得我瑟瑟发抖,而我却享受这山间的清风鸟鸣。不知不觉过去了很些时候。 17 | 18 | 这时候,我往水里看去,赫然发现,刚刚空空如也的清水,居然多了许多灵巧的生物,不同的小鱼在石缝间闪烁,指头大的螃蟹缓慢而确然的在溪底移动,几只两栖爬虫飞快的从这头跑到对面,整条小溪竟充满了勃勃的生机! 19 | 20 | 这个景象让我生出了一种热忱的感动,也让我因为受寒得了肺炎。 21 | 22 | 回去后我认识到,之所以我之前看到的小溪空无一物,而后来充满生机,是因为我是一个外来者,不停的走动,所以我看不到它本来的样子,而唯有我静下来,以归属这大自然的赤子之心,才能看到这条小溪真实的面貌。 23 | 24 | 高中时代,我们每个人都经历了艰苦卓绝的奋斗岁月和单纯简单的青葱时光,而后进入大学,整个世界开始纷至沓来,而我们却在越发浮躁的生活中感到深深的无聊。 25 | 26 | 玩两把游戏,吃饭,食堂到厚德楼的路四季不变。世界在下沉,声音越来越远。 27 | 28 | 有时候想想,我不是活了这许多天,而只是活了一天,却重复了许多次。 29 | 30 | 难道生活果真如此不堪? 31 | 32 | 可是,我们身边那些有趣的,好玩的,让人惊叹让人赞美让人愤怒让人感动让人争论的人和事都到哪里去了呢? 33 | 34 | 不真正静下心来,以一颗赤子之心去感受,就无法看到眼前事物的真相。 35 | 36 | 麻辣理工周刊,就是要去探寻这些被我们忽视的真相。 37 | 38 | 我们可能会调查校长背景,也可能采访校花,或是深入校球队,亦或探秘学校食堂,还可能从那些杰出的校友那里取经。 39 | 40 | 我们沉入这所学校的每天的生活,以独特的视角,观察和记录那些平凡的美好,隐藏的非凡,被人忽视的杰出。 41 | 42 | 我们不相信生活一无是处,我们不相信所见即是全部,我们也不相信有价值的人和事会被埋没,我们更不相信这所学校不可爱。 43 | 44 | 这就是麻辣理工周刊创刊的理念,也是我对此念念不忘的原因。 45 | 46 |   47 | 48 | * * * 49 | 50 | 做这事很难,任何一个人的力量都不足以完成,所以我们期待着每一个有理想的少年的加入。 51 | 52 | PS:我们会保持独立,自由,第三方这三条基本原则。 53 | 54 | 独立:独立于学校媒体,独立于任何商家或利益集团,独立于任何官方组织 55 | 56 | 自由:我不同意你所说的话,但我愿誓死捍卫你说话的权利 57 | 58 | 第三方:我们不杜撰新闻,我们只是事件的搬运工 59 | 60 |   61 | 62 | * * * 63 | 64 | 向 那些疯狂的家伙们致敬,他们特立独行,他们桀驚不遜,他们惹事生非,他们格格不入,他们用与众不同的眼光看待事物,他们不喜欢墨守成规,他们也不愿安于现 状。你可以赞美他們,引用他們,反对他们,质疑他們,颂扬或是诋毁他们,但唯独不能漠视他们。因為他們改变了事物。或许他们是別人眼里的疯子,但他们却是 我们眼中的天才。因为只有那些疯狂到以為自己能够改变世界的人,才能真正地改变世界。 65 | 66 | 王登科 67 | 68 | 邮箱:bullet.on.bible@gmail.com 69 | -------------------------------------------------------------------------------- /www.wdk.pw/探索暗网的攻略.md: -------------------------------------------------------------------------------- 1 | title: 探索暗网的攻略 2 | 3 | date: 2014-11-05 05:33:44 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | > **暗网**(又称作深网,不可见网,隐藏网)是指那些存储在网络数据库里、不能通过超链接访问而需要通过动态网页技术访问的资源集合,不属于那些可以被标准搜索引擎索引的表面网络。 11 | 12 | 我们可以访问的网站,只是整个互联网中的冰山一角,而潜伏在水下的更大的那部分,就是暗网,暗网不仅仅搜索引擎搜索不到,而且必须通过特定的方式才能访问,其中最著名的一个方式就是通过Tor来访问。使用Tor,不仅可以访问暗网,还可以做到真正意义上的身份隐藏,当然,对于国内用户来说,还可以翻墙。 13 | 14 | 关于Tor,暗网的更多东西可以Google,下面我讲讲如何进入暗网。 15 | 16 | 首先,我们需要下载并安装Tor,Tor的官网是: 17 | 18 | 下载并安装Tor 19 | 20 | ![](http://susefood.u.qiniudn.com/tor01.jpg) 21 | 22 | 安装完成后,Tor会试图连接到Tor网络,这个时候要注意进行一些设置 23 | 24 | ![](http://susefood.u.qiniudn.com/tor02.jpg) 25 | 26 | 点击“open Settings” 27 | 28 | ![](http://susefood.u.qiniudn.com/tor03.jpg) 29 | 30 | 选择”Condigure” 31 | 32 | ![](http://susefood.u.qiniudn.com/tor04.jpg) 33 | 34 | 这个是问你是否要通过代理来连接,如果你们有代理的话可以选择yes,这样相当于你通过两重代理来上网的,但是没有的话也没关系,我们选择“No” 35 | 36 | ![](http://susefood.u.qiniudn.com/tor05.jpg) 37 | 38 | 这个询问你的ISP是否限制了网络,我们的大GFW当然干了这种事,所以我们选“Yes” 39 | 40 | ![](http://susefood.u.qiniudn.com/tor06.jpg) 41 | 42 | 最后会让你设置网桥,我们选择第一个中的“meek-amazon”,如果不行的话还可以试试微软或其它的网桥。事实上这是最新一版的Tor才增加的节点,在此前Tor在国内都是无法使用的,但是现在我们可以通过设置Amazon节点或微软的云服务器节点来连入Tor,这让中国用户使用Tor便捷了很多。 43 | 44 | 设置完成后我们点击”connect“,接着会跳出 Tor Browser,也就是一款内置了Tor的浏览器 45 | 46 | ![](http://susefood.u.qiniudn.com/tor07.jpg) 47 | 48 | 如图所示,这样,浏览暗网的准备工作就完成了,我们也可以用这个浏览器来翻墙。 49 | 50 | 这里有一个暗网的导航:[http://thehiddenwiki.org/ ](http://thehiddenwiki.org),我们可以通过它来浏览一些暗网资源 51 | 52 | 不得不说的是,暗网由于身份隐藏+无法检索,所以非常自由,这种没有限制的自由带来的结果就是暴力和罪恶滋生。很多暗网都是关于黑市交易,毒品,假国籍,儿童色情,甚至有雇凶杀人的,总之,人性的黑暗面在暗网得到了最大的展现。 53 | 54 | ![](http://susefood.u.qiniudn.com/tor1.jpg) 55 | 56 | ![](http://susefood.u.qiniudn.com/tor2.jpg) 57 | 58 | ![](http://susefood.u.qiniudn.com/tor3.jpg) 59 | 60 | ![](http://susefood.u.qiniudn.com/tor4.jpg) 61 | 62 | ![](http://susefood.u.qiniudn.com/tor5.jpg) 63 | 64 | 还有一些口味太重的网页就不贴出来了。 65 | 66 | 探索暗网是人类永恒的对未知事物的好奇和对自由世界的向往的象征,但是这里也有太多不好的东西,我们不能为其所迷惑。 67 | 68 | 保持好奇,爱世界,就是这样 69 | -------------------------------------------------------------------------------- /www.wdk.pw/文明文明.md: -------------------------------------------------------------------------------- 1 | title: 文明文明 2 | 3 | date: 2014-11-11 07:47:48 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/wenming.jpg) 11 | 12 | 最近三天,我几乎把所有时间投入到一个游戏当中了,我不仅熬夜,还错过了很多重要的消息和事情。 13 | 14 |   15 | 16 | 这个游戏,就叫做 文明(Civilization ),这个游戏可以算是一个即时战略游戏,玩家可以从多个文明中选择一个,巴比伦,埃及,中华,日耳曼,等等,你可以从远古时候开始,逐渐发展到2050年后的未来,期间要管理这个文明的军事,外交,经济,科技,文化,这个游戏与其它即时战略游戏的不同之处在于,获胜的方式不仅仅是消灭或征服其它人,还可以通过科技,文化,外交等方式来取得游戏的最终胜利。 17 | 18 | 即使你把游戏速度调到最快,玩一局也至少需要六,七个小时。正常情况下,玩一局是要60个小时的。 19 | 20 | 我一般情况下是不会对游戏感兴趣的,因为我知道那些华丽的特效都只是代码的运行而已,但是文明不一样,它确实让我感受到了人类源远流长的文明,我心生敬畏。 21 | 22 | 最近我一直断断续续的再看凯文凯利的《失控》,这让我在玩文明的时候体会的更多。 23 | 24 | 游戏里面最早的敌人,就是野蛮人。遥远的远古,人类要在荒野中开拓出城镇,周围都是危险的野蛮人,游戏中的野蛮人,我认为象征着一切文明之外的危险事物,对应真实的历史长流,这野蛮人可能是远古时代的猛兽,是古代的强盗与山贼,或者是现在的恐怖分子。虽然游戏中都只是“野蛮人”。我们可以发现野蛮人的装备和能力是随着时代的发展不断变强的,这也更说明了它背后的象征意义。野蛮人是所有文明的敌人,野蛮人的巢穴不被消灭,就会源源不断的产出野蛮人,这里的象征意义更加耐人寻味。 25 | 26 | 在文明中,你需要不断的研发科技,建造建筑。最早的是陶器,家畜,文字等等,随着已研究的科技的增加,会出现更复杂的科技,到了后期甚至会研究纳米科技,未来科技等等。取得一项科技是非常重要的突破,比如只有研究了文字,才可以和其它文化谈判协议,只有研究了火药才可以制造火枪队,而研究了导航技术才能探索大洋。现在的我们常常对科技带来的突破感到漠然,信息时代的科技多多少少多了科幻的成分,而多少年前那些古老智慧的发明,却真实的改变了每个人的生活,改变了一个国家和文明的命运,改变了人类整体的发展走向。现在大家都认识到科学技术是第一生产力,但是文明让我很直接的感受到了。 27 | 28 | 文明中, 迦太基文明“获得第一个大军事家后军队可以翻越山脉”,源自汉尼拔和布匿战争的典故,而中国拥有特色部队诸葛连弩兵,这些依据历史而做出的设计让我们感受到文明与文明之间的不同,这种不同有时候是优势,有时候是劣势,但是,都无妨碍其文明辉煌。有些文明天生喜欢战争,有些文明开疆拓土,有些文明和平忍让,这个星球是包容的,它允许各种各样的文明共同相处,这和生物的多样性一样,或许,文明的多样性正是生物多样性的一种体现方式。 29 | 30 | 在几种胜利中,当电脑AI最简单的时候,用战争取得胜利是最简单的,而随着AI的智能度提高,用科技,文化来取胜则容易一些,事实上,战争是不好的,它会阻碍文明的进展,但是我们必须发展军事力量,不主动发动战争,只是用来威慑。总会有贪婪的人觊觎你国土中丰富的资源和富有的城市,同样的,当你周围的国家有你急需的资源的时候,强取豪夺似乎也是最直接的方法。如果你攻打了小国家,那么其他小国家会联合起来对抗你,“真理在大炮射程之内”。 31 | 32 | 历史的规律和自然的法则常常在文明中隐现。战争会带来和平,和平也会带来战争。一个势力太过强大会有多个势力联合起来对抗。整个文明系统有着冥冥之中的自然调节系统,它均衡着使得历史朝前发展。无论是独裁,自由主义,信仰还是理想,都有它的历史作用,历史的滚滚车轮之上,没有对错,只有眼光的长短和利益的多少。 33 | 34 | 文明还有很多很多可圈可点之处,比如每个成就之后都会出现的无数的经典名言,比如各种奇观和胜景。但我觉得文明最重要的一点是,它会激发你的思考,让你重新回味我们的历史和文明。 35 | 36 |   37 | 38 |   39 | -------------------------------------------------------------------------------- /www.wdk.pw/旋转,飘,远.md: -------------------------------------------------------------------------------- 1 | title: 旋转,飘,远 2 | 3 | date: 2014-12-22 17:59:50 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/py.jpg) 11 | 12 | 旋转,飘,远 13 | 14 | 他们在欢呼,在吟诵,在淡淡的唱 15 | 16 | 但没有哪一首歌 17 | 18 | 能唱到你心里去 19 | 20 | 人群涌上,灯光洒落,震耳欲聋 21 | 22 | 脑子填满了幻想 23 | 24 | 他在寸土上走来走去 25 | 26 | 窗口贴满了派对的夜晚 27 | 28 | 零下十度安然睡去 29 | 30 | 远方亮了三颗血红的星星 31 | 32 | 现实那么腐朽,不像真的 33 | 34 | 下面有人走过,飘远如同昨天的痕迹 35 | 36 | 石头上,斑驳的下起了雨 37 | 38 | 你也该来看的,那我就不会写诗 39 | 40 | 该散场了吧 41 | 42 | 该散场了吧 43 | 44 | 完成这伟大的人生 45 | 46 | 在这尽头,夜的归宿 47 | 48 | 旋转,飘,远 49 | -------------------------------------------------------------------------------- /www.wdk.pw/智慧与孤独.md: -------------------------------------------------------------------------------- 1 | title: 智慧与孤独 2 | 3 | date: 2014-12-08 20:52:13 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/ai.jpg) 11 | 12 | 小时候,你有没有想过,拥有一只自己的数码宝贝,神奇宝贝,哆啦A梦,或者有四驱兄弟里,那些有灵性的四驱车? 13 | 14 | 我有想过。 15 | 16 | 我的记忆深处有无数个模糊的碎片,在那些亮着星星的夜晚,年幼清瘦的我坐在电视机前的小板凳上,一边看着动画片,一边嘴里念念有词。那时我很小,小到心里没有考试,没有工作,没有压力,甚至没有钱的概念,我脑子里只有天使兽的翅膀,喷火龙的尾巴,四驱车的轮子。 17 | 18 | 那会儿有个很火的小玩具叫做电子宠物,大家都玩的都特别高兴,我存了好久的零花钱,最后找父母给我买了一个,我如获至宝,沉迷于这个白色的小盒子之中,盒子里面有我的神奇宠物,我可以喂它吃饭,锻炼它的能力,看着它一天一天长大。我还可以教它不同的技能,让它变得更加『强大』。我幻想着有一天这个丑乎乎的小圆球从白色盒子的黑白屏幕中跳出来,变成真实存在的伙伴,然后帮我写作业啥的。最后我拆开了这个机器,却发现里面只有一小块丑陋的电路板,我最后也没能把它还原。 19 | 20 | 后来我常常回想起对电子宠物痴迷的那段岁月,与其说这种痴迷是由于趣味,不如说这是人类基因中的一直以来对『孤独感』的排遣。我一直认为,人类作为这座星球上唯一的智慧生物,是极其孤独的,我们编造天外世界,幻想外星文明,塑造神奇生物,其实都是源于作为『唯一智慧生物』的孤寂。人与人之间也是没有办法做到完全理解的,你能说你完全理解谁?谁又敢说完全理解你?人类整体在孤独的地球上整体孤独,人类之间又因为理解的鸿沟而相对孤独。 21 | 22 | 文明会湮灭,孤独却不会。这真是一件悲伤的事情。 23 | 24 | 但是,我们并非没有『创造智能』的可能,人类的孤独困境也可能因为人类自己的创造而改变。 25 | 26 | 早在上世纪九十年代,科学家就用计算机创造出了可以自己进化的代码,这些由0和1组成的程序在某种程度上似乎越来越聪明。但是实质上他们却还是和『智能』也有非常大的区别。 27 | 28 | 随着科学的发展,我们越来越接近智慧的本质,复杂的神经活动可以用精巧的数学模型代替。 29 | 30 | 我们发现,一切复杂都是由简单组成的。追求复杂可能是本末倒置,我们应该追求简单,简单到极致,才能复杂到极致。你没法凭空想出一个绚丽的颜色,但是你可以用三原色调出来,你也很难想到一个复杂的图形,但是任何复杂的图形都可以用基本图形去组合。最复杂的电脑程序,都可以还原为最简单的因果逻辑。我们千方百计设计更复杂的AI,却不如用最简单的规则去构建它。 31 | 32 | 我们玩游戏,经常会觉得『这个电脑好厉害』,但电脑又岂止这点本领,苦练数十年的象棋大师,还是一样赢不了电脑,后来大家都学聪明了,不跟你电脑玩。当然,赢了象棋大师的电脑可能还不算是真的智能,但电脑正在变得越来越聪明却是不争的事实。 33 | 34 | 遗传算法是为程序设定一些规则,然后让这些程序在代码的『培养液』中繁衍。经过亿万次运行,最后会出现合乎需求的程序,但是,如果我们分析这些经过『进化』而来而非『编写』而来的程序,就会发现它出奇的晦涩难懂。它到底是怎来来的?没有人说的清楚,无形之中仿佛有之手伸到了代码中,搅出了这一段。或许,遗传算法中这种遗传行为本身就蕴含着程序的智能。 35 | 36 | 或许有一天,我们会和真正智慧的人类创造物对话,它的形象可能是一个圆球,也可能是喷火龙,或者蓝胖子。但却然的是,这个智慧的创造物和我们心灵相通,到那个时候,我们终于可以说,我们不再孤独的活在这个星球上。 37 | 38 |   39 | 40 |   41 | 42 |   43 | -------------------------------------------------------------------------------- /www.wdk.pw/朝三暮四的环境问题.md: -------------------------------------------------------------------------------- 1 | title: 朝三暮四的环境问题 2 | 3 | date: 2015-03-01 22:06:21 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/diqiu.jpg)两年前,四川省彭州市曾经因为要动工的彭州石化闹得沸沸扬扬,人们声讨,质疑,愤怒,谩骂。唯独缺乏冷静,我当时甚至还给市政府和环保局写过[公开信](http://www.wdk.pw/91.html),大家那时候都担心我会被查水表,有的朋友还叫我每天在网上更新下状态以确保人身安全,但事实上我非常安全,那个月我交齐了水费,没有人查我水表,环保局的人还专门给我打电话说明了这件事,也发了邮件给我文字性的答复。这让我对这件事情有了更理性和冷静的思考,我在[第二篇文章](http://www.wdk.pw/98.html)这样写: 11 | 12 | > 你知道最痛苦的地方在哪里吗?在于你我都不是气象生物专家,无论是民间砖家还是政府叫兽,抛出一大堆专业词汇的时候,我们只能听的唯唯诺诺。政府扯蛋我们习惯,民间造谣我们被骗。这是缺乏公信力的政府的悲哀,也是缺乏良知和责任感的社会的悲哀。 13 | 14 | 今天好像已经没有人再提这件事了,人们也几乎忘了这件事了,现在大家谈的是雾霾。 15 | 16 | 其实我们都知道,这世界上绝大多数的环境问题都是人的问题,燃烧,工厂,排放,汽车,无论是大气污染还是水源污染,污染就是从这些地方来的。 17 | 18 | 那么为什么没有解决? 19 | 20 | 因为利益。这个利益不是贬义词的利益,这利益是关乎我们每个人的,汽车带给我们更便捷的交通,工厂提供工作岗位和生活用品,也提供了一个个温暖而卑微的家庭,提供了我们赖以生存的电和光。你是愿意在山清水秀的地方刀耕火种,和野兽搏斗,还是在现代文明里戴着口罩逛街,开着空气净化器玩电脑?摸着良心说的话,我认为大多数人都还是会选择后者。 21 | 22 | 不过问题在于,是否现在选择文明就一定意味着需要制造这么大的污染,我们就不能在不那么山清水秀但是也没有什么污染的地方逛街玩电脑么?其实这是可能的,事实上,大多数发达国家的环境比中国好得多,网速还快得多。 23 | 24 | 环境是有承载能力的,在这个范围之内,污染会自动被生态系统所消解,但是环境的承载能力是有限的,一旦超过阀值就会带来可以感受的危害,我们国家在发展之初牺牲了对于环境以换取经济的发展,这造成的恶果如今逐渐被人看到,但是你能怪当年的政策制定者么?中国穷了弱了一百年,真是穷怕了弱怕了,有机会就不管不顾的发展,这就像一个饿了很久的小瘦子,经常被周围的强壮的人欺负,突然有一天他可以无限制的吃食物,他就开始狂吃,最后把自己吃成了一个巨大的胖子,随之带来了肥胖症,高血压等等问题。 25 | 26 | 我很能理解这种情况。 27 | 28 | 在巨大的利益和税收面前,环保部门面对企业的发言权是很微弱的,只有能执行的法律能够改善这种情况。但除此之外,更重要的是每个人。 29 | 30 | 愤怒,谩骂,声讨,质疑,阴谋论对于雾霾,对于污染是没有任何作用的,你愤怒的时候呼吸会加快,会多吸一点雾霾,这算一点作用吧,但除此之外,几乎没有作用。不仅如此,你吃的每一种食物,穿的每一件衣服,喝的每一口饮料,开的每公里的车,都是飘荡在全国各地的空气污染的背后企业和工厂提供的。你不能抛弃,但却可以改变。 31 | 32 | 多走路,多骑车,少生孩子多种树。拒绝街边的烧烤摊,不要烧劣质煤,不要放烟火。做到这些,比一百个人的义正言辞的bb更有帮助。污染已经至此,这是历史原因也是发展趋势,我们每个人都享受了污染提供的现代,我们每个人都是始作俑者,因此不要愤怒,不要责怪,不要人云亦云,如果你能把你自己能做好的做好,你就已经保护环境了。当然,你还得保护自己和家人,比如购买一些[防止污染的装备](http://www.coolirand.com/cool/lists/131)。看完柴静的演讲,我知道政府已经要开始干预企业了,那余下我们能做的,就是改变自己了。 33 | 34 | 人是一种朝三暮四的动物,只不过比猴子高级一点,一天的朝暮我们不会上当,可是若延长到几年,十几年,几十年,我们就会做出错误的抉择。眼前的一块钱比十年后的一百块钱更有吸引力。自古以来就是这样,想想挺悲哀的。环境问题并不是环境问题,而是人性的问题。 35 | 36 | 自然自然有自然的法则,我们再怎么破坏,污染,索取,地球还是会转下去,哪怕人类灭绝,亿万年后,又会有新的生物在我们曾经生活的土地上开疆拓土。但人类的存在,却只有一次。 37 | 38 |   39 | 40 |   41 | -------------------------------------------------------------------------------- /www.wdk.pw/极客游戏——坦克大战AI编写.md: -------------------------------------------------------------------------------- 1 | title: 极客游戏——坦克大战AI编写 2 | 3 | date: 2014-12-04 05:31:31 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 今天看到一个特别有意思的东西,叫做[CODE GAME](http://codegame.org),你可以通过Javascripe语言来给你的小坦克写AI,然后与其他人的AI坦克对战。 11 | 12 | ![](http://susefood.u.qiniudn.com/tank.jpg) 13 | 14 | 传统的游戏,都是人们来操作游戏元素,而这个游戏不同,你要写一套算法,用这套算法去控制你的坦克,游戏开始之后,你能做的就只是看着两台坦克对战,他们的灵活性,战斗力以至于『智能』都取决于你的算法。 15 | 16 | 这让我想到了多年前的『磁芯大战』,这是最古老的游戏,也是计算机病毒的前身,两个科学家互相用汇编语言编写能够破坏对方程序的程序,生存到最后即为胜者。今天我们鲜有人再有能力用汇编语言去编写程序了,但是CODEGAME却给了我们一种『创造』的可能。 17 | 18 | CODEGAME的世界由一片由16×12的『格』组成,这些格子中有些是畅通无阻的大路,有些是子弹和坦克都无法穿越的石头,还有些是柔软而富有隐蔽性的草坪,坦克如果处在草坪中,就不会对对方发现。坦克可以发射子弹,也可以前进,还可以朝左或朝右转向。事实上,这几乎就是你能有的所有操作了。 19 | 20 | 这些操作都是由指令来构成的,比如 21 | 22 | > 坦克前进:me.go() 23 | > 24 | > 坦克转向:me.turn(n) n=left or right 25 | > 26 | > 坦克发射子弹:me.fire() 27 | 28 | 这是我们能做的所有操作,但是我们还可以通过一些函数来感知自身或周围的情况,比如 29 | 30 | > 己方坦克坐标:me.tank.position 31 | > 32 | > 己方坦克朝向:me.tank.direction 33 | > 34 | > 敌方坦克坐标:enemy.tank.position 35 | > 36 | > 敌方坦克朝向:enemy.tank。position 37 | > 38 | > 地图:game.map[x][y] x为横坐标,y为竖坐标,返回的是那一点是『石头』『草坪』还是什么都没有 39 | > 40 | > 星星坐标:star.position 41 | 42 | 我们的目的就是让我们的小坦克吃尽可能多的星星,或者消灭敌方坦克,同时注意不要被地方击中,在以上前提下,还要使算法尽可能高效。 43 | 44 | 这个上手非常容易,官方的指南中的代码直接贴上去,就得到了一个可以转向可以发射子弹的坦克,但是如果你希望你的坦克更加聪明一些,那就需要自己动手了。 45 | 46 | 我首先给我的坦克加上了探路系统,这个系统的算法由一系列语句实现,它可以让我的坦克在遇到障碍物之前就及时转向,并且能够在死胡同里面很快的走出来: 47 | 48 | ![](http://susefood.u.qiniudn.com/tanlu.jpg) 49 | 50 |   51 | 52 | 紧接着我又编写了攻击系统,这个系统能让我追踪并在合适的时候发射子弹。 53 | 54 | ![](http://susefood.u.qiniudn.com/gongji.jpg) 55 | 56 | 这两个系统基本上保证了我的小坦克初具威严了,它可以边走边射什么的。但是作为一台聪明的坦克,它还应该有找星星的算法,因为尽可能多的吃星星也是获胜条件之一,于是我写了找星星算法 57 | 58 | ![](http://susefood.u.qiniudn.com/zhaoxx.jpg) 59 | 60 | 找星星是优先级不太高的,当能打敌人的时候是冲敌人去的,但是如果没事,坦克还会去找找星星。到这基本上就差不多了,但是我注意到在对战中我还是经常被别人的坦克击中,于是我又加了闪避系统,使得我的小坦克在发现敌人的子弹的时候能快速逃离,这样又增加了一些胜算。 61 | 62 | ![](http://susefood.u.qiniudn.com/fangyu.jpg) 63 | 64 | 至此,一个『聪明』的小坦克就诞生了,这个坦克会主动发现敌人,然后转到正确的方向开炮,遇到对方的子弹还会躲闪,同时它会在整个地图寻找星星,虽然我为它写了所有AI,但是我还是赞叹它的灵活和智慧,简单的『左转』『前进』『右转』『射击』结合对状态的感知,居然会让死物变得灵活。这种灵活并非『控制』的灵活,而是不受控制的灵活。你不能操作你的坦克,你只能看着它走来走去。 65 | 66 | 这真是人工智能的乐趣。 67 | 68 | 生命和智慧有时候并非我们想象的那么复杂,也许它们更像是一种由简单演变而来的精巧,生物的每个基因都并不复杂,可是却组合成了叹为观止的生命体系。而程序中的简单指令可以在某种程度上还原这种精巧。 69 | 70 | 我的坦克虽然有六百行代码,可是在很多方面还是做的不够,比如对障碍物的高级判断,预先计算敌方坦克路线来发射子弹等等,这些都是可以完善的。值得一提的是,这并非『程序员』的游戏,它所需要的编程知识非常少,官方的文档可以让所有人在十分钟内入门,而这些也就足够了。这个游戏更需要的是对行为的思考和对算法的考虑。我认为它适合每个极客,每个对人工智能,计算机与生物感兴趣的人。 71 | 72 | 如果你编写了你的小坦克,欢迎你挑战我,我的用户名是wdkwdkwdk,在对手用户名那里填写我的名字,即可与我的坦克对战~ 73 | -------------------------------------------------------------------------------- /www.wdk.pw/漫谈Github与开源.md: -------------------------------------------------------------------------------- 1 | title: 漫谈Github与开源 2 | 3 | date: 2014-12-19 05:56:23 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/github.jpg)今天在Github发布了我人生真正意义上的第一个开源项目-『[Onepay](https://github.com/wdkwdkwdk/Onepay)』,这是一个简单方便的打赏按钮/链接生成系统,用来替代已经下线的支付宝收款主页,截至目前已经在Github上面收获了21个Star和8个fork。 11 | 12 | 我回想起去年在北京实习的时候,某天公司一个技术大牛给一个做安卓开发的姑娘讲Github的使用和Git的一些原理,我啥也不懂很想听听,但是又担心如果表现的啥也不懂,会被别人嫌弃,然后遣返回大四川,所以我装作高深莫测的站在一旁,面带微笑。技术大牛抬起头来看了我一眼,可能是被我高深莫测的微笑震住了,我淡定的说,您继续讲,我也听听,然后换成不耻下问的谦虚微笑,技术大牛憨厚的点点头,然后又继续讲了下去,最后讲完了,还望了我一眼问道,没讲错啥吧,其实也没啥新东西吧?我点点头说,不就是那些东西嘛。 13 | 14 | 是哪些东西?其实是很多东西。 15 | 16 | 要了解Github,我们首先要知道Git,Git是管理代码的工具,写代码不是件轻松的事儿,一个人写的时候已经不轻松了,一群人写就更不轻松了,但这世界上很多事都是怎么不轻松怎么来的,大部分人都会和别人一起写代码,问题在于,这么多人写一个东西,你今天写一点,我明天写一点,然后发现你写错了,又影响到了我前天写的,最后汇总的时候怎么查找错误?又在什么时候汇总?这些问题太多了,想想就觉得还是食物美好。为了让写代码这件事儿美好一点,我们有了一种名叫代码管理的东西,Git正是其中之一,我使用过的还有SVN,但是今天我们只讲Git。 17 | 18 | Git的核心思想是『分布式』,我们在服务器上面有一个『主仓库』,这里放的是拿得出台面的代码,我们也可以在自己的电脑上创建分支,这些分支由『主仓库』克隆而来,然后我们就可以愉快的在自己的电脑上写代码了,写完代码可以同步在自己电脑的分支里面,当你觉得自己的代码拿得出台面,我们可以申请把自己的代码更新到『主仓库』里面,一旦通过这样的审核,我们就对『主仓库』做了某种贡献,世界各地的杰出程序员不断的为一个项目的『主仓库』做贡献,让这个项目变得越来越完善。 19 | 20 | Github是运用Git思想来工作的一个商业网站,所有开发者都可以在Github上面为自己的项目创建一个『主仓库』,好的项目就像狼群中的小鲜肉一样,大量的开发者会把这个主仓库中的代码克隆到自己的『分仓库』去,用更性感的话来说,就是『Fork』。 21 | 22 | Git的方式的确很优雅,但问题在于,会有人愿意把自己辛辛苦苦的代码拿出来公布,并且让人Fork么? 23 | 24 | 会,不仅会,而且很多,Github有超过140万用户,你可能会撇撇嘴说那个啥啥社交软件都有2000万用户,区区140万算个啥。可是这140万用户几乎涵盖了这个世界上最优秀的开发者,我相信,你那个有2000W用户的社交软件的工程师,肯定也是用Github的。任何项目,在Github上面获得fork或star,都意味着其它工程师对这个项目的认可,这比100个QQ空间的赞更有价值。 25 | 26 | 为什么这些优秀的工程师会开源自己的项目? 27 | 28 | 因为开源是一种精神。 29 | 30 | 无数的软件开发者苦心积虑保护自己的代码不被破解,而还是被聪明绝顶的脚本小子破解了,但破解无数软件的脚本小子在接下来的破解中却傻眼了,因为这是开源的,不用破解也就破解了破解。 31 | 32 | 闭源意味着封闭,而开源则意味着开放,封闭很难进步,开放才会进步。开放让人类的智慧有聚集的可能,人类的智慧聚集起来不再是1+1=2,这是开源的力量。闭源是一种排斥,而开源是包容,闭源是单打独斗,开源是同仇敌忾,闭源是敝帚自珍,开源是无私奉献,闭源是小富即安,开源是世界大同,闭源是资本主义,开源是共产主义。 33 | 34 | 所以我一直想不通为啥Github会被墙。 35 | 36 | 闭源让微软成帝国,让苹果成神话,但是,这是商业,如果没有技术的开源,这些商业的闭源也基本是无米之炊。商业需要闭源,而技术需要开源,利益需要闭源,而情怀需要开源。 37 | 38 | 开源是技术的『本善』。 39 | 40 | 我不排斥闭源,但是我赞美开源,就像我我忍受黑暗,但却心存光明一样,就像我顿顿吃素,却依然热爱肉食一样。 41 | 42 | 当然,我没有顿顿吃素。 43 | 44 |   45 | 46 |   47 | 48 |   49 | 50 |   51 | 52 |   53 | -------------------------------------------------------------------------------- /www.wdk.pw/烟雨西湖.md: -------------------------------------------------------------------------------- 1 | title: 烟雨西湖 2 | 3 | date: 2015-03-22 09:21:01 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/xihu.jpg) 11 | 12 | 本来这篇文章的题目应该叫作『艳遇西湖』,但是由于我在上一个贤者时间段内保持着冷静,所以拒绝了那个因为喜欢我文章而表示愿意和我做点成年人游戏的杭州姑娘。于是这次杭州之行就变得单纯而正直。对于期待着一篇小黄文的读者来说,我感到非常抱歉。 13 | 14 | 在去杭州之前,我已经在没有水的城市待了太久。此后我站在河边感觉河水滔滔,此前我站在海边感觉海水滔滔,但站在西湖边,我却只觉得天地之美,造化之妙,都凝聚在这一汪湖水之中了。 15 | 16 | 人工痕迹丝毫不遮挡自然的鬼斧神工,却与之相辅相成,这是我从未感受过的神奇。那一座桥是唐代所建造,这一条堤是苏轼所修,今天的我们可以站在岸边,看着五百年前的湖水拍打着五百年前的土地,而风却清新盎然。 17 | 18 | 在一座高楼林立,隧道穿行的城市之中,这座湖光山色的地方保存的这么完整,让人真心感动,我骑着租的自行车,耳机听着GALA的young for you围着西湖悠然的转着圈。然后不自觉的作了一首诗: 19 | 20 | > 绿水白堤柳青青, 21 | > 22 | > 细雨微阳风盈盈。 23 | > 24 | > 桥断湖平荷风醉, 25 | > 26 | > 孤山怪石几多寻。 27 | 28 | 后来我在西湖边吃饭,又写了一首诗: 29 | 30 | ![](http://susefood.u.qiniudn.com/dongporou2.jpg) 31 | 32 | > 三斤东坡肉, 33 | > 34 | > 二两花雕酒, 35 | > 36 | > 千杯仍不醉, 37 | > 38 | > 暖风欲语休。 39 | 40 |   41 | 42 | 想必你已经看出来了我不擅长写节借景抒情这一套,我主要的目的是把诗发出来。 43 | 44 | 遥想当年,唐宋诗人在西湖边上吟出了一首首千古名作,而现在的游客十倍于从前,但是却再也不会有真正意义上的作品出现,这对绝美的西湖景色来说,不知道是不是一种悲哀。我作为无名小卒,然而也感受到天地之间的大美,口笨笔拙,更不想用丧失想象力的相机来记录,于是只有写点文字,聊以慰藉这穿越千年的风景。 45 | 46 |   47 | -------------------------------------------------------------------------------- /www.wdk.pw/男人的浪漫.md: -------------------------------------------------------------------------------- 1 | title: 男人的浪漫 2 | 3 | date: 2015-01-04 17:41:22 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/langman.jpg) 11 | 12 | 一周前,我在网上买了一架俄罗斯T90的遥控坦克,可以发射子弹的那种,跑起来威风凛凛,射起来震耳欲聋。 13 | 14 | 我下单之前专门去看了下评价,几乎都是好评,比如“孩子很喜欢”,“小朋友很高兴”,“外甥很开心”,“侄儿很兴奋”等等。我找了半天,居然没有一条是写自己的,没有一条写“我玩的很高兴”之类的。 15 | 16 | 所以我很郑重的写道评价“我玩的很高兴,就是子弹太容易卡弹了,可以改良一下”。 17 | 18 | 店家没有理我。 19 | 20 | 不过我没有在意,还是给了好评。拿到坦克的我中二的不行,二十岁的青年按着遥控板,像一个十二岁的少年。室友都调侃我,但我觉得这挺浪漫。 21 | 22 | 朱炫说,男人的浪漫是帝国军,是坦克,是轨道炮,是联盟,是粒子充能,是800mm的古斯塔夫轨道炮,是扎古,是伊谢尔伦. 23 | 24 | 这些,女生不会懂,但是,也正因为女生不会懂,它们才会是男人的浪漫。 25 | 26 | 在我年幼的时候,我最喜欢看的杂志是兵器知识,那时的我向往着手枪,渴望着火炮,幻想着坦克,憧憬着战机,我的头脑中填满了比我个头还高的炮弹,它们飞行,炸裂,一片火海,威力巨大,比那些女生喜欢的歌手和明星,不知道厉害多少倍呢。美国的F22,俄罗斯的T90,德国的古斯塔夫,光是想一想,都能在心中燃烧起火焰,它们是我最初的荷尔蒙。 27 | 28 | 说来你们可能不信,第一部让我流泪的电影不是催人泪下的煽情电影,而是《绝密飞行》-酷的没边的无人战机,拒绝执行命令的人工智能,音速之外的空战,不计后果的荣誉和奉献。最后,两架战机同归于尽,爆炸起漫天火雨,而当年的我呆坐在电视机前,满脸泪水,直到CCTV6开始放广告,才缓过神来。 29 | 30 | 我总觉得浪漫是有悖于现实的,因为平淡是现实的常态,而平凡也是我们的常态。你可不能去开飞机,我也不能开坦克,因为这样的话我们就成了舒克与贝塔。我们工作,我们上学,我们写写代码,我们坐的是教室而不是驾驶舱,手上翻飞的是键盘,不是操纵杆,但我们心里始终是有那点浪漫的,这是男人的浪漫,不管是十四岁还是四十岁,都会在模型店前驻足,爸爸傻呵呵的笑笑,告诉儿子,是男人,就要开扎古!再苦逼的销售,也要开扎古,在憋屈的小科员,也要喜欢坦克。 31 | 32 | 也会有烛光晚餐,也会有电影剧院,也会有玫瑰一圈,这些是浪漫,但不是男人的浪漫,男人的浪漫只属于男人,它根植于男人天生的对暴躁的机械和轰鸣的力量的热爱,这种浪漫不会老,也不会消失。如果一个男人的世界没有坦克,没有军舰,不能在千军万马中驰骋战斗,你会不会觉得,这个男人,多少有点无趣。 33 | 34 | 姑娘我爱你,但请你暂时滚一边去。总有个时候,你的心中只有那些嘶吼的引擎,发红的炮管,飞驰的导弹。 35 | 36 | 我能想到的最浪漫的情景,或许是90岁的老男人和9岁的小男孩,在血染红似的夕阳下,操纵着各自的遥控坦克,在绿茵茵的草地上激烈的对战,嘴里发出轰轰轰,突突突的怪音。而他们的心中,是帝国的两千辆坦克和联盟的三千台装甲,将军高举着前进的剑,战士们高喊着荣誉二字。 37 | 38 | 这一刻,他们都同样年轻。 39 | 40 | 你问我为什么要傻了吧唧买个小孩子玩具?这可不是小孩子的玩具,我告诉你吧, 41 | 42 | 这是T90坦克车,这是我的浪漫。 43 | 44 |   45 | 46 |   47 | 48 |   49 | -------------------------------------------------------------------------------- /www.wdk.pw/结构化知识2.0.md: -------------------------------------------------------------------------------- 1 | title: 结构化知识2.0 2 | 3 | date: 2015-02-09 06:55:17 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/zhishi.jpg) 11 | 12 | 在今天,获取知识比以往的任何时候都更加容易,不仅如此,以后还会更容易。 13 | 14 | 不知道你注意到没有,由庞大的互联网延伸开来,整个人类的知识与经验体系都在不断的做着结构化的工作。搜索引擎完成了信息的聚合,然而对信息抽丝剥茧的处理却日夜不停的由千千万万个网络应用来完成,并且,每个人都为这一工作做着贡献。 15 | 16 | 豆瓣把关于书,电影等东西的相关知识做了结构化,在豆瓣的结构化知识体系中,《[指环王](http://movie.douban.com/subject/1291571/)》这部电影的导演和演员都清晰明了,它的上映日期,它的评分,它的剧情简介与获奖情况,它的影评,这些本来分散开来的一个个知识点被结构成一部电影的立体数据,换一部电影,比如变相怪杰或黑客帝国,其相应的结构依然存在,比起搜索引擎,人们在豆瓣能更好更快的获取关于电影的知识,这就是其结构化的缘故。 17 | 18 | 另一个更加著名的例子是[维基百科](http://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5),全世界各地的大中学生靠它完成家庭作业,百度随后推出的百度百科,也是迫想把自己聚合的信息中的一部分知识结构化的体现。 19 | 20 | 互联网充斥着太多的信息,然而知识却很少,而结构化的知识就更少了,然而它却是最有价值的,能够让每个人学习并从中受益。 21 | 22 | ![](http://susefood.u.qiniudn.com/shang.jpg) 23 | 24 | 这个世界的能量是守恒的,然而无效的能量却总是会越来越多,无序会越来越多,也就是熵会越来越多,我认为,对于价值的判断其实可以这么看,一切能降低或延缓熵的增加的事物,就是有价值的。杂乱无序的信息是一种熵,而我们把它结构化成为知识之后,这部分熵就消失了,从这个角度来看,结构化的知识有极高的价值。 25 | 26 | 诸如豆瓣或百科这类网站,可以把它们叫做结构化知识1.0,在1.0的时代,一个个结构化的知识是相对独立的,即使相互之间存在关系,也很简单,然而另一种2.0的方式却悄然开始了。[网易云音乐](http://music.163.com/),可能这是目前国内最好的音乐产品了,号称几千万用户,但是,它却不止是个播放器,它一直在打造『歌单』的概念,所谓歌单,就是一堆音乐的集合,每个用户都可以创建,收藏,编辑歌单,如果我们把一首首音乐看作一个个单独的信息,那么歌单就是立体的结构化知识。网易云音乐上面的音乐丰富有趣,正是得益于结构化的体验。 27 | 28 | 用户产生,可复制,衍生传播是结构化知识的2.0的特点。 29 | 30 | 前一段时间有一个叫『[轻单](http://qdan.me/)』的产品很火,它其实正是这种结构化知识2.0的代表。它采用List的内容呈现方式,让人们结构化的分享自己的知识,其他人可以轻易的『复制』这种结构化知识,还可以在此基础上继续添砖加瓦,这足以产生知识的量变。 31 | 32 | 另外还有一些网站,将这种『知识』细分到更垂直的领域,比如『[酷燃网](http://www.coolirand.com/)』,帮助人们创建一个个购物清单,诸如『寝室神器』,『收纳神器』,这背后包含着是人们对于生活的知识和经验,你可以点击复制按钮,就复制了这份知识和经验,并且应用到生活中来。 33 | 34 | 结构化知识2.0,正在铿锵而来,碾压着无序信息的碎片,今后会有更多此类应用诞生。这减小人类信息的熵,也革新人类知识体系。 35 | 36 |   37 | 38 |   39 | -------------------------------------------------------------------------------- /www.wdk.pw/网赚,微商,以及更多.md: -------------------------------------------------------------------------------- 1 | title: 网赚,微商,以及更多 2 | 3 | date: 2015-02-22 21:56:01 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/weishang.jpg)说来讽刺,『时代』这个词在这个时代变得越来越廉价,人们说这是互联网的时代,这我同意,人们还说这是电子商务的时代,这是微商的时代,这我就只能呵呵了。 11 | 12 | 我回想起我初中那会,总是与父母斗智斗勇,如饥似渴的上着网,我倒不怎么玩游戏,我到处逛论坛,有时候学做游戏,有时候学黑客,更多的时候,则被一些所谓的网络赚钱教程吸引,那时候我满腹网赚技巧,熟读百家教程。理论上来说我觉得我应该大赚一笔,但实际上因为我没有银行卡,没有手机号也没有手机,而且还未成年,所以每次总是忧郁的停在了『填写手机号』这一步上面,那些按钮背后似乎就是滚滚而来的钞票,我甚至一直在思考要存几百万在工行,存几百万在农行,如此种种。 13 | 14 | 那时候的网络赚钱教程,我认为还是有一些技术含量的,大多数都是教你做垃圾站或者做站群卖产品卖教程卖广告位,中间还涉及一点SEO以及简单的建站知识。 15 | 16 | 后来我上了大学,有了银行卡,有了手机,有了支付宝,却从来没有像少年时想象的那样大赚一笔,小赚是有的,不过是我也花了很多。 17 | 18 | 我上大学之后,却似乎又发现了一股风气,它吹嘘着靠网络赚钱的容易和方便,而且几乎一点真正的知识都没有教你,这股风气叫做微商。 19 | 20 | 如果说微商是移动端的电子商务,那我会觉得靠谱,厉害。但是在绝大多数时候,微商却指的是『微信』上面的商业,说白点,就是用微信卖东西。和当年的网赚一样,微商试图灌输这样的理念:不花费任何成本,你可以轻轻松松的赚钱。 21 | 22 | 微信是一个通讯软件,虽然它现在变得越来越庞大,但人们最主要的使用目的还是用它和其他人沟通,它比诸如知乎,微博,豆瓣等平台更加私密。一般情况下,你的微信通讯录里面,应该是你的亲朋好友,你们之间的关系是友好而单纯的,但是一旦你开始在这群和你关系最好的人里面做生意,这种关系就变味了。朋友可以帮你,但是你不能用友情来绑架朋友。那些在自己的朋友圈做生意卖东西的人,实际上是透支自己的朋友,消费自己的友情,且不说能否赚到钱,就算赚到钱,我认为代价也太大了。 23 | 24 | 朋友之间当然也可以有一些金钱关系,比如帮助买个什么东西,或者借点钱。但这不能成为一种商业模式,如果非要把它做成商业模式,这也是一种不健康的商业模式,商业模式的盈利从来只是依靠产品的价值或魅力,做微商的大都知道自己的包装精美,价格奇贵的东西品质到底如何——之所以这么贵,就是因为走量上不去只能吃客单价的原因。而这价格还包含层层代理的中间提价,其真正价值也就不难想到了。 25 | 26 | 说到这,我还想到了微商里面重要的一个关键词:代理。说来奇怪,微商的产品大都是可以一层层代理下去的,每次代理都可以多提高一点价格,并且更高级的代理会蚕食低级代理的利润。嗯,你想到了什么?传销?互联网时代的庞氏骗局?每次看到朋友圈有卖面膜卖化妆品卖什么珠宝的,我就在想,到底他们是靠卖出产品赚钱还是吸收代理赚钱? 27 | 28 | 当然,还有一种微商的运作更加专业——专人注册几十个微信号,每个微信号用可各种手段加上千个人,然后用这些微信号卖东西。这样可以说它没有消费友情了,因为这些账号都是为营销而生的。但是,这和在街头巷尾贴小广告又有什么区别,投机取巧的混入别人的朋友圈中,然后没羞没臊的卖东西。这是一种让人不耻的营销方式,然而不仅不低调处理,还要拿出来冠以互联网创新的名号,这就是目前的现状。 29 | 30 | 说到底,人都是好逸恶劳的,人们都希望有一种轻松的方式去赚钱。微商之所以彻底攻陷微信朋友圈,就是在于其吹嘘的赚钱的轻松和财富的巨量。可是它背后却有着无法掩饰的硬伤——没有创造价值。因为没有人会喜欢广告,即使有一个人购买,也会有九十九个人是不感兴趣的,这在网络上面推广没什么,但是当这九十九个人都是信任你的朋友的时候,你的损失就绝对大于卖出一个产品所产生的利润了。 31 | 32 | 我就不说有些东西比钱更重要这样的话了,免得大家说我装逼,但是,价值是可以相互转换的,钱会不断贬值,而其它方面的价值则会升值,你的人脉,你的信誉,你的知识,你的能力,你的视野,你的心态,这些在适当的时候都可以源源不断的转换为现实财富。 33 | 34 | 十个汉堡可以卖一百块,也可以送给十个饥饿的人,还可以自己吃了爽一把,但是你非要总价五块钱卖出去,这就是你的不对了。 35 | 36 |   37 | 38 | PS:搭建移动端网站,使用公众微信号等来创业的并自称微商的同学们,我写的并不是你们 39 | 40 |   41 | -------------------------------------------------------------------------------- /www.wdk.pw/群媒体.md: -------------------------------------------------------------------------------- 1 | title: 群媒体 2 | 3 | date: 2014-10-11 20:41:08 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![http://susefood.u.qiniudn.com/qmt.jpg](http://susefood.u.qiniudn.com/qmt.jpg) 11 | 12 | 理想主义者有一个通病,就是有着一种奇怪的强迫症,希望改变身边那些不美好的东西,希望创造出一些不同的东西,他们往往也有着奇怪的价值观,这种价值观凌驾于金钱或者名声,是一条永恒的不归路。 13 | 14 | 进入大学以来,从半死不活的麻辣理工到夭折的Im理工零食再到如今的校园周刊,我都是在践行着这一条不归路。 15 | 16 | 很多人不清楚麻辣理工周刊到底算什么,那我给它取个名字,叫群媒体。 17 | 18 | 自媒体最近是一个逐渐火起来的概念,每个人似乎都想当个自媒体,其实我写这个博客也可以算是自媒体了,但是,自媒体的重心是自身,自媒体们千方百计的让人们喜欢甚至崇拜自己,这样就可以形成粉丝经济。我不喜欢搞这个,除开我写的东西魅力不够,干货不足以外,更重要的原因是我对群体的兴趣,把人们的兴趣吸引来关注在自己身上,这是自媒体,而把人们的兴趣吸引到这个群体本身或另一个群体上面来,吸引到更有价值的事情上面来,我觉得这是群媒体。 19 | 20 | 群媒体听上去很像传统媒体,但他们之间还是有很大的差别,抛开传播内容不论,群媒体和自媒体一样,都能借助网络来进行传播,甚至通过推送来实现用户的主动或被动阅读。传统媒体在内容上要么是关注新闻,要么是关注行业,很少有关注某个群体或某个群体的生活的,即便有,在制作和传播上面也都停留在传统的层面上。而群媒体不然,群媒体通过自媒体能运用的所有手段来进行传播和创作,诸如视频文字图片声音,社交化分享,邮箱订阅,等等。群媒体和自媒体一样,是互联网的产物,虽然实际的内容古已有之,但是这个叫法和这个叫法赋予的新的意义,确是全新的。 21 | 22 | 大学生就是一个群体,而同一所大学的大学生更是一个群体,人们千方百计把大学生的注意力分散到游戏,兼职,赚钱,考研,实习上面去,并以此牟利,但是,鲜有人尝试把大学生的注意拉回他们每天的生活当中,这些生活往往隐匿在纷繁的外事当中,让人们无从注意。这样的结果就是现在的大学生对身边的人和事越来越冷漠,却对一些奇怪的事情如数家珍,这些事情有时候我们称之为爱好,但是,淹没生活真相的爱好,我认为并不有益。 23 | 24 | 群媒体的关注点不在于某一两件事情,或是那些吸引眼球的新闻,而是纷繁事件背后所展现的生活的真实面目。它不是社区,不是聊天室,不是个人博客,而是一群人对另一群人的关于共同经历的现实生活的讲述与聆听。 25 | 26 | 我相信每天的生活中蕴育着非凡的力量,而每个人都能从中受益。艾略特说,人们将不断的寻找,最后的终点,将会回归到其起点处,并首次认识到这个地方的存在。我想,这也是我理想中的群媒体的目的吧。 27 | 28 |   29 | 30 |   31 | -------------------------------------------------------------------------------- /www.wdk.pw/聊聊Growth hacker.md: -------------------------------------------------------------------------------- 1 | title: 聊聊Growth hacker 2 | 3 | date: 2014-11-26 04:53:38 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/growthhack.jpg) 11 | 12 | 最近网上讨论Growth Hacker的话题越来越多,有呈爆发之势。很多人都很好奇,Growth hacker到底是什么,他又是否有传说中那么神奇的作用? 13 | 14 | 其实我最早了解Growth hacker这个词,是无意间看到[范冰](http://www.fanbing.net/)(Xdash)的博客,XDash应该算是国内最早研究Growth hacker的人了,他的两篇文章, [美丽说的早期推广之道](http://www.fanbing.net/meilishuo-growth-hack.html) 和 [Airbnb是如何通过Growth Hack逐步成长起来的?](http://www.fanbing.net/how-airbnb-bloom-via-growth-hack.html) 给了我很多启发。近期他在写一本关于growth hacker的书,有兴趣的同学可以关注。 15 | 16 | Growth hacker是个不太好翻译的词,它太直接了,甚至有点简单粗暴,但正是这样,文绉绉的职场名词反而找不到合适的去套用到它身上。Growth hacker,顾名思义,主要目标是Growth,即用户数量的增长,盈利的增长,活跃度的增长,总之,是一切正面数值的增长,而hacker,则表明了达成这个目标的方法,国外的hacker和我们理解中的『黑客』是不一样的,hacker更像是一种精神,一种敢于突破传统限制,打破思维条条款款,用创造性的方法解决问题达到目的的精神。我们的『黑客』则是鼓捣网络安全的脚本小子。麻省理工是hacker的大本营,而蓝翔是黑客的基地。 17 | 18 | 无论是用户量还是营收的增长,这一直是所有企业都想要的,也是都在做的,会有广告部门,运营部门来做这些工作,但是和Growth hacker不同,这些传统部门所运用的方法也是传统的。例如广告部门可能拍了无数广告,然后花大价钱在电视媒体上面播出,这的确收获了很多客户,但是Growth hacker却可以做出病毒视频,让其在网站上疯狂传播,最后不花一分钱,却起到了比以前的视频加在一起还要好的宣传效果。 19 | 20 | 事实上,并不是因为Growth hacker会其他人不会的技能使得他与众不同,而是Growth hacker什么方法都会使用,这才使得Growth hacker非常牛逼。 21 | 22 | Growth hacker其实很早以前就有了,只是现在才有这么酷的名字,而很多人也都干过Growth hacker的事儿,他们的名号可能是产品经理,可能是运营,可能是文案,也可能是CEO,很多产品刚刚起步的时候都有过一段特别苦逼的时候,团队会使用任何方法来进行推广,比如做网站SEO,从QQ群一个一个拉人,发广告,做联盟,发邮件等等,其实这些都有可能是Growth hacker可能去干的事情,在围绕着产品所作的所有工作中,把关于切实提高流量/用户/营收 所使用的方法提出来放在一起,就是Growth hacker的工作,而如果有专门做这些工作的人,那么他就是Growth hacker。 23 | 24 | 事实永远比想象的要复杂,Growth hacker的工作并非交给随便哪个人都可以胜任,真正的Growth hacker知道如何选择正确的方法,甚至创造出前所未有的方法来实现增长。选择和创造,不是不合实际的猜测和杜撰,而是在有对产品和用户的深度把握之后的开陈出新。Airbub的创始人曾经为了找出成交情况低迷的症结,四处飞行,在24家家庭旅店体验住宿,最后才找到原因——许多在Airbnb上招租的人,并不懂得如何在发布内容时尽可能地展现出房间最好的一面。为了解决这个问题,Airbnb专门花了5000美金租借了一部高档相机,挨家挨户免费为纽约的许多招租者的房屋拍摄照片。月底时Airbnb在当地的收入整整增加了一倍。 25 | 26 | 一掷千金不是Growth hacker,以小博大,以弱博强才是Growth hacker的智慧。杀敌一千,自损八百,这不是Growth hacker,庖丁解牛才是Growth hacker。这颇有四两拨千斤的意味。 27 | 28 | 不过,既然Growth hacker是一个工作,那么什么人才能来做呢?我觉得至少要达到以下几个标准 29 | 30 | * 对产品和产品体验的理解要够 31 | * 对用户需求的把握要强 32 | * 了解运营推广,知道各种高大上或接地气的方法 33 | * 有优秀的输出能力(文字/图片/视频 等等) 34 | * 有创造力,创新精神和想象力 35 | * 拥有数据分析能力/程序编写能力 36 | * 敏锐的洞察能力 37 | 38 |   39 | 40 | 这里的每个标准还可以细分为若干要求,但是你能看得出来,这样的人非常少,也非常优秀。无论如何,一个Growth hacker还是所有企业梦寐以求的,因为它能创造出比自身索取的大得多的价值。 41 | 42 | 我在立志成为优秀的产品经理的道路上走着走着,或许会突然掉到一个坑里,变成一个Growth hacker,谁知道呢? 43 | 44 |   45 | 46 |   47 | 48 |   49 | -------------------------------------------------------------------------------- /www.wdk.pw/记一件小事.md: -------------------------------------------------------------------------------- 1 | title: 记一件小事 2 | 3 | date: 2014-12-05 22:12:14 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/eat.gif) 11 | 12 | 昨天是特别纠结的一天。 13 | 14 | 这学期为了体验文科生活我转了专业,可是之后我发现文科要顺利毕业依旧不是件容易的事情,尤其是对我这种大三才转专业的人来说。前两年的课程都要一门门的补。 15 | 16 | 而且我还逃课。 17 | 18 | 几个月前我制作了简历,并且放在了网上,通过一些途径,很多人看了[我的简历](http://wdk.pw/me/#/resume),这也让我认识了不少人。其中有个网易的姐姐很热情的邀请我去网易工作,但是由于实习的待遇比较低,我拒绝了。但是,这让我开始琢磨一些不那么传统的道路,比如辍学。既然我要顺利毕业看上去不是很容易,而就算我不毕业也可以轻松找到不错的工作,那我为什么要在大学再浪费一年的时间呢? 19 | 20 | 人总是会面临很多的诱惑,特别是当眼前的处境不乐观的时候,趋利避害总是人的天性。 21 | 22 | 此后又有不少公司联系我,表示欢迎我去实习工作,最夸张的一天,我的简历在微博上被浏览了两万次。当然,这得益于[JobDeer](http://www.jobdeer.com)微博的推荐。但无论如何,我 被这些『认可』有些冲昏头脑,我觉得我似乎并不需要再读书了,我可以出去闯荡江湖了。 23 | 24 | 我每天在学校时间很多,课本来就很少,我还逃了一些,就更少了,我用这些时间看书,什么都看,从高行健的『灵山』到号称产品经理必读的凯文凯利的『失控』,我也做自己的项目,前几天还为一个新想法买了域名,我写文章,我还做任何我感兴趣的事情,比如[为坦克大战写AI](http://www.wdk.pw/763.html),在这个充满恶意的考试世界,我用丰富的精神文化和兴趣爱好给自己做了一个保护罩,这个保护罩全天侯开启,让我过得逍遥自在。 25 | 26 | 可是我终究会感受到现实的狂轰滥炸,随着期末的到来,我的大三一天比一天少,我的大学也一天比一天少,我很难想象我如何补完十几门课,顺利毕业,因此我更加琢磨起不传统的道路。 27 | 28 | 前几天网易的姐姐又找到我,说经过争取,已经把我的实习薪资提高了一倍多,转正的工资也有不少,并且他们的真诚和对我的认可让我很感动,这让我真的心动了。我很快答应了她,并说好年后入职,offer会在不久后发过来。 29 | 30 | 晚上我激动的要命,睡觉都在想着这事,我盘算着我该如何在异乡生存,以及我未来十年的道路,久久不能入睡。 31 | 32 | 我甚至还发了[微博](http://weibo.com/thedk),很多人表示关切和祝愿,一切简直就像板上钉钉了。我不知道谁还能阻止我离开学校。 33 | 34 | 第二天,我中午去吃饭,食堂像往常一样拥挤,饭菜的香味飘荡其间,男生女生都在排队打着饭,桌子上坐满了狼吞虎咽或细嚼慢咽的同学,寒冷的冬季里,诺大的食堂却冒着热气,锅碗瓢盆的声音响起,那一瞬间,我觉得我的保护罩破裂了。一些柔软而尖锐的东西渗入了我的内心,我只觉得自己从未感受过大学的真谛。 35 | 36 | 周遭的现实汹涌的灌入我的大脑,我想起图书馆的落日,操场的清晨,去教室的人群,一切息息相关却又分别独立。 37 | 38 | 微博上有人留言问我[周刊](http://imsuse.de)还会继续不,这个我几乎一个人做着的校园电子杂志,灌注了我的很多心血,每期发布,都有同学留言支持和鼓励。[麻辣理工微信平台](http://imsuse.de/wx)上还有几千个同学,他们很多人从两年前就开始关注,经常会发问候和祝福过来。 39 | 40 | 下午和搜狐实习的朋友聊,他说不要因小失大。网上经常混的社区的朋友说,人不能总做最容易的那个选择吧,逼自己一下,或许能激发潜能。 41 | 42 | 我回想起上周在操场踢球,奔跑的风呼呼的响。前两天去吃饭,对面的姑娘那么漂亮。 43 | 44 | 想一想,如果辍学,这些学生时代的影像,就都会离我远去了。 45 | 46 | 我终于面对自己躲闪了很久的那个事实,你就是怕去考试,怕天天上课。我说,是的。 47 | 48 | 我并非没有感受过[离家千里的远方工作](http://www.wdk.pw/333.html),那种孤独和压力依然在目,然而为了逃避上课和考试,我居然可以忍受这种孤寂。 49 | 50 | 但现在,我终于下定决心不想逃避了。 51 | 52 | 这大学有无数我珍视的经历,我想完整的去体验,纵使有凶恶的考试和繁多的课程,但那又如何,以我智慧的大脑,又岂会做不到过关斩将,一科科的过过来。 53 | 54 | 还是写一首诗吧。 55 | 56 |   57 | 58 | >  我曾忽视身边的美味, 59 | > 60 | > 我曾逃避心中的杂粮。 61 | > 62 | > 但现在我站起身来,咽下米糠, 63 | > 64 | > 就着烤肉的香。 65 | > 66 | >   67 | -------------------------------------------------------------------------------- /www.wdk.pw/趣译——或许是提高英语的最好方式.md: -------------------------------------------------------------------------------- 1 | title: 趣译——或许是提高英语的最好方式 2 | 3 | date: 2014-10-13 02:41:38 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 其实我本没有资格谈提高英语——我只过了四级,连六级都没考过。但是我又觉得,学习英语的乐趣和长进不应该用水平来衡量,无论任何人,只有有乐于学习之心,只要有不断提高之过程,就可以分享其中的经验,我也相信这能帮助到人。 11 | 12 | 我从小学就开始学习英语,可是在之前的大部分时间,我都把其看作和数学一样的负担。这样的想法一直持续到高中,高中以后我开始在网上阅读一些英文的文章,此时开始感觉到英文的重要。上大学以来,这种感觉更加明显,无论是阅读技术文章,浏览外国网站,还是和全世界各地的人们交流,英语都必不可少。这个时候,课本上学习的那些都不重要了,重要的是这些体验——关于这个精彩纷呈的世界的体验,如果我们不会英语,则完全无法感受。 13 | 14 | 我是一个很懒的人,我从来没有捧着一本词典或单词书去背单词,我也从没有看过任何语法书或者专门背语法。我的所有关于英语的知识,都来源于我看的文章,看的美剧,看的电影,以及和人交流。这让我在考试中往往得分偏低,而与人交流的时候却问题不大。而不久前,我或许发现了一种更好的方法去提高英语——翻译。 15 | 16 | 背单词,看文章,都只是在一个方面提高能力,比如单词量,比如语感,虽然阅读英语文字也能增加单词量,但是效率很低,我们能够囫囵吞枣的读一篇就已经不错了,若还要纠结每个单词,则读会变得麻烦许多。而翻译,不仅要求你准确掌握每个单词的意思,还要联系语境和上下文做出合理的解释,你甚至还要查阅资料,以完全理解文章说的什么。 17 | 18 | 这至少有三大好处 19 | 20 | * 单词量的提升 21 | * 语感的飞跃 22 | * 英语国家文化的了解 23 | 24 | 但是问题也摆在这里,一个是翻译本身的难度,比起读一篇文章来说,翻译的确困难多了,如果翻译一些很小学生的作文,翻译完了摆在那里,没有成就感。第二个是翻译的工具,翻译不像信手写一篇文章,翻译接触的是原文,产出的是译文。我们不能打开一个空白的页面就开始翻译,翻译需要随时对照原文,更需要方便的查询字典,更好能把我们不会的单词存起来,以后可以随时复习。 25 | 26 | 这些问题是我不久前在亲身尝试翻译的时候遇到的问题,也为了解决这些问题,我做了 [趣译](http://quyi.sinaapp.com) 27 | 28 | ![http://susefood.u.qiniudn.com/quyi.jpg](http://susefood.u.qiniudn.com/quyi.jpg) 29 | 30 | 趣译是一个翻译工具,采用了两栏的方式,能够在看到原文的情况下方便的翻译,同时还能简单的划词查看这个单词的意思,我相信这种方式能够让翻译事半功倍,而且充满乐趣。 31 | 32 | ![http://susefood.u.qiniudn.com/quyi2.jpg](http://susefood.u.qiniudn.com/quyi2.jpg) 33 | 34 | 在你查询任何单词的时候,趣译已经悄悄把它加入了单词本,在单词本中,你可以检索所有你不会的单词,查看它们的释意,标记为已记住,或者删除。 35 | 36 |   37 | 38 | ![http://susefood.u.qiniudn.com/quyi3.jpg](http://susefood.u.qiniudn.com/quyi3.jpg) 39 | 40 |   41 | 42 | 如果趣译只是一个翻译工具的话,未免可惜,事实上,这还是迄今为止最好的双语阅读平台。 43 | 44 | 其它的双语阅读网站大概是这样的: 45 | 46 |   47 | 48 | ![http://susefood.u.qiniudn.com/quyi4.jpg](http://susefood.u.qiniudn.com/quyi6.jpg) 49 | 50 |   51 | 52 | 而趣译是这样的 53 | 54 | ![http://susefood.u.qiniudn.com/quyi5.jpg](http://susefood.u.qiniudn.com/quyi5.jpg) 55 | 56 |   57 | 58 | 你可以在原文和译文中穿梭自如,也可以拉动滚动条来浏览不同段落并且对照阅读,还能划词查看单词的释意。除此之外,趣译的页面简洁干净,没有任何多余的元素和广告,让你沉入阅读体验之中。 59 | 60 | 同时,趣译也是一个展示的平台 61 | 62 | ![http://susefood.u.qiniudn.com/quyi7.jpg](http://susefood.u.qiniudn.com/quyi7.jpg)![http://susefood.u.qiniudn.com/quyi8.jpg](http://susefood.u.qiniudn.com/quyi8.jpg) 63 | 64 | 人们可以发表自己的翻译作品,将其归类,读者可以根据自己想读的内容来查询这些双语文章。遇到喜欢的,可以自己动手翻译,可以点赞或分享。在阅读和翻译中,英语贯穿其中。 65 | 66 | 我自己已经用趣译翻译了多篇文章,并且乐在其中,翻译最为重要的一个使命在于,你传播了一些东西,你将不同语言不同文化的想法带入了中文世界,这对于世界意义非凡。我很高兴看到我翻译的很多文章被许多网站转载,我也希望我翻译的这些东西能够对人有所帮助。 67 | 68 | 提高英语很重要,力所能及的帮助这个世界更加融合开放更加重要,而翻译,就是实现两者的同一方式。 69 | -------------------------------------------------------------------------------- /www.wdk.pw/逃课的轮回.md: -------------------------------------------------------------------------------- 1 | title: 逃课的轮回 2 | 3 | date: 2014-11-23 15:49:27 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/taoke.jpg) 11 | 12 | 我大一的时候调皮,经常逃课,希望大家都跟我一起逃,于是写了一篇文章:[逃课与点名的一点分析](http://www.wdk.pw/100.html) 13 | 14 | 大二的某个早餐,我吃着鸡蛋饼喝着豆浆,突然感受到清晨的美丽与勤奋的魅力,于是决定不再逃课,做出这个决定后,我又写了一篇文章:[论不逃课和良好的生活习惯](http://www.wdk.pw/369.html) 15 | 16 | 而我现在大三了。 17 | 18 | 人们常说人生在世有三重境界,一是看山是山,看水是水,境界高点,就成了看山不是山,看水不是水。境界最高的,又变成了看山还是山,看水还是水。武侠小说也有类似设定,不会武功的老头在扫地,宇宙无敌的老头也在扫地,中间倒是有无数的高手『拳打南山猛虎,脚踢北海龙王』,可是他们都被主角给轻易撂倒了。 19 | 20 | 人出生的时候混沌无知,年老的时候会恍如儿童,从无而有,再从有而无,这种宇宙生命中无处不在的轮回,在道家看来是一种圆满。 21 | 22 | 成长不是直线,也不是曲线,出人意料,它是一个圆。 23 | 24 | 所以说回逃课这件事,我逃,我不逃,我又逃,我不认为这是懒惰的反复发作,而是三观的更新换代。 25 | 26 | 大一的时候我逃课,因为我觉得我做的事情比上课更有意思,大二的时候我不逃课,因为我觉得大学的上课经历弥足珍贵。 27 | 28 | 我大二写文章论不逃课的时候曾经深刻反思了大一的自己,但是现在我并不打算反思一年前和两年前的我,因为我觉得,那时候的想法并没有错误。小孩子看小人书,小学生读『海上日出』,中学生看鲁迅,大学生看卡夫卡,你不能怪小孩子看的太幼稚了,因为他的年龄小,不认识字,只能看这个,但是大学生再跑去看连环画就不对了,当然,如果有小学生看卡夫卡,那也太凶残了。我的意思是,在不同时期,人的想法和思维是不同的,这没有对错之分,只要在合适的时候,它们就都是对的。 29 | 30 | 现在的逃课,我也不是全逃,基本上是逃掉三分之二的样子,听起来好像很多,但实际上不多,因为我们的课总共就很少。毛泽东思想这门课我本来还是很有兴趣的,但那个老师一直在教导我们外国人民生活在水深火热之中,中国人民才大都很幸福,这让我这不幸福的人觉得拖了中国人民的后腿,很不好意思再坐在教室。还有一门课,课名听起来应该很有趣的,但是老师基本上就是照念PPT,这让我上课要打瞌睡,这个冬天有点冷,我不太想感冒,所以干脆逃掉了。 31 | 32 | 我有没有偷懒?我当然有,如果我不承认这点就太虚伪了,但是,我本不是一个懒的要逃掉三分之二的课的学生。逃课的时间,我一般用来看书,没错,也看卡夫卡,或者写文章,看电影,或者做一些产品工作。总之,它们都挺有意思的。 33 | 34 | 我绝对不排斥上课,我也不拒绝上课,如果上课能学会有意思的东西的话,我会很乐意去上课。从某个方面来说,上课与不上课都是一样的,都一样重要也都一样不重要,重要的是你的选择,以及选择背后的原因。 35 | 36 | 艾略特写诗说,人类将不断的寻找,最终的终点,将会回归到起起点处,并首次认识到这个地方的存在。 37 | 38 | 一年后,我对于逃课又会有什么新的认识?或许,那时候的我根本不觉得这事值得写一篇文章吧。 39 | 40 |   41 | -------------------------------------------------------------------------------- /www.wdk.pw/遁入红尘.md: -------------------------------------------------------------------------------- 1 | title: 遁入红尘 2 | 3 | date: 2014-11-03 16:13:39 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | **![](http://susefood.u.qiniudn.com/drhc.jpg)** 11 | 12 | 很多人常常抱怨生活的平淡,这种平淡会逐渐变成无聊,并让人觉得难以忍受,甚至觉得生活了无乐趣。我自己也常常深陷于这种无聊的困境中。 13 | 14 | 我们从不怀疑世界的精彩,可是好像这个精彩的世界总是不属于我们,我们不会遭受让人扼腕的天灾人祸,自然也不会经历让人羡慕的刻骨铭心。马航失事的悲伤不属于我们,世界杯的捧杯也不属于我们,恐怖分子的炸弹不属于我们,女明星的身体也不属于我们。那些全世界瞩目的事情,那些塑造历史或改变历史的事情,好像总是和极小的一部分人有关系,我们大多数人一辈子都成不了这一小部分人中的一个。 15 | 16 | 真是没有存在感。 17 | 18 | 我们都知道蝴蝶效应,我们都知道人类是一个互相影响的复杂群体。我们也都知道今天早上吃的那根油条可能影响了印度三哥的火车运输,而下午喝的那瓶可乐可能左右了苹果的股票,但是,这种参与感实在是太微弱了。而真正的参与感能够让人们感受到自身的价值,并激励人们去创造更大的价值。 19 | 20 | 问题在于,面对这个嘈杂的世界,面对着每天发生的各种事情,我们是否真的无能为力?只能喝着可乐吃着油条,漠不关心,毫不在意? 21 | 22 | 不,并不是这样,我们缺的是勇气,尝试一次的勇气。 23 | 24 | 我曾经在网上看到世界上最小的国家,这个国家只有六个居民。为了让事情更有意思一点,我给这个大洋另一边的微型国家的国王写了一封信,没想到的是,他居然给我回信,我们甚至还有多次邮件往来,让我逐渐了解这个神奇的国度。这个渺小个人和渺小国家的事情让我相信,只要有想法并真正去尝试,我们是可以以一种更真切的方式感受这个世界的。 25 | 26 | 乌克兰的革命前一段时间闹的沸沸扬扬,Github上面有一个乌克兰的程序员在一段Commits中写道,可能我很长一段时间都不会更新这个项目了,因为我的国家正在革命。这句话随即火遍了全世界的技术圈,世界各地的工程师和程序员都在下面留言支持,我也在下面表示了来自中国的支持,一个月后收到了作者的回复,他的精神让我感动,这个世界因为一些美好的祝愿与支持而变得更好一点。 27 | 28 | 更早些时候,Github差点惨遭GFW的封锁,但是国内圈子里面无数工程师通过各种渠道联名抗议,政府迫于压力不得不开放了Github,虽然李开复等名人也有参与其中,但是每个参与者的力量都共同促进了这一抗议的效力,并最终保证了这个开源世界的存在。 29 | 30 | 以前看到很酷的软件或很棒的故事的时候,我会赞一句,真他妈不错,然后继续做我的事情。这个世界的精彩真相与我擦肩而过。后来我不这么做了。我尝试与优秀软件的作者联系,表达我的感激和支持,我也会深入我所听闻的那些故事。世界由此和我紧密联系在了一起。这种联系让我身处存在感的洪流中。 31 | 32 | 少年的乔布斯曾经给惠普公司写信索要技术资料,后者慷慨的送了很多东西过去。而现在我们却难以下决心按照包装上那个电话号码打过去。归结原因,在于我们越来越惧怕未知,未知的交流,未知的接触,未知的后果。这种惧怕并非来源于恐惧,而是来源于冷漠,现代世界的冷漠。 33 | 34 | 不过,总有少年会去尝试,因为这蕴含了一切可能。 35 | 36 |   37 | -------------------------------------------------------------------------------- /www.wdk.pw/重庆大四团队产品— Infinity new tab.md: -------------------------------------------------------------------------------- 1 | title: 重庆大四团队产品— Infinity new tab 2 | 3 | date: 2014-12-24 21:07:11 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | 昨天突然收到了一封邮件 11 | 12 | ![](http://susefood.u.qiniudn.com/dasi.jpg) 13 | 14 | 这是我第一次收到类似需求,当然,我也不是那种让谁都可以来免费打广告的人,所以我跑去看了下他们的产品,[ Infinity new tab](http://www.infinitynewtab.com)是一个chrome插件,可以美化chrome浏览器的新标签页,不仅如此,还在新标签页面上面集成了很多有意思的功能,比如天气,待办事项,随手笔记等等,也可以快捷打开一些常用应用或网站,比如Gmail或Google应用商店,看起来是这样的: 15 | 16 | ![](http://susefood.u.qiniudn.com/newtab.jpg) 17 | 18 | 当然,这些图标和功能都是可以设置的: 19 | 20 | ![](http://susefood.u.qiniudn.com/newtab2.jpg) 21 | 22 |   23 | 24 | 在浏览网页的时候,如果你遇到喜欢的页面,也可以随时方便的添加到启动页中以方便日后随时浏览 25 | 26 | **![](http://susefood.u.qiniudn.com/newtab3.jpg)** 27 | 28 |   29 | 30 | 总之,这款新标签应用是我使用过的最优雅的,当然,这可能是因为我使用的还不多,不过,大四的团队开发出这样有趣有用且好看的小产品,我认为是非常值得鼓励的,我在邮件中询问他们开发背后的故事,他们回复我: 31 | 32 | ![](http://susefood.u.qiniudn.com/dasi2.jpg) 33 | 34 | 其实我很欣赏这样的大学生,当然我也欣赏我这样的大学生,但是我一直很懒,我从来没有在线下去干点啥,可能也是因为我脸皮比较薄的缘故,从线下到线上是一个有趣的过程,摆地摊到淘宝店再到开发chrome应用,我觉得这算是非常有意思的经历了,很多人也赚钱,淘宝刷单啦,去当水军啦,在朋友圈卖东西啦,但是我一点不欣赏他们,因为他们出卖自己的劳动力或干扰别人的生活以获取利润,却并未创造价值。我不敢想象,如果大伙都去干这种事,那社会如何进步,生活如何更加美好,然而创造价值却是美好的,如果每个人都忙着创造价值,在创造的同时获得回报,那这个社会就接近完美了。 35 | 36 | 这款chrome应用在标签页中加入了天气和记事本等功能,它让chrome变得更加赏心悦目的同时,也在某种程度上提高了我们的效率,给予了我们记录想法的方便,我认为这就是价值所在,比起那些送外卖发传单的大学团队,不知道好了多少倍。当然,这样说可能不接地气,生存的确是第一要务,但是一旦我们有了面包,就得去追求玫瑰,就得去创造价值,这样我们方能说,除了赚到钱,我们还改变了世界。 37 | 38 | 加油吧,开发这款应用的骚年,加油吧,看这篇文章的骚年。 39 | 40 | 当然,我也得加油。 41 | 42 | > 最后,我说一下,我很乐意『报道』大学生的优秀产品,因为我也是大学生,我知道创业不易,尤其是大学生创业更不易,互帮互助是非常重要的。我不收一分钱,会尽可能的帮助你们,当然,如果雇我当Growth Hacker,还是得给工资的。 43 | -------------------------------------------------------------------------------- /www.wdk.pw/零花钱与生活费.md: -------------------------------------------------------------------------------- 1 | title: 零花钱与生活费 2 | 3 | date: 2014-12-03 21:04:29 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | ![](http://susefood.u.qiniudn.com/lhq.jpg) 11 | 12 | 前几天,理工周刊上面发布了一篇题为『[月生活费为2000的大学生活是怎么样的?](http://imsuse.de/read/index.php?id=MTMw)』的文章,这其实是一篇从知乎搜集的讨论,发出之后引起了本校同学在社交网络上的热议,大家纷纷开始炫富或者哭穷,这让我感到忧伤,我觉得我有必要写点什么。 13 | 14 | 以我自己举例,我的生活费是1000元/月,偶尔我会叫父母不给我打生活费,并且我从来没有主动找父母要过生活费。除开生活费之外,我还有一些其他收入来源,比如写作收入和网站收入。我花钱基本上大手大脚的,也曾遇到过[穷的方便面都配不起火腿肠的窘境](http://www.wdk.pw/164.html),但大部分时候,还是能够过得比较滋润。我每个月花费大约在1500左右,其中大部分是吃,然后是玩,还有买东西,我会屯一些虚拟资产,比如域名,每个月还要支出VPS和科学上网的费用。如果再买点衣服或者玩具(别笑我)什么的,就会超支。长假的时候我也会经常用自己赚的钱去旅行什么的。大学三年去了国内很多地方。 15 | 16 | 我一直觉得,生活费和零花钱是截然不同的概念,父母无偿给我们的,是生活费,顾名思义,它应该是满足基本生活需求的,无论是1000还是800甚至更少一些,『基本生活』都是够用的。实际生活中我们却经常觉得不够,这是因为,我们把它当成零花钱了。看电影,购物,甚至去聚餐,这部分其实都不算是生活费的范畴。 17 | 18 | 零花钱既然不等于生活费,那么从何而来?我以为主要有两个途径。 19 | 20 | 一个是赚钱,大学生都有一定的空闲时间,用这些时间去创收是一件很容易的事情,当然我不赞成发传单或者淘宝刷单什么的,创收一定要结合自己的兴趣或专业,比如翻译,写作,外包项目,经商等等。这些『创收』并非本末倒置,而是大学生活的体验之一。若你四年都没有赚过一点钱,会不会觉得,有点遗憾。 21 | 22 | 可能很多学霸会跳出来反驳我,说认真学习天天泡图书馆,还要考雅思托福各种证,哪来的时间去创收,对此我举双手赞成,所以我们还有获得零花钱的第二种途径——奖学金和奖金。奖学金不等于助学金,助学金可算是另一种意义上的生活费,而奖学金则完全不同,奖学金是对你学习的一种奖励,你用助学金去买iphone6会让大家鄙视,而用奖学金去买iphone6则天经地义。大学里的奖学金名额很多,但凡认真学习几乎都能评上。除此之外,大学里面还有非常多的比赛竞赛,这些比赛的奖金都不菲。我去年参加学校一个网页竞赛,就得到了1400元的奖金,我们学校是一所普通二本院校,更好的学校会有更多的赛事和更丰厚的奖金。 23 | 24 | 如果既没有奖学金,也没有竞赛得奖,还不想去创收的人,该怎么办呢?这样的同学其实为数不少,既然学习也不行赚钱也不行,业余爱好也不行,那么还有什么资格抱怨生活费不够呢? 25 | 26 | 我认识这样一种人,他们的家庭条件可能不好,生活费并不多,但他们从来没有抱怨过,也体谅父母,然而他们学习不努力,天天在寝室玩游戏,专业知识一概不懂,不去参加任何社交活动,还美其名曰节俭,甚至自己被自己的『懂事』给感动了,我很鄙视这种行为。美好的生活是要靠自己去奋斗的,天天宅在寝室玩游戏,看似是节约,减少父母负担,但事实上却是彻头彻尾的浪费,因为他荒废了四年最值钱的大学时间。 27 | 28 | 不少土豪同学,家里给个五六千的生活费,他可以过的比大多数人都滋润,但是这并不有趣。无论是得奖学金的兴奋,还是自己赚了第一桶金的成就感,他都体会不到。不从父母那里来的零花钱,不是生活费的补充,而是一种全新的生活体验,弥足珍贵。 29 | 30 | 其实很多时候,可能我们的生活费就足够各种开销了,零花钱只是一种象征意义上的收入。但我们还是要为之努力。 31 | 32 | 因为总有一天,我们得完全靠自己,屹立在这个世界上。 33 | -------------------------------------------------------------------------------- /yuguo.us/2013年终总结.md: -------------------------------------------------------------------------------- 1 | title: 2013年终总结 2 | 3 | date: 2015-03-23 10:45:51.146000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 2013年终总结 11 | 12 | 2013年就要过去了,像往年一样总结一下过去的一年我的变化。 13 | 14 | # 生活 15 | 16 | 在深圳买房了。其实这个决定做的挺突然(因为前房东不续租了),但是快速买了房并入住之后一直都是很庆幸当时下决心很快。因为6月份以后直到现在深圳的房价仍然在一路上涨,前海片区涨了20%以上,如果当时没买现在肯定更加买不到了。而且十月份后全国性的贷款收紧,这时候已经很难贷到房贷,或者很难以折扣贷到款。第三是因为这半年忙活一些软装修,包括去乐安居挑吊顶和窗帘,去宜家买摇椅,配置地毯,自己拿电钻装饰厨房,这里面有很多乐趣。最后感谢腾讯,提供部分无息贷款,福利很好,想跳槽的前端欢迎联系我:) 17 | 18 | 我在今年底买了人生第一辆车,去年报的驾校也在今年年底顺利毕业,拿到了驾照。买车这个决定也做的很快,但是买了还是觉得挺值,因为有了一种“蒙多想去哪儿就去哪儿”的感觉,有关闭车窗那种与世隔绝的安静,有下雨天打在天窗玻璃上的积水,还有冬天从空调口输出的暖气,还可以在等人的时候打开天窗看书。总结来说就是安全和自由的心理感受。 19 | 20 | 还买了一些对生活品质有所提高的东西。在新家厨房配置了直饮净水系统,净水的程度比桶装纯净水还要干净。买了roomba扫地机器人,节省了很多扫地的时间,而且把一些毛发,和地毯绒毛也全部吸进去,效果很好。retina MBP,超快的ssd和retina屏幕,这个体验过就回不去了。买了kpw2,比前两个kindle都好,更轻量便携,更高的dpi,还有背光灯,一样的续航能力,日本价格700+,非常超值。对我来说,物件的价值并不是一个简单的price tag,而是买回来之后自己会用多少次,每次使用给自己带来的效用值多少钱。所以一个iPhone比起android并不会贵,因为能用更久,而且可以以相对不错的价格回收。 21 | 22 | 今年夏天休假去马来西亚的沙巴海滩潜水,只是最初级的浮潜,但已经能看到很美的水下景色,下定决心以后要去仙本那潜水胜地玩一玩~ 23 | 24 | # 工作 25 | 26 | 年初在App Store上线了一个自己的iOS App,自己不是很满意,但也确实学习到一些经验。后续忙别的工作,就没有继续做更多App了。 27 | 28 | 在公司,我今年成功晋级T3高级设计师,算是一个期待了挺久,最终也顺利达成的目标。从进入腾讯到现在一共三年,每半年一次升级,都没有拉下,比较顺利,这过程中也要感谢周围的同事和领导。 29 | 30 | 今年我做了大小几十次演讲,两次公司级的演讲,两次部门级的和两次跨部门的分享。其实演讲也是一种需要大量练习才能习得的技能,我现在也只是做到了最基础:弄清楚目标听众是什么,吸引他们的注意,表达我的想法。最近看了很多罗胖的罗辑思维,整体的表达非常好,我自愧太不如,以后要在这一块多加练习。 31 | 32 | 今年我组织翻译和校对的书《众妙之门3》顺利出版,其实是去年一直在做的努力,在今年4月份终于有了圆满的结果。这个要感谢人民邮电出版社的编辑赵轩,感谢ISUX的小伙伴们~ 33 | 34 | 技术学习方面,粗而广地学了一些东西,nodejs、mongodb、objective-c、Angularjs、响应式流程等。我学技术的原则是熟练度可以不高,但原理和模式一定要理解。 35 | 36 | 读书方面,今年读了很多老书,开始书架重读计划,我觉得读书不能贪多和贪数字。 37 | 38 | 最后的最后,跟melody恋爱三年了,以前坐在我的自行车横杆,现在坐在我的副驾,我想,以后无论发生什么,我们也能一路走下去吧。 39 | -------------------------------------------------------------------------------- /yuguo.us/26岁生日快乐.md: -------------------------------------------------------------------------------- 1 | title: 26岁生日快乐 2 | 3 | date: 2015-03-23 12:59:41 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 26岁生日快乐 11 | 12 | **其他人看你做一件事情,跟你自己去做这件事,感悟其实是很不同的。**有两件事情,在受众看来就是很简单的,但是对于我尝试去实践的时候,觉得非常困难高深,心怀敬意。 13 | 14 | 这两件事情分别是管理和写作。 15 | 16 | 谈谈写作。在很多场景下我们都需要写作,在大公司中,我们要写短小的RTX,长一点的邮件,更长一点的分享文章,在外面我会写博客和[专栏](http://read.douban.com/column/226077/)。关于写作,我觉得最有趣的一个事实是,优秀的写作者跟平庸的写作者所能达到的效果相差百倍以上,比优秀程序员和平庸程序员之间的差别还大。 17 | 18 | 优秀的写作者的RTX就是能让对方明白他的目的,并且像施了魔咒一样去合作。优秀的写作者的邮件能让接受者感兴趣,清晰地知道信息。优秀的写作者写的博客能用一段话击中读者心理,情不自禁点右上角的“分享到朋友圈”……这种效果100个平庸的写作者都达不到。 19 | 20 | 写作者需要的只是除了文笔,还有逻辑思维、数据分析、麦肯锡金字塔理论、心理学等等几乎所有的知识,而且每一点知识上的卖弄都恰到好处。 21 | 22 | 还有管理。今天一位技术总监给我们培训管理课程。他是一个七年工作经验的技术总监,前后台技术都非常专精。但是他给我们说的第一句话是“管理是非常难的一件事情,我始终对这门科学心怀敬畏”。 23 | 24 | 最近在看一些管理的书,各种方法论和技术流派,不是看一两遍就是能掌握的,必须亲身去做。所以那些有很多精力和方法去做这些事的人,我都非常佩服。 25 | 26 | 其实所有的事情都是这样吧,**纸上学来终觉浅,绝知此事要躬行**,我只是恰好在践行这两件事而已。在写作这件事上,我能做的就是反复阅读写出来的文字,毫不吝啬地删除无用的信息。在学习管理这件事上,我能做的就是多阅读,多思考,多观察,并克服自己性格上的惰性。 27 | 28 | 这些很困难的事情,在有些人看来也许是觉得非常简单,甚至到了一定年龄就理所当然有能力去完成,我却觉得必须跟自己死磕才能做的好。 29 | 30 | 而有一些我觉得很简单的事情,在有些人看来却觉得似乎很了不起。比如今天生日很多人就会跟我说“才26岁,很年轻,取得的成绩很不错”。谢谢大家的祝福,我觉得已经做出的事情没有什么了不起的,运气有很大的成分。其实就在我身边带的新人也有很多有这样的潜力,所以我都会有鞭策自己的压力。 31 | 32 | 我现在还是一个很差的写作者和管理者,希望下一年能有所改善。 33 | -------------------------------------------------------------------------------- /yuguo.us/33号铺停止更新.md: -------------------------------------------------------------------------------- 1 | title: 33号铺停止更新 2 | 3 | date: 2015-03-23 10:45:59.300000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 33号铺停止更新 11 | 12 | 我遗憾地决定停止更新[33号铺](https://github.com/yuguo/33pu),最主要的原因是根据[淘宝新规](http://club.alimama.com/read-htm-tid-4369390.html),对于API权限有大幅度的削减,对于[API接口开发应用的准入条件](http://open.taobao.com/doc/detail.htm?id=139)修改为以下: 13 | 14 | * (一)申请调用淘宝客API接口的淘宝账户(以下简称为“开发者账户”)对应的阿里妈妈账户的淘宝客会员等级为金冠级别及以上; 15 | * (二)申请验证的网站(以下简称为“网站”)应在工业和信息化部信息备案管理系统进行网站备案; 16 | * (四)网站ALEXA排名在10万名及以内; 17 | 18 | 这几条严格的限制导致包括我本人在内的广大appkey都失去了淘宝客的权限,相信大多数中小网站的appkey也是如此。所以现在很多用33pu做后台的网站都会出现搜索不出任何结果的情况。 19 | 20 | 33号铺的原理是在后台通过API搜索淘宝的所有商品的佣金,然后一键添加到前台。现在失去了API权限,后台自然无法搜索出任何结果。小淘宝客玩家仍然可以在阿里妈妈的后台手动搜索,然后添加到自己的CMS中去。 21 | 22 | 我做33号铺的初衷就是希望可以帮助做出更多高质量的长尾淘宝客,所以不做自动抓取,专注体验和分类……但现在淘宝的策略是已经完全抛弃中小淘宝客了。这违背了我的初衷,所以我不再更新了。 23 | 24 | 做33号铺的过程也是非常有意思的,33号铺也冲上过github的PHP排行榜,在github榜上看见中国人的程序还是很开心的。33号铺还上了[Codeigniter中国](http://codeigniter.org.cn/news/project_33pu)的首页推荐,也非常开心。 25 | 26 | 最终我没有从33pu中获得任何金钱的奖励,但对我而言,我已经获得了极大的奖励。过程即奖励。 27 | 28 | 最后,33号铺仍然保持开源,有权限的apikey仍然可以免费使用和修改我的代码,但我本人不再更新了。 29 | 30 | 对了,33号铺的群还是保持讨论,可以聊聊其它程序,或者营销类、编程类的话题,群号码:230831981,敲门砖”33号铺“。 31 | -------------------------------------------------------------------------------- /yuguo.us/6月荐书单.md: -------------------------------------------------------------------------------- 1 | title: 6月荐书单 2 | 3 | date: 2015-03-23 10:45:57.691000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 6月荐书单 11 | 12 | 6月读的这几本书很值得推荐。 13 | 14 | ## 清醒思考的艺术 15 | 16 | 是一本关于思维误区的书,大概是今年读到的最好的书了,本书分为几十个小章节,每章讲了一个“思维误区”。有一些思维误区众所周知,比如《影响力》里面的从众心理、赠与-回馈心理。还有一些不是那么众所周知,但是更加重要的思维误区,比如团队里的会议,为什么大家倾向于不说出自己的意见,这是因为一方面没有人想做一个(永远的)捣蛋鬼,另一方面人们会认为如果大家都达成一致的意见,而自己有所异议的话,一定是自己错了。这个思维误区的解决办法是如果自己有异议,一定要说出来,而作为领导,则总是要指定一个人表达他的否定观点。 17 | 18 | 还有一章印象很深,叫“干掉你的宠儿”,意思是说我们每个人都有自己很喜欢、很确认的观点,比如对于之前的我,就有一个观点是html5的app很好,可以跟原生代码做一样的事情。拥有这样的“宠儿”会妨碍我真正地去做调查和学习,我会自动忽略那些说html5不好的信息,而增强那些说html5好的信息。这样就无法很客观地思考,觉得所有的信息都在说html5很好。避免思维误区的办法就是“干掉你的宠儿”,查找资料的时候总是试图证明自己是错误的,而不是证明自己是正确的。 19 | 20 | ## 盛夏的方程式 21 | 22 | 东野圭吾的最新推理小说,四星推荐,在诡计上不如《嫌疑人X的献身》,但东野的脑残粉不可错过。 23 | 24 | ## 为什么中国人勤劳而不富有 25 | 26 | 非常非常不错的一本书,五星推荐,作者的观点和表达方法都绝佳,堪称最好的经济学书之一,跟之前的《王二的经济学》很像。 27 | 28 | 本书最主要的观点是中国的制度没有保护私有财产,在资金流动上没有鼓励资源有效的配置……而信息时代的财富主要是由制度决定的,所以中国现在真的进入很危险的阶段。中国目前还可以凭借廉价的人力成本、丰沛的出口需求(逐年下降了)、制造业来拉动经济增长,但未来更大的增长点在于内需、更高的人力成本、服务业等…… 29 | -------------------------------------------------------------------------------- /yuguo.us/Kindle Paper White——五星级产品.md: -------------------------------------------------------------------------------- 1 | title: Kindle Paper White——五星级产品 2 | 3 | date: 2015-03-23 10:45:58.860000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # Kindle Paper White——五星级产品 11 | 12 | 使用了新的kindle paperwhite一段时间之后,我爱死这台电子书了。 13 | 14 | kpw是亚马逊出的最新电子书主打产品,目标群是重症阅读用户、希望随时随地阅读的用户。 15 | 16 | kpw是阅读者的随身物件,不是需要供奉的宝物,所以不建议购买皮套,甚至贴膜。它应该随时出现在你的背包、口袋中,方便阅读,而不是小心翼翼地供奉。日版kpw才600左右,皮套要200。 17 | 18 | 建议买了kindle之后刷一个多看系统,因为多看书城的中文电子书更多一点,而且也经常有新书上架。kindle里不能直接购买多看电子书,但是可以把链接发送到邮箱,然后电脑上或者手机上购买。我更喜欢的流程是在手机多看app书城浏览购买好电子书,使用苹果内购直接付款,然后再在kindle的个人中心下载。 19 | 20 | 一个月来我买了27本书,大部分是6元的,也有12元和18元的。算起来还是比纸质书便宜很多,更重要的是通过这个设备我可以马上拿到这本书,并且可以一步步,看下去。 21 | 22 | 有一些书很好看,很值得,还有一些不那么好看,也没关系。多看时支持试读的。 23 | 24 | 多看书城有一个设定是我每买一本书就可以获得这本书的推荐链接,通过这个邀请码注册的新用户可以免费获得这本书,下面我发一些我觉得很好的书的邀请码: 25 | 26 | 《盛夏的方程式》(东野圭吾新书) 988PAC45192F 《了不起的盖茨比》 8DAP9508F4F2 《瓦尔登湖》 1BEP23E0F805 《爸爸爱喜禾》 F4AP030E0DA5 《清醒思考的艺术》(非常喜欢) C4FPFEEFB205 《极简欧洲史》 4F9P43F40A32 《黄瓜的黄,西瓜的西》 96EP942FC70C 《安静,内向性格的竞争力》(非常喜欢) EE9P92B8320A 《APP创富传奇》 864PC93C5461 。。。 27 | 28 | 比起上一代同类产品kindle3(也叫kindle keyboard)有这几个优势: 29 | 30 | * PPI更高,字迹圆润清晰,虽然比不上iphone retina,但是阅读已经完全没问题了。 31 | * 体积更小,因为去掉了物理keyboard,所以放在口袋是没问题了。 32 | * 增加了背光灯!在阳光下看不出来有背光存在,而光线稍暗一点的时候能看到电子书的屏幕上发出淡淡微光,在完全黑暗的夜晚就显得很明亮了,可以当小手电筒用。 33 | * 响应速度更快,翻页更快。 34 | 35 | kpw不适合以下用户: 36 | 37 | * 希望浏览网页,或者玩游戏; 38 | * 希望阅读和处理移动文档(word、pdf等)。 39 | 40 | 这是我的多看阅历统计图: 41 | 42 | ![](http://ww2.sinaimg.cn/large/79b328c9jw1e5t9q7ci0dj20l20rewfn.jpg) 43 | 44 | 早上平均6点半起床后看书,然后班车上是8点20到9点,中午有一个高峰期是吃完饭12:30到1:30,下午的高峰期是7点的班车上,晚上的高峰期是10点入睡前了。不过最近忙于几个app的制作,看的少了一点。 45 | 46 | 最后是购买建议,国行的价格是849,简直是坑爹了。建议海淘,注册一个海淘网站,支付一点转运费,然后在日本亚马逊上购买日版kwp,到手才600左右。 47 | 48 | 如果觉得海淘麻烦,或者不懂日文,可以来我本人的淘宝店下单,640直接寄到你家里。 49 | 50 | ## [http://item.taobao.com/item.htm?spm=a1z10.1.w137644-274570537.2.3C4jrE&id=20986547732](http://item.taobao.com/item.htm?spm=a1z10.1.w137644-274570537.2.3C4jrE&id=20986547732) 51 | 52 | 因为亚马逊限购,也不能合单转运,所以要提价了。 53 | 54 | 640太低了,亏本的厉害,做不到,调整了价格,具体以淘宝店为准,抱歉。 55 | -------------------------------------------------------------------------------- /yuguo.us/QQ空间的勇敢开发者.md: -------------------------------------------------------------------------------- 1 | title: QQ空间的勇敢开发者 2 | 3 | date: 2015-03-23 10:45:57.243000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # QQ空间的勇敢开发者 11 | 12 | 前几天正好是腾讯正式入职3周年,当时在QQ音乐打杂一段时间,次年3月正式入伙QQ空间。 13 | 14 | 从最开始的分啥任务就做啥任务,到现在有更多地时间和意识去关注产品,我觉得自己心态上的改变还是挺大的。 15 | 16 | 昨天在v2ex有个帖子[请允许我表达一下对 QQ 空间团队的不满与忿恨](http://v2ex.com/t/77060#reply32),我认真地看完了之后,心里的第一反应就是“有些事情我们可以做得更好点”。 17 | 18 | 不是“我也是QQ空间团队了你怎么这样骂我”,也不是“我也做不了什么还是闪了吧”,而是潜意识里有责任,马上回复“我可以解决和反馈”。 19 | 20 | 我没有任何划分阵营的感觉和意识,但是很奇怪,很多网友都会自己是v2ex用户,莫名的优越感。其实平台跟人的关系真的不大。若说到v2ex跟QQ空间不能有交集,那是自己的世界观太狭隘了。 21 | 22 | v2ex的老板@livid的很多对论坛规则的设定,和一些号召都对我有不小的影响,比如[他真的是一个很聪明的人](http://v2ex.com/t/74511#reply83)中的原话“这个世界有太多人意识不到自己是在浪费时间。” 23 | 24 | 比如[请大家不要在 V2EX 用排队形的方式回复](http://v2ex.com/t/76799#reply68)中的回复:“你在互联网上留下的这些痕迹,究竟有哪些是有意义持续存在的。” 25 | 26 | 我年轻的时候世界观也不怎么完善,而且做了不少浪费时间的事情。现在年纪大一点,总是很在意自己是不是在浪费时间。现在偶尔能看到自己几年前的一些痕迹,感慨自己当年的幼稚,今天看到年轻人在论坛的发帖,一样的感慨。 27 | 28 | 后来我留下QQ跟楼主聊了一会,记录了几个问题,之后又有别的用户来加我聊天。 29 | 30 | QQ空间有亿万级别的用户,哪怕一点点的优化也会改善很多人的体验,其实我对这种数据和措辞都麻木了。因为“用户”这个词常常在耳边环绕,就不会觉得他们是“人”了,会觉得是数据,以万为最小单位的数据。 31 | 32 | 但是跟用户直接的沟通会让我脑补用户的使用画面,有个v2ex网友加我QQ反馈他女朋友每次点开原创动态,再关闭的时候,背景音乐就停止了。我马上想象一个喜欢在QQ音乐听歌的妹子,在点开原创动态的时候,音乐突然停止的画面,就再次打开音乐,再点原创,又停止……问题很严重有木有! 33 | 34 | QQ空间是一个非常巨大的产品,背后的团队是大几百人(可能快到1k了),这时候工程师可能会很沮丧,会有“我也做不了什么,推不动,干脆摆烂,反正打份工”的想法。 35 | 36 | 有一句话是说,最勇敢的事情是认清了生活的真相之后依旧热爱生活。 37 | 38 | 其实从刚进入职场的的初生牛犊,觉得什么问题都能解决,什么问题都去反馈,到现在,**渐渐认清自己能力和影响力的边界,认识到团队的不完美,认识到流程的局限,但是仍然热爱自己所做的产品,在自己的能力内,一点一点让产品变好,我觉得这就是勇敢**。 39 | 40 | 我的QQ是 289796721 ,使用QQ空间(特别是个人中心)有任何问题都可以找我聊,请注明“QQ空间反馈”。 41 | 42 | 好久没写这么鸡汤的日志,先干为敬…… 43 | -------------------------------------------------------------------------------- /yuguo.us/iOS界面开发-API设计.md: -------------------------------------------------------------------------------- 1 | title: iOS界面开发-API设计 2 | 3 | date: 2015-03-23 12:59:39 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # iOS界面开发-API设计 11 | 12 | 要了解如何开始iOS界面开发,你需要有的基础知识包括: 13 | 14 | * 基本的Objective-C语法(1小时) 15 | * iOS开发中的MVC模式和方法(2小时) 16 | 17 | 如果你对这二者不太了解,但你有一定的编程基础,可以看看[http://v.youku.com/v_show/id_XNTQxMzA2NTMy.html](斯坦福大学公开课)。 18 | 19 | 下面就可以开始设定iOS界面API了。 20 | 21 | # 界面分离 22 | 23 | 在大型项目中,界面会有三种方式承载在项目中:nib,或者storyboard,或者编程的方式绘制。 24 | -------------------------------------------------------------------------------- /yuguo.us/iOS界面开发.md: -------------------------------------------------------------------------------- 1 | title: iOS界面开发 2 | 3 | date: 2015-03-23 12:59:40 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # iOS界面开发 11 | 12 | 过去一个月我都在推进团队项目流程上的改变:把APP界面和逻辑分开开发,让两个团队去做自己擅长的事。 13 | 14 | 为什么要分离界面和逻辑?传统的iOS开发流程是这样的: 15 | 16 | 1. 设计师设计完PSD稿之后,做好标注,切出各种状态的图片,给到开发。 17 | 2. 开发拿到切片,根据标注设计稿和切片,同时实现实现界面和逻辑。 18 | 19 | 从工程质量和进度上讲,有这样几个问题: 20 | 21 | 1. 开发周期长。因为一个开发要同时完成界面和逻辑的部分,所以二者只能串行进行,需要较长的开发期。如果发生了设计或者逻辑的变更,他会需要更多的时间去修改。 22 | 2. 代码耦合强。一个人去实现一个模块的时候,代码中难免出现耦合比较强的情况,没有很好地MVC分离。这为后期的修改带来了隐患。 23 | 3. 沟通成本高。因为设计师跟开发人员之间是通过标注和切片来沟通,但是标注首先就是很不可靠的,一个标注了所有间距的设计稿往往并不是我们需要的,我们需要的是一些常量,以及当界面发生变化时的“规律”。再比如标注了按钮与按钮之间的距离是20px并无意义,因为按钮周围可能会有空白区域。如果开发人员迷信标注上的数字,在代码中直接写标注的数字,就会和设计稿效果出现很大的偏差。 24 | 4. 设计还原质量低。因为开发在逻辑、健壮和成本上有非常敏锐的把控能力,但是再设计还原和用户体验方面的经验就略差一些。而且由于设计师和开发沟通之间的问题,还有开发时间紧急的问题,代码耦合的问题,综合导致设计还原的质量低。 25 | 26 | 所以我希望推进的流程是从web开发中借鉴经验,让我们原本擅长用户体验的前端同学来进行APP界面开发,整个流程大概是这样: 27 | 28 | 1. 界面开发拿到需求单和设计稿之后,跟逻辑开发一起沟通明确哪些界面是新做,哪些可以复用界面或者组件。 29 | 2. 界面开发对于修改已有的界面,而无需动逻辑的,直接修改提测。 30 | 3. 界面对于新增的界面和逻辑,跟逻辑开发约定API之后,自己在view中实现API的细节,并且在controller中使用假数据来提醒开发如何使用API。逻辑开发则同时启动工作,关注后台和APP逻辑,涉及视觉层就调用约定的API。 31 | 4. 界面和逻辑一起在测试环境上联调。 32 | 33 | 关于API的制定和沟通细节,在后面的文章会单独讲。 34 | 35 | 理想状态下,这个方案能解决上面的所有问题。 36 | 37 | 但是在大公司推进新的流程往往不会很容易,仔细分析下,会有这样几个风险点: 38 | 39 | 1. 前端同学自己的iOS开发能力不够,造成项目延误或者bug骤增。 40 | 2. PM不信任前端同学的能力,担心bug骤增。 41 | 3. 开发leader不信任前端同学的能力,担心项目延误。 42 | 43 | 其实信任是相对的,如果没有经验和产出,空口无凭让人信任是很难的。好在我曾经有iOS APP上架的经验,团队里还有一位Android开发经验的同学,所以就尝试在一个小项目中开始接入。从产品和设计入手,他们是最希望改进产品质量的人。然后拉开发leader求着接入代码权限,算是取得了小小的一步进展。 44 | 45 | 要在任何流程中做出改变,推进自己的理念,自己一定要让所有人都觉得比以前更舒服。所以第一点是要做超出自己责任外的事情,对开发而言,把界面的API第一时间给到他,跟他讨论,方便他设置信息。对PM而言,时刻主动反馈进度,在项目群里在互动沟通。第二点是对自己不熟悉的项目,反而要更快地输出成果,付出的代价就是自己要加倍工作。 46 | 47 | 比如自己评估一周可以完成的项目,就跟PM说预留一周的时间(甚至更短)。但是自己实际上工作可能不止是5天_8小时了,可能是5天_14小时。刚开始那段时间我基本每天都是9点以后离开。 48 | 49 | 说句比较鸡汤的话,要想人前显贵,必须人后受罪,还是很有道理的。 50 | 51 | 最终这个项目比较成功,跟我接口的开发对合作方式很满意,时间和质量上也让PM很满意,设计师更加高兴,所以一步一步,我终于能把自己的理念在更多、更大的项目中铺开,现在唯一的问题就是我们没有足够多的iOS和Android界面开发同学。 52 | 53 | 那就发个广告,腾讯ISUX招聘iOS和Android的界面开发,希望你: 54 | 55 | * 非常熟悉iOS或者Android的界面实现和动画效果 56 | * 熟悉界面相关的性能优化 57 | * 擅长沟通 58 | * 有推行MVC或MVP的理念 59 | * 为自己的APP运行在几亿手机里感到光荣 60 | * 有其它灵活的加分项 61 | 62 | 所以本篇文章算是一个预告,自己在过去的界面开发中积累了一些经验,所以后面会分几篇文章沉淀一下。大部分内容都是自己已经整理的一些资料,然后进行一些编排。我个人主要是负责iOS端的代码,所以经验也只适用于iOS。 63 | -------------------------------------------------------------------------------- /yuguo.us/《布道之道》.md: -------------------------------------------------------------------------------- 1 | title: 《布道之道》 2 | 3 | date: 2015-03-23 10:46:00.396000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 《布道之道》 11 | 12 | 最近看完了《布道之道》这本书,深有感触。本书讲的是如何在技术团队中推动一项新的技术或者流程或者工具,非常适合我们现在的状况。英文名是Driving Technical Change,非常质朴。 13 | 14 | 本书非常短小,分为四部分。 15 | 16 | 第一部分的前提是,我们要推广的是解决问题,而不是某一个特定的解决方案。所以如果我们容易走入误区:闷头思考自己的解决方案,而忽略了这其实是很多解决方案中的一种。就像我们说服别人的时候不希望别人固执己见一样,我们也要持开放的态度。为此,就必须保证自己的解决方案真的合适,再也找不到更好的方案了。 17 | 18 | 在推广自己的“道”的时候,往往会有一些人提出反对意见,本书中我们称他们“怀疑者”。 19 | 20 | 第二部分介绍了团队中的“怀疑者”大概都可以分为哪几种: 21 | 22 | * 孤陋寡闻型 23 | * 随波逐流型(这种类型其实很难说是怀疑者) 24 | * 般般挑剔型 25 | * 激情燃尽型 26 | * 时间紧迫型 27 | * 发号施令型 28 | * 不可理喻型 29 | 30 | 不是身边的每个人都可以很明确的归类到哪一类型,某人很有可能是轻微的激情燃尽型加上时间紧迫型。可以参考一下提示: 31 | 32 | 1. 孤陋寡闻型的人不可能同时是激情燃尽型的人; 33 | 2. 大多数人多少都有一点时间紧迫症; 34 | 3. 很难把随波逐流的人定性为怀疑者; 35 | 4. 不可理喻的人经常会伪装成其他怀疑者。 36 | 37 | 第三部分是最重要的部分,介绍了一些具体的方法。 38 | 39 | **取得经验** 40 | 41 | 也就是尽可能地了解自己需要推广的“道”,要做到无懈可击。要做到“专家”就要不断学习和更新,并且在实际中使用,不能纸上谈兵。 42 | 43 | 但要注意的是,从和蔼可亲的“专家”到高高在上的“万事通”,这中间只有一步之遥,区别就是看你能否倾听别人的意见。 44 | 45 | **传达理念** 46 | 47 | 有激情,但不激进;提建议,而不是中伤;多听,而不是多说。 48 | 49 | **展示技术** 50 | 51 | 百闻不如一见,说的多不如展示出来。 52 | 53 | **适当妥协** 54 | 55 | 其实没看懂这一章。 56 | 57 | **建立信任** 58 | 59 | 这是一个长期的工作。 60 | 61 | **公之于众** 62 | 63 | 开源到外部,然后反向推广到部门内部。因为人们倾向于认为“身边那个家伙不比自己强多少”,就像圣经里说的:“在自己的家乡永远成不了先知”。 64 | 65 | **注重合力** 66 | 67 | 把技术驱动改成商业驱动,找到商业上的进步点,然后让管理层来推动。 68 | 69 | “搭一座桥” 70 | 71 | 在现状和想要推广的“道”之间如果有一道鸿沟或者太大的差距,可以先推广一些“中间技术”。 72 | 73 | **来点刺激** 74 | 75 | 找到同事们身边的“痛点”,然后吸引他们。 76 | 77 | 第四部分是一些技巧策略,其实就是第三部分的操作遇到困难的时候的一些策略。 78 | 79 | 本身非常值得一看,特别是希望在自己的组内推广自己的想法的同学。 80 | -------------------------------------------------------------------------------- /yuguo.us/《编写可维护的JavaScript》——野生JavaScript程序员必读.md: -------------------------------------------------------------------------------- 1 | title: 《编写可维护的JavaScript》——野生JavaScript程序员必读 2 | 3 | date: 2015-03-23 10:46:04.021000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 《编写可维护的JavaScript》——野生JavaScript程序员必读 11 | 12 | 我是一个野生JavaScript程序员,我相信大多数JavaScript程序员都是野蛮生长,靠的是自身的好奇和勤勉。 13 | 14 | 什么是野生JavaScript程序员?我是这样定义的:基本靠自学;通过不停的`console.log`和对比来写出凑合能运行的页面;页面上充斥着全局变量;命名风格随心所欲,受到自学的其他语言的影响;调试异常困难;只能写出耦合度低的小型页面;配置数据和代码耦合紧密,修改数据困难;随处定义变量;随意注释或者不注释;有大量从stackoverflow拷贝的代码…… 15 | 16 | 对于野生JavaScript程序员,也许可以很开心地做自己的小项目,但当需要多人合作的时候,就会让团队陷入噩梦。因为“程序是给人读的,只是偶尔让计算机执行一下”,所以勉强能运行的程序不是我们的目标,我们的目标是写出可维护的JavaScript。之前也读过《代码整洁之道》,是针对所有语言的通用手册,比较泛泛而谈,但本书针对性很强,没有散弹枪,每一颗子弹都狙击到目标上:糟糕的JavaScript代码。 17 | 18 | 本书适合跟jslint配合使用,因为jslint能检查出很多人可能漏掉的细节:比如没有在`function`顶部就声明所有的变量,比如缩进,比如没有声明“strict mode”。 19 | 20 | 下面说说印象比较深的几章: 21 | 22 | 第6章 避免使用全局变量 23 | 24 | 我之前知道JavaScript变量如果没有用`var`来声明的话(而且全局没有同名变量),会隐式地创建全局变量,所以我就知道随处使用`var`,本身告诉我,“所有的var语句都会提前到包含这段逻辑的函数的顶部执行”,所以应该在函数的顶部定义所有的局部变量。 25 | 26 | 而且,由于JavaScript没有块作用域,所以在`for`循环和`if`中创建变量是没有意义的,都应该提前到函数的顶部去定义。 27 | 28 | 那么如何避免全局变量呢?本章提出了几种解决方案: 29 | 30 | * 避免意外的全局变量——声明“strict mode” 31 | * 单全局变量方式——把所有的功能都封装到一个对象中 32 | * 零全局变量——创建一个即时执行的匿名函数 33 | 34 | 第11章 不是你的对象不要动 35 | 36 | 说实话,我犯过这样的错误,我在创建一个iOS项目的时候,其中的webview的JavaScript代码需要在xcode的控制台输出信息,我就重写了`console.log`这个函数,当时觉得这个小聪明很方便,后来却给我带来了无尽的麻烦,总之我后来又创建了一个新的对象ios来专门做这件事。 37 | 38 | 第9章 将配置数据从代码中分离出来 39 | 40 | 也是血泪教训,数据(比如颜色,宽度等)耦合到代码中,修改的时候异常困难,所以本章建议单独创建一个配置对象来修改数据,并且还提供了一些工具来把java配置文件转化成json数据。 41 | 42 | 本书值得经常翻一翻,而且篇幅短小,是非常不错的床头技术书。 43 | -------------------------------------------------------------------------------- /yuguo.us/《编剧的艺术》.md: -------------------------------------------------------------------------------- 1 | title: 《编剧的艺术》 2 | 3 | date: 2015-03-23 10:45:50.643000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 《编剧的艺术》 11 | 12 | 最近读了一本编剧入门的经典教材《编剧的艺术》,这本书非常好,让我对创作有了新的认识。 13 | 14 | 任何书,任何戏剧,任何ppt,任何文章……人类创造的任何优秀的作品,都有一个共同点:“一个明确的前提”。 15 | 16 | 小时候我们语文课作业经常是“概括本文中心思想”,这给我们一个错觉:中心思想是事后提炼出来的。 17 | 18 | 其实不然,中心思想也就是《编剧的艺术》一书中所定义的“前提”,是在创立之初就必须明确的。 19 | 20 | 创作者必须确定一个清晰明确的前提,可以是一句简单的话。比如《罗密欧与茱丽叶》的前提是“伟大的爱情战胜一切”。然后在整个作品的创建中时刻坚守这一前提,任何人物和情节都必须服务这一前提,如果想到一个特别有趣的情节,但是跟前提没有关系,就必须放弃掉。 21 | 22 | 整个作品中的一切都要服务于前提。 23 | 24 | > 法国著名雕塑家罗丹,精心雕塑了一座文学家巴尔扎克的像:巴尔扎克目光炯炯,身披宽袖长袍,一双手非常自然地叠合在胸前。罗丹唤来了自己的三个学生来欣赏他的得意之作。不料,三个学生不约而同地被雕像上这双栩栩如生的手吸引住了,连声赞叹:“好极了,这真是一双奇妙的手啊!”罗丹从学生的表情中感到这双手虽然塑得绝妙,可是作为整体的一部分,太突出了,起了喧宾夺主的作用,因此,他找来了一把大斧,劈里啪地把这双手砍掉了。几个学生被罗丹的举动吓得目瞪口呆。 25 | > 26 | > 因为这个作品主要是表现和展示巴尔扎克的为人气质和精神特征,而不是表现这只手的,这只手虽然精美,但却冲淡了作品的主题,显然是多余的,应毫不犹豫地砍掉。 27 | 28 | 《编剧的艺术》这本书被称为戏剧编剧的经典教材,但我推荐给所有人阅读。从这本书里我学到很多创作的技巧,也能在看电影的时候分辨出那些空有漂亮的主演和华丽的情节,而根本没有明确的前提的烂片。 29 | 30 | 最后,所有好的书都可以用一句话来总结,但并不意味着只读这一句话就能有所收获,必须亲身去提炼,把书读厚,再把书读薄。 31 | 32 | 《编剧的艺术》这本书的前提是“可以通过明确的前提、丰满的人物和升级的冲突来创造出引人入胜的剧本”。 33 | 34 | 这一前提并不仅能用在戏剧创作,在创造ppt的时候也可以使用这一前提,首先确定整个ppt的前提,然后每一页都服务于这一前提。 35 | 36 | 最后做一下广告,我在豆瓣新开了一个专栏[《谈谈全栈工程师》](http://read.douban.com/column/226077/),会每周发表一些关于“全栈工程师(full-stack developer)”的话题,欢迎订阅。但是现在还没有正式发布的功能,我写的文章只能囤积在后台,订阅之后如果哪天能正式更新了就会在你的豆瓣帐号收到推送。 37 | -------------------------------------------------------------------------------- /yuguo.us/不可以放弃的事情.md: -------------------------------------------------------------------------------- 1 | title: 不可以放弃的事情 2 | 3 | date: 2015-03-23 10:45:56.107000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 不可以放弃的事情 11 | 12 | ![](/files/2013/08/supper.jpg) 13 | 14 | 前一段时间看到一篇文章[萦在职场:哪些东西不能因为工作而放弃?](http://finance.qq.com/a/20130802/003566.htm),里面有一段话说的很好: 15 | 16 | 17 | 精疲力歇主要是由于愤怒。要想战胜这种情绪,你需要知道究竟因为失去了什么导致你产生这种感觉。我会告诉人们:找准自己的节奏。所谓节奏就是一些对你很重要的事物,如果失去了这些东西,你就会厌恶工作。 18 | 19 | 20 | 对于我来说,不可以因为工作放弃的事情就是家里的晚餐。如果工作量太大,我可以接受早上提前两小时上班,但是不可以接受晚上不在家吃晚餐。 21 | 22 | 在食堂吃饭总是一股浓浓的快餐味道,不仅是味道,而且是食堂整体给人的一种流水线感觉,吃饭只是为填保肚子。所以即使在食堂吃海鲜也有一种为生计奔波的味道,赶紧填饱肚子继续干活去。在家吃饭就没有这种填饱肚子的“功利性”,可以享受这个过程。 23 | 24 | 在饭店吃饭也有诸多不安,一方面食品卫生得不到保障,另一方面超过大半的饭店都没有家厨做的美味,家有大厨,能把土豆烧肉做成人间美味,更不提各种变着花样的菜谱。 25 | 26 | 也不奢望每天都能在家吃,工作五天,能够在家吃3天,就谢天谢地了。 27 | 28 | 这就是我不可以放弃的事情。 29 | -------------------------------------------------------------------------------- /yuguo.us/介绍Reveal.js.md: -------------------------------------------------------------------------------- 1 | title: 介绍Reveal.js 2 | 3 | date: 2015-03-23 10:45:55.634000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 介绍Reveal.js 11 | 12 | jQuery reveal是最近在用的一个jQuery插件,作用是控制弹出层的显示和消失。这个插件非常轻量,而且使用简单,如果页面中已经加载了jQuery的话,只需要额外1.35k的大小就能使用reveal.js。 13 | 14 | 使用方法可以在其[官方网站](http://zurb.com/playground/reveal-modal-plugin)上看到介绍。 15 | 16 | ## 链接触发浮层 17 | 18 | 首先加载需要的样式、jQuery和reveal.js之后,我们如果需要点击一个链接弹出一个弹出层,只需要在链接中加上`data-reveal-id`属性: 19 | 20 | 然后在对应弹出层的id跟链接的`data-reveal-id`保持一致即可。 21 | 22 | 浮层一般会有一个关闭按钮,我们不用在按钮上绑定事件来关闭浮层了,只需要简单地使用class:`close-reveal-modal`即可。 23 | 24 | ## 代码触发浮层 25 | 26 | 有时候我们希望用代码来触发浮层操作,也非常简单: 27 | 28 | 如果要使用html属性来触发这些option,也可以: 29 | 30 | 总的来说,使用reveal.js插件可以帮助我们更专注于页面逻辑,也不用在页面事件和触发上操太多心。 31 | -------------------------------------------------------------------------------- /yuguo.us/使用HTML5构建iOS原生APP(5).md: -------------------------------------------------------------------------------- 1 | title: 使用HTML5构建iOS原生APP(5) 2 | 3 | date: 2015-03-23 10:46:03.491000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 使用HTML5构建iOS原生APP(5) 11 | 12 | 我的app基本上是由一个原生的navigation controller贯穿全局,然后在每一个scene中都有一个主要的`UIWebView`作为主要逻辑: 13 | 14 | 15 | - (void)viewDidLoad{ 16 | ... 17 | self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(.0f, 0.f, self.view.bounds.size.width, self.view.bounds.size.height -44)];//-44是减去标题栏高度 18 | self.webView.delegate = self; 19 | ... 20 | [self.view addSubview:self.webView]; 21 | 22 | } 23 | 24 | 25 | 现在的问题是,当手机翻转的时候,webView的大小不会重绘,就会出现bug,解决办法很简单,就是实现翻转委托: 26 | 27 | 28 | - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 29 | NSLog(@"I have finished rotating"); 30 | self.webView.frame = CGRectMake(.0f, 0.f, self.view.bounds.size.width, self.view.bounds.size.height)); 31 | } 32 | 33 | 34 | 就可以了,然后在webView中做好宽度自适应: 35 | 36 | 37 | 38 | 39 | 40 | ## 备注 41 | 42 | 介绍一下view的三种坐标属性: 43 | 44 | Frame A view’s frame (CGRect) is the position of its rectangle in the superview’s coordinate system. By default it starts at the top left. 45 | 46 | Bounds A view’s bounds (CGRect) expresses a view rectangle in its own coordinate system. 47 | 48 | Center A center is a CGPoint expressed in terms of the superview’s coordinate system and it determines the position of the exact center point of the view. 49 | -------------------------------------------------------------------------------- /yuguo.us/使用HTML5构建iOS原生APP(6)——禁止链接呼出菜单.md: -------------------------------------------------------------------------------- 1 | title: 使用HTML5构建iOS原生APP(6)——禁止链接呼出菜单 2 | 3 | date: 2015-03-23 10:46:01.350000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 使用HTML5构建iOS原生APP(6)——禁止链接呼出菜单 11 | 12 | 一行css足矣: 13 | 14 | 15 | html,body{-webkit-touch-callout: none;} 16 | 17 | 18 | 对于web页面和webView均适用。 19 | -------------------------------------------------------------------------------- /yuguo.us/前端工业化3:VCS.md: -------------------------------------------------------------------------------- 1 | title: 前端工业化3:VCS 2 | 3 | date: 2015-03-23 10:45:52.815000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 前端工业化3:VCS 11 | 12 | 任何慎重地对待编程的程序员和团队都会使用VCS(主要是Git或者SVN),主要有这样几个作用: 13 | 14 | * 对于程序员个人,记录代码避免丢失,方便查看修改并回溯,分支同一个代码仓库中的不同需求,记录小型里程碑 15 | * 对于团队协作来说,VCS的自动合并能省去我们95%的合并代码工作量 16 | * 对于代码审查者来说,方便监视主干代码的修改,并接受或者拒绝提交的代码 17 | * 通过使用一些行为钩子,可以在VCS行为之前或者之后自动触发其它事件 18 | 19 | 我在加入ISUX团队之前是一个菜鸟学生,从来没有使用过VCS,对于当时的我来说,SVN就只有一个作用:**合并代码到主干**。 20 | 21 | 所以当时的我既累又容易出错,因为我使用SVN的方法完全错误: 22 | 23 | * 在trunk上直接开发 24 | * 完成一个完整的需求才commit一次 25 | * 只commit这个需求需要的文件和代码,人工检查 26 | * 代码库中残留越来越多没有提交的脏代码 27 | 28 | 我没有利用到SVN的其它功能:频繁记录代码里程碑,多个分支切换,让这些外部信息从大脑里释放,保持代码库的干净。但是随着我需要接入的项目越来越多,越来越需要快速在多个项目切换,并且也开始使用其它VCS(Git),我开始对VCS有了更好的理解。**VCS并不只是帮助代码合并的团队工具,也是个人管理代码的很好方式。** 29 | 30 | 我现在非常喜欢使用Git管理版本,因为它跟SVN有一个完全不同的地方是它是分布式的,完整的代码库存在在每一台部署了代码库的机器上,我在本地切换分支,新建分支非常快,秒级生效,而且无需网络就可以commit代码。最后,世界上最好的开源代码社区是使用Git搭建(Github),你还有什么理由不使用Git呢? 31 | 32 | 关于各种VCS的用法和实践,其实我不用在本文一一说明,因为资料已经太多。推荐阅读: 33 | 34 | 1. [Git分支管理策略](http://www.ruanyifeng.com/blog/2012/07/git.html)。 35 | 2. [SVN最佳实践](http://www.tigris.org/scdocs/SVNTips.html.zh-cn) 36 | 3. [Git flow开发流程](http://ihower.tw/blog/archives/5140) 37 | -------------------------------------------------------------------------------- /yuguo.us/卓有成效的管理者.md: -------------------------------------------------------------------------------- 1 | title: 卓有成效的管理者 2 | 3 | date: 2015-03-23 10:45:49.570000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 卓有成效的管理者 11 | 12 | 最近在和菜头的公共账号里看到一篇文章《Netflix文化:自由与责任》,该文翻译自Netflix的PPT,阐述了明星IT公司Netflix的企业文化: 13 | 14 | > **用市场最高价格雇佣高效能人士组成团队。** 15 | 16 | 我的观点是,对于脑力劳动者的自我修养,这些看法值得我们学习,但是**对于管理者,这一文化纯属心灵鸡精,并没有可操作性,高效能的管理者并不奢求完美的人才,他能让平凡的人成就不平凡的事业。** 17 | 18 | 在德鲁克的经典管理书《卓有成效的管理者》里面,他建议管理者学会这么一种创建组织的方式:若某人在某一方面具有特长,就要让他充分发挥这一特长。而不应该期望另寻万能的天才来达成绩效。这本书堪称提高脑力劳动者专业度的圣经。 19 | 20 | 值得在最开始就明确的是,本书的“管理者”的定义并不是以他有没有下属而定,而是看他是否能做决策,并承担起做贡献的责任。本书的英文名《The Effiective Executive》中Executive既有传统的“管理人员”的意思,又有只负责执行而不负责判断的“执行者”的意思。所以在本书和本文的语境下,请牢记这一点:管理者泛指工作者、经理人员和专业人员,由于其职位和知识,他们必须在工作中做出影响整体绩效和成果的决策。**所以程序员也属于管理者。** 21 | 22 | 其次我们要明确的是什么是“有效”,为什么“有效”很重要。在旧的社会中,在脑力劳动者没有占据社会这么大比例的时候,管理者的“有效”并不是一个很难评估的指标。因为在体力劳动的社会,无论是执行者还是小的领导(可以认为是监工),他们要做的事情是固定的、可衡量的,而最优秀的人和平均的人的产出差别也不会超过两倍,所以雇员是否有效是一目了然的事情。但是在现在,管理者是否“有效”是一个很难回答的问题。程序员的产出是代码,但实际上是他思维的表现,他坐在桌子前思考,没有人知道他在思考工作还是思考今天的晚餐。而高效能的管理者的成果能比一般管理者高出十倍以上!所以现在一个管理者是否有效是一个非常重要的问题。 23 | 24 | 有天生的管理者吗?我在上学的时候觉得自己这辈子应该做不了管理类的工作,因为我不是对人会很热情很自来熟的类型。我没有办法很快记住一个人的名字,也有点脸盲,在团队中也不是会说很多话的人。我喜欢专注做事情,我以为我会一辈子搞技术。 25 | 26 | 但是管理者的有效性不是天生的。假如卓有成效是一种天赋,那就糟糕了,今天的大型组织的文明,所依赖的是大批具有一定有效性而且可以担任管理者的人。事实上,卓有成效的管理者并无性格上的共性,唯一的共性就是他们要经过长期的训练,从而养成五个思维上的习惯。 27 | 28 | 这五个思维习惯是本书的核心,环环相扣,非常经典。 29 | 30 | 1. 有效的管理者知道他们的时间用在什么地方。 31 | 2. 有效的管理者重视对外界的贡献。 32 | 3. 有效的管理者善于利用长处,包括自己的长处、上司的长处、同事的长处和下属的长处。 33 | 4. 有效的管理者集中精力于少数重要的领域,在这少数重要的领域中,如果能有优秀的绩效就可以产生卓越的成果。 34 | 5. 最后,有效的管理者必须善于做有效的决策。 35 | 36 | 每一条都会花一章的时间来展开说明,每一章都有些让我醍醐灌顶的部分。比如“有效的管理者重视对外的贡献”: 37 | 38 | > 重视贡献,才能使管理者的注意力不为其本身的专长所限,不为其本身的技术所限,不为其本身所属的部门所限,才能看到整体的绩效,同时也才能使他更重视外部世界。 39 | 40 | 你们感受一下。 41 | -------------------------------------------------------------------------------- /yuguo.us/我从《炉石传说》学到的.md: -------------------------------------------------------------------------------- 1 | title: 我从《炉石传说》学到的 2 | 3 | date: 2015-03-23 12:59:41 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 我从《炉石传说》学到的 11 | 12 | 过去的两个星期从接触《炉石传说》开始上瘾,然后一个星期也只是打到天梯10级。5月赛季开始之后学会了自己的思路和配牌方法,开始越来越稳。 13 | 14 | 《炉石》是暴雪出品的一款联网卡牌游戏,我认为无论是从游戏性还是商业模式来看,它都是一款极其成功的游戏。 15 | 16 | 从游戏背景上来讲,它是基于《魔兽争霸》和《魔兽世界》为背景,卡牌中的角色和武器还有配音都是延续魔兽世界风格,这就奠定了它庞大的粉丝基础。在游戏策略上,是很多样丰富的,每个角色有自己的特点(猎人的特点是大量动物和陷阱,还有稳固射击),而且每个角色都有多种战术(战士可以无限顶盾做防战,也可以卖血之后狂暴一击)。 17 | 18 | 从商业模式上来讲,每个新玩家会有一些基础卡牌(基础,或者容易得到的白色),但是需要有所提高就需要更多高级卡牌(蓝色、紫色、橙色)。在网上看其他人的攻略也可以,但是很容易其他人有的卡牌你没有,这时候就需要去购买卡牌包。重点来了,你买来的卡牌包会随机开出5张卡,基本不是你需要的。这时候要么继续开包,等待好运降临,或者找个替代品,或者把已有的大量卡牌分解掉然后得到一张自己需要的。卡牌包是很贵的,平均一包也要几块钱,或者自己慢慢做任务打金币。 19 | 20 | 我个人的感觉是,完全不花钱,这游戏会比较难玩。网上有攻略是建议买400块钱的卡牌包,然后全打开之后就会有不少战术的核心卡牌了。把金色分解掉,然后有大量奥术之尘可以凑自己的战术。我没那么多钱,开了个60块的包,分解了一张金色紫卡也得到400奥术之尘,后面可以合自己需要的蓝卡了。 21 | 22 | 废话少说,谈谈我从《炉石》学会的几件事。 23 | 24 | ## 单卡的能力不等于套牌的能力 25 | 26 | 对战双方无论土豪还是屌丝,都只能选择30张卡入场。我现在的一套猎人蓝白套牌,可谓每一张的单卡能力都不强,但是我经常战胜各种橙卡对手。 27 | 28 | 一套好的卡牌有自己的消费曲线,映射到团队来讲就是团队成员有各自擅长的能力,能很好的帮助团队成长。而如果用一个能力更强的人来替换一个适合团队但能力不怎么强的人,也许团队实力反而会被削弱。 29 | 30 | 彼得德鲁克的《卓有成效的管理者》中有一章是说,作为管理者,在管理员工的时候,不期望也不去追求天才员工,而是让平凡的员工聚集在一起,创造不平凡的事业。 31 | 32 | ## 套牌有自己的哲学和侧重 33 | 34 | 新建自己的一套卡牌的时候,会有一个默认名称比如“自定义 猎人”。但是我们不能把厉害的牌往里面塞就行了,首先需要有自己的一套哲学和重点,然后再选择成员。 35 | 36 | 比如猎人有各种陷阱,也有控场,也有抽牌和武器等。那么我选择控场作为套牌的核心思路之后,先把套牌名称改为“中速控场猎”,就放弃掉一些武器和陷阱,以期达到场面的最大优势。 37 | 38 | 映射到团队来讲就是团队要有自己的目标和哲学。团队的目标是什么,怎么达到这个目标? 39 | 40 | ## 三思而后行 41 | 42 | 打出每张牌之前多想10秒钟,胜率能提高50%。 43 | 44 | 你不知道你会面对什么对手 45 | 46 | 打天梯和匹配,或者竞技场的时候,对手永远是未知的。未知的职业和战术,所以你不能选择一套特别针对某套战术的套牌,你要考虑的是,大多数情况下,你都是有能力应付的。 47 | 48 | 同样的,对手也不知道他会遇到怎么样的你,双方都有出奇制胜的机会。 49 | 50 | ## 开局很关键 51 | 52 | 起手牌非常非常关键,你有一次机会换掉起手牌。相比来说,我更喜欢后手,一方面能够有4张卡牌来选择和替换,一方面还有幸运硬币。 53 | 54 | ## 避免乐极生悲 55 | 56 | 《炉石》是能够建立滚雪球优势的,但是它的未知性比《魔兽争霸》大的多,所以永远不要得意忘形。 57 | 58 | 面对猎人对手,如果你在场面占优的情况下贸然铺场3个随从甚至4个随从,很可能被对手一波秃鹫+关门放狗清掉,并且多了一把手牌。面对战士对手,也有可能被残血秒杀。 59 | 60 | 不是有绝对把握的话,保留自己的手牌,不要全部扔出去,这是你给对方带来恐惧和未知的最大因素。 61 | -------------------------------------------------------------------------------- /yuguo.us/我是怎么阅读的.md: -------------------------------------------------------------------------------- 1 | title: 我是怎么阅读的 2 | 3 | date: 2015-03-23 10:45:54.543000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 我是怎么阅读的 11 | 12 | 我平时的阅读包括读书和网上的文章,我记忆力不是太好,不可能达到过目不忘的程度,所以读了好书之后往往还会再多读几次。 13 | 14 | 关于笔记,下面这些办法都是为了方便第二次看的时候更快进入角色。 15 | 16 | 1. 关于电子书来源,我默认都是从多看上购买,如果amazon.cn上有多看上没有的书源,就切换系统去购买。一方面是因为购买很方便,时间就是金钱,另一方面电子书已经很便宜了,在能力可以的时候尽量还是去购买正版吧。 17 | 2. 在网上看到好的文章,或者查阅到有用的文章的时候,不使用read later类的服务,因为read later = read never。我会保存到evernote里去,然后在evernote里做一遍“沥水”的工作:去掉无关紧要的内容,去掉废话,把重要的部分高亮。 18 | 3. 看的过程中比较有感悟的地方做一下书摘,也可以导出到evernote。 19 | 20 | 这样的好处是以后可以统一在evernote里搜索相关内容,然后可以快速看高亮的部分。 21 | 22 | 此外,我认为最好的读书过程是每读完一章就用自己的话总结一下这一章说了些啥。读的过程中有书摘,方便第二次直接看书摘。 23 | 24 | [kindle paperwhite是迄今最好的阅读器](http://yuguo.us/weblog/kindle-paperwhite/)(也是最便宜的!),每一个喜欢读书的人都应该买一台,如果准备买的话,我左边有个广告链接,可以去我女朋友的淘宝店海淘一个。 25 | 26 | 关于阅读时间,早上在车上居多,晚上也会看一段时间,现在根据统计,每天的平均阅读时间已经降到40分钟/天了,之前是2小时/天。从5月份[重拾kindle](http://yuguo.us/weblog/repick-kindle/)之后,已经购买了42本书,大部分都看完了。 27 | 28 | 其实,最终我想说的是,读书的过程是很美,拿着kindle paperwhite在地铁上掏出来也恍惚有一种文艺青年的感觉。但是最终我们看重的应该是真正进入大脑的“无形”的知识,以及引起的思考,而我们付出的代价就是金钱和时间,金钱是廉价的代价,而时间是更大的代价。硬件只是书籍的承载,让你可以方便的阅读,如果把阅读搞得更麻烦了,就不要去做这件事。 29 | 30 | 所以,阅读的时候,时刻记住自己为什么阅读,就能放弃很多无谓的折腾,进入到一个纯粹的精神世界。 31 | 32 | 最后以一碗鸡汤作为结尾: 33 | 34 | > 有个年轻人崇拜杨绛,高中毕业的时候给杨绛写了一封长信,表达自己的仰慕之情兼倾诉人生困惑,杨绛给他回信了。淡黄色的竖排红格信纸,毛笔字。除了寒暄和一些鼓励晚辈的句子之外,杨绛的信里其实只写了一句话,诚恳而不客气:“你的问题主要在于读书不多而想得太多。” 35 | -------------------------------------------------------------------------------- /yuguo.us/我的第一个app上架了【限免3天】.md: -------------------------------------------------------------------------------- 1 | title: 我的第一个app上架了【限免3天】 2 | 3 | date: 2015-03-23 10:45:59.737000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 我的第一个app上架了【限免3天】 11 | 12 | 我的进度大概是这样的,去年11月开始学习做iOS开发,并且在本地调试。今年2月份注册开发者账号,开始真机调试,在5月初的时候程序1.0版完工准备上线了,然后打包提交。我等待了7天的时间之后,被苹果告知app的名字侵权。 13 | 14 | 因为我做的是英雄联盟的攻略app,所以我叫“联盟大师”,但是苹果说我的app名字或者描述或者元数据涉嫌侵权,让我改成“appname - for 英雄联盟”。 15 | 16 | 我就想那就不叫联盟吧,改成了“LoL攻略”,又提交等待了7天,告诉我还是一样的问题…… 17 | 18 | 我又改,那就叫for 英雄联盟吧,改成了“LoL攻略 - for 英雄联盟”,又焦灼等待了7天,还是不通过,已经习惯了好吗…… 19 | 20 | 最后无奈改成“撸大师 - for 英雄联盟”,这。下。大。家。满。意。了。吧! 21 | 22 | 就在昨天,终于通过了审核,乎~ 23 | 24 | 为庆祝第一个app上架,限免3天,8号恢复6元价格。 25 | 26 | 欢迎英雄联盟爱好者下载,求好评,求批评,如果实在有需求,我会继续更新!说真的,好评差评我都不会太介意,只要有人评价,我就有更新的动力了哦也~ 27 | 28 | 最后贴一下下载地址和二维码,欢迎下载: 29 | 30 | 31 | 32 | ![](/files/2013/06/lol-app.jpg) 33 | -------------------------------------------------------------------------------- /yuguo.us/新项目预研.md: -------------------------------------------------------------------------------- 1 | title: 新项目预研 2 | 3 | date: 2015-03-23 10:46:02.371000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 新项目预研 11 | 12 | 因为hex大人在[codeigniter官网](http://codeigniter.org.cn)推荐了33号铺,加上有一些用户在其他群里推荐33号铺,所以最近33号铺突然有一股热潮,导致我异常繁忙地处理各种安装问题。 13 | 14 | 事实上这些问题非常难处理: 15 | 16 | 1. 所有用户的服务器环境都非常非常不同,也有一些安装没按顺序来的,所以出现奇怪的bug 17 | 2. 用户一定要有编程基础,懂得如何创建数据库 18 | 3. 如果是Apache服务器的话,用户需要理解.htaccess来优化url 19 | 4. 代码如果有更新的话,用户非常难应用到自己的项目中,虽然可以用git来修改,但门槛也很高 20 | 5. 即使用户费尽千辛万苦总算在本地安装成功了,还需要去open.taobao.com创建并配置网站,以得到自己的appkey和appsecret 21 | 6. 最后如果要上线的话,用户需要购买域名和主机 22 | 7. 当代码出现bug我想要更新的时候,非常难通知所有的用户去更新 23 | 24 | 所以我想做一个新的更简单的项目,适合毫无编程基础的用户,可以免去上面所有的步骤: 25 | 26 | 这个项目是一个类似格子铺的网站,访客会看到很多格主的格子,里面有反映格主风格的各种商品,点击过去就可以购买。 27 | 28 | 那么这个格主是谁呢,她可能仅仅是一个喜欢漂亮裙子的女孩,需要做的非常简单 29 | 30 | 1. 她需要注册登录格子铺网站,可以用QQ登录,或者支付宝登录 31 | 2. 她创建一个格子,开始搜索并添加商品 32 | 3. 随后就会有收入了,她可以输入自己的支付宝账户,钱会自动打过去 33 | 34 | 一些技术细节:站点所有的淘宝客id都是我自己的淘宝客id,但是会带上所有用户自己的id,以让我分清楚哪些用户带来了哪些收入,随后会把收入转给你,我从中收取非常少量的手续费。这样是为了避免所有用户都要注册自己的开发者帐号(现阶段可以传入自己的pid,但10月以后淘宝会不再支持这个参数)。 35 | 36 | 当然33号铺项目还是继续维护,为了一些喜欢折腾的朋友。但对于不希望折腾的,希望总是用新的代码的朋友,你们有什么意见和建议呢? 37 | -------------------------------------------------------------------------------- /yuguo.us/有兴趣就够了吗?.md: -------------------------------------------------------------------------------- 1 | title: 有兴趣就够了吗? 2 | 3 | date: 2015-03-23 10:45:50.182000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 有兴趣就够了吗? 11 | 12 | 2012年我组织ISUX设计团队十来个人一起翻译了一本[《Smashing Book 3》](http://yuguo.us/weblog/isux-and-smashing-book/),后来我在腾讯大厦食堂上面一块简陋的幕布上分享图书出版背后的一些幕后故事的时候,两个毕业生小伙子联系到我,说他们很有兴趣翻译英文书,如果有机会就给他们关照一下。 13 | 14 | 我刚经历翻译一本书搞的每天睡眠不足的阶段,所以非常清楚翻译是很耗费时间和脑力的工作,阮一峰曾经翻译完《More Joel on Software》之后说到: 15 | 16 | > 话说今年8月份,我翻译完More Joel on Software,已经精疲力竭,对这种通过长时间击键,将英语改写为汉语的廉价体力+脑力劳动深恶痛绝,再也不想干了。 17 | 18 | 对,当时的我就是抱着再也不想干了的想法跟他们说,如果出版社有更多的需求,而你们有时间和兴趣的话,我就把任务转给你们。**但我是没有时间涉及到里面去了**。 19 | 20 | 后来出版社跟我说,有一本响应式设计流程的书。我觉得这个题材还不错,就转给这两个年轻人去翻译。他们评估之后觉得两个月应该能完成,我答应到时候帮他们校对一下。 21 | 22 | 但是结果他们出于各种各样的理由(搬家啦,参加其他活动啦,加班啦)延期交稿。延期了也不主动告知我原因,所有的沟通都是我主动去问,然后才告诉我延期了,保证下个星期交道,催了好几次确一拖再拖,耗费4个月的时间也没能完成各自预期的50%的工作量。我只好拉了其他人来帮忙剩下的部分。 23 | 24 | 而他们完成的那60%也只能算勉强及格,错译、漏译的情况常常出现,可能是能力问题吧,但给我的感觉却是根本就不上心的缘故。 25 | 26 | 直到现在,我还在收拾这个烂摊子,虽然这个项目本不该由我来主导,但既然我知道最终印出的书上会写上我的名字,我就有责任投入时间去做好它。 27 | 28 | 最后,我给所有**刚开始工作的年轻人**的建议: 29 | 30 | **老板给你任务,根本不关心你有什么理由,只关心你完成没有。** 31 | 32 | 扯一些理由(特别是私人的理由)根本就是不专业的态度。不要说自己没能完成的事情是由于什么原因导致的,而要以诚恳的态度说明当前进度,以及未来是否能如期完成目标,如果不能,就直接说出来。这样老板可以对进度有所了解和预期。 33 | 34 | **在职场中,我们评估一个人并不是根据他的能力,而是他的责任。** 35 | 36 | 如果一个项目成功或者失败,准时完成或者延误,都有一个人能主动汇报和负责,拍着胸脯说“我负责”。那他就应该是项目主导和骨干,而不论年龄和资历。 37 | 38 | 而我们最终评估一个人是否应该升职加薪,不是看他的能力,也不是看他投入的时间,更不是看兴趣,只是看他的责任。他在一个个项目中都承担起了责任,就是一个有责任心的人,就能更加委以重任。 39 | 40 | **在能力不足的时候,唯有投入大量的时间。** 41 | 42 | 新人没经验,知识不丰富可以理解,但是以此为理由输出不合格的产品,那就是自己的问题。我在实习的时候,通宵睡在公司都经历过。 43 | 44 | **你有没有想着把你的产品和你的名字联系起来?** 45 | 46 | 有些成功的作品,项目,我们都希望把自己的名字同它联系起来,让人们谈到这个项目的时候,也能为自己增光添彩。但是在这个项目还在孵化中的时候,你是否有把自己的名字跟项目联系起来的觉悟? 47 | 48 | 保证质量并不是其它人的责任,不是你的reviewer的责任,不是测试的责任,就是你的责任。 49 | 50 | **你是否珍惜你的时间?** 51 | 52 | 其实中国的教育很缺乏对时间管理的教育,十几年的学生生涯中,该干什么是很固定的,任务持续的时间也是老师安排的。而在踏入工作之后,任务一下子变得不是很明确,时间也没有那么固定。 53 | 54 | 我有接近4年的工作经验(包括实习),在这过程中从纯粹的干活,到现在慢慢投入越来越多的时间在团队管理上,我有一些经验之谈。 55 | 56 | 有些人觉得刚毕业确实是比较忙的,因为活儿都丢给毕业生去干,等渐渐当上管理层,就闲散了,因为可以把活儿丢给别人干了嘛!事实是截然相反的,管理者要做的事情比执行者更多,但是因为管理者能管理好自己的时间,做事讲究优先级,懂得授权和请求他人帮助,所以能避免“瞎忙”。 57 | 58 | 所以在工作中,珍惜自己的时间尤为重要。这里推荐《卓有成效的管理者》给所有从事脑力劳动的年轻人,书中会写到管理者第一个需要练习的就是管理时间。 59 | 60 | **自己的责任** 61 | 62 | 在这个项目中,我也有自己的责任。 63 | 64 | * 没有在最开始做出合理的时间评估 65 | * 没有根据人员的强项来安排任务 66 | * 没有充分沟通 67 | * 自己虽然有责任感,但只是“消极”的责任感,不要把事情弄砸,而不是“积极”想做这个项目的主动精神 68 | 69 | 在组织中工作,并不是特别需要很强的个人能力或者天赋,但是要稳扎稳打,虚心学习,不要玻璃心,真诚沟通,珍惜每一次输出的机会。 70 | 71 | 共勉。 72 | -------------------------------------------------------------------------------- /yuguo.us/激励与响应.md: -------------------------------------------------------------------------------- 1 | title: 激励与响应 2 | 3 | date: 2015-03-23 10:45:51.610000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 激励与响应 11 | 12 | 2013年12月15日,天津市政府召开新闻发布会,宣布实行小客车总量调控管理以及实施机动车限行交通管理措施,也就是“限购+限行”。[原文](http://news.xinhuanet.com/fortune/2013-12/16/c_125863248.htm) 。管理措施12月16日凌晨生效。 13 | 14 | 当晚天津市民排队抢购小汽车,4S店和二手车交易市场通宵营业,新车和二手车都需要加价购买。 15 | 16 | 因为鼠患严重,河内的法国殖民政府曾经颁布过一条法令:人们每交出一只死老鼠,政府就给他发钱。这导致一些民众饲养老鼠,以此赚钱。 17 | 18 | 因为法国皇帝希望用一种简单方便的办法征收房产税,提出了“窗户税”:即根据每一户的窗户数量来征收税收,这导致(经过近百年的变迁)法国一些房子不再建造窗户,终年潮湿阴暗。 19 | 20 | 公司对部门的考核是“收入”,那么部门的BD对完谈合作的时候就会说我用平台和渠道免费营销你的产品,但是只有当你的销量达到500万的时候才免费。所以先收100万的现金,到时候再返还给商户。 21 | 22 | 这样做,BD也也等于让步得到了谈判的资本,自己的KPI也达到了,但实际上股东利益并没有得到保证。 23 | 24 | 简单的说,第一,一旦有激励加入游戏或者改变了激励,人们就会迅速而激烈地改变自己的行为;第二,人们是对激励做出反应,而不是对激励背后的目的做出反应。 25 | 26 | 如果你对某个人或某个组织的行为感到吃惊,那后面90%隐藏着什么激励机制。 27 | -------------------------------------------------------------------------------- /yuguo.us/爱上北上广深.md: -------------------------------------------------------------------------------- 1 | title: 爱上北上广深 2 | 3 | date: 2015-03-23 10:45:49.053000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 爱上北上广深 11 | 12 | 在QQ空间看到这样一段话: 13 | 14 | 15 | 快毕业时,老师告诉我们,如果可以的话,毕业后还是留在家乡工作创业,非走不可也不要太远。不然,就算没日没夜终于拼到拿二三十万年薪,你会发现,留在家乡的同窗也已有房有车有体面工作,享受家乡低消费的乐趣,成天去婆婆或是丈母娘家蹭饭,没事跟亲妈撒娇,隔三差五跟各个时期的朋友同事喝个酒,真遇到个麻烦事整个家族拥上来一块解决,每天早晨一脚油门就蹬到单位,节假日去你喜欢的所谓大城市旅个游,旅行结束后躺在床上说句还是家里舒服。而与此同时,你正拿着二三十万的年薪给老板干着五十万的工作,你享受着高消费,你租房,你单身,你有事只能自己冲上去解决,你一年回家两到四次,每次为了待这几天要跟上万人抢票,然后匆匆忙忙大包小包地赶。你每次离开的时候,都会觉得父母又苍老了,算下来一年两到四次见面的话,应该还剩不足百次了。你想起了小时候,你想回家了,可,一切好像都有点晚了,回到家乡意味着放弃了那么多年的努力,意味一切又要回到了刚毕业那年,从零开始,所以你不敢,于是又预定了离开的票…… 16 | 17 | 18 | 在刚开始工作的时候,我也确实有过这样的困惑,钱确实比小城市赚的多一点,但是赚多少都不够花,工作一年几乎攒不到钱,那时候的心情是非常纠结的。 19 | 20 | 我后来的女朋友也告诉我,她有过类似的孤独迷茫感受,要不是遇见我,她可能都没法在深圳继续过下去,准备回成都了。 21 | 22 | 但是现在,她很庆幸当初留下了,也开始觉得深圳是比成都更好的城市。我的想法已经渐渐清晰起来。 23 | 24 | 年轻人应该多挣钱,与此同时,除了稍微留一点去投资理财,其余的全花掉。 25 | 26 | ## 首先,为什么要多挣钱? 27 | 28 | 钱只是数字,它代表你提供的服务有多大的价值。在小城市赚的少,大城市赚得多,为什么?因为大城市的人提供的价值普遍大一些,他们在给社会做贡献。在小城市“有车有房有体面的工作”在我看来是在混日子,我这样说会显得有点刻薄,但大部分人就是如此。 29 | 30 | “遇到麻烦事整个家族一起解决”,因为小城市里生活,关系网重于能力,没有关系网几乎什么事情都办不下来。但是在深圳这样的城市,即使一个人,很多事情都好解决,政府也(相对)有效率。 31 | 32 | “有事情只能自己解决”这是专业主义的态度。整个社会每个人都专业地做好自己的事情,而不依赖跟其他人的关系,这才是正常的社会吧。 33 | 34 | “拿着二三十万的年薪给老板干着五十万的工作”这是很正常的,而且如果是上市公司,你给老板带来的价值应该要5倍以上你的工资才够格。我宁愿“拿着二三十万的年薪给老板干着五十万的工作”,也不愿“拿着五万的年薪给老板干三万的工作”。 35 | 36 | ## 为什么要多花钱? 37 | 38 | 过于节省的生活其实是对社会经济不利的,是经济凋敝的表现。大家都活跃地交换自己提供的服务,并享受其他人的服务,社会才会涌现更多高效的服务。 39 | 40 | 所以我买扫地机器人,买两台MacBook,买机械键盘,电动牙刷……总之在一些个人消费上,不吝啬。 41 | 42 | 最后,花的钱多了,也会更加努力地思考,如何让自己提供最大的价值,以获得对应的金钱认可。 43 | 44 | 这一年来在深圳买车买房,越来越喜欢这个城市,我会在父母年老之前想办法再买一套房,接他们来深圳。 45 | 46 | 最后,为什么往往能看到“逃离北上广深”的文章,看不到“爱上北上广深”的文章?因为离开的人(或者根本就没能力来的人)需要一些“理由”说服自己是明智的,而在北上广深认真生活的人,根本无需理由。 47 | -------------------------------------------------------------------------------- /yuguo.us/第三次的时候把事情做好.md: -------------------------------------------------------------------------------- 1 | title: 第三次的时候把事情做好 2 | 3 | date: 2015-03-23 10:46:01.839000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 第三次的时候把事情做好 11 | 12 | 我的经验是,如果刚开始做一件事情,只有在第三次的时候才有机会把事情做的很完美。而第一次和第二次的时候,仅仅能抱着“不出错”的目标去进行罢了。 13 | 14 | 这里的事情包括很多,比如第一次用nodejs写一个程序,比如第一次带团队,第一次谈判等等…… 15 | 16 | 我在做33号铺的时候(去年中),完全不了解codeigniter,PHP也非常粗浅地知道一些基本语法,还需要查书,对于MVC也是一知半解。但是最终还是靠各种“试错”来把程序做出来了。由于在商业上它算一个不错的点子,所以也获得了一些知名度和成功,但是就代码本身来看,它是非常粗浅和糟糕的: 17 | 18 | * 比如在view层还直接调用了model模块来进行查询和计算,这是MVC的禁忌; 19 | * 比如在判断用户输入上太过相信用户,没有考虑SQL注入和xss注入; 20 | * 比如函数的返回值没有考虑各种异常,导致在大家下载到自己环境下运行的时候,偶尔会出线未知的问题,而没有足够的报错信息…… 21 | 22 | 当然现在进行了一些优化,已经好一些了。 23 | 24 | 为什么当时没有能力写好代码,而现在有一些能力进行优化呢,因为之后又用codeigniter做了一些系统,而且学习ios开发的时候,斯坦福老头也让我对MVC有了进一步的了解。 25 | 26 | 其实人学习知识是基于正确的、能运行的系统来学习,我不知道这句代码会运行什么结果,我先echo出来,保证它的结果之后,再删掉这句,进行一些处理,再判断……所以我相信只有在反复练习之后才有机会把事情做的很完美。 27 | 28 | 当然也不是所有的事情做3次都能完美,因为只是重复地做一件事的话,“并不是有3年的经验,而是有把一件事情重复做了3年的经验”,所以有一些方法来让自己真的可以在第3次的时候把事情做好: 29 | 30 | 1. 把自己的代码和作品,或者做的事情给别人看,虚心接收批评(比如开源) 31 | 2. 方法论和实践并行,如果没有时间的基础上就一天到晚看best practice,就不会有深刻的理解,也是过目即忘。这里的方法论或者是一本书,或者网站,或者一些培训 32 | 3. review自己以前的作品,然后改进 33 | 4. 分享 34 | -------------------------------------------------------------------------------- /yuguo.us/纸牌屋里的专业主义者.md: -------------------------------------------------------------------------------- 1 | title: 纸牌屋里的专业主义者 2 | 3 | date: 2015-03-23 10:45:48.534000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 纸牌屋里的专业主义者 11 | 12 | 前段时间看完了美版《纸牌屋》一二两季,剧情非常精彩,情节转折也非常快,虽然到后面有点主角光环的感觉了,各种逆天,但整体上是非常好的美剧,五星好评! 13 | 14 | 除了主角夫妇惊天地泣鬼神的爱情,我印象很深的是几个非常职业的配角,他们给我做事非常“专业”的感觉。 15 | 16 | ![Doug](/files/2014/03/house-of-cards-1.jpg) 17 | 18 | Doug,是Frank的头马,几乎万能地处理Frank的一切事情,在跟Frank的对手交涉的时候也很有魄力。曾经酗酒,后来戒了。 19 | 20 | 他之所以给我专业的感觉,是因为他能把绝大部分问题都控制在自己下面,而不用上升到boss那里。比如Rachel,还有很多事情,他都能保证不让Frank烦心。 21 | 22 | 只有当他真正需要帮助的时候,他会很直接地请求Frank的帮助,比如Tom Hammerschmidt要介入调查,Doug就马上告诉了Frank,我没法控制Tom。 23 | 24 | ![Remy Danton](/files/2014/03/house-of-cards-2.jpg) 25 | 26 | Remy Danton,他的职业是lobbyist(政治说客),大公司财团的传声筒。他的任务一方面是把大公司的政治诉求传达到华盛顿,进而影响法案和决策,另一方面啥都干。 27 | 28 | 他的老板Raymond Tusk有一次让他做一件事的时候,他说,我只是一个说客。Tusk说,我不需要说客。 29 | 30 | 大概就能说明说客这个职业对于老板的意义,无论你用什么手段,使用什么名头,最终解决问题就对了。不过这个角色对事业不够坚定,有点摇摆,造成了他最后的失败。 31 | 32 | ![Edward Meechum](/files/2014/03/house-of-cards-3.jpg) 33 | 34 | Edward Meechum小帅哥,Frank的贴身保镖,随着Frank的升职 ,他也步步高升。 35 | 36 | 曾经的他也不怎么懂事,Frank要一个人去人群比较多的地方的时候,他说,“由于安全条例规定,我不能允许你一个人过去”。Frank把他凶了一顿:“在我面前,你只能说两个词,yes和sir”。 37 | 38 | 后来他差点被炒掉,Frank挽回他之后,他非常感激,并且随后展现了自己的价值:自己有个侦探朋友,可以找到任何人。而且他的忠心也是剧中仅次于Doug的了。 39 | 40 | ![Seth Grayson](/files/2014/03/house-of-cards-4.jpg) 41 | 42 | Seth Grayson,他本来是Remy雇佣的间谍。但是本身能力非常强,见识到了Frank的政治能力之后毅然投向了Frank。 43 | 44 | 他的职业是Frank的新闻发言官,但是后来Doug请他帮忙一起查找Frank的“盲点”的时候,Doug说,这要请你帮个忙,但是可不是发布新闻。 45 | 46 | Seth耸耸肩说,“新闻发布官只是一个头衔”。 47 | 48 | 所以我觉得,专业主义者,总会很清楚,自己的职位和职业只是一个头衔,但自己的核心竞争力是自己提供的服务。自己能处理的就不用上升,需要上升的,就尽快上升。 49 | -------------------------------------------------------------------------------- /yuguo.us/腾讯三年.md: -------------------------------------------------------------------------------- 1 | title: 腾讯三年 2 | 3 | date: 2015-03-23 10:45:55.140000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 腾讯三年 11 | 12 | 博客停了一个多月,期间也想过写一些东西,但都是在evernote里起草了部分之后又觉得自己文笔和思路都不够好,就删掉了。这两个月发生的事情非常多,我就随意记录一下,谈谈我的想法吧。 13 | 14 | ## 腾讯三年 15 | 16 | 进入腾讯三年,从助理设计师一步步晋级到高级设计师,期间的感悟和辛苦都只有自己能获益,就像王小波的《沉默的大多数》中说的:人们都是从沉默中学习,而不是从话语中学习。如果我总结出任何话语,比如: 17 | 18 | * 要积极响应上下游的需求 19 | * 要主动关注业务 20 | * 你必须非常努力,才能看上去毫不费力 21 | 22 | 这些话语在说出来的瞬间,它就脱离了土壤,成为空中楼阁,被人冠以“政治正确”、“装逼”的帽子。 23 | 24 | 我喜欢把人分为两类,一种是看见任何社会现象都会嘲弄一把(或者叫黑一把),另一种是看见任何事情都能想想自己从中学到什么的。前者是话语的世界,后者是沉默的世界。 25 | 26 | ## 买房 27 | 28 | 之前我是坚定地不买房。现在我买了,五个原因: 29 | 30 | a. 第四次搬家的一个房子还挺喜欢的,但是准备续租的时候,房东不租了,加钱都不租。 b. 入职三年,表现良好,腾讯提供三十万无息贷款。 c. 自己判断 **深圳** **前海**房价还有上涨空间。 d. 深圳是不错的城市。 e. 小平在这件事上表现出了鲜有的极高的行动力。 31 | 32 | 所以一个月内就把房子看好买进了,现在已经入住。 33 | 34 | ## 知乎 35 | 36 | 之前每天的班车上我都是看kindle,最近两个月开始偶尔刷知乎。认为这也是这几个月非常大的一件事,因为我从中学到的东西太多了。 37 | 38 | 关注了一些现在的我只能仰视的人,感慨他们的文笔和思路都是如此清晰,这也算是我博客搁置的一个小小因素,因为觉得了自己的渺小。 39 | 40 | 但是其实知乎上还有些人其实都是看见问题就站队伍,扣帽子。比如这个问题:[怎样劝说男朋友不要看新闻联播?](http://www.zhihu.com/question/21292446) 41 | 42 | 站队伍的同学看见这个问题就嗨了,首先就站在“新闻联播”的对立面(站队伍),准备来“黑”一把(浪费时间),称“新闻联播”为“官媒”、“传声筒”(扣帽子)。 43 | 44 | 我学到的是不管什么问题出现了,不要因为对问题中的某个人物或者组织不满就站队伍,扣帽子,这跟文革红卫兵是一个性质的。不了解的话题不赞同,只感谢。 45 | 46 | ## 读书 47 | 48 | 最近的书推荐4本,非虚构类的《第五项修炼》、《清醒思考的艺术》和《精益创业》,虚构类的《黑笑小说》。四本书在多看书城都有售。 49 | 50 | 《清醒思考的艺术》其实已经在六月荐书单里推荐过了,但是这两个月又重新看了一遍。这本书是很轻松的,每个短小章节都介绍了一种思维误区。 51 | 52 | 先提另一本书,大学看的一本书《写给大家看的设计书》里有一个原理叫做“约书亚树原理”,是说“只要你能说出什么东西的名字,你就很容易注意到它”。 53 | 54 | 我对《清醒思考的艺术》中的一章“干掉你的宠儿”印象比较深刻,之后我就随时随地注意到了这种现象。 55 | 56 | 有一些同事是买了房的,他坚信(其实是希望)房价继续上涨,达到他入手价格的两倍才够。这时候他会看到很多支持他观点的“事实”,比如中央调控又加紧了,预示着需求被抑制;比如跟去年比环比价格提高多少。 57 | 58 | 而另一些同事没买房而又希望房价下跌的,他会看到很多支持他观点的“新闻”,比如跟上周比环比交易数下跌,交易价格下跌等…… 59 | 60 | 这个世界的资讯这么多,反而让人们更加偏颇和专横,而不是兼容包并。微博和搜索让我们越是希望证明什么观点,我们越是能找到支持这种观点的证据。 61 | 62 | 事情过去之后,这些观点要是能回头看,自己都会觉得好笑,所以我之前在QQ空间还说,回头看3年前的自己,就是一个纯傻逼,6年前的,更是傻到冒泡。希望三年后看自己也是这样的。 63 | 64 | 要走出这个思维误区很简单,总是证明自己是错的,而不是证明自己是对的。 65 | 66 | ## 入手macbook retina 67 | 68 | 这个绝对物超所值,现在已经完全习惯ssd硬盘的启动速度,还有retina的画面渲染,回不去了。apple产品还是比较保值,最好是隔一代产品就换一次,把老的出掉。 69 | 70 | ## 翻译新书 71 | 72 | 在组织翻译一本书《Responsive design workflow》(《响应式设计工作流程》),是New Rider出版社的,由人民邮电出版社引进,现在进度50%了。 73 | 74 | 一般的响应式设计的文章都会在某一个点上着墨,比如从技术上怎么实现多个设备断点变化,比如设计师如何设计多个尺寸的页面。而这本书把所有的独立过程都串起来了,我在翻译的过程中也是觉得很有价值的一本书。就像《第五项修炼》中的“系统思考”所描述的,你必须要有一个全局的实业,摒除传统的“流水线”思维。 75 | 76 | 变化正在到来,敬请期待。 77 | -------------------------------------------------------------------------------- /yuguo.us/重拾kindle.md: -------------------------------------------------------------------------------- 1 | title: 重拾kindle 2 | 3 | date: 2015-03-23 10:46:00.960000 4 | 5 | tags: [] 6 | 7 | description: 8 | 9 | --- 10 | # 重拾kindle 11 | 12 | 我发现一个现象,人在“碎片时间”干的事跟在“整块时间”干的事是一样的。 13 | 14 | 碎片时间我花5分钟刷30条微博,那么在整块的50分钟我就会不自觉地刷300条微博;碎片时间我花2分钟打一盘手游,那么整块的1个小时我就歪在床上打手游……我以为用来填补我的碎片时间的那些小事渐渐成为一种习惯,填满我的生活。 15 | 16 | 所以我拿出放了快一年的kindle 3,吹一次上面的灰尘,提示文字说电池电量低了,然后充一下电竟然启动了,之前放在里面的书都还在呢。因为之前更新了多看系统的,所以我试试能不能直接更新到最新,到系统设置里检查了一下最新版本,竟然可以直接升级到2013版。 17 | 18 | 然后我就一键升级到了2013版的系统,多看做的很好,可以直接登陆多看账号,然后购买图书和下载。 19 | 20 | 1. 现在的中文阅读环境已经比一两年前好很多了,两年前多看商城就一些名著精选和玄幻小说什么的,现在品种比较丰富,IT类的也不少。 21 | 2. kindle 3看电子书效果还是不错的,当然没有背光没有226的ppi,但是看中文书够用了 22 | 3. kindle paperwhite也不能看英文pdf(特点是尺寸固定,文字小,在ipad2上看都嫌字体不清晰),所以暂时不入手了 23 | --------------------------------------------------------------------------------