特色

Web 开发笔记

作为分类目录的一个补充,在这里按照功能类别对 Web 开发中的一点心得和笔记作一个索引。其中部分是根据自己在查找网络资料时找到的内容的整理与演绎,在此感谢所有那些无私分享经验的人们。

HTML & CSS
JavaScript & jQuery & JSON & AngularJS
Python
PHP
SQL
XML
正则表达式
特色

.NET 开发笔记

作为分类目录的一个补充,在这里按照功能类别对 .NET 开发中的一点心得和笔记作一个索引。其中部分是根据自己在查找网络资料时找到的内容的整理与演绎,在此感谢所有那些无私分享经验的人们。

Entity Framework

Web

特色

Java 开发笔记

作为分类目录的一个补充,在这里按照功能类别对 Java 开发中的一点心得和笔记作一个索引。其中部分是根据自己在查找网络资料时找到的内容的整理与演绎,在此感谢所有那些无私分享经验的人们。

基本

线程

垃圾回收

其他

特色

Android 开发笔记

作为分类目录的一个补充,在这里按照功能类别对Android开发中的一点心得和笔记作一个索引。其中部分是根据自己在查找网络资料时找到的内容的整理与演绎,在此感谢所有那些无私分享经验的人们。

基本

控件使用

资源调用

声音和图像

用户界面

活动 线程 服务

设备控制

SQLite

Android Studio

其他

特色

Android中文开发文档目录

开发者指南

 

API 指南

  • 简介
    • 应用程序基础
    • 设备兼容性
    • 系统权限
  • 应用程序组件
    • 意图与意图过滤器
    • 活动
    • 服务
    • 内容提供者
    • 应用程序小工具
    • 进程与线程
  • 应用程序资源
    • 概览
    • 提供资源
    • 访问资源
    • 处理运行中的改变
    • 本地化
    •  资源类型
      • 动画
      • 色彩状态列表
      • 可绘制资源
      • 布局
      • 菜单
      • 字符串
      • 风格
      • 更多类型
  • 应用程序 Manifest
    • <action>
    • <activity>
    • <activity-alias>
    • <application>
    • <category>
    • <compatible-screens>
    • <data>
    • <grant-uri-permission>
    • <instrumentation>
    • <intent-filter>
    • <manifest>
    • <meta-data>
    • <path-permission>
    • <permission>
    • <permission-group>
    • <permission-tree>
    • <provider>
    • <receiver>
    • <service>
    • <supports-gl-texture>
    • <supports-screens>
    • <uses-configuration>
    • <uses-feature>
    • <uses-library>
    • <uses-permission>
    • <uses-permission-sdk-23>
    • <uses-sdk>
  • 用户界面
    • 概览
    • 布局
    • 输入控件
    • 输入事件
    • 菜单
    • 设置
    • 对话框
    • 通知
    • Toasts 通知
    • 搜索
    • 拖拽与释放
    • 可访问性
    • 风格与主题
    • 自定义组件
  • 动画与图形
  • 计算
  • 媒体与相机
  • 位置与传感器
  • 连接功能
  • 文本与输入
  • 数据存储
  • 管理
  • Web 应用程序
  • 最佳实践

 

Android 设计

 

更新日期:2015-11-15

说明:限于时间、精力和个人水平,翻译进度有限,也可能存在不少谬误之处,欢迎指正。另外由于Android官方开发文档常常会随着SDK版本更新而更新,可能不能马上更新至最新版的翻译(甚至需要等待较长时间,目前以完成第一遍全部文档的翻译为最优先事项)。翻译的发布原则是一旦开始新的文章翻译随即发布,之后逐步完善,因此如果通过RSS订阅本博客,可能会收到仅有文首的翻译文章。

关于进行Android开发文档翻译的初衷,可以参见这篇文章,另外还有关于翻译的几点说明。值得高兴的是,似乎最近Android开发者网站已经能够在大陆被正常访问了(笑)。

本作品采用知识共享 署名-非商业性使用-禁止演绎 3.0 Unported许可协议进行许可。

碎碎念——迅速崛起的 Oppo

最近几年步步高旗下的手机厂商 Oppo 销量喜人,这里随口议论几句。

Oppo 的市场与营销:

  • 依托大陆市场,获取了当前全球销量第四的成绩
  • 在国内高调宣传自己的成绩
  • 投入巨资赞助各类综艺节目,知名度极高
  • 投入巨资邀请当红艺人代言,话题度极高
  • 各类数码网站频繁介绍发布会并宣传新产品
  • 在二三四线城市与一线城市郊县拥有数量极多的实体店,常开设于山寨苹果旗舰店附近
  • 给予销售人员极高的单机返利激励他们推销产品
  • 产品定价远高于同级别产品甚至高于三星、索尼等多家国外厂商
  • 以简单上口极易传播的口号宣传闪充技术(充电五分钟、通话两小时)

Oppo 的产品:

  • 使用中端处理器,性能中庸却也避免了过热与耗电问题
  • 摄像头素质中庸,但自拍美艳效果强劲,避开了成像质量的正面对抗
  • 电池容量普遍较小,闪充技术仅略优于其他厂商。最近新机型电池容量有所增加
  • 曾推出多款性能有限但厚度打破纪录的产品以增加知名度
  • 作为一项传统,外形设计大量借鉴流行产品,几乎到了抄袭的边缘
  • 由于单价较高,不必过分控制成本,质量与做工较好
  • 大幅改造 Android 系统使其适应国内用户使用习惯

评论:

  • 虽然有抄袭他人设计的不义之举,但进取心和执行力确实优秀
  • 大力投放广告再以低配高价收回成本也算是商业策略,无可厚非
  • 广铺销售渠道并有效激励销售是正确的思路
  • 缺乏对设计与技术的追求,距离业界领袖距离还很遥远
  • 尽管如今资源与机会丰厚,但凭现有营销策略能否打入国际市场仍是个问号
  • 仅以个人喜好而论,更希望业界领先者能以产品为本,不断推进技术进步与创新,而不是通过营销让技术平庸的产品取胜。如果 Oppo 将来可以转型,或许能成为业界领军者。毕竟它比故意欺诈的小米要正派得多。

AngularJS 中为 input 添加字母大小写不敏感正则表达式匹配验证

代码与范例:

说明:虽然包括 JavaScript 在内的正则表达式实现支持大小写不敏感匹配(i),但 HTML5 中,input 元素的 pattern 属性并不支持该标记位。为此,要实现该功能,必须借助额外的逻辑。如需显示错误信息,可为错误信息添加 ng-show=‘!isEmailValid’ 属性。

JavaScript 中设置与读取 Cookie

代码与范例:

说明:如果要设置过期,则需要为expires赋值。否则默认为 session cookie,可能在浏览器结束后被自动清除。

JavaScript 中判断哪个链接(a 标签)被点击

代码与范例:

说明:可通过 callback 回调方法或许当前被点击的 a 标签,进一步得到诸如 href 或 title 等元素属性,就能知道用于点击了哪一个链接。此处的 a 标签也可以替换为其他包含 click 事件的元素。

 

聊聊压力

这篇文字根据自己前几年在记事帐里随手记下的随感整理而成。这些没有成文、不成系统的只言片语安静地躺了两三年,趁此机会稍作梳理,固仍有疏漏与偏颇,也算是做个了结。因没有任何专业基础,完全基于经验得出感受,难免有不少幼稚与谬误之处,仅作备考。

下面依次谈谈自己对压力的来源,压力的效果和压力的释放等话题的理解和思考。

 

压力源

此处主要讨论的是相对长期的精神压力,短期的应激性压力或肉体压力不做展开。由缺乏食物、饮水、睡眠、温度或身体疾病导致的压力成因与解决方法都较为显然,也不多深入。

内部压力

一个完全与社会隔绝的人是否会有压力?如果他能够自己自作健康而自由地生活,且不用担心外部威胁,他是否还会有压力?这类压力或许可以归为来自内部的压力。有些压力的根因很可能依然源自外界,但其形成与个人的性格或思维方式等息息相关。内部压力包括以下这些:

  • 强迫症。必须反复确认检查才能安心,常见的有出门时检查是否关门等
  • 过分完美主义或脱离实际的期望。对自己或外界的行为及其结果要求过高,一旦存在偏差便产生负面情绪
  • 过度的欲望。强烈的物欲、权利欲或控制欲等

外部压力

撇开生存压力,此处的外部压力也许能大致等同于社会压力。外部压力可以由个人或群体造成,甚至只是舆论或媒体渲染。

  • 外部展现的状态。成绩优秀的同学、外貌出众的朋友、能力拔群的同事、多才多艺的同龄人……荣誉、幸福、清闲、权力、富裕……新买的奢侈品、小清新的出国旅游、丰富而频繁的文娱活动……本来,与自己过分遥远的人不会成为问题。人们通常不会因为明星富商生活条件优越而感到不平,而只会关心身边看得到的例子。然而,网络普及之后,社交网络的流行使情况发生了变化。你会发现,你身边默默无闻的同事周末的生活简直丰富得难以想象;你各方面平平的朋友似乎始终乐观积极毫无烦恼;你泯然众人的高中同学和千里无一的美女结为连理;原本和你一辈子打不了几次交道的远房亲戚在特大城市的富人区购置了房产。做到清心寡欲并非易事。没有比较就没有伤害,外部展现的状态,无论虚实,都会影响自己的心境。尤其是当你发现自己无法达到“社会的普遍标准”时,你必然会有意识或无意识地感受到压力。例如,你以为三十岁前大家都结婚了;你以为大家结婚时都添置了新房;你以为昂贵的钻石戒指是唯一可以表明真爱的信物——如果这不是钻石公司几十年营销得到的成果
  • 外部对自己的评价。无论你与他人相同还是不同,不如还是超越,你都有可能收到指指点点。这些指指点点或许并不会对你有直接的伤害,但你却总担心它们终将转变为实际的影响。也可能,这些不公甚至不实的评价,本身就能让你感到不快,即使它们几乎没有可能对你造成实在的损失
  • 外部对自己的期望与要求。如果说外部展现的状态不明确针对某个目标,外部对自己的评价不直接要求回应,那外部对自己的期望与要求则更加明确与直接。父母期望子女成才;老师要求学生学习,期望他们考取高分;领导要求员工努力工作,期望他们获得好业绩。期望会带来评价,进而转为压力,要求更是很可能会改变今后的处境,形成直接压力
  • 外部对自己的认可
    • 需要与被需要。认识到自己需要依赖整个社会才能更好地生活,并且相信自己具有足够的能力提供社会需要的价值。前者通常成立,后者则不然。如果认为自己不被社会需要,便可能产生一定的心理负担,担心自己能否长久地在社会中生存
    • 信任与被信任。信任社会有助于减少不必要的脑力消耗与精神负担。被信任的人更容易建立起足够的自信。或许存在精神特别强大的人不需要外界的反馈也能认清自己,自信而坚定。不过这种情况下,他很可能缺乏对所属社会群体的认同感与归属感。不过,如果把握不当,被信任也可能转为过度的期望而产生压力
  • 认同感与归属感的缺乏。认同感与归属感指认同自己所属的群体,为自己属于该群体而感到自豪与安心。认同感与归属感能够使人放松,排解压力。这两项却并非总能实现。出于各种原因,人并不总是有能力选择自己所属的群体。后进学校里努力学习的学生可能在班集体里找不到归属感,混吃等死的机构里有雄心的员工可能既不认同也不认为自己属于这个环境。不过,如果信念坚定,相信自己可以改变,改变环境,或是改变环境,由于认同感与归属感确实造成的压力或许也有正面作用
  • 没有选择的自由。能够自由选择,显然胜过枷锁重重

内部压力与外部压力存在联系,在一定条件下能够相互转化。

 

压力的作用与危害

作用

  • 危机意识。穷则思变。压力也许是改变与进步的契机
  • 集中注意力。适当的压力可以迫使人专注于重要的问题

危害

  • 精神疲劳/肉体疲劳的加速。长时间处于压力之下会积累精神疲劳,精神疲劳又将导致肉体疲劳
    • 疲劳将造成效率下降,错误增加
    • 产生焦虑心情,无法正常工作生活,浪费大量时间
    • 恶性循环。疲劳的肉体会发过来影响心智。人在劳累时往往难以意识到自己处于不良状态,越陷越深
  • 情绪消极。对他人产生消极影响,破坏关系。如果能够遇到情绪积极的人帮助还好,仅靠自己很容易钻入牛角尖
  • 短视/无法做出最佳决策。迫于压力,人往往会选择解决眼前的紧迫问题,而这不一定是长期的最佳选择

 

压力的缓解措施

生存压力

不考虑天灾人祸食物短缺等,这类压力主要源于身体健康状况不佳。因此调节方式也很简单,培养并维持良好的生活习惯即可。

  • 合理作息
  • 加强运动
  • 注意饮食
  • 保证睡眠

其中特别要强调保持睡眠。现代人很少会面临生存压力,却常常会遇到睡眠问题。有时候会觉得,睡眠质量不佳其实是一种很特殊的生存压力吧。引发条件极为简单,熬夜不睡即可;影响迅速而明显,内部精神压力剧增,反应力和判断力下降并极易导致失误,进而影响外部评价,产生外部压力。相对破坏,睡眠质量的恢复却要花费更久的时间。此外,长期轻度睡眠问题带来的影响并不亚于短期熬夜。无论如何,确保高质量的睡眠是释放压力的第一要务。

内部压力

  • 通过习惯来缓解强迫症。习惯的力量十分强大,借助习惯可以事半功倍。例如,担心出门时没有锁门,可以培养锁门后拍照记录或只是简单捏一下自己。有意识地让肌肉参与,比眼看脑记更加深刻。这些习惯以简单有效为宜,一旦养成,就值得信赖
  • 建立正确期望。合适的期望对人有激励作用,过高的期望只能徒增压力与失望与不自信。建立期望,应该以过往的经验为基础,如果过去从未实现,有什么理由相信自己下次一定可以成功呢?即使求成心切,也应根据实际情况多次迭代更新期望,而不是一蹴而就在毫无基础的时候就建立不切实际的期望。上一次得了60,这次就改进方法,或增加努力,期望得到65——而不是这次决意已定,信心满满,肯定能得100
  • 过度的欲望。思考自己真正想要的是什么,欲望的来源是什么。这个问题本身就能长篇大论。重要的是,努力成为一个真正独立的人,不要让自己的欲望成为社会舆论宣传的镜子
  • 接受变化与不确定。这个世界上唯一不变的就是不断的变化。大部分人无法准确预测自己两年后的状态。既然变化与不确定是这个世界的常态,是事物发展的法则,又何必为此恐惧和焦虑呢。为变化制定多套不同方案,借助经验预测未知,先尽人事,后听天命

社会压力

  • 正确评价他人。由于信息不对称,他人展现的、媒体宣传的,都不一定是实际情况,或者说不一定能准确反映整体情况。一位成功的商人可能不是一个尽责的父亲,拥趸众多的意见领袖不一定过着自己梦想的生活,学术爱情事业三丰收的长者或许每时每刻都要应对常人想象不到的艰难。因此,不必妄自菲薄,特别是不应自行想象他人不为人知的一面
  • 影响他人的评价但不在意他人的评价。外部评价可以被影响,但不可控。不能期望所有人都满意自己,如果这些评价难以对自己造成实际影响,可以忽略不计。做好自己,影响可以影响的人,影响需要影响的人,即可。当自己能创造价值时,被需要与被信任也将随之获得
  • 双向选择。寻找自己认同的,有归属感的集体。自我提高,让自己具备选择的资本
  • 宁缺勿滥。这一点很难做到。如果追求的东西成本极高,人往往就很难顶住压力。例如,坚守道德通常需要付出极高的精神和物质成本。不乱扔垃圾不乱穿马路等功德,要对抗人性的懒惰和自私;互联网商业公司不助纣为虐利用国内垄断地位把害人性命的骗子医院的广告夹杂在搜索引擎结果里,要对抗金钱的诱惑与外部资本的压力。不过对于个人来讲,或许静下心来,好好想一想自己到底追求的是什么,可以帮助自己找到一些答案。如果明天就是你生命的最后一天,你是否还会纠结于这些难以割舍的东西?你希望得到他人怎样的评价?缺乏公德的人,抑或是丧尽天良的商人?当然,如果这些不会成为你的压力,现在自然也不会成为一个问题
  • 理解历史的进程。每个人都能选择自己的行为,但能与历史进程对抗的毕竟是少数。以史为鉴,可以知兴替。人类文明如何受生产力发展的影响,如果受经济模式的影响,如何受人性的影响,必然遵循一定的规律。如果能了解到一些这样的规律,或许能对这个世界的运行法则有更深的认识吧。一国的制度演化,民众素养与社会风气等,发展成当前的状态大多是众多历史条件叠加的必然结果。为什么会产生农耕文明?为什么会有殖民扩张?为什么会有王朝兴衰?为什么会有革命?为什么会爆发战争?为什么会有经济危机?为什么会有郁金香/普洱茶/房地产的泡沫?……越看清这个社会运行的本质,越能对这个纷扰的世界保持平静吧。就好象人不会因为苹果会掉落地面、水能载舟火能取暖之类的现象感到压力一样,如果知道了在特定的资本与经济条件下某些社会现象几乎是物理定律般的必然,或许也就不会过分患得患失了。《人类简史》是一本通俗易懂的好书,可以帮助自己对人类文明的进程有一个新的认识,值得一读
  • 维护健康的人际关系。人际关系其实和个人与群体的关系类似,只不过此时对方是一个个具体的人。相互认可、相互信任、相互尊重、相互需要,保持合适的距离,紧密而自由,或许是最佳的人际关系

 

 

Android 中设置 EditText 的输入类型

在 Android 中,EditText 可支持句首字母大写、词首字母大写、纯数字等数十种专门优化的输入类型。有两种方式指定输入类型。

方式一,在布局资源文件中为 EditText 控件添加属性,如:

其中,textCapWords 表示在可能的情况下,为每个句子的首字母大写。
textCapSentences 属性的值为 0x00004001 ,textCapWords 则为 0x00002001,它们以掩码的形式制定,这些属性可通过 | 运算符组合。

方式二,在代码中动态添加或更改输入类型,如:

更多可选的输入类型请参见官方文档:
http://developer.android.com/intl/ja/reference/android/widget/TextView.html#attr_android%3ainputType

写给程序员的 AngularJS 语法快速入门

基本示例

index.html

使用控件

index.html

todo.js

todo.css

 

未完待续

通过正则表达式过滤/去除 XML 1.0 的非法字符

说明:
XML 1.0 的合法字符如下:

Char::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, And FFFF. */

例如,.NET 框架中的 SQLDataAdapter.Fill() 将自动将 XML 1.0 不支持的 Unicode 字符转换为 HTML 字符(如 #xB 等),因此,在这类场景中,应当首先过滤非法字符,否则 XSL 等可能会无法正确处理由 XmlDocument.LoadXml() 得到的 XML。
另,改用 XML 1.1 也是一种解决方案,XML 1.1 的非法字符仅有 NUL (x00)、xFFFE 与 xFFFF 这三个。

用于匹配 XML 1.0 非法字符的正则表达式模式如下:

VB.NET 代码示例:

碎碎念:智能手机 2015

首先是一则说明。工作生活日渐繁忙,打理博客的时间也越来越少。精力有限,今后原则上不会为索尼的每一次展会/新产品发布写摘要。这些交给专门(虽然很多并不专业)的媒体即可。自己感兴趣的产品或许会三言两语写写感想,例行的产品线更新之类则略过不提。例如新的 Walkman W 系列和 h.ear 耳机系列,小改款的新 VAIO Z/ S 系列等。

回到正题,最近很多网站都在讨论 2015 年各品牌智能手机的销量,长篇大论总结下来其实也就这么几句:

  • 苹果增长放缓
  • 三星颓势开始扭转,但依然被苹果逼近
  • 多个老牌国际大厂日趋边缘化(LG、索尼、HTC、Moto 等)
  • 华为为首的国产厂商进步显著
    • 小米遇到瓶颈
    • 步步高系闷声发财

相关的分析和讨论已经很多,这里不重复相近的观点,只想再次阐述几条自己认为很重要的因素:

  • 品牌影响力是最大因素
  • 中国大陆决定全球局势

关于第一点。又一年的实际观察让自己确信,『大多数』人并不关心也无法分辨产品的好坏。例如,他们不会用到 iPhone 的大部分功能,对 iPhone 的出色设计并不能明确感知,对 iPhone 的缺点也并不在意。此处的 iPhone 可以换成三星的 Galaxy,华为的 Mate,小米手机、Vivo/Oppo 等。屏幕大小、机身轻薄、续航长短,几乎就是普通人对手机的理解力的全部。前些天经历了这么一件事,同事一致觉得 Oppo 某中端手机和索尼 Xperia Z5 长得差不多,前者还更加轻薄,看似更好。

苹果被认为是最好的高端手机、三星被认为是最好的非苹果高端手机、小米被认为是便宜又不错的手机、华为被认为是国货里质量信号最好的、Oppo 好像到处能看到广告和实体店、HTC 是过气品牌现在都没人买……LG 和索尼也做手机?

充分商品化后的智能手机市场,难免陷入营销的苦战。

第二点不用多解释。不迎合国内市场的厂商已经全都被边缘化。国内二三四线城市的消费能力逐渐增强,他们可以提供压倒性的『销量』与『市场份额』。

除了很早就开始布局海外市场的华为,其他几家能否走出国内,短期内是否打算走出国内,都还要打个问号。不过纯看数字,今后的智能手机市场应该可以确定是中国厂商的天下了吧。

顺便,索尼昨天公布了最新一季度的财报,集团整体业绩尚可,更重要的是移动部门罕见地扭亏为盈。尽管2015年全年销量跌破3000万,不仅比前两年大减,甚至不如国内魅族等二线品牌,但依靠高端机型较高的利润率,反而盈利不少。毕竟,4999 的手机的销售额与利润都不是 699 的低端机可比。缩减产品线,减少不必要的开支,专心做旗舰产品,或许是一条正确的路。

写给程序员的 PHP 语法快速入门

post.php 以 POST 方式提交表单

main.php 接收 POST

session_cookie_get.php 将数据存至 session 与 Cookie

actionGet.php 接收 GET