把每一次的挫败,化解为下一次生长的营养。 最近在工作上比较烦闷,大致想一下,其实原本可以做到更好,记录一些自认为重要的点,以后遇到类似的状况参考之。 出来混,迟早是要还的。 更准确一点说,应该是「今天偷的懒,早晚是要加倍的精力补回来的」。 对于程序员来讲,把代码写得优雅,不将就,不只是为了看起来牛逼,更不是为了装逼,写出易读可扩展性好灵活的程序,以后你因为一些原因在一段时间以后需要去改动维护你自己的代码的时候,你会深深地感激自己当时坚持了一下,抵挡住了临时写法的诱惑,才不用在后来需要付出多倍的代价才能加入一个本不复杂的特性。 坑要及时补,不然下次还会掉进去。 如果你遇到某个技术点不熟,时间允许的话,在完成工作任务的同时,学好它;如果时间不充裕,把它加入你的 TODO 列表,强制自己在得到空闲时,充分系统地学习它。 不然就有可能陷入一个怪圈: 尽量做到知其然且知其所以然,让知识点之间关联成或大或小的知识岛,不然临时学到的那一丁点知识因为是孤立的小石礁,会很快就被脑海里每天接纳的大量信息淹没。 解决问题要形成合适的方法论。 形成自己的一套清晰的解决问题的方法,它将直接决定你对工作、生活中各种事情的解决力。清晰的判断标准是你能有条理地将你的方法讲述给一个没有相关知识背景的人听懂。 比如好好思考一下下面两个路线: 第一种:(我管它叫广度优先) 第二种:(我管它叫深度优先) 对于不同的问题,在思考解决方案的可行性、付诸行动时,哪一种思维方式更加合理呢?尝试去解决问题的我对此不能没有概念,迷糊中下意识地去跨出步子将必然是低效的。 浑水早淌,问题早暴露。 这不是说需求来了直接上手就写程序,而是说前期的构思和设计阶段过后,也就是谋定以后,要尽快开始写,不要纠缠于一些太细节上的问题,它们在实现阶段去解决就好。 对于前期调研有模糊不清需要在实际项目中才能确定的地方,早一天把实际环境接入意味着早一天把这种模糊消除的可能性,早晚要暴露的问题,早暴露意味着在有限时间内对质量的更有效的掌控。 谈论时的底气。 去跟别人谈事情的时候,先把可能会谈及的一些来龙去脉弄清楚,不然可能到时会非常被动,对业务逻辑的细节没有底气会导致紧张结巴以致最终的挫败。 学习的方法。 学习一样东西的时候,不要一股脑盲目扑上去,结合以往类似的经验,选择几条线纵深切入,在过程中有机会再做一定程度的横向扩展。 比如学习Android的应用编程,可以从线程、生命周期、动画等一些常用且非常重要的点去突破。 一次只做一件事。 当妄图同时处理几件事时,情况就会变得混乱起来,最终很可能导致拖到最后发现一件事都没有做好。排好优先级,一件一件来才是正道。 学而不思则罔,思而不学则殆。 这两个简单的句子凝聚着先贤的智慧,在学习工作中都需要随时谨记,用心体会。
直到临离开北京的这个凌晨,整个人才完全放松下来,暂时忘却那因工作 Delay 带来的耿耿于怀,赶走那常伴左右粘腻的莫名焦虑感,不用担心晚睡导致的第二天工作效率低下,身体和脑袋平日里要应付各种事务带来的紧绷感逐渐远离,难得的体会,当然任思绪飘飞。 ---> *********** ^ *** *** | | ** mood ** | | *** *** v *********** <--- 关于工作 每每回望自己的先搞汽车后干 IT 的从业经历,常觉得是一路崎岖,走下来不易,偶尔跟朋友聊起时涌上来的也是一种唏嘘感慨心酸无奈交错的复杂情绪。总是习惯性地认为我比原本大学毕业时在同一起点的小伙伴走了更多的弯路,工作上的各方面包括技能薪酬等都需要更上一层楼才能不落于人后。撇开这里可能带来的「不服气」、「我并不比谁差」、「想迎头赶上」之类的积极因素不论,将自己假定于比别人从业时间短经验少所以弱的地位的想法可以休矣,更不论很偶尔会以此为借口来原谅自己有些不如人的地方。这段时间里这种不好的心态带来的不良影响在持续,它让我变得贪婪,在学习技术时变得功利,但实际上过去的几年时光应该足以逐渐消化掉我在乎的差异。 再者,每个人都在这世界上划着一道独一无二的轨迹,又何必有别人的轨道就更好的妄念,你在这里仰望别人的时候,也还有好多人在渴望与你比肩。 关于钱 那天几个人在食堂聊到时事时我说了一句:「这就是因为没有信仰」,朋友接道「谁说的,我们信仰钱啊!」当时就感觉她说得好有道理,我竟无言以对。 对钱的追求一定程度上理解为对更好的生活的追求应该大部分人是没有异议的,只是希望在这个追求的过程中我们能记住自己的目的是更好的生活,而不是钱本身。不要在这个追求的过程中迷失,生活的首要任务应该是利用现有的资源过好现在,而不是一直牺牲现在只为了一个「莫须有」的美好未来。 关于爱情 在面对「为什么要见面?拒绝‘爱你’‘想你’这样的矫情答案。」这样一个棘手的问题的时候,脑子里似乎有无数个答案试图冲出来但却被贴上矫情标签一一打回。 爱情也许是这世上最难具象化的东西了吧,不知道近期推出的各种有诚意的聊天工具能不能帮助到被此困扰的思考者们(此处当然是玩笑)。 试着从网友的智慧里找到一个答案:因为成熟的爱情里的两个人会懂得相处的时候彼此相容,相离的时候彼此相思,相守的时候彼此相依。至于爱情是什么,爱情就是两个人互相的征服,彼此一定要有最与众不同的一点让对方喜欢,比你还要清楚你身上的每一个缺点,当然,更爱你的优点,不会不顾一切对你好,但是你会是我在生命里付出最多的人。 哈哈哈哈好矫情的回答笑 Crying。 The end 最后,以例行的励志高昂充满希望句式结束这一通感慨(网摘): 酸甜苦辣咸涩 都可以 唯独那无味的 才最叫人感到失落 赤橙黄绿青蓝紫 都行 唯独那无色的 才最叫人感到暗淡 喜怒哀乐哭笑 都是歌 唯独那无表情的 才最叫人悲哀 生活不能淡而无味 生命不能黯然无光 人生应当有所作为 红红火火 可以安心睡去了,五个小时后,就可以踏上列车,开往那个永远敞开胸怀接纳我的地方,那里叫做家,叫做故乡。
我不生产鸡汤,我只是源自心灵的鸡汤的搬运工。 人都是有惰性的,如果不主动去思考更多,脑子里每天装的仅仅就是工作生活里必须去做的那些事,那逐渐就会麻木了情感,沉溺于身边的一方小世界里成了井底之蛙。 所以—— 做一个有意识的人 要有眼界意识。 眼界决定生活层次,连见都没见过的生活当然不知道怎么努力去过上了。记住这个故事: 两个农妇聊天,其中一个农妇问,你说皇后娘娘早上吃什么?另一个农妇回答:肯定是大饼卷大葱,酱想蘸多少就蘸多少,一点都不心疼;刚好她们的男人也在聊天,一个男人说,如果我是皇帝,就把整个村的牛粪全包下来,不许别人捡,只能我自己一个人捡;另一个人说,愚昧!皇帝哪还用捡牛粪?他老人家肯定是拿个蒲扇,吃着西瓜,坐在树荫底下看着人们捡呢! 怎么拓宽眼界呢?多经历,多探索,多交流。书本和网络应当成为好工具,与有营养的人交流也能受益匪浅。 当然,当发现自己的能力支撑不了与自己的眼界相匹配的生活的时候,就是该沉淀下来好好学习的时候了。 要有危机意识。 世上能一直保持一成不变的,怕是只有变化本身了吧。既然如此,那生活中的每一环,都存在断裂的可能。想一想自己在某一方面最倚重的,比如经济上最倚重的工作,你的位子坐的真的安稳吗?如果失去它你的生活将何以为继?能否顺利地找到下一个满意的饭碗? 希望细想之下的你,能够对生活各个方面最倚重的那一环对应的这些问题都自信满满。如果不能,那就想想怎么样能让自己朝那个方向前进。 要有奋斗意识。 有时候觉得自己挺勤奋挺俭省的了,但是细想之下,可能却是如MacTalk里所说的: 学英语学编程是痛苦的,有时候你甚至会有意识地去避免开始这件事情,先干点这个,再干点那个,熬到最后,发现没时间,再拿起来读一会,困了,今天先睡吧。就这样,一天天很快过去了,你发现自己似乎每天都在坚持,但依然没效果。但事实是,你既没坚持,也没效率,这根本不是刻意练习。 不要沉浸在自以为是的励志与悲情里,逆水行舟不进则退,醒醒看看事实: 你花十六块买个便当吃,觉得很节省,有人在路边买了七毛钱馒头吞咽后步履匆匆;你八点起床看书,觉得很勤奋,上朋友圈发现曾经的同学八点就已经在面对繁重的工作;你周六学点新技术,觉得很累,看看微信群才知道许多朋友都连续加班了一个月。亲爱的,你真的还不够苦,不够勤奋和努力。 要有目标意识。 也许你要说,我一直没定过什么长期的目标,日子也就这么过下来了,而且活得也不错啊。 那当然很好,这个时候试着问一句自己,有没有这样的时候:看一眼身边跟自己一起出道的小伙伴,觉得有些人比自己过得好,羡慕嫉妒恨呢?如果没有,那恭喜你,你的幸福指数应该是挺高的(原谅我肤浅地把幸福弄成比较出来的了)。如果有,那可能事实就是,他其实也没有比你努力更多,只是更明确自己要走的路,在你把那么多的努力无意识地散落于生活各方面的时候,他把和你一样多的努力集中铺在了朝特定目标前进的路上。 MORE 当然,除了想做一个有意识的人,我还想做一个帅气的人,一个富有的人……
先看一下引发我追究一下 printf 和栈桢等相关知识的一段简单的程序: #include <stdio.h> int main() { printf("%d ", 8.0/5); printf("%.2f", 8/5); return 0; } 初看时,想当然了一下觉得输出就是1 1.00,后来编译出来运行一下,屏幕上却赫然是-1717986918 1.60。 在脑中干想了良久,其时的疑惑主要有两点: 1.6 转换为整形怎么就变成了负数。 1 转换为浮点数怎么就变成了 1.60。 现在看来当时的理解中存在着一个很大的误区,就是觉得 printf 是将参数根据格式化字符串进行强制类型转换之后再进行输出的,即编译器会自动将程序变换成如下模样: #include <stdio.h> int main() { printf("%d ", (int)(8.0/5)); printf("%.2f", (float)(8/5)); return 0; } 但是第一段程序的输出已经打脸了,那么想想办法找找合理的解释。 分析 面对这类问题,现象诡异程序简单,能想到的最有效的方法之一就是看汇编。 使用g++ -S编译出第一段程序的汇编如下: .file "demo.cpp" .def ___main; .scl 2; .type 32; .endef .section .rdata,"dr" LC1: .ascii "%d \0" LC2: .ascii "%.2f\0" .text .globl _main .def _main; .scl 2; .type 32; .endef _main: pushl %ebp movl %esp, %ebp andl $-16, %esp subl $16, %esp call ___main fldl LC0 fstpl 4(%esp) movl $LC1, (%esp) call _printf movl $1, 4(%esp) movl $LC2, (%esp) call _printf movl $0, %eax leave ret .section .rdata,"dr" .align 8 LC0: .long -1717986918 .long 1073322393 .ident "GCC: (GNU) 4.9.1" .def _printf; .scl 2; .type 32; .endef 第一个 printf 结果的解释 一眼望去,有没有发现一个熟悉的数?没错,我们程序的第一个输出 -1717986918 赫然在目。由此产生的猜想: LC0 对应的两个。long 合起来是 double 类型的 8.0/5,而对其低位 4 字节进行截取后对应的整数为 -1717986918。 来把相关的数转换成二进制验证一下(IEEE 浮点数表示法相关知识见附:IEEE 754 浮点数表示法): -1717986918 转换成十六进制为 -0x66666666,对应的二进制为: 1110 0110 0110 0110 0110 0110 0110 因为负数在内存中使用补码存储,故将如上二进制转换为补码才是它在内存中的样子: 1001 1001 1001 1001 1001 1001 1010 1073322393 转换成十六进制为 0x3ff99999,对应的二进制为: 0011 1111 1111 1001 1001 1001 1001 将这两个数合起来,1073322393 作为高位就是: 0011 1111 1111 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 1010 转换成浮点数恰恰就是 1.6000000000000001,可以认为与 8.0/5 的结果相符。所以第一个 printf 输出结果的推论: 给 printf 传递的是参数的原始类型,而不是根据格式化字符串进行强制转换后的类型。 比如printf("%d ", 8.0/5);就会传 double 类型的 8.0/5,而不是根据 %d 强制转换成整型后再传参。 printf 在根据格式化字符串组成输出的时候,会直接在对应参数的起始地址读取一个格式指定的类型出来。 比如printf("%d ", 8.0/5);就会在 double 类型的 8.0/5 的位置读取一个整型数出来,而小端模式下是高位高地址,低位低地址,所以这里是将 double 的低位 4 字节按 int 类型读取。 +--------------+ | double low | --> 把低位 4 字节当作 int 读取 +--------------+ | double high | +--------------+ 第二次 printf 结果的解释 在上面的汇编代码中对第二次 printf 的调用部分如下: movl $1, 4(%esp) movl $LC2, (%esp) call _printf 可以看到传参确实传的整数 1 进去的,但是输出就变成了 1.60,结合我们对第一个输出的推论,则是会在整型 1 的位置读取一个 double 类型的数,并将内存中的整型 1 作为 double 的低位部分。为什么这里偏偏这么巧会是 1.60 而不是其它的什么值呢?结合上一次调用 printf 时传的参是 8.0/5 的情况,猜想: 受上一次调用后栈上残留数据的影响。 即: +--------------+ | int | -+----> 把这 8 字节当 double 读取 +--------------+ | |residual data | -+ +--------------+ 于是将第一次调用的传参修改一下将残留数据变化一下,即: #include <stdio.h> int main() { printf("%d ", 9.0/5); printf("%.2f", 8/5); return 0; } 果然如预料第二个 printf 的输出变成了 1.80。这又一次印证了对第一个输出分析后的两个结论。来复习一下基础,引自《深入理解计算机系统》里的一段话: 假设过程 P(调用者)调用过程 Q(被调用者),则 Q 的参数放在 P 的栈帧中。 即 printf 的参数是放在 main 函数的栈帧中的,那么两次调用call _printf前的堆栈情况应该是这样的: +-------------+ +-------------+ | | ... | | +-------------+ +-------------+ | | | | +-------------+ +-------------+ | format str1 | <-- esp | format str2 | <-- esp +-------------+ +-------------+ | double low | | int | +-------------+ +-------------+ | double high | | double high | +-------------+ main stack frame +-------------+ | ... | | ... | +-------------+ +-------------+ | | | | +-------------+ +-------------+ | (%ebp) | <-- ebp | (%ebp) | <-- ebp +-------------+ +-------------+ 这里面补充的关键知识点: 被调用函数的参数存放在调用函数的栈帧中。 IEEE-754 +---+-----+----------+ | S | Exp | Mantissa | +---+-----+----------+ S:符号位 Exp:指数偏差 Mantissa:尾数 单精度(32 位) S:1 位 Exp:8 位,二进制科学计数法中的指数加 127(2^(8-1)-1) Mantissa:23 位,二进制科学计数法中的小数部分 双精度(64 位) S:1 位 Exp:11 位,二进制科学计数法中的指数加 1023(2^(11-1)-1) Mantissa:52 位,二进制科学计数法中的小数部分
按照最新 ADT 的默认设置(如下图所示)创建一个最简单的 HelloWorld 程序,会发现最后生成的 apk 文件大小就已经达到了惊人的 903KB。如果只是想做一个功能非常简单的 APP,体积也这么大的话那太让人沮丧了,那我们就来探索一下如何让这个 HelloWorld.apk 体积最小。 (注:本文所述方法是以牺牲新的 API 为代价的。) 默认生成的 apk 文件大小(903KB): 移除 appcompat_v7 依赖 创建一个 Minimum Required SDK 低于 API level 11(对应 Android 3.0),Target SDK 高于 API Level 11 的工程,ADT 会自动生成一个名为 appcompat_v7 的库工程并且使你的工程依赖于它。关于 appcompat_v7 的作用,可以参见http://developer.android.com/tools/support-library/features.html#v7,大概就是说有一系列的 v7 xxx 库,比如 v7 appcompat library、v7 cardview library、v7 gridlayout library 等,都是用于为 Android 2.1(API level 7)或者更高的系统提供一些功能,其中 v7 appcompat library 是提供 Action Bar 相关的界面风格的支持,比如它里面包含了 ActionBar、ActionBarActivity 和 ShareActionProvider 等关键类。 所以如果纯出于精简 apk 体积的考虑,那就可以将 appcompat_v7 依赖库移除。 移除步骤如下: 从 HelloWorld 工程设置中移除库依赖 右键 HelloWorld 工程 –> Properties –> Android 在如下对话框的 Library 部分选中 appcompat_v7,并点击 Remove。 解决由第 1 步操作带来的各种错误 做完第 1 步以后,Eclipse 会报各种错,根据提示逐一解决即可。 错误提示 ActionBarActivity cannot be resolved to a type 解决方案 默认生成的 MainActivity 继承自 ActionBarActivity,将其改为 Activity,并将 import android.support.v7.app.ActionBarActivity; 移除,添加 import android.app.Activity; 错误提示 R cannot be resolved to a variable 解决方案 出现这个提示一般是 xml 文件里出错导致无法自动生成 R.java 文件,根据 Eclipse 在 Package Explorer 里提示的小红叉,逐一排查修改。 res/values/style.xml 文件里提示 error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'. 将 <style name="AppBaseTheme" parent="Theme.AppCompat.Light"> 改为 <style name="AppBaseTheme" parent="android:Theme.Light"> 同理,将 res/values-v11/style.xml 和 res/values-v14/style.xml 里的AppBaseTheme分别改为android:Theme.Holo.Light和android:Theme.Holo.Light.DarkActionBar。 res/menu/main.xml 文件里提示 error: No resource identifier found for attribute 'showAsAction' in package 'org.mazhuang.android.helloworld' 将该文件里的 app:showAsAction="never" 删除。 至此,工程应该能重新编译过了。 此时编译生成的 apk 文件大小(380KB): 不导出 android-support-v4.jar 相对一个 HelloWorld 程序而言,380KB 仍然是太大了。 在 Package Explorer 里能看到 Android Private Libraries 里有一个 android-support-v4.jar。这是一个庞大的包,关于它的作用可以参考http://developer.android.com/tools/support-library/features.html#v4。它提供了能用于 Android 1.6(API level 4)及以上系统的许多功能集,比如界面、数据处理和网络连接等。做一个复杂程序的时候它会很有用,但是如果只是一个非常简单功能的 apk,而且暂时并未用到里面的 API,可以不将其打包进 apk 以精简大小,有需要的时候再将其加进来。 不导出方法: 右键 HelloWorld 工程 –> Properties –> Java Build Path –> Order and Export 取消 Android Private Libraries 前面的勾。 然后 Clean 和 Refresh 工程,再看生成的 HelloWorld.apk 的大小(45KB): 这个大小大致可以接受啦! (注:如果关闭 workspace 后重新打开,这个取消导出会重新被勾选中,如果确定使用不导出方案,那么可在 Package Explorer 视图中该工程下 libs 里找到 android-support-v4.jar,右键删除之。) 影响 当然程序精简带来的影响也是很明显的。 大小 原始 移除 appcompat_v7 移除 android-support-v4.jar 903KB 380KB 45KB 可不可以只不导出 android-support-v4.jar 而继续依赖 appcompat_v7 呢?答案是不可以,在http://developer.android.com/tools/support-library/features.html#v7的 Note 中显示 v7 appcompat library 是依赖 v4 support library 的。 API 有大量实用的 API 用不了了,比如非常重要的 Fragment,要么将 minSdkVersion 改为 API level 11 以上使用android.app.Fragment,要么需要依赖 android-support-v4.jar 使用android.support.v4.app.Fragment。如果只使用android.support.v4.app.Fragment而不 Export android-support-v4.jar,那么程序在手机上将崩溃,提示 java.lang.NoClassDefFoundError: android.support.v4.app.Fragment
问题描述 环境:Win7 x64 从 gVim 7.4 的安装目录 /path/to/Vim/Vim74/autoload 下的 pythoncomplete.vim 看出,Vim 在这个版本已经默认内置了对 Python 的自动补全的支持。然而我在自己的笔记本上用得很好的配置,同样的、_vimrc 和插件平移到工作机上以后就出问题了, <C-x><C-o> 的时候 gVim 底部提示: Error: Required vim compiled with +python E117: Unknown function: pythoncomplete#Complete 解决过程 排查 Vim 版本编译时的 Python 支持 根据上面的错误提示,首先想到的是 gVim 编译时未加入 +python 选项。 vim --version gvim --version 由此看出,在 Vim.org 下载的 Windows 版 gVim 的 Vim 编译时倒确实未启用 Python 支持,但是 gVim 启用了。我明明使用的是 gVim,不是 Vim 呀!难道 gVim 其实只是一个调用 Vim 的壳?窃以为不太可能……上 Vim.org 找了半天,从描述上没看出来提供的几个 MS-Windows 安装包的 Python 支持的相关说明,下载了一个与之前下载的版本不同的版本安装了,结果还是与上面一样,笔记本上都可以做到,那应该不是 gVim 版本的问题。 验证 gVim 的 Python 支持 :python print 'hello' 看到 gVim 下方的错误输出: E370: Could not load library python27.dll E263: Sorry, this command is disabled, the Python library could not be loaded. 提示无法加载 python27.dll。使用 everything 小工具在磁盘里找了一下,发现能找到 C:\Windows\system32\python27.dll,这个路径应该是直接在系统环境变量里的,为何会无法加载呢?除非……gVim.exe 是 32 位程序,在任务管理器里看: 那看样子我安装的 Python 是 64 位版本的。在命令行里执行 Python.exe 看了一下果然如此: Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>>>> 结论 Vim 官网下载的 Windows 版本 gVim 的 GUI 程序编译时启用了 Python 支持,但是由于 gVim.exe 是 32 位程序,需要加载 32 位的 python27.dll。 所以: 如果在 Windows 下使用 gVim 写 Python 而且想要自动补全,那安装的 gVim 与 Python 的版本要对应,比如使用的官网下载的 32 位 gVim,就安装 32 位的 Python 吧! 当然如果愿意折腾,使用 64 位 Python,然后自己编译一个 64 位的 gVim 应该也不是一个坏主意。 验证 卸载掉 64 位的 Python,安装 32 位的,可以看到 C:\Windows\SysWOW64 文件夹下有了之前没有的 python27.dll 文件。再执行 Python 的自动补全,已经能看到了:
想讲的那点事儿其实可以用时下一句很火的话概括的: No zuo no die! 当然,这是一条很厉害的真理,感觉能解释这世间所有事情的样子…… 缘起 决定写这么一篇笔记当然不是大周末独自在床上辗转反侧纠结半天要不要起床而凭空蹦出来的念头,而是源自 Connie 酱发给我的一个挺火的天涯讨论帖,它让我想起大学时代的自己和身边的一群人在夕阳下的奔跑,那是我们的青春啊扯远了……把帖子里的一些观点拿过来往那时(也许包括现在)的我们身上套用一下,惊奇地发现中了好多枪但却并不冤枉。 虽然现在一般的天涯帖子都已经无法逃脱楼主爆料——楼主被喷——楼主回喷——路人莫名秀优越——路人被喷——喷子互喷的宿命了,但机智的我还是尽量客观地提炼出了其中有用的观点,有兴致有时间的童鞋们可以看原链接,本笔记正文内容可视作原帖脱水浓缩精华不完整版。 原帖链接:能不能问个问题?我们工科男条件不差为什么找不到对象? 缘落 下面才是正文: (其实这些点估计大学时代会中枪多一点,进社会后或多或少会被推动改掉一些。) 交际面窄 如果你想有一个女朋友,首先你得有一个(堆)女生朋友,不然不止会发现一直缺货,还会直接导致完全不知道如何与女生相处的问题。工科专业和从事的行业一般本来女生就偏少,如果平时的一些认识其它人的机会也不抓住的话,那你很可能多年下来认识的女生能用手指头数出来。 没有多认识人的机会?不可能……比如,下雨天去主动借个伞给顺眼的姑娘啥的^_- 自我感觉良好 这里主要存在你眼中的自己和女生眼中的你的落差太大的问题。 楼主我是一个女生有很多男生朋友,而且我们都是工科的来告诉你。。。其实就一句话:你们自己的感受和女生的感受不一样。我经常跟朋友说我喜欢男生短头发干干净净的,穿的要利索。。。我朋友说我这样不是挺好的嘛。。。拜托啊啊啊啊,你们穿着一件合身的衣服没错,但是皱皱巴巴的看起来质量就不好啊,头发五厘米翘起来跟个超级赛亚人一样,鞋子就算你不洗,但是鞋底那圈白边变成了看出不来颜色是怎么回事啊啊啊吧。。。还有瘦不拉几要么一身肥肉的身板。。看起来精神呢?男生说好的荷尔蒙呢?我们专业也有几个大咖有女票,但是人家迎面走来那股子精神气简直charming.建议,上了大学不管家庭条件怎么样,衣服在精不在多,衣服好看,把自己收拾干净,别特么搞个子弹头神马的,找到适合自己的,别整个人像是刚刚从游戏上爬下来一脸油。。。。动不动话题就是lol……..做个认认真真的美少年好嘛??好嘛???好嘛???? 你眼中阳光帅气能迷倒万千少女的自己: 女生眼中不修边幅情商爆低邋遢猥琐的你: 如何了解别人眼中的自己?那是个问题。也许可以参考无秘最近做的「我的好友印象墙」。 一心只想追女神 这是天涯网友们举出过若干实例来举证过的问题,应该确实广泛存在。 随手引用一个: 在理工科学校读的理工科,其实工科男生是真的不错,我认识的都挺好,找不到女朋友的原因是,在他们青春的阶段,基本上几乎都在追求女神。 我们班的男生,大学四年里,每天都在嫌弃自己班、自己学院的女生长得丑,对于那种普普通通的女孩看都不看,就是一门心思追女神,追语言学院的院花,之类的,我们班总共 30 个人,有 11 个男生追过同一个女的,是个女神,光我们班就 11 个男的追,你想想,不是因为女的少,我们学校不远就有个文科院校,我们学校男生去追的,还是文科院校女神级的人物,就那几个,那个学校的普通女孩照样没戏,每天一群普通女的来我们堕落街吃麻辣烫,大学四年女光棍。 后来毕业以后进了一个工科类的单位,也是很多单身男,跟大学时代差不多的问题,一起进来的一批里面有一个漂亮的女生,一起进来的这批的所有男生同时追求她,真的是,所有单身的男的没有一个不在追她,前几年先来的也同时追求她,就是所有人同时追一个,如果我们劝说单身男还有谁谁谁也不错啊,他们还是执迷不悟的,用我同事的原话是,哥挣这么多钱,就想找个自己喜欢的不可以?后来那一个漂亮的女孩很快挑了个最好的,到了第二年,又进了一批新同事,照样有一个最漂亮的,于是又是所有人同时追那一个,场面真的很壮观。 一定得要到了快 30 岁,想结婚的时候,才想找个普通女孩安定下来,我们单位就是,几年下来,之前围绕着女神的,眼见自己家里催得紧,打算还是追个单位的次一点女孩算了,但是那次一点女孩心想你以前狂追女神表白送饭买礼物大伙都知道,你给女神当着备胎,我答应你岂不是我又自己把自己当备胎,然后男生就大呼我条件不差为什么找不到对象,最后就沦落到相亲市场上去了,好在相亲市场上工科男还是挺吃香的。 能逆袭到女神的当然是少数,然后网友又犀利地总结了追求女神失败后的状况: 别说就想找个普普通通的妹子,你们这个普普通通里肯定包含着温柔、善解人意、爱做家务、穿着漂亮、长相清秀、肤白身材苗条、清纯、可爱、能带得出去、兴趣相投、最好还会点手工比如织个围巾什么的。 不主动 这又是另一个极端了。这种情况下除非你是个大帅逼或者其它什么方面能吸引你心仪的女生来倒追你,否则你还是主动点吧没错的。 有网友猜测了楼主的心态: 你压根不是想学习想了解为什么「自己找不到」姑娘,而是奇怪为什么「好看的」姑娘「不投怀送抱」。 猥琐邋遢 一位网友这样总结工科男的形象: 一副方便面头皮屑发型,盐菜衬衫,上身皱巴巴西装配下身脏兮兮牛仔裤和白色变灰色的球鞋,袜子能矗立,满脸青春痘,撸管撸到右手有茧,一米六的大个子,穷到经常哭跟银根紧缩,问题是整天还意淫着要追白富美。 虽然说得夸张,但是也确实能说明一些问题的,因为很多很多网友们提到了工科男聚集的地方都有生化武器……化武器……武器……器…… 不修边幅不讲卫生不拘小节,穿拖鞋四处溜达,不会搭配衣服,头发油腻气味销魂……槽点确实很多。不要说女生肤浅,人不都一样嘛,就算你有一颗再高尚的灵魂总得让别人先有兴趣接近你才能了解的到。 木讷呆板 虽然现在也有一些女生天天花痴一些呆萌的东东比如萌宠啊啥的,但是第一,你不是不会讲话的宠物,别人对你的预期不同;第二,呆不一定会带来萌,真的。萌属性理工男的真相: 你可以吗? 然后还有很多人对工科男一直有「三脚踹不出个屁」来的印象,这种状况的人当然不是所有,但占比应该也不少。好些人连吃饭时都只聊学术,看电影只看科幻和打打杀杀,毫无幽默细胞,那你能聊到的话题也许就限于此了,这些当然对不了妹子们的胃口。再有就是把专业职业带到生活中钻不出来,不会找别人感兴趣的话题,听不出妹子们语言背后的涵义……这让我感到绝望。 不会照顾人 好不容易逮着跟女生的相处的机会了,却可能就会让女生觉得你情商太低,幼稚,不够绅士,好多事情想不到,也不知道怎么关心人,等等等等。 这其实也许是因为跟女生接触太少造成的,但是跟女生接触少不能成为被原谅的理由啊,又没谁逼你那么干…… 不尊重不漂亮的女生 有占比不少的人患有真命天女综合症,在女神和美女面前各种殷勤跪舔即使被嫌弃得要死也要往上凑,而对其它长相一般感觉兴趣不大看不上的女生连正常交往的礼仪都失掉了,这会让她们的漂亮同伴们对你的人品产生怀疑,从而让她们圈子的人全都跟你保持距离。 技术控 这个不能算纯粹意义上的槽点,但是过犹不及,如果自己待着的时候一心埋头搞技术,跟人相处的时候还是满脑子都是,遇到一点由头就要借机牵出话题来大扯一通还觉得自己高端,动不动说你们不懂,那估计很难有人更别说有女生受得了了。 你引以为豪的技术在妹子们眼里也许啥也不是,有网友曰过: 妹子们对于工科的各个学科没有概念,机械的就是修挖掘机的;计算机软件的就是修电脑重装系统的;土木就是盖房子的……工科在她们眼里统称搞技术的,至于搞哪项技术其实没多大区别。 缘结 就说这些吧,这就是所有了吗?当然不是,在这个看脸的世界,机智的女网友会告诉你「真相」: 报仇的机会来了,我要回一个你们男人经常在妹纸问为什么没对象的帖子里经常回的理由,那就是,因为丑~ 装逼陈词: 凡事皆有因果,不要总以为众人皆醉我独醒,其实更多时候是自己醉得不轻。 犯错不可怕,可怕的是一直犯着同样的错误而不自知。
习惯 早睡早起。 好处 好心情的基调 不知道对别人来讲是如何,反正晚睡会导致我第二天情绪不佳。 对身体好 熬夜伤身,这个相信很多人都深有体会。 良好作息的基石 一旦晚睡,第二天里的计划都会受影响,陷入被动,然后又需要干到很晚才能消停,陷入恶性循环。 实践 作息 时间 事项 7:40 起床、Plank、洗漱 8:40 出门 9:30 到公司,写日记,看数据,调整状态 10:00 处理优先级最高的活,写代码 12:10 午饭,阅读一些博客文章,午休 14:00 手头的活整理排序,能迅速解决的赶紧解决 18:10 晚饭,思考难推进的工作如何进行,调研解决疑难问题 20:30 离开公司 21:30 到家洗漱,50+80 锻炼 22:30 看书 23:30 关灯睡觉 遇到问题及对策 深夜饿 打完羽毛球到家已经十一点多了,巨饿,遂在楼下买了一包咸花生回家,边吃边看「Friends」,结果不知不觉吃完看了两集剧,时间已经是一点了……花生高蛋白高脂,大半夜的吃简直作死,还是改为喝点啥喜欢喝的饮料洗洗睡吧~然后平时没什么事儿的时候早点入睡,就能避免此问题。 容易违背计划 我的经验是,如果你打算培养一个习惯,那在你的本次计划里只明确必须要做到的,不要附带弄出一堆东西,企图一口气把自己培养成一个完美的人,不然你会发现因为对其中一个点的凑合而导致对计划的违背,面对一个已经被部分违背的计划你就会想,反正没有完全做到,再多违背一点也没关系吧。 比如如果把我上面的完整作息时间表全部作为计划的一部分就是一个失败的案例,里面不止列出了早睡早起,更有Plank、50+80锻炼等内容,这些习惯应该分多步逐个来培养。在此保留并逐步更新完整作息表到合理的状态,但是只把睡觉和起床时间作为本次计划的强制要求。
应对很多事情时情绪都会跑出来作怪,或多或少地影响我对事情的判断,有些时候直接导致了不良结果的发生,所以逐渐形成自己的情绪管理的原则和套路是必要的。 概念 情绪管理不是指对情绪的压抑,而是一个逐渐改造自己的应激反应链的过程,让自己面对以前会造成不良情绪的场景,经过一些原则和想法的自我解释与消化,不再产生不良情绪。 建议 因为一件事情跟人争论不休感觉火大打算讥讽对方的时候,脑子里先用一瞬间思考一个问题:这件事情往他(她)意愿的方向发展的结果我真的不能接受吗?也许事情本身怎么发展并不是我关注的重点,我只是觉得按我的想法做才是对的。别人的三观没有义务与你一致,他(她)选择的肯定也是自己认为的最优解,这是别人的自由。为此类事情觉得愤怒和不高兴是不必要的。 当对方因为一件事情给你的明显带着情绪因素的反应的时候,尽量不要也带着情绪去针锋相对,这往往只会让事情更糟。明确你想要让事情向什么方向发展,然后用比争吵更巧妙的方式去推动。 对生活中不能用「非此即彼」定性的问题,排除「这么简单的道理,跟你说了这么久怎么就是讲不通」的想法。每个人有自己不同的处境与成长环境,基于此而形成对同一件事情的不同看法是正常的,无条件地接受这一点。
知道这部电影是从一个名叫「容易忽视的豆瓣高分电影」的豆列里,从豆列的名字我就知道它注定不热闹,果然在剧情结束后屏幕上出现了这行字: 谨以此献给每一个孤独的灵魂。 这恐怕是该片的豆瓣影评里出现频率最高的一个句子了,我觉得它配得起这句话。 注:以下内容有剧透,介意慎读。 这部电影最令我感到特别的地方是当我看完后试图去用里面人物的名字去帮助描述一些事情的时候,发现貌似整部电影都没有出现过几个主要人物的名字,好吧就用小正太、萝莉和御姐来分别代表男、女主和她的女神姐姐吧。 不管是否是导演本意,不得不说最先感受到的还是这世界满满的恶意。小正太被妈妈的驱逐,在孤儿院遭受的嘲笑,大人们有意或者无意的「小杂种」的称呼,同龄小孩们起哄的追打欺负,无不透露出一阵阵的绝望。幸而小正太不是玻璃心,才没有在这各种摧残下自暴自弃走向堕落,即使必须一个人藏身在废弃的船里,每天靠捡破烂维持生活,即使只能每天偷偷地看着不远处萝莉一家人的幸福暗自羡慕。萝莉虽生活在一个正常的家庭,但是生活在御姐的光环下,自卑敏感,觉得不会有人想吻自己这样「又丑又笨」的人,以后想干的事情就是「当一名老处女」,听到这个「理想」笑过之后一阵心酸,欧洲人的黑色幽默真的是让我又爱又恨…… 当然人间有真情,人间有真爱。萝莉和小正太之间被这些阴暗所催生出来的感情(原谅我不想称之为爱情)——即使只是两个小孩子想相互依偎取暖,但它可以代表人与人之间纯粹的关系和跳出原有生活的可能性。御姐最后为了保护萝莉拨给警察的电话——尽管我也像豆瓣影评里的大多数人那样,一厢情愿地希望这个天使脸孔的女子能成全萝莉和小正太来个童话式结局,但是转头又清醒地知道童话里都是骗人的。船夫,回收站的老头,萝莉爸爸,不经意间流露出来的一丝关怀也能让人心生一丝暖意。 特别是萝莉,作为小正太生活中光亮的象征,我更愿意给她一个幻化的寓意: 每当你身陷黑暗 记住心存渴望 总会有一束光 为你指引方向 即使它偶尔被遮挡 请坚定地走 深渊禁锢不了心的自由 请坚定地走 骄傲地昂着头 挥起手 不知道有多少人会从小正太和萝莉身上会看到自己曾经的影子,对这世界认知过程中逐渐意识到不公平,自卑,质疑为何是自己要去遭受这些苦难,感觉不被需要,渴望的东西得不到,太美,太丑……即使学会抽离地旁观这喧嚣的世界,也还是发现,有一些黑暗,只能独自穿过;有一些问题无人能答,只能自己挣扎着去寻找生存方式和存在价值。 用于点题的电影开头与结尾实际是同一段对白: - 你叫什么名字? - 我叫什么名字,有什么关系吗? - 人生在世所为何来? - 我是。 最终小正太还是被带回了充满嘲笑与冷漠的孤儿院,但我对他未来的生活并不担心,因为即使生活如此不堪,他依然拥有一颗善良、坚韧和渴望爱的心,很多我们认为的苦难在这个承受过这个年经里不该承受的东西的孩子眼里不过浮云,他已经懂得存在的意义就是自己本身。 对现实里那些企图绊倒他的东西,他会做出这个手势,然后抬起头,继续向前走。 在如此不诗意的现实里,他终将成为一名真的诗人。