K

Kinnouka Bokudo

When you see me, and I try to be a good man, you see yourself.

复盘

这是这个专栏的第二篇文章。前段时间我还在想,好久没听到令我厌恶的词,这个专栏有点空荡荡的,现在来了。 复盘,现在听到这个词,不会想到是在研究围棋对局过程中的得失。只会闻到一股浓浓的糟糕的企业文化的味道。如果有人在生活中也要用这个词,感觉就像,一下把你抓回不遵守劳动法的市场,天天加班,而且你居然还自我安慰:我以后再好好享受生活,以后会有时间。 除了以上双重难受,还有就是这个词,已经被滥用到失去了声韵上的美感,即使不考虑这个词现在的含义,光是听到这个词的声音,也会有种枯燥、干瘪的感觉。 下次你听到这个词,或者用到这个词,会怎么样?即使真的讨论围棋,会不会也觉得棋盘上被引入了什么怪味?

2025/1/20
articleCard.readMore

2024,年度好物分享

嘿,今年买的东西好像比较少,但是使用频率却比以往的高。以下这些东西,是我长时间使用后,仍然认为非常值得的。如果你有和我相似的需要,那这些物品也许也会是你的年度好物。 Shure SE846 Gen 2 我不喜欢无线耳机,因为总要关注他的电量,有时候正好想拿起就走,但耳机却没电。为了隔音(或者说被动降噪)好一点,我比较喜欢头戴式的,但又因为有眼镜的原因,头戴式的耳机总是比较夹头,长时间戴下来会不舒服。 所以之前我一直都是用 Apple 的 EarPods,就是那个普普通通的白色有线耳机,俗称「白开水」。有天心血来潮想去试试看看为什么一些耳机可以卖这么贵,然后经过一番研究,「Shure SE846 Gen 2」好像是其中性价比最高的耳机。而且诡异的是,我看了这个款耳机很多介绍、评价,但没有一个人说这款耳机不好,都在天花乱坠的夸。 然后我就去店里试听了一下,第一次戴这种挂耳式的,有点不太会戴。试听过后,好像也觉得普普通通,就很不屑的走出店,戴我自己的 EarPods 继续听。回不去了!马上把让耳朵难受 EarPods 扯下来,怎么这个耳机突然变得这么难听?原来是「曾经沧海难为水」,听过 Shure SE846 Gen 2 之后,其他耳机都不叫耳机了。 后来,就经常会戴 Shure SE846 Gen 2。我发现他隔音好好,因为耳塞材质的原因,降噪效果好像比 AirPods Pro/Max 还好。这是我今年买到最棒的东西之一。 Kobo Libra Colour 实体书很好,只是搬家时很麻烦,太大太重,要是哪天不小心死了,也很麻烦。所以我想开始看电子书。Kindle 有点老了,Kobo 我还从来没接触过,也正好赶上他新推出彩色版本,买来试试。 唯一比较惨的地方是,Kobo 没有办法在中国登陆自己的账号,也就没有联网的服务可以使用。因为他的 Wi-Fi 设置无法修改,所以除非路由 VPN,就真的没办法。要同步书,就必须手动管理。同事推荐我用 calibre 这个软件,再下载专门针对 Kobo 的插件,就可以比较方便的管理电子书籍。 Kobo 很好,用下来没发现缺点,在上面看过感动的漫画,也看过很有思想的书,一切体验都很好,所以我说他很好。 Hasselblad X1D II 关于 Hasselblad X1D II,我已经写过一篇文章《第十九台相机:哈苏(Hasselblad)X1D […]

2024/12/12
articleCard.readMore

落地

也许是因为在互联网行业工作的原因,接触到这次词的几率比较高,但我一直很不喜欢这种说法。 一般这个词会用在实现某种计划、方案,或者用代码写出软件的 UI、界面。我不理解为什么不能直接说成「实现这种方案」,而非要说「这个方案落地」;也不说「这个页面」,而说「落地页」。 谈到「落地」时,我第一个只想到飞机降落,除此之外好像日常生活中真的很少会用到「落地」这个词。当然最重要的是,也是我想写这篇文章的原因,我觉得这个词硬要与其他事物搭配在一起时,没有美感。 「方案落地」「落地页」听起来就像什么丑东西,人云亦云使用这些词的话,感觉会荼毒自己的生活。 当然这个词现在的用法也不是我最讨厌的,昨晚被雨吵得睡不着觉,就想到了这个词,我也还有很多其他讨厌的词的用法,就想干脆一起来写写我讨厌的东西,说不定有人和我一样讨厌,有人看到后也许也会意识到某些东西原本不应该这样,也许有人也会写信告诉我,告诉我一些我没想到的事。

2024/11/1
articleCard.readMore

第二十台相机:宝丽来(Polaroid)Impulse AF

很久没拍宝丽来了,把宝丽来 SLR670-X 卖掉后,再拍照时,总觉得有点单调,还是想来点「即影即有」的感觉。其实考虑过用富士,毕竟相纸便宜、显像稳定很多,但还是更喜欢宝丽来相纸的质感。 因为已经体验过宝丽来 SLR670-X 经典的外形了,所以就想尝试 600 系的宝丽来,600 系有很多代,有很多联名。一开始我想买旋风狗和毒蛙(恰好都是动物),喜欢他们的人也很多,所以他们就很贵。然后旋风狗容易掉漆;毒蛙又因为材质,年代久远容易变得粘手。我就继续找,直到看到了这台宝丽来 Impulse AF。 这台是警察局用的宝丽来,原本 Impulse AF 的外形就像从「垃圾堆」里翻出来一样,贴上这些贴纸,一下就让 Impulse AF 升华到废土世界。这台虽然已经买不到了,但我打算买一台原本的灰色 Impulse AF,然后自己贴一些贴纸,贴纸上会写我拍照时想要注意的事项和我的英文名,也就是第一张图和下面的图里的那样。 虽然不像那些流行的 600 系宝丽来光鲜靓丽,其实这台宝丽来优点很多。 首先他有声纳自动对焦,这应该是高端机型才有的功能吧?但他的声纳对焦不像宝丽来 680/690 那样有明显的反馈,而是完全没感觉,在影像显现出来前都不知道是不是真的对上焦了。实际上对得挺准的,清晰锐利。然后我很喜欢的是很大很亮的取景器,看起来比宝丽来 680/690 系列都大一点。其他还有倒计时拍摄、曝光补偿一些小功能。 唯一可能算是缺点的就是,闪光灯无法关闭,因为闪光灯就是相机开关,打开闪光灯才能打开镜头拍照。我一般也不会在不能用闪光灯的地方拍照,所以对我没有影响。 相关文章 《第十九台相机:哈苏(Hasselblad)X1D II》 《第十八台相机:宝丽来(Polaroid)Macro 5 SLR》 《第十七台相机:康泰时(Contax)S2》 《第十六台相机:宾得(Pentax)PC35AF-M SEDATE》 《第十五台相机:沙慕尼(Chamonix)4×5 F2》 《第十四台相机:康泰时(Contax)S2》 《第十三台相机:柯尼卡(Konica)Big Mini 301》 《三年,十二台相机》

2024/8/28
articleCard.readMore

第十九台相机:哈苏(Hasselblad)X1D II

忘了拍了多久胶片,一年?两年?三年?胶片真的美好,只是我想做一些摄影实验时,用胶片等待结果太慢,还可能浪费很多胶卷。还有时候,在毫无防备的情况下,一些动人的场景突然出现,如果想记录下来,还要撕开胶卷包装、拆掉胶卷的绑带、打开片仓装上胶卷、再关上片仓、测光、调整光圈快门、上弦过片,很多时刻就这样流逝掉了。所以我想买一台数码相机。 一直在徕卡 M262 和哈苏 X1D II 中纠结。之前用过徕卡 M262 的姊妹 M-E 240,体会过那种一个季度给相机充一次电的快乐,而 M262 更加纯粹,更加靠近我想要的摄影方向。但我现在想拍摄一些细腻微妙的事物,徕卡所呈现的质感虽然我很喜欢,还是更多想要一些淡然的感觉,以及我想体验一下哈苏自然色彩解决方案(HNCS)。 哈苏也有两个问题,一个是对焦很慢,不过我一向都是手动对焦,应该能接受慢慢自动对焦。还有一个是容易发热,我不确定是不同的人之间使用方式导致的,还是无论如何都容易发热。在 Reddit 上咨询了关于发热的问题,描述了我可能的用途,看看有没有人和我使用方式差不多,再看看他们的使用体验。最后,发热问题好像也还好。所以就买了一台哈苏 X1D II。我不想相机太重,也想尝试一些新焦段,所以镜头选择了最轻最小的 45P,等效全画幅焦距 35mm。 哈苏拿在手里非常舒服,有种「噢原来这就是北欧」的感觉。在公司随便拍了拍,从相机里预览照片的第一感受是,哈苏虽然不是那种乱拍也能拍得漂亮的相机,但能把漂亮的地方拍得更漂亮,屏幕里的景象呼之欲出。 后来外出拍摄了几次,还是遇到了发热问题,而且对焦有时候始终无法成功。如果长时间一直拍摄的话,相机很快就会过热,不过也只是手上拿着热,并不会无法使用、强制关机之类的。由于哈苏 X1D II 只有反差对焦,所以对焦在一些颜色差别不大的平面时,或者在暗光环境下,对焦就变得非常慢,甚至无法对焦,只能手动对焦。 我不喜欢数码相机的手动对焦,因为数码相机的手动对焦方式都很难用,哈苏 X1D II 也只有峰值对焦和放大对焦。我很难把控好峰值对焦点精确度,对焦区域都被峰值密密麻麻的点覆盖住了,往往需要拍摄完后仔细检查对焦情况。放大对焦会让取景器放大缩小,变来变去,也很难看。还是喜欢各种胶片相机的对焦方式。 虽然有这两个缺点,不过我本来的拍照习惯就是很慢,即使在刚刚所说的情况下,对焦拍照,也还是比我手动快。大部分情况下,对焦速度还是很快。 按照哈苏的说明书,想要获得哈苏自然色彩(HNCS)有两种方式,一种是通过相机 JPG 直出,另一种是将 RAW 导入哈苏的照片管理软件 Phocus,再输出 TIFF-16。前者的文件体积大概是 30MB,后者文件体积是 300MB 左右。但其实无论使用哪种方式都无法再现在屏幕里看到的照片的色彩,屏幕里的色彩太漂亮了,所以我为了更大后期调整空间,只拍摄 RAW 格式,虽然已经够惊艳,但还是会往屏幕里看到的样子再调整一些。 总之,我很喜欢哈苏 X1D II。以后应该会记录到许多值得留恋的瞬间。 相关文章 《第十八台相机:宝丽来(Polaroid)Macro 5 SLR》 《第十七台相机:康泰时(Contax)S2》 《第十六台相机:宾得(Pentax)PC35AF-M SEDATE》 《第十五台相机:沙慕尼(Chamonix)4×5 F2》 《第十四台相机:康泰时(Contax)S2》 […]

2024/8/8
articleCard.readMore

第十八台相机:宝丽来(Polaroid)Macro 5 SLR

在我还没买第一台宝丽来时,我就已经知道宝丽来 Macro 5 SLR,长久以来,我一直都很想买,因为我觉得他太特别了。 但他所需要的宽幅相纸已经停产,虽然可以使用宝丽来玩家自己开发的宽幅套件,让 i-Type 或者 600 相纸也能在这台相机上继续使用,但这样在不打磨滚轴的情况下,相纸会有缺角和黑边。因为宽幅相纸和目前还在发行的普通相纸感光区域不一样,挤压药水的区域也不一样。如果磨轴,又会对相机造成不可逆的伤害。 所以我一直没有买,因为买回来可能只能当作摆设。但是,我遇到一台超级便宜的宝丽来 Macro 5 SLR,而且还带有完整的包装和罕见的镜头配件,然后,我终于买了下来。 同时我也买了宽幅套件,为了尽可能减少缺角和黑边,我选择了圆框的宝丽来相纸。拿到的第一天,我就迫不及待开始乱拍。这是第一晚拍照时的录像:Bilibili / YouTube。 有种很久以前的愿望被实现的感觉,这台宝丽来 Macro 5 SLR 也没有落空我的期待,非常好玩,我想专门录个视频来介绍这台相机, 可是我太懒了,虽然连视频脚本都写了,但是没有去拍,所以下面就把脚本公布出来吧,这样我就不用重新写介绍啦: (诡异开场) (衔接开场,把宝丽来从头上拿下来)OK,现在来介绍宝丽来 Macro 5 SLR 的使用方法,我已经把他从这个非常好看的相机包里拿出来了。(切换帽子) (顶部特写)它之所以叫Macro 5 SLR,是因为他有五个拍摄距离设置,可以拍摄范围从 3米到最近的 8 厘米。SLR 就是单反的意思,意思就是你从取景器里看到的画面,将和你所拍到的画面完全一样。这里有些数字,1 倍、2  倍、 3倍这些,这些数字表示你的主体在相纸上会显示多大。1 倍就表示,假如拍摄像我手这样大小的东西,它将在底片上会以完全相同的大小显示。2倍就是我的手指看起来会是实际的两倍,3倍就是三倍大。 (人物)这台相机还有很多外号,比如牙医机,电饭煲。他叫牙医机是因为他可以拍得很近,所以以前牙医可以用这台相机来记录病人的牙齿。叫电饭煲是因为他长得有点像电饭煲吧。(切换帽子) (相机正面特写,慢镜头)这台相机需要用宝丽来的宽幅相纸,不过这款相纸已经停产了,我用的是 i-Type 圆框相纸和加宽幅套件。 (相纸入口特写)按下相机正面的这个按钮,就可以把相纸塞进去了。 (安装电池特写)然后我们再来把电池装好。 (相机背面特写) 现在来看一下这台相机的一些基础设置,首先是电源按钮,打开它,你可以选择使用前面的两个闪光灯,只用左边的或右边的闪光灯,或者干脆不用闪光灯。这个按钮可以重置。如果你的照片结果太亮或太暗,你可以通过这个按钮调节。这台相机还有闪光灯插口,让你可以接入外部闪光灯或工作室灯光之类的。 (相机背面、顶部特写)这个指示灯显示的是当前的拍摄距离设置,比如我们现在设置到 3m,指示灯亮的就是第一个,然后我们调到最近的 8 厘米,指示灯就变成了最后一个。 (相机背面特写)他还可以在照片上显示日期,不过最近能够显示的时间只能到 2000 几年了,但可以调整时间的格式,只显示月份、日期、时间之类的。 (相机正面特写)相机正面,这里是镜头,旁边是两个闪光灯,就是我之前提到的那两个。这里是对焦系统, […]

2024/8/8
articleCard.readMore

第十七台相机:康泰时(Contax)S2

之前买过一台康泰时 S2,在《第十四台相机:康泰时 S2》这篇文章中提过,不过后来卖掉了。然后我又买了一台,理由和我在那篇文章中差不多。这台相机实在是太优雅了,忍不住再次购买。 不过在写这篇文章时,我已经又把康泰时 S2 卖掉了,买来之后很少用到,只在泉州旅行时用过一次。放着不用的相机就会很伤心,不想每天沉溺在伤感的情绪里,所以就卖掉咯。 有了两次买卖经验,就来说说买卖这台相机时比较需要注意的事吧。 首先,康泰时 S2 总共有三个版本,第一个版本是 60 周年纪念版,这个版本发行量最大;第二个版本是由于纪念版销量太好所以推出的普通版,与纪念版唯一的区别就是机身正面没有「CONTAX 60 Years」字样;第三个版本是康泰时 S2b,黑色钛合金版本,与前两个版本最大的不同就是康泰时 S2b 的测光方式是中央重点测光,而不是点测光。这部分在《第十四台相机:康泰时 S2》中也提过。 然后这台相机有两个配件非常稀缺,取景器眼罩和背带。有眼罩和没有的完全是两台机器。眼罩在取景时不仅可以防止取景器撞到眼睛,或者刮花眼镜镜片,还可以很好的平衡相机外形。有的卖家会用第三方眼罩替代,但第三方眼罩不仅外观没有康泰时的协调,还有可能是硬塞进去,弄坏取景器。康泰时 S2 原装取景器眼罩型号是 CONTAX F-3,眼罩背部可以看到标识。 康泰时 S2 的背带设计得也非常好看和实用,左右两侧各有一个小皮包,可以用来放胶卷或者硬币,硬币主要是用来打开康泰时 S2 底部的电池仓,也可以投到自动贩卖机里,买一瓶宝矿力水特,然后自动贩卖机会找你更多硬币。有的背带上的「CONTAX 60 Years」烫金文字可能已经被磨掉,这个我觉得无关紧要,我还比较喜欢没有烫金文字的背带。 另外康泰时 S2 以及同时期康泰时其他机型可能都存在反光板下滑的问题,特别是在天气热的时候,因为康泰时 S2 反光板的背胶不是特别牢固,严重的话可能会刮到镜头后镜和损伤相机。不过这个问题也很好解决,我自己是用吹风机热风先将背胶稍微融化,然后用薄片把反光板翘起来一点,再在间隙中滴入一滴强力胶,最后合上,这个问题就永久解决啦。买到我用过的相机的人就可以享清福了。 以上就是买卖时需要注意的事,配件齐不齐全,反光板下滑问题怎么样。当然不要忘了还有些基本的,外观新不新,功能有没有问题之类的。希望大家都能遇到像我这样的卖家。

2024/5/30
articleCard.readMore

稻荷山

爬上山顶,就是爬上山顶,山顶什么也没有,心里也只有一种感受:噢,原来这就是山顶。爬山的时候是黄金时间,下山的时候是蓝调时刻,路过一个观景点时,太阳刚好完全落山,只听见了一群人鼓掌的余声。

2024/5/6
articleCard.readMore

Dave Chappelle: The Closer

最近没怎么看电影,看了一些 Netflix 的脱口秀特辑,目前每一部都很喜欢,悲喜交加,获益匪浅。最打动我的,甚至让我想特别记录下来的,还是这部 Dave Chappelle 的收官之作《The Closer》,中文译名为《戴夫·查普尔:胜利最终章》。 Dave Chappelle 在这场脱口秀里提到一个朋友,Daphne Dorman,她是一个热爱喜剧但不得其门而入的跨性别女性。对于 Dave Chappelle 每个充满争议性的跨性别议题玩笑,她都会笑,他们后来成了很好的朋友,Dave Chappelle 还邀请她做表演开场嘉宾。虽然演出很糟糕,但观众、Dave Chappelle,以及其他一些工作人员,还是被她的风趣打动,每个人都很喜欢她。 不过因为充满争议的跨性别议题内容,Dave Chappelle 被跨性别群体口诛笔伐,Daphne Dorman 站出来为他发声。Dave Chappelle 念了她当时所写的推文,也就是下面这段: Punching down requires you to consider yourself superior to another group. @DaveChappelle doesn’t consider himself better than me in any way. He isn’t punching up or punching down. He’s punching lines. […]

2024/4/20
articleCard.readMore

语言是思想的边界

「语言是思想的边界」,虽然很早就把专栏命名为这个名字,但现在想来诠释一下我的想法。 最近看到有关「破防」的讨论,这两个字已经能表达许多不同的情绪,比如失望,意外,感动等等。在我印象里,最早被使用的这类词应该是「我操」,生气可以说「我操」,开心可以说「我操」,无论什么情况,都可以说「我操」。 这种单一的表达我已经厌倦了很久,一方面是讨厌人云亦云,另一方面是不敢让思想停下来,担心面对风景,心里只有「我操」两个字,或者总是把「那种感觉」「不知道为什么」挂在嘴上。这也是我持续写文章的动力,即使写得很烂,我也还是想尽可能完整清晰的表达出想法、感受,我也想可以说出「落霞与孤鹜齐飞,秋水共长天一色」这样的话,这样也许有一天就能写出自己满意的文字了吧。 所以,我想,讲不同的话,使用精确的语言,思想也许就不会被禁锢下来,尤其是在这样一个垃圾和虚假信息满天飞的时代,思想变得更为重要。

2024/4/18
articleCard.readMore

对街头卖惨表演的看法

地上铺满家庭饥寒交迫境遇的宣传海报,把妻子小孩放在寒风中,然后唱一些自我感动的老歌,本意是想要博得路人同情,换取金钱,但每次路过只催生出我恶心的感觉,想一脚把他面前装钱的铁盒踢飞。 他们可能不会站在路人的角度着想,以为自己需要同情,所以就努力卖惨,但这样消费同情的方式实在让同情变得太廉价。同情心不应该这样用。 让路人捐款最好的方式是,呈现精彩的表演,博得路人掌声,既实现自我价值,也不会让人纠结你到底是不是骗子,因为表演是真实的,赏心悦目是真实的,所以路人付钱的意愿会大大增加。

2024/3/10
articleCard.readMore

《民主森林》

摄影集买太多,对于经常搬家的我来说,行李变得很重。而且,平时放在书柜,不看也怪可惜的。所以从前段时间开始卖,陆陆续续已经卖掉一些。 卖掉的摄影集并不是不好,只是我觉得对我影响可能没这么大。像 Alex Webb、Alex Soth、川内伦子和一些其他摄影师的摄影集,我就没卖,因为我仍在从他们的照片里收获感动。深濑昌久的《鸦》,梅佳代的《男子》《うめめ》,刘涛的《走来走去》等等等等,在卖掉前,我也纠结,因为这些都是我以前想要收藏的,非常特别的摄影集,都是杰作。 今晚,有位买家,想买我曾经最想卖掉的摄影集,William Eggleston 的《The Democratic Forest》。为什么最想卖掉呢,因为这不是一本摄影集,而是一套,总共十本,也是所有摄影集中对我搬家负担最大的。当时抱回家后,手酸了好几天。 按照惯例,再卖出前,我会把这些摄影集再看最后一次。但看到第二本时,我就已经舍不得卖。这套摄影集的名字虽然是《民主森林》,但没有政治意涵,「民主」是指,取景器内的一切事物都是平等的。「森林」应该是指照片多吧? 这套摄影集里,William Eggleston 拍摄的都是一些稀松平常的景象,有的照片看起来就像刚出门,觉得阳光还不错,随手拍了一张。可是为什么每一张照片都这么漂亮。而且不仅仅是有些照片好看而已,是每一张都这么惊艳。我无法准确描述出看到这些照片时内心的感受,同时我知道,这套摄影集不应该卖。 书的最后有一句话:「I am at war with the obvious」,从去年开始,我把这句话写在了摄影网站上,也一直努力实践着这句话,对抗那显而易见的平凡事物。就如同那位苏联工人写给 Andrei Tarkovsky 的信中所说:「我因为《镜子》写信给您,关于这部电影我没什么可说的,我因为它而活着。」

2024/2/29
articleCard.readMore

电梯英雄

其实我是不想在电梯上走的,但有时候为了不堵住别人,不得不往前走。每当看到电梯上有人帮我堵住别人,我心里都想说「My friend,you are a true hero」。

2024/2/1
articleCard.readMore

2023,年度好物分享

2023,你过得还好吗?叔本华把人生的幸福分为三个部分,这篇文章里只有第二个部分的内容,即与人有关的外物。以下是我的一些外在享受来源,如果你有和我相似的需要,那这些物品也许也会是你的年度好物。 Apple Studio Display 显示器 在写代码的时候,我喜欢使用巨大的视窗,在屏幕上,尽可能多的显示代码。所以我需要大的显示屏。并且我也有处理图片的需求,将照片铺满屏幕,色彩准确,所有细节一览无余,会让人觉得好像提升了对画面的把控力。我也很喜欢看电影,一块大的、素质高的屏幕可以带来更好的观影体验。 真力(Genelec) G Two 音箱 声音也是不可忽视的。虽然 Studio Display 自带的六扬声器系统已经足够出彩,不过想要更上一层楼,还是需要专业的桌面音响。在结合放置环境调整低频输出,并搭配扬声器支架后,可以有效减少低频驻波问题。然后无论是音乐,还是电影,声音的层次感都会非常清晰、丰富,会带给你无与伦比的沉浸感。 沙慕尼(Chamonix)45F-2 大画幅相机 由此迈进摄影的下一个纪元。我已经忘了为什么买这台相机,好像是因为漂亮吧。用这台相机拍过很多感动的画面,而且伴随着每张照片一百多块钱成本的压力,以及复杂、繁琐的拍摄流程,在这样的拍摄时间里,很难不去仔细思考如何拍摄一张照片,所以也很难拍出不喜欢的照片。关于这台相机,也在之前的文章《第十五台相机:沙慕尼 4×5 F2》中介绍过。 Shimoda X30 摄影背包 为了将大画幅相机方便的带出门,需要一个摄影背包,在对比众多摄影背包后,Shimoda X30 是从功能和容量上最适合我的。首先 Shimoda X30 的收纳设计非常棒,无论是携带大画幅相机还是其他相机,都可以通过调整内胆的隔板,来达到非常稳固的效果。然后 Shimoda X30 的负重设计也非常棒,让我印象最深的是,十月的香港还很热,我用 Shimoda X30 背着所有行李走了一上午,完全不觉得累,即使到酒店已经满身大汗。 戴森空气净化器 不知道是不是住在江边的缘故,家里的灰尘总是很多,我也担心在这样租的房子里会不会有什么房东没有提及的挥发性物质,所以一台空气净化器可以让人安心很多,而且戴森的空气净化器可以实时查看当前屋内的空气品质,数据非常详细。最近天气变冷,在回家前,我会远程打开戴森空气净化器的热风,到家时就不至于继续冷下去。 Atkinsons – Lavender on the Rocks 香水 有时候生活需要一些小小的变化,这次我选择从一瓶香水开始。这是我第一次给自己买香水,选择了 EDC 推荐的 Atkinsons,同时也是他的同款 Lavender on the Rocks,虽然薰衣草听起来有种略显轻浮的气质,不过还有「on the Rocks」。根据我的体验下来,这款香水在晚上的时候最好闻。

2023/12/20
articleCard.readMore

《大画幅 4×5》复活

在搜寻大画幅相关资料时,偶然看到一篇写于十四年前名为《大画幅 4×5》的帖子,里面汇聚了非常有价值的关于大画幅的内容,不过这篇帖子目前已无法找到。所以我将当初保存的这篇帖子略作排版、校对,以便阅读,并在我的个人网站上复活。 第一部分 提起 4×5 相机,这对很多资深发烧友和专业摄影师并不漠生,4×5 是指这类相机所使用的底片具有 4 英寸乘以 5 英寸的大画幅,许多摄影师用它来拍摄风光、广告、建筑和人像等,其实 4×5 相机只是技术相机家庭中的一个小兄弟,还有 5×7 英寸相机和 8×10 英寸相机甚至更大型画面的照相机。  4×5 相机虽不及 8×10 相机所拍摄的照片那样细腻,但它同样能够矫正景物透视变形、控制景深、同时又具有体积较小、重量较轻、拍摄成本较低、画幅较大的优势,能够适应绝大部分拍摄题材的要求,它所具备的技术素质是现有 120 相机和 135 相机无法比拟的。 4×5 相机有单轨、双轨之分。轨是指承载前组、后组并可在上面滑动的轨道,在双轨相机的基础上,发展出了单轨相机,早期的木制相机均属于双轨,现代木制相机仍未失宠,且很多摄影师对它还情有独钟,因为较之金属制品,它的重量较轻,这对于风光摄影师来讲,优点实在明显。在高原缺氧,长途跋涉的情况下,每一公斤都是沉重的负担,有些人同时使用的三脚架也为木制,除了这种三脚架遇风时没有共振的优点外,就是因为它轻、易携带。但木制相机也有不尽如人意的地方,例如旋钮较多,不够坚固,前后组不能作较大移动移动等缺点,但熟练以后,仍是一件顺手的兵器,木制相机有国产申豪和国仕,日本产骑士(HORSEMAN),金属质地的双轨相机有德制林哈夫(LINHLF)特艺卡 23/45 型和 2000 型,日制骑士 45FA 及星座(TOYO)45A 等。 单轨相机较双轨相机具有更加灵活的置换性,相机的主要部件都可以随意组合、装卸。单轨相机有更加广泛的可变性,前后组的摇摆、仰俯、平移、升降都有更大的幅度,在广告、建筑摄影中有更加明显的优势,但单轨相机折叠后体积仍然较大,不便于携带。在换用广角镜头时,还需要换广角皮腔,风中稳固性不如双轨型相机,如用它来拍摄风光,那您最好在风平浪静的情况下,早已做好了一切准备,包括完成精确对焦、重复设置了光圈、快门、紧固了所有旋钮,甚至叉好了后背。  单轨相机的代表产品有瑞士的仙娜(SINAR)、荷兰的金宝(CAMBO)、德国的林哈夫 GTL 系列,星座 C 系列等。 每一个品牌的 4×5 相机大都自成体系,除标准配置外,还有些特殊配件,如广角皮腔,它除了在使用广角镜头时换回外,还可做取景挡光器;延长轨是在使用长焦镜头时使用,如果想得到更长焦距的效果,那么就要多接几根轨道和皮腔,多用几个三脚架加以稳定。由于大型相机的取景是通过毛玻璃直视取景。 所以照片影像是上下左右是完全相反的,这在没有完全习惯以前,容易造成错觉,所以就有了正像取景器,但正像放大取景器更是巨大,很难带到野外,从而成为了影楼专利。  4×5 相机所使用的底片匣可以说是多种多样,有标准 4×5 双面装片散页背,也有一次可插入 10 张散页片的片匣,拍完一张后将片匣插片的片匣,一推就可以将已拍摄的散页片推就可以将已拍摄的散页片推到下层,并将待拍的片子顶到表层来。各种品牌和规格的散页片右上方都有表明片型的缺口,它既便于摄影师在暗室袋中装片时确定胶片的正反面,又能从缺口的触觉中判断片型。为免除摄影师在暗室装片之苦和外拍时要带过多后背之累,市场推出了快装片,只须一个特殊片匣,即便是携带百十张片子也无多大份量,而且拍完的片很干净,只是成本稍高,胶片品种也较少。 4×5 相机只需换上卷片背就可使用 120 胶卷拍摄,画面规格有:6×7cm、6×9cm、6×12cm。现今市场上也有插入式卷片后背出售,装后背时不用取下对焦屏,而是象标准散页背那样直接插入即可,大大方便了摄影师。只是想得到 6×17cm 画面的人们还得取下原有对焦屏,换用 6×17cm […]

2023/11/28
articleCard.readMore

新加坡华侨银行(OCBC)开户指南

简介 华侨银行(Oversea-Chinese Banking Corporation Limited,简称 OCBC)是新加坡三大银行之一,和新加坡历史最悠久的银行之一,也是《Global Finance》去年公布的全球最安全银行排行榜第 3 名。网站和 App 支持中文,并且有中文客服,允许中国人通过 App 在线开户。 开户前的准备 支持 NFC 的手机;下载 OCBC Digital App(App Store / Google Play);支持 NFC 的护照(可以在最后一页查看是否支持 NFC);身份证;$1000 SGD(新元,国内同名账户现汇)。 开户 打开 OCBC Digital App 根据要求进行操作,并如实填写信息。 其中需要注意的是:扫描护照 NFC 时,请将手机顶部靠近护照封底的中间位置,因为手机 NFC 一般在顶部位置;填写税号时请填写身份证号;邀请码可以填写 XHJAGDOS,这样我们都有机会获得 $15 SGD 奖励金。 申请后进入审核流程,一般会在几个工作日内得到审核结果,也有可能立刻得到审核结果。审核通过后,也就代表账户开通成功了。 然后设置 Access Code、PIN 和 OneToken,这三者分别相当于用户名、密码和二次验证。Access Code 和 PIN 用来登陆 OCBC 账户,务必牢记。OneToken […]

2023/11/7
articleCard.readMore

第十六台相机:宾得(Pentax)PC35AF-M SEDATE

这台相机其实在《第十三台相机:柯尼卡 Big Mini 301》中出现过,不过当时选择了重量和体积都更小巧的柯尼卡。后来陆陆续续卖掉了所有 135 画幅的相机,用中画幅和大画幅和拍摄了许多照片后,认为自己还是需要一台随身携带的傻瓜机。 然后这次选择了宾得 PC35AF。宾得 PC35AF 一共有三代,我买的是最后一代。重量比大部分傻瓜机稍微重一点,好像是因为顶部和底部是黄铜材质。体积差不多相当于三个 135 胶卷盒堆在一起,有凸起的手柄,对我来说,拿在手里感觉恰到好处。 目前已经用这台相机随行拍摄了两卷胶卷,图像异常锐利,有传闻说是用了萤石镜片的缘故。我这台闪光灯充电时间有点久,大约要十几秒闪光灯指示灯才会亮,但是实际上打开闪光灯几秒钟之后,即使闪光灯指示灯还没亮,拍照也会有闪光,不知道闪光强度会不会有区别。 这台相机还有个非常让我放心的功能,他的镜头盖是滑动的,关上的时候可以保护镜头和取景器,同时也可以锁住快门。打开的话,只要拨一下镜头盖旁边的拨片,「啪」的一声,镜头盖就自动打开了。要是这个开盖声音更好听就好了,类似「铿~」那种弹性金属撞击余音绕梁的感觉。 虽然这些傻瓜机大多都有日期打印功能,不过几十年前的老相机,能设置到最近的年份也是二零零几年,所以我都会把日期打印后背的电池扣掉,以防腐蚀漏夜。

2023/11/1
articleCard.readMore

第十五台相机:沙慕尼(Chamonix)4×5 F2

也许有一天,很无聊,突然想拍大画幅,我就去看了很多大画幅相机,在众多相机里,沙慕尼 4×5 F2 是价格、重量和外观对我来说最均衡的,这个领域里有一台我用起来会开心的相机,所以我决定开始大画幅摄影。 在等相机的那段时间里,学习了很多如何使用大画幅相机,也买了很多……沙慕尼 4×5 F2,施耐德 Apo-Symmar 150mm F/5.6,晟崴 GH-PRO 云台和 T3240CK 三脚架,Shimoda X30 摄影背包,世光 L-408 测光表,Fidelity Elite 4×5 片夹 * 4,FLM 冠布,马田暗袋和反光板,Minette 4x 放大镜,柯达 E100 * 10,杜马克防 X 光铅袋…… 陆陆续续收到快递,直到可以拍照那天,我把相机拼起来拍了张照。 在所有快递包裹达到前,我就已经在主页写好了《为你照相》,希望有人可以来找我拍照。好在真的有人联系我,我也主动找了一些朋友,下面是我在准备给他们拍照时,他们给我拍的照片: 这是同事家里,他的外甥侄女暑假来上海玩,我去给他们拍合照。 这是我第一次外出拍照,大人和小孩安静的坐在一起,观察整个环境的光影,会有一种时间流动变慢的感觉。好像明白了全家福的意义和快乐。 后来有位朋友生日,我想不如用沙慕尼 4×5 F2 给她拍照当作生日礼物。然后她叫上朋友,我在江边一起给她们拍了合照。 其中有一张照片是在草地上拍的,她们一共四个人,很像上田义彦的那张照片。 前几次拍摄,有拍得好的,也有没拍好的,但总的来说,用大画幅拍照,我很喜欢。

2023/8/16
articleCard.readMore

Xbox 连接 Studio Display

连接方式可以分为两种,一种是勉强能玩,一种是「嗯!这才是我要的」。 勉强能玩 因为 Studio Display 只有 USB-C 接口,Xbox 只有 HDMI 接口,所以只需要买一条 HDMI 转 USB-C 线就可以了,比如 Club3D HDMI to Type-C: Xbox —— Club3D HDMI to Type-C —— Studio Display 另一种方法就是用转换器,比如 PeakDo HDMI 转 Type-C 转换器,分别连接 HDMI 线和 USB-C 线: Xbox —— Xbox HDMI 线 —— PeakDo —— Studio Display 雷雳连接线 —— Studio Display 不过使用以上方式画质只能达到 1080P 60 […]

2023/5/12
articleCard.readMore

Twitter、Apple、Meta 和 Reddit 广告平台使用体验

我在这四个平台都是用 App Promotion(或称 App Install)类型的广告来推广我开发的 App,所以本文的体验只针对种这类型的广告。 Twitter Ads 我在 Twitter 看到过很多精美的广告,即使对业务不感兴趣,也当艺术享受想多看一点,所以 Twitter 是我第一个尝试打广告的平台。 但在 Twitter 创建 App Promotion 广告非常麻烦,必须要引入第三方机构来监测广告效率。Twitter 有提供一些第三方选项,我联系过几个,但看不懂他们的业务,太复杂和麻烦了,应该不太适合个人开发者,所以我放弃了。 然后我就想曲线救国,使用 Web Traffic 广告,用户点击跳转的网址就是 App Store 的地址,虽然体验应该不如 App Promotion,但至少用户还是可以看到和下载我的 App。 最后广告进入审核阶段,审核的时间很长,网上关于 Twitter 审核时长的问题也很多,我等了差不多一个月左右(已经无所谓能不能在 Twitter 上打广告了),Twitter 告诉我,我没有打广告的资格…… Apple Search Ads Apple Search Ads 比较特殊,如果想在国内打广告需要提交一些政府授予的什么资格证书,我看到这些字就直接关掉,打开美区 Apple Search Ads,就在美国打广告吧。 Apple Search Ads 有两种类型,Advance 和 Basic,Advance 可以让广告自定义程度更高,Basic 可以方便快捷的创建广告。其他平台也有做这种区分,命名也许不一样。我一开始选了 Advance,然后就再也切换不到 […]

2023/4/27
articleCard.readMore

第十四台相机:康泰时(Contax)S2

柯尼卡(详见《第十三台相机:柯尼卡 Big Mini 301》)被我卖掉了,因为傻瓜机拍照太快,我来不及思考就愉悦的按下快门,我不想这样,我想在拍照时思考更多,让拍照过程慢一点也许可以帮到我。 所以我想买台机械胶片相机,一定要有过片扳手,我很喜欢那种,拍一张照片,搬动一次的感觉。 在用过和了解过众多相机后,康泰时是我所有感兴趣的胶片相机中,唯一没买过的,所以这次我准备买康泰时。 然后我发现了康泰时 S2,这是为了纪念康泰时 60 周年而出的一款相机。机械快门,钛合金机身,带有过片扳手,完美符合我的要求。虽然有装上电池可以有测光(点测光)功能,但不装电池也完全不影响使用。 康泰时 S2 总共有三个版本,第一个是最初的 60 周年纪念版,这个版本发行量最大;第二个是由于纪念版销量太好所以推出的普通版,与纪念版唯一的区别就是机身正面没有「CONTAX 60 Years」字样;第三个版本是康泰时 S2b,黑色钛合金版本,与前两个版本最大的不同就是康泰时 S2b 的测光方式是中央重点测光,而不是点测光。 很多人都说康泰时 S2 快门声音很大,我在安静环境下听过,像很温柔的钟声。不同于大部分相机的「咔嚓」一声,康泰时 S2 的声音听起来更像是「噔~~~」,有回音的感觉,但也没有很大。YouTube 上甚至还有康泰时 S2 的快门声测试视频和 ASMR 视频。 康泰时 S2 也是康泰时的最后一款机械胶片相机。一般来说,随着相机厂商的发展,越靠后的相机,往往集成越多功能。可是康泰时 S2 只保留了与摄影要素相关的功能,光圈、快门和感光度,大道至简,就像他宣传手册里写的「Back to Camera Basics」。

2023/4/14
articleCard.readMore

你到底什么时候买相机

你看上一台相机,觉得价格太贵,想等一等,等到价格降下来再买,可是价格不仅没有降下来,反而涨价,你后悔没有早点买。 你看上一台相机,觉得价格太贵,想等一等,等到价格降下来再买,可是等了很久,价格还是没降下来,这个时候推出新的机型了,你开始等新的机型价格降下来再买。 你看上一台相机,觉得价格太贵,想等一等,等到价格降下来再买,价格终于降下来了,你终于买了相机,可是你已经错过了那么多可以拍照的时刻。

2023/4/13
articleCard.readMore

拍摄胶片的理由

一开始只是想买漂亮相机,可是数码相机大多千篇一律,后来偶然看到什么不用电池的相机,才想起胶片相机的存在。然后回忆起很小的时候用过的胶片相机,记忆里只剩下模糊的相机轮廓,还有大人告诫的不要把胶卷扯出来(这种找回遗忘的记忆的感觉有点奇怪)。 所以就重新认识胶片,被胶片的色彩和质感吸引,开始了胶片摄影。 我以前都只拍数码,在拍摄胶片后,可以把自己拍的照片拿在手上,那种感动还是第一次有。光线是真实的,分子是真实的,从头到尾所有事情都发生在真实世界,没有数据的概念,在这个被互联网撕裂的世界里,有这样的体验很宝贵。 之后的一年里,我都用胶片拍照,节奏慢了很多,每次按快门内心好像都变得平静明朗一点。现在回顾那时候,好像胶片并没有让我摄影技术有什么提升,主要是提升了心境,而且拍胶片时,我很开心,开心就够了。 胶片拍多了又会想拍数码,然后又开始拍数码,然后又拍胶片,然后混合着拍。不过还是胶片最得我心,我把数码相机都卖掉了,只留下胶片相机。 最近沿着苏州河走了几次,很认真拍了几卷胶片,但满意的很少,放在以前可能满意的很多(拍胶片容易自我感动)。所以我意识到我应该思考「我到底在拍什么」,我一直知道这个问题,直到最近我才认为理解了这个问题。 现在在按下快门前,甚至测光前,我会思考得比以前多一点,我眼里的场景,内心的感受,该如何表现出来,差不多有一半的时候我会放弃,因为我觉得不行,另一半的时候,我会想办法。在用数码相机时,最担心没拍到,想都不想,一下午几百张,现在反而因为很多东西觉得拍不出来,才干脆用眼睛好好享受,这也是一种享受。

2023/3/31
articleCard.readMore

HomePod 不能作为 Mac 音响

为了更好的影音体验,我想买对桌面音响,正好这个时候 Apple 推出了第 2 代 HomePod,然后我买来两台组成立体声组合。 虽然影音体验变得非常好,但也有以下几项无法忍受的不足之处。 延迟 延迟不是指声音和画面不同步(这种现象我没有遇到),延迟是指:当你按下播放音乐按钮,两秒之后,音乐才会开始播放;当你暂停音乐,音乐会继续播放两秒,然后才会停止。看电影也是如此,当你打开一部电影,两秒钟后电影才会有声音;当你暂停播放,电影的声音会继续播放两秒。 只要与声音有关的,就会存在两秒延迟。而且这两秒的延迟不是我主观的感受,是真实、准确的两秒。在搜索与 HomePod 延迟有关的问题时,看到很多解释,但没有解决办法。不过如果使用 Apple TV 连接 HomePod,就不会有这种现象。 摆放位置 HomePod 很吸引我的一点是室内空间感应,可以在我没有经过声学装修的房间里,解决一些传统音响的低频驻波问题。 然后我按照苹果官方手册进行摆放。 为获得最佳环绕声,请将 HomePod 放在距离墙 25 厘米(10 英寸)范围内,并尽可能靠近电视的中心。为获得最佳环绕声,两个 HomePod 扬声器应相距约 1.2 米(4 英尺)。 但我发现 HomePod 也不是能随便摆的,即使在苹果官方手册推荐的范围内,摆放的位置不同,也会产生非常明显的不同听感,甚至有时候可以用糟糕来形容,我觉得是计算音频的问题,计算得有问题。 HomePod 无法作为 Mac 的默认扬声器 在网上搜索「HomePod 作为 Mac 扬声器」之类的,你可能会看到从 MacOS 11.3 开始,Mac 正式支持 HomePod 立体声输出,于是我认为 HomePod 是可以作为 Mac 默认扬声器的,但事实是,这个「默认」是一次性的。 当你在 Mac 声音设置中将 […]

2023/3/9
articleCard.readMore

男性生来就是残缺的女性

昨晚看《德菲因与卡罗尔:反叛缪斯》,以为是香特尔·阿克曼拍的,但其实这部电影是记录女性主义运动的,香特尔·阿克曼有出镜。 影片中记录的女性状况,在五十年后的今天依然没有改善,甚至现在反抗、发声的权力也在被剥夺。即使今天这个时代,她们依然先锋。 电影结尾的地方有段宣读《人渣宣言》的片段: 男性生来就是残缺的女性。 作为不完整的女性,男性穷尽毕生试图完善自己以成为女性。为了达成这一目的,他们不断探索,与女性亲密接触,试图与女性共存,并声称自己拥有女性的所有特征——情感强烈、独立、有力、活力四射,果断,冷静,客观,自信,勇敢,正直,具有生命力,坚强,品格高尚,时髦等等等等——并将所有男性特征投射到女性身上——虚荣,轻浮,浅薄等等等等。 然后我找到完整的《人渣宣言》的中文译文,译者前言里有段话说得非常好: 虽然她的本意可能的确是论述「男性弱于女性」这一显然有诸多漏洞可以驳斥的观点,但对于半世纪之后的阅读者,能够从她的宣言中感受到多年以来社会中对女性的刻板印象是怎样的无稽之谈,或者崇尚父权统治是如何荒谬,我认为这就是这份看似极端的「仇男宣言」的意义所在。 点击链接阅读全文。

2023/3/9
articleCard.readMore

第十三台相机:柯尼卡(Konica)Big Mini 301

才写完《三年,十二台相机》没多久,又买了一台新相机······ 最近想买台傻瓜胶片机,装进口袋,随行记录,对比了多款(奥林巴斯 U2,富士 TIARA II,宾得 PC35AF,美能达 AF-S 等)后,最后选择了「柯尼卡 Big Mini 301」。 虽然奥林巴斯 U2 和富士 TIARA II 深得我心,因为我想要的傻瓜机就是不用取下镜头盖,滑开滑盖就能拍照,但 U2 取景器太小,而且现在价格虚高,再加上漫天的对焦问题让我把它排除在外;TIARA II 也是价格太高。 宾得 PC35AF 比较冷门,找到的资料几乎都是好评,比如跟康泰时 T3 难分伯仲之类的,不过外形硬朗,体积在这些相机中偏大,不太便携。 美能达 AF-S 型号众多,其中我最喜欢 AF-S V&D 这款,但没在亚洲地区找到合适的:每个卖家都会缺少 AF-S 镜头盖,而 AF-S 系列最重要的就是那块长相奇怪的镜头盖,镜头盖就是相机开关,没有镜头盖,相机会一直处于开机状态。 最后只有柯尼卡 Big Mini 301 在各个方面取得完美平衡。 Big Mini 301 小巧轻便,手感极佳,取景器够大够明亮,外形在傻瓜机中也属于典雅一列。 除了排线断裂问题,几乎没人提及拍照时的缺点,比如对不上焦什么之类的,HIROMIX(利川裕美)还用这台相机拍摄影集《Seventeen Girl Days》,获得 Canon 写真新世纪、木村伊兵卫赏和首届的荒木经惟赏,所以用来拍摄肯定不用担心。排线问题只能换卷时小心一点,不过断了现在也能修。 Big Mini 301 支持在照片上打印日期,同系列的 300 […]

2023/2/10
articleCard.readMore

三年,十二台相机

2020 春夏之交,我买了第一台相机,富士 X100V。 拿到相机的第一天,晚上我去拍了很多照片,这台也成了我用过的相机里,拍照最多的相机。但我那时候不喜欢保留废片,绝大部分照片都删掉,现在也再没有重新审视当初照片的机会。 富士 X100V 镜头很短,和机身看起来不够协调,我找到一块金属边框很厚的 UV 镜,装在镜头前可以延长镜头的长度,看起来更舒服。我还找了很多机内滤镜的配置参数,以及各种后期的方式,想尽可能模拟我当时还从来没接触过的胶片,但始终不够好,然后我想,干脆直接用胶片好了。 在挑选第一台胶片相机的过程中,我接触到宝丽来。当时最新的宝丽来是 OneStep+,白色机身搭配彩虹线条,恰到好处的棱角与弧线,是我见过最漂亮的相机(虽然后来不是了),我立刻买下一台,还一起买了直至现在也是我最喜欢的相机背带,宝丽来圆形彩虹背带。 给人拍照,就有宝丽来和数码两种选择,宝丽来可以作为道具,也可以拍出意外之喜。用好看的相机,和人面对好看的相机,是两种同时存在的享受。 富士 X100V 和宝丽来 OneStep+ 后来,好像没过多久,我还是按照最初的想法,陆续卖掉 X100V 和 OneStep+,买了第一台胶片相机,美能达 Autocord。 Autocord 是纯机械的中画幅胶片相机,每次拍照需要手动测光,调节光圈、快门速度和焦距,还要给快门上弦,一卷胶卷只能拍摄 12 张照片,每次拍完还要回收胶卷,再填装新的胶卷。 这样的拍摄方式让我慢下来,慢下来就有了思考的时间,大多数时候我心里会产生一个问题,这张照片值得拍吗?然后我按快门的次数就变少了,但每一张冲洗出来的照片我都比数码照片更加喜欢。 美能达 Autocord 那时中画幅胶卷还比 135 胶卷贵,我不能负担起高频率的拍摄,同时我也想尝试更自动化的胶片相机,于是我买了一台傻瓜机,美能达 AF-S Quartz Auto Focus D:一卷胶卷可以拍摄 36 张照片,而且它的镜头盖就是相机的开关。这也是唯一一台坏在我手里的相机,我把它摔烂了,尝试修它时又把电子排线弄断,就彻底坏掉了。 坏掉之后,我想买一台介于纯机械和傻瓜机之间的相机,所以我买了第三台胶片相机,美能达 X-700:比起傻瓜机,可以控制对焦和曝光,每拍完一张照片,扳动一次过片把手,听齿轮旋转的声音,是一种十足的享受。 可我还是怀念 AF-S,它就像那种傻得可爱的人一样,我想再买一台,却没找到像我之前那样好的,不过发现了另一台傻瓜机,美能达 APEX 105。 APEX 105 长相很奇怪,像一台投影仪,但很漂亮。这台相机也是我现在唯一留下的美能达相机。 从左至右:美能达 X-700,美能达 AF-S Quartz Auto Focus D,美能达 APEX […]

2023/1/30
articleCard.readMore

恐怖片很好看啊

Dwight 给我推荐了一份恐怖电影清单《Letterboxd’s Top 250 Horror Films》,然后简单介绍了些恐怖片,引发了我的兴趣。 目前我还记得他谈到其中一部时说:「如果人死后真的会有灵魂存在,那从人类诞生以来,死了这么多人,地球装得下这么多灵魂吗?」 在看过这份清单里的一些恐怖片后,我发现我已经没有了小时候看恐怖片的感觉,不会始终处在一种恐怖的氛围中,反而期待剧情接下来的发展。也许是因为这些恐怖片都是足够好的电影,但总之这让我产生了一些想法,就是,恐怖片总是可以很好看。 首先对于一些评分、评价很高,很有深度的恐怖片,肯定是很好看,比如我最近看的《X 圣治》之类的。 但是对于那些不是经典意义上的好电影的恐怖片,比如也是我最近看的《X》《珀尔》之类的,这类型的恐怖片就好看在,当它无法吓唬到你时,那些原本吓人的场景就变成了笑点,我好几次在有爆点的地方想笑,或者真的笑出来,脑子里在想:「这什么东西呀?」然后一边在笑。 看完这种恐怖片后,会停留在一种又惊又喜的状态,是这种电影独特的体验,会很有趣。所以,如果不知道今晚该看什么电影,就看恐怖片吧,恐怖片很好看啊。

2023/1/18
articleCard.readMore

比残忍更残忍

在成都你六姐吃饭,看到店内的宣传图画,每幅图画上都有只卡通的牛,牠们在很开心的笑,然后旁边写着牠们说的话,有些是在介绍自己的肉,有些是说「我很好吃」「快来吃我」之类的。

2023/1/17
articleCard.readMore

用 SwiftUI 重构「行动日」

大学,自学 iOS 开发时,我想开发一个自己的 App,当时热衷于使用各种待办清单,但这些我都不能完完全全的喜欢,所以我就自己开发了一个:行动日。 后来一直断断续续更新着,期间 Apple 推出了新的开发框架 SwiftUI,等到我觉得 SwiftUI 差不多成熟的时候,也是最近,我想用 SwiftUI 把我所有开发的 App 都重构一遍。 虽然说待办清单的 App 已经琳琅满目,但这是我第一个独立开发的 App,也许我有特殊的感情,总之我还是愿意再做一次。 开发过程 用 SwiftUI 开发的过程很顺利,几天就完成了新行动日的主要功能,严格来说也许总的时间不足 24 小时?在大学时,这些内容我花了几个月。 一些变化 主要功能开发完成后,我开始打磨各种细节,就是一些尺寸、边距,动画,震动反馈之类的。这个过程有点像开偷来的保险柜,每次调整一点点,然后试试看结果。 比较值得提到的是,新行动日的主题色。我先是沿用了旧行动日的主题色 Tangerine(橘子橙),这是由 Apple 提供的,可能我接触这种色彩太久,有点厌倦了吧,所以我用 Adobe Color 希望可以选出一种橙色,既先锋,也要有深度,还可以在作为文字颜色时保持可读性,不过始终没有在这里选到钟意的。 最后我用了爱马仕橙(#F37021)。 然后我开始调整新行动日中的文字,在旧行动日中,我用今日、某日、末日和昨日这样的词来表示待办事项的分类,现在我认为有点晦涩,需要解释,所以我替换成了更直白的语言:提醒事项、以后要做的事、不做的事和已完成。 另一个变化是关于称谓,我不喜欢用「您」,这样似乎会很生硬,「你」也让我觉得无聊,所以在所有出现称谓的地方,我使用的都是「阁下」,比如:阁下想删除此事项吗?阁下如果需要收到提醒,请前往「设置」授予通知权限,之类的。这样应该会有种尊贵的使用体验吧。 上架 App Store 新行动日快开发完后,我需要一些展示数据,用来制作 App Store 的预览图,以往我都是用自己的真实数据,不过这次我用即刻的好奇点名册问了一个问题「你的待办清单 App 目前第一条待办事项是什么?」然后把答案稍作润色相互组合,当作展示数据。 所有都准备好了,提交给 Apple 审核,按照我预期就可以顺利上架 App Store,不过 Apple 拒绝了我提交的新行动日,理由是,新行动日和旧行动日太像了,图标也太像了,我开始跟 Apple 的审核团队交涉,向他们解释新旧行动日之间的关系,以及我会下架旧行动日,App Store […]

2022/11/20
articleCard.readMore

推荐《女生呵护指南》

我是在某个程序员进阶书单里发现这本书的。 虽然书的名字《女生呵护指南》听起来好像是要告诉人们如何呵护女生,不过女生也可以选择自己呵护自己读这本书,因为这本书对女生帮助很大;宠爱自己的伴侣、女儿的人,也可以读这本书。 书里揭露了许多与女性相关的营销手段,医疗骗局,从卫生巾的选择,到如何清洗阴部,以及根本不是病的「宫颈糜烂」······揭露真相只是书的一部分,书中更多的内容都旨在阐述正确的生理知识与观念,月经、白带、炎症、妇科疾病、怀孕······这些女性总要面对的事,都可以在书里找到相当详细的描述和相关问题解答,而且是以非常轻松、贴心的文字呈现出来,毫不晦涩,同时保持科学和严谨。 这本书也可以被当作一部关爱女生的百科全书,即使不读完整本书(但推荐读完),也可以通过目录或关键词搜索,浏览想要浏览的内容。在陷入迷茫和不安的时刻,也许这本书会帮助你度过。 最后引用两句我在书里看到有趣的话: 月经是子宫寂寞的眼泪。 需要处女膜才能保护的感情,会像这层膜一样脆弱。

2022/8/28
articleCard.readMore

你是左派还是右派?

上面的问题其实是一个陷阱问题。网络的交流氛围越来越恶劣,大家好像都不想听对方的话,只想站队,贴标签,把自己的想法灌给对方。 我最近看到一部 Taiwan Bar 的 Youtube 影片《左派、右派到底怎麼分?一口氣搞懂左右派的歷史發展〈HEY LUCY 露西請回答〉EP12》,我很认同影片最后的话,写在这里与大家共勉: 清楚表達立場是件好事,但在意見出現分歧時,如果一開始就為不同立場的人貼上某一派的標籤,其實是忽略了「溝通」的重要性,想要達成有效溝通,要先看到彼此共同在意的價值,以及認知到每個議題都不只有兩個選擇,然後與那些看似反對你的人,一起退後一些些,這個過程雖然大家都很不舒服,但整體社會卻有機會一起前進一些些,因此有機會朝向沒有人完全滿意,但還不差的「共好的」方向前進。

2022/8/18
articleCard.readMore

驯服内心的猛犸象:为什么你应该停止关心别人对你的想法

文:Tim Urban,译:杜金珂,校对:余淑颖、杜金珂,原文:Taming the Mammoth: Why You Should Stop Caring What Other People Think,本文基于创作共同协议(BY-NC),由杜金珂在《木土金王可》发布。 第一部分:认识你的猛犸象 那是小学二年级开学的第一天,班上新来了一个非常漂亮的女孩。她的名字是 Alana,不到一个小时,她就成了我的一切。 当你爱上一个人,可你只有七岁,你完全不知道可以做些什么,你甚至不确定你想从中获得什么。只有一种无形的渴望,然后这种渴望会逐渐成为你生活稀松平常的一部分。 几个月后,情况发生了变化。有天课间休息时,班上的一个女孩开始问每个男孩:「你想和谁结婚?」当她问到我时,我不假思索的说出「Alana」。 当时我还很年轻,没有意识到社会上唯一可以接受的答案是,「谁也不想」。 我一回答,这个可恶的女孩就跑向其他同学,告诉每个人:「Tim 说他想和 Alana 结婚!」每个人都笑得不可开交。我觉得我的人生就到此结束了。 这个消息很快传到了 Alana 的耳朵里,之后几天她都尽可能的远离我。如果她知道什么是限制令,肯定会立马拿出一个来。 这次可怕的经历给我上了一堂重要的人生课:做自己可能非常危险,你应该在任何时候都保持极端的社交谨慎。 这听起来像是一个受到创伤的二年级学生才会想的事情,但这也是这篇文章的主题。这也不仅仅是我从我失败的童年中汲取的教训,更是一种根植于人类基因中的妄想症,一种普遍存在于全世界人类文化中的集体精神错乱: 人类总是不理性的、徒劳无益的痴迷于,别人对我们的看法。 人类进化必然有其原因,为了理解人类为何会进化成这样,让我们回到公元前 5 万年的埃塞俄比亚,在那里,你的祖先生活在一个小部落里。 那时,成为部落的一份子对生存至关重要。部落意味着食物和保护,当时想要得到这两者都不容易。因此,对你的祖先来说,世界上几乎没有什么比被部落成员接受更重要的事,特别是被那些部落权威接受。融入周围的人,取悦上层的人意味着他可以留在部落,而他能想象到的最糟糕的情况就是部落里有人开始窃窃私语,说他有多烦人,多没出息,多奇怪,因为如果有足够多的人不喜欢或者排挤他,他就有可能会被踢出部落,独自死去。他还知道,如果他在部落里追求一个女孩而被拒绝,他失去的不仅仅是那个女孩,那个女孩会把这件事告诉其他女孩,此后他生命中所遇到的每一个女孩都知道他那蹩脚、失败的尝试,也许他再也无法找到伴侣。被社会接受就是一切。 因为如此,人类演化出一种对别人对他们的看法的过度痴迷:渴望得到社会的认可,以及对于不被喜欢的极度恐惧。让我们把这种痴迷具像化一点,把它当作一头心中的洪水猛兽,一头 5 万年前的猛犸象。它看起来像这样。 你祖先的猛犸象是他能够生存和成长的核心,只要让内心的猛犸象得到社会认可,并密切关注它对不被喜欢的恐惧,就会没事。 这样的逻辑在公元前 5 万年没问题,公元前 3 万年,还有公元前 1 万年都没问题。但是在过去的 1 万年里,人类发生了一些有趣的事情,我们的文明发生了巨大的变化。文明是可以快速变化的,而我们的进化生物学几乎不可能以那么快的速度前进。因此,我们的文明像兔子一样向前飞奔时,我们的社会结构和生物学却继续蜗牛般的进化和调整。 我们的身体和头脑是为公元前 5 万年的部落生活而打造的,这使现代人具有一些不幸的特征,其中之一就是在「社会生存(Social Survival)」不再是一个真正概念的世界里,仍然固守部落式的生存方式。我们生活在 2014 年,可我们心中仍有着一头巨大的、饥饿的、容易被吓坏的猛犸象,并且它仍然认为自己生活在公元前 5 万年。 不然你为什么会试穿四件衣服,却在出门前仍然不确定穿什么? […]

2022/7/2
articleCard.readMore

想写点什么,但又不知道该写什么

这个世界,有够糟糕。

2022/6/10
articleCard.readMore

摄影构图

那些中心、对称、三分法、黄金比例之类的构图法制,只是一些愚昧的人的错误总结,他们认为,好的照片符合这些条条框框,所以就是在条条框框下拍出来的,但这些法则只是枷锁,无法激励人拍摄出更棒的照片。 构图也不是一种法则,而是一种能力,一种在混乱世界里找到某种规律的能力。也许每个人想找的规律不同,但「规律」对我而言,是一种「平衡」,当画面中所有元素相互协调,即使复杂,但也不会显得多余、混乱,就达到了我想要的平衡。 我观察这种平衡的方式是,不将视觉的重心落在任何一个物体上,而以一种全局的角度来看待我眼中的所有事物。如果视线聚集在某个具体事物上,那周围的其他事物就容易变得多余,但只要不这样做,那所有元素便都可以利用。

2022/6/4
articleCard.readMore

精致的结婚照

从社交网络看到过许多结婚照,在多次被照片所传递出的幸福氛围打动后,我意识到这种幸福其实很无聊,因为这并不是真正的婚姻的幸福,这只是那些人向你展示的,片刻的,被制作出来的幸福。 我喜欢真情流露的照片,所以我对那些花费巨大力气,精致无比,同时也显得极其匠气的求婚照、婚姻登记照、订婚照、结婚照、蜜月旅行照,十分无感。 也许他们在拍摄这类照片时是快乐的,但我还是不免担心,是不是越来越多的人,将幸福、婚姻的意义之类的事,都定义在这样的内容之中,而不是去关注更加平凡的生活。 对我来说,在醒来时,触摸爱人肌肤,手指沿着肩膀的线条滑下手臂,这类普通得不能更普通的事,只需要意识到,便会意义非凡。

2022/5/30
articleCard.readMore

中文没死,是有的人死了

两天前,王左中右在他同名公众号发表了一篇名为《中文大约的确已经死了》的文章,在这篇文章中,他列举了非常多令人深恶痛绝的关于中文的事实,然后他认为「中文已死」,但我并不认同,我认为这与中文无关,而是与使用中文的人有关,把概念提升到中文这一层面,只不过是他的噱头,我想要批判的,是人。 在那篇文章中,王左中右从低幼、敏感、失去创造力和废话多四个方面来论证中文已死的情况,本文也将从这四个方面,并且基于他所列举的事实,阐述我的观点,但在本文中,我没有反驳他的地方,并不代表我认同他,我只是想谈论我认为更加重要的事情。 低幼?还是异化? 在他开篇谈到「中文越来越低幼」时,我认同他部分说法,即我也讨厌不专业的表达。 但比起不专业的表达,他所提到「阳性患者」被称作「羊」这一现象,我认为这是更加严重,必须警惕的现象。把人叫做「羊」,把女人叫做「母羊」,这是对人的异化,如果越来越多的人接受、使用这种叫法,最糟糕的情况可能是,大家心里会慢慢形成一种可怕的默契:我们是不是可以不用把他们当作「人」来对待,我们是不是可以对他们想怎么样,就怎么样,因为他们只是「羊」,不是「人」。 我印象中历史上有许多的人类惨剧就是由此发生,不过我目前能回忆起的只有《黑镜》中的一个类似故事,军人的感知系统被调整,让军人看不到被杀戮对象的真实面目,这些军人一直以为自己屠杀的是所谓的「蟑螂」,但其实他们杀的是和自己一样活生生的人。 但对于上述问题,是中文的问题吗?不是,是人自己的问题,是人自己选择了如何使用中文,是人自己在无知中塑造了黑暗的思想。 敏感?谁在敏感? 对于他所列举「杀」字变成「▢」这个符号,「钱」字用首字母「q」的缩写代替之类的情况,我和他同样厌恶,但我不知道他厌恶的是什么,而我厌恶的是进行审查的人,和自我审查的人。 出现这种情况,原因并不是如他所说,因为「中文越来越敏感」,而是因为,人变得敏感,人变得害怕,人变得越来越没有道德底线,有人在担心因言获罪,有人在担心审查力度不够,人人都在在进行审查与自我审查(关于自我审查的危害以及形成原因我在《自我审查比任何审查都更可恶》中已经详细说明)。 这不是中文的问题,也是人的问题。比起将问题嫁祸到「中文」这个词上,我们更应直接指出这种问题的所在,并且全力纠正,把每一个文字都光明磊落的呈现出来。 这不是创造力? 王左中右在文章中列举了非常多新兴网络词语,然而他却说「中文越来越失去创造力了」,那他所列举的那些新词是什么?那不就是创造力吗? 所以我认为他再次混淆了中文与使用中文的人,我们所讨厌的是「绝绝子」这类的词吗?不是,如同一天世界在其推特上提到,我们讨厌的是「潦草、陈腐、人云亦云的写作」,我们讨厌的是用胡乱使用这些词语的背后的人。 废话多又怎样? 他还提到「中文的废话越来越多」,用他所谓的现代「文字垃圾」对比古代文人经典,怀古伤今。 但我认为,每个时代都有每个时代的内容,古代肯定也有垃圾,现代也不乏经典。他可以不喜欢,我也谈不上喜欢,这就是一个见仁见智的事,与中文死没死无关。 我不能死 我所谈论的,全是基于王左中右所列举的,但他似乎把批判的重心放在中文上,而我认为中文与此无关,这些都是人为的。 我不想对着中文徒伤感叹,这很没用,我想警醒自己,也许也可以警醒其他人,保持对中文的尊重,保持对自己与对其他人的尊重,文字的力量比想象中更强大,文字所能代表的东西比想象中更多。 王左中右说中文已死,作为一篇回应、或者反驳他的文章,我觉得我的文章中也得死点什么,因为我批评的是人,所以我就说是人死了,因为的确从某种层面上来说,把在王左中右文中那些中文用得如此糟糕的人,虽然活着,倒不如说已经死了。

2022/5/22
articleCard.readMore

上海爆发 COVID-19 疫情以来我收藏的文章(持续更新)

我曾在社交媒体上分享这些文章,但都遭到不同程度的屏蔽,所以我将这些文章收录在个人网站上,方便以后的人浏览。 《上海碎片》 The Sociologist 从三月上海爆发 COVID-19 聚集性疫情开始,收集微信公众号、微博等社交平台上的碎片信息,以及中国本土媒体、国际新闻媒体等报道,并在整理后发布于此。 《上海疫情線上紀念館:人們因什麼而逝去?》 端传媒通过对网络求助信息、亲属死亡陈述的汇总筛查,共录得 170 宗防疫次生灾害逝者,其中 90 人已核实或为亲友匿名陈述,超过 80 人无法核实。年龄最大的逝者 98 岁,年龄最小的仅 3 岁 10 个月。(文章收录时数据截止于 2022 年 5 月 6 日,后续数据可能会有更新) 《截至 2022 年 4 月,我們對「COVID-19 後遺症」的了解有多少?》 引文章编者按:「文章作者為上海科普作家汪詰,所住小區自 3 月 16 日就開始執行封控管理至今,近期曾發表文章《不吐不快:面對疫情,上海人真正怕的是什麼?》並公布與上海疾控專家的電話採訪錄音,引起較大反響,另有後續文《回應「不吐不快」的若干質疑:別曲解、別扣帽、別外行》。」 《【译文】上海失色》 这是一篇译文,原文作者是一名生活在上海的荷兰人 Jaap Grolleman。原文链接:《SHANGHAI’S STUNNING FALL FROM GRACE》。

2022/5/12
articleCard.readMore

自我审查

前言:本文所提到的自我审查并不包括媒体机构,只是指政治层面上,个人发表言论前的预先措辞考虑,及发表言论后的自我重新审核。 最近在看《理性时代》,这本书的作者托马斯·潘恩,在书中强力并且清晰地表达自己的思想,对比现在人们光怪陆离的自我审查,让我觉察到这是另一种不理性的时代。所以我也想在此表达我的想法: 我认为自我审查是一种对自身思想的迫害,自我审查比任何审查都更可恶。 自我审查的危害 我意识到自我审查变得普遍,是从我看到越来越多的拼音缩写、谐音等代替词开始的,比如「zf(政府)」「qj(强奸)」「ss(杀死)」⋯⋯这里需要说明的是,「yyds(永远的神)」这类词属于语言矮化现象,不在本文讨论的范围;自我审查不只有这一种形式,意识到某些话语的敏感性,故意闭口不谈、故意远离这些内容等,都属于自我审查。 随着自我审查的人增多,人们最直观的感受就是,会越来越频繁地看到这些代替词,讨论也变得越来越娱乐化、语焉不详。同时,当人们想完整地表达自己的思想,自我审查又促使人们不得不思考如何避免触及审查,以及如何使用更模糊的、更安全的词替代自己真正想说的话。于是,人们不得不将原本用于深入讨论和交流的精力去与审查制度博弈。 这样做的危害,我直接联想到的是乔治·奥威尔小说《一九八四》中设想的「新语」。奥威尔在小说的附录,解释过新语的原则:大量词语及文法被简化、取代或取消,例如「好(good)」是指「喜欢老大哥(to love Big Brother)」,而「坏(bad)」则已被「不好(ungood)」取代,削弱人用不同方式及语句表达意见的能力⋯⋯自由、革命等概念的词语,都已删除。 新语的目的是控制和消灭思想,而潜藏在这种自我审查下的真正危害同样如此:表达的丰富程度一定程度上决定了思维的边界,当表达受到限制,思想必然遭受影响。如同乔治·奥威尔所说,「思维的浅陋让我们的语言变得粗俗而有失准确,而语言的随意和凌乱又使我们容易产生浅薄的思想。」 如果当我们谈论某个话题时,我们意识到这个话题的敏感性,自我审查,然后放弃发声,或者总是回避这些话题,久而久之,我们就不知道该如何发声了,这也就意味着我们不知道该如何思考,也就是说我们的思想被控制和消灭了,所以自我审查是一种对自身思想的迫害,而且比任何审查都更可恶。 产生自我审查的原因 谈论完自我审查的危害后,我想继续探讨自我审查产生的原因,也许了解到原因,我们才可以有针对性的做出改变,而我认为产生自我审查的根本原因就是:人们对于当前政治氛围感到恐惧。 由于中国没有明确的审查标准和法律依据,甚至「根本不存在审查制度」,导致各个网站、平台有各自的审查制度,人们不知道自己所发表的内容中哪些可能触发,甚至在将来可能触发审查,这样泛滥、暗箱操作的审查制度使人们时刻处于一种如履薄冰,害怕因言获罪的恐惧中,从而只能为了不触及审查而不断自我审查。 在成熟的民主国家,例如德国,1998 年修订的《德国刑法典》第 86 条第一款规定「传播或为用于传播而制作、储存、进出口以及公开或在集会中使用德国宪法法院认定的违宪政党或组织标志可判 3 年以下有期徒刑或罚款⋯⋯」也有明确定义什么是纳粹标识(比如「前国家社会主义组织包括希特勒的纳粹党标志」),什么是纳粹礼(比如「右臂和右手伸直并垂直于胸口或稍微举起,手心向下」)。 如果人们知道明确的审查制度,并且当审查力度超出执行范围时,人们可以有正规途径去申诉,在这种明朗的政治氛围下,就不会有自我审查了。

2022/5/10
articleCard.readMore

25 美元,成为美国计算机学会(ACM)会员

25 美元成为美国计算机学会会员是怎么回事呢?25 美元相信大家都很熟悉,但是 25 美元成为美国计算机学会会员是怎么回事呢,下面就让小编带大家一起了解吧。 25 美元成为美国计算机学会会员,其实就是畅享 O’Reilly 所有学习资源,大家可能会很惊讶 25 美元怎么会成为美国计算机学会会员呢?但事实就是这样,小编也感到非常惊讶。 这就是关于 25 美元成为美国计算机学会会员的事情了,大家有什么想法呢,欢迎在评论区告诉小编一起讨论哦! 下面正式开始。 注册美国计算机学会(ACM)会员 O’Reilly 提供了非常丰富和前沿的计算机专业相关学习资源,但是想要获取这些学习资源需要成为 O’Reilly 个人会员,会员费为 499 美元/年,非常昂贵。 但是通过注册美国计算机学会会员,就可以以美国计算机学会会员的身份获取这些学习资源,而美国计算机学会会员的会员费用对于发展中国家是 25 美元/年,学生的话将会更加便宜。 注册流程也非常简单,只需进入 Join ACM 网页,根据个人情况如实选择和填写相关信息,并使用支持美元结算的信用卡支付会员费用,即可立即成为美国计算机学会会员。 登陆 O’Reilly 进入 O’Reilly 登陆页面,在填写邮箱那一栏填写你的美国计算机学会会员名,并以 @acm.org 结尾,然后输入你的美国计算机学会账号的密码,就可以成功登入 O’Reilly,并访问一切学习资源。

2021/8/16
articleCard.readMore

将同事的送我的仙人掌转换成 3D 模型

2021 WWDC,Apple 在 RealityKit 框架下引入了新 API:PhotogrammetrySession,通过这个 API,可以从不同角度拍摄物体,并且基于这些相片,生成一个可以用于 AR/VR 显示的 3D 模型。 最近我也收到一个来自同事的礼物,她家的仙人掌掉落下来的小仙人掌。于是我萌生了这个将仙人掌转换成 3D 模型的想法。 开始,拍照 Apple 对于这个新 API 提供了非常多的相关代码和文章。其中包括用于拍摄的应用的 源代码。 通过 Xcode 将这段源代码编译使其应用运行在 iPhone 上,可以对前期拍摄起到非常大的帮助作用。这个应用的主要功能是每隔一段时间自动拍摄一张相片,并且会记录相片的景深信息(注:必须使用至少拥有两个镜头的 iPhone 才可以使用这个应用,因为至少两个镜头才可以支持记录景深信息)。 在这个应用自动帮助我们拍摄的同时,我们只需要围绕着物体,缓慢移动镜头,完整的记录物体各个角度下的样子。关于拍照还有很多注意事项,比如最好拍摄 20 至 200 张相片,当前拍摄的物体的相片与上一张相片最好有 70% 以上的重合度,尽量在光线均匀的环境下拍摄,不要拍摄透明或者强烈反光的物体之类的。更多详细注意事项可以看《Capturing Photographs for RealityKit Object Capture》。 下图分别是 Apple 官方推荐的拍摄场景和我的拍摄场景。 Apple 官方将物体放在一个会旋转的平台上,并且用上文中提及的应用自动拍照。我将仙人掌放在一个普通的凳子上,然后右手举着相机,尽可能保持不动,左手从底部托着等凳子,缓慢的手动旋转。 拍摄完成之后将相片导入 Mac,然后就开始处理这些相片了。 Show Me the Code 这里需要用到 Apple 提供的另一段相关的 源代码,这段代码将在 Mac 运行,通过调用本文的主角 API PhotogrammetrySession,在 […]

2021/7/24
articleCard.readMore

当我们谈论离屏渲染时,我们在谈论什么

本文将会介绍有关离屏渲染的基础知识,但在正式开始之前,先粗略介绍下 iPhone 的屏幕显示原理,这样有助于更好地理解离屏渲染。图像显示到屏幕上,大概会经历以下几个步骤: CPU 告诉 GPU 需要显示的内容 GPU 按照 CPU 的要求,将 Layer 渲染进 Frame Buffer(帧缓冲区) 渲染完成后, Video Controller(视频控制器)把渲染结果(作为一帧)显示到屏幕上 由于 iPhone 的刷新率是 60 Hz,所以上述过程正常情况下每秒会发生 60 次。这也就是大概的 iPhone 屏幕显示原理。 离屏渲染 前文中提到「GPU 会将 Layer 渲染进 Frame Buffer」,这是正常的渲染流程,被称为 On-Screen Rendering(当前屏幕渲染)。而离屏渲染与正常渲染流程的唯一不同就在于,当 GPU 在渲染时,由于一些原因,不能将 Layer 渲染进 Frame Buffer,而是需要创建一个 Offscreen Buffer(离屏缓冲区)来参与渲染,然后再将渲染结果放入 Frame Buffer,这个过程就被称为 Off-Screen Rendering(离屏渲染)。 因为离屏渲染需要创建新缓冲区、多次切换上下文环境(从 On-Screen 切换到 Off-Screen)以及每秒将会进行 60 次这样的繁重操作,所以大量的离屏渲染会引起性能问题、降低显示帧率、造成卡顿。 为什么会发生离屏渲染 […]

2021/6/24
articleCard.readMore

如何让 iOS 给你的应用开后门

本文将简单介绍 iOS 的后台任务, iOS 的后台任务不仅仅可以让应用在进入后台之后,申请额外的系统资源去执行未完成的任务,还可以通过 iOS 的深度学习预测用户打开应用的时间,并在那之前提前执行预定的后台任务,使用应用更快响应。 添加背景模式 由于本文将分别介绍后台刷新与后台数据处理,所以在背景模式中分别勾选了 Background fetch 与 Background processing,在实际的开发中应该按需选择。 添加后台任务标识 每个后台任务都需要一个标识,系统才能以此判断需要执行哪个任务。 在 Info.plist 文件中,添加 Permitted background task scheduler identifiers选项,并在此选项下添加所需执行后台任务的标识。 如图所示,我添加了两个任务标识,分别表示刷新任务与数据处理任务。 注册后台任务标识 首先以刷新任务为例,在 AppDelegate.swift 的 application(_:didFinishLaunchingWithOptions:) 代理方法内加入如下代码。 因为是以刷新任务为例,所以在注册回调中需将任务强转为 BGAppRefreshTask 类型,值得注意的是,系统分配的任务时间有限,所以当系统分配的任务时间即将到期,或者系统提前终结任务时调将会调用 refreshAppTask 的 expirationHandler 回调,所以可以将一些处理未完成任务的操作放入这里。 另外,在任务结束后需调用 setTaskCompleted(success: Bool) 方法,以节省系统资源。 数据处理任务同理,只是任务类型相应的变为 BGProcessingTask 类型,并注意不要将任务标识传错。 提交后台任务请求 同样先以刷新任务为例,在 AppDelegate.swift 的 applicationDidEnterBackground(_:) 代理方法内加入如下代码。 其中 earliestBeginDate 表示最早开始执行背景任务的时间,可以理解为至少应用进入后台多久之后,才可以执行预定的后台任务,上述代码中为至少应用进入后台十五分钟之后,才可以执行后台任务。 值得注意的有两点,一是在执行 submit 操作时,会阻塞主线程。二是如果需要后台持续刷新,可将此段代码放入注册后台任务标识的回调中。 数据处理任务的请求也差不多,只是请求类型需要为 BGProcessingTaskRequest,但是数据处理任务请求有两个额外的属性可设置。一是 requiresNetworkConnectivity,表示是否需要联网,默认为否。二是 requiresExternalPower,也就是是否只能在充电时进行,默认为否。 调试 为了调试,首先需要将应用放入一次后台以提交后台任务请求,再次打开应用并在控制台输入: 即可模拟执行后台任务;输入: 即可模拟后台任务时间到期。

2020/6/2
articleCard.readMore

二零一九年夏秋之交工作生活的异动

某天,下午,忽然,得知公司效益欠佳,将只继续运营,我和大部分员工会被调配回母公司成立新的项目部并开始新的项目,而母公司的地址离我现在所住的地方有八站地铁的距离,以前走路上班,以后每天来回通勤需要一个半小时,唯一的好也许是在于其中有半个小时会是在滑板上度过,至此可以说是创造了我实习以来工作的第一个分段点。晚上,忽然,得知租房合同到期,房东决定不续租而搬迁至其他地方,感情磨合得越来越好的室友也分道扬镳,至此可以说是创造了我旅居上海一年以来生活的第一个分段点。 世事无常,与其心慌气短,不如将计就计顺其自然在有限的生命里废寝忘食发光发热,以上就是我处于二零一九年夏秋之交工作生活的异动与身在其中的所思所想。

2019/10/12
articleCard.readMore

一声一世

《坂本龙一:终曲》和《尺八:一声一世》都是我最近所看关于音乐的的两部电影,虽然说都是谈论音乐,但一部从人的角度出发,一部从乐器的角度出发。 这两部电影有两处非常深的共同点:一是都谈论到音乐的永恒性,按下钢琴的琴键声,孔位之间的笛声等都是会慢慢消失的声音,普通的乐手会抓准每一个音符,使之连贯起来,而大师则会感受音乐的呼吸,在一呼一吸中感受当下的永恒。另一个共同点是虽然两部电影都从音乐出发,但在最后都不可避免都探寻到了声音的境界。坂本龙一到世界各地去采集声音,佐藤康夫说音乐有局限性而声音没有。 2018 年苹果开发者大会中的《The Life of a Button》演讲中着重告诉过开发者们声音的重要性,人与外界的交互除了触觉,视界之外,还有很重要的听觉。

2019/7/26
articleCard.readMore

iOS 限制输入字数与特殊字符的巧妙方法

在 iOS 开发中,时常需要限制用户的输入行为,比如限制用户只能输入数字,或是只能输入中文、英文等等。虽说可以通过设置键盘类型来简单规避掉一些不必要的麻烦,但本文将着重从代码层面以 UITextField 为例,介绍如何限制输入字数与特殊字符。 添加监听事件 限制 UITextField 输入内容的第一步就是得知 UITextField 中内容的变化。我们可以通过以下代码为 textField 添加监听事件: 当 textField 中的内容发生变化时,将会调用 textFieldDidEdit() 方法。动态监听 textField 内容变化不仅可以限制用户手动输入的内容,还可以限制复制粘贴的内容。 补全监听事件 在补全此监听事件前,还需定义一个全局变量 qualifiedString,代码如下: 该变量用来暂存 textField 中的符合条件的内容,当 textField 中所输入的内容符合条件时,我们不对 textField 进行输入限制,并同时将 textField 中的内容赋值给 qualifiedString,而当 textField 中所输入的内容不符合条件时,对 textField 的输入进行限制,即用户输入无效,并将 qualifiedString 作为 textField 中的内容保持不变。textFieldDidEdit() 方法完整代码如下: 接下来我将一步步解释这些代码的作用: 判断 textField 是否存在高亮区域,即当用户使用拼音等输入法进行输入时,还没有确定输入选词,拼写时的产生英文不算入输入内容。 判断 textField 中是否有内容,只有当 textField 中存在内容时代码才会继续运行。 代码运行到这里将会报错,因为我们还未定义 isIncludeSpecialCharacters(in: String) 与 isBeyondNumberOfMaxInput(in: String) 方法,后文将会介绍这些的方法的定义以及实现。这段代码会判断 textField 中是否包含特殊字符,或者 textField 中的内容长度是否超过所定义的最大输入数量,如果 textField 中的内容满足上述任意条件,则 qualifiedString 替代 textField 中的内容;否则视 textField 中的内容符合条件,并对 qualifiedString 赋值。 处理特殊字符 本文假设中文、英文以外的所有字符皆为特殊字符。于是使用正则表达式对 textField中的对每一个字符进行判别,并计算特殊字符数量 numberOfCharacters,只要当 numberOfCharacters 不为零即视为存在特殊字符。代码如下: 处理输入数量限制 本文假设最大输入数量限制为 16 个英文字符或 8 个中文字符,一个中文字符相当于两个英文字符。而在不同编码的字符系统中,中文、英文长度都不同,所以定义变量 count用来表示中文、英文的字符个数,并以此与最大输入数量进行比较。代码如下: 注意事项 虽说以上代码已满足限制输入字数与特殊字符的基本要求,但当用户复制的内容中包含特殊字符,或是复制粘贴后字数超出最大输入限制的话,会导致用户所复制的内容完全无法粘贴到 textField 中。解决这个问题的办法是,将是否包含特殊字符与是否超出最大输入限制分开判断,并分别处理。例如,当 textField 中的内容包含特殊字符时,可以只删除掉特殊字符后,再将 textField 中的内容赋值给 qualifiedString,当 textField 中的内容超出最大输入限制时,按最大输入限制截取 textField 中的内容并赋值给 qualifiedString,具体代码因为我懒就不再展示。

2019/6/22
articleCard.readMore

对于番茄学习法的误解

大部分人在使用番茄学习法进行学习时,都想全神贯注在 25 分钟的学习上,可当这种想法产生的同时,也就代表思维已从学习中抽离。其实在番茄学习法那 25 分钟的专注学习时间中,只要求尽最大可能的保持专注和高效,并不需要担忧思绪偏离学习本身。 当完成 25 分钟的学习后,进行 5 分钟的休息时间时,大部分人会愿意彻底将思维迅速投入另一件事物当中,这样强迫式的休息也许会对学习效率与兴趣起到反作用。在 25 分钟的学习时间里,人的大脑使用的是线性思维,用于一步步理解和记忆学习中的每个环节。而在 5 分钟的休息时间里,并不是不让继续学习,只是在这 5 分钟里应该使用发散思维去思考刚才所学内容,将刚才所学要点发散开再重新组合,连接,与发展。 所以真正的番茄学习法是在以 30 分钟为区间的时间中,切换这两种思维模式,这样才能更好的掌握新知识。

2019/6/16
articleCard.readMore

Swift 中的空字符串

文:K Harrison,译:杜金珂,校对:杜金珂,原文:https://useyourloaf.com/blog/empty-strings-in-swift/,本文基于创作共同协议(BY-NC),由杜金珂在《木土金王可》发布。 在 Swift 中,如何判断空字符串,取决于如何定义「空」。你可以认为一段长度为零的字符串是空字符串,也可以认为可选值为 nil 的字符串是空字符串,那一段只包含空格的字符串是不是空字符串那呢?现在就让我们来模拟 Swift 中字符串为空的各种情况。 使用 isEmpty 在 Swift 中,字符串是字符的合集,而字符串所遵循的 Collection 协议,已经为我们准备好了字符串是否为空的答案: 我们在 Collection.swift 的源码中,可以看到该协议具体做了什么: 由此可见,如果一段字符合集中起始索引与结束索引相等,也就代表这段字符合集为空,在字符串中则表示为: 注意:别用 count 是否等于零来判断字符串是否为空,因为这将迭代整个字符串: 关于空格 有时候我不仅需要判断是否为空字符串,还需要判断是否是只包含空格的字符串。例如,我想在判断是否为空字符串时,让以下字符串都返回 true(译者注:以下字符串在使用 isEmpty 进行判断时皆返回 false): 许多人通过去掉空格再判断字符串是否为空。而在 Swift 5 中,我们可以利用 字符属性(Character Properties) 对空格进行直接判断。我们可以像这样写: 但仍有更简单的办法对字符串中每个字符进行判断,就是使用 allSatisfy(译者注:Swift 4.2 中新推出来 allSatisfy 方法,该方法运行一个状态闭包(Condition Closure),如果传递给这个闭包后,所有元素都返回 true,那么该方法就返回 true),为 String 类型添加扩展: 这样看起来就很美妙了: 关于可选值 我们可以继续扩展上述判断方式,使其可以对可选值进行判断。以下是解包为 String 类型可选择扩展: 如果可选字符串为 nil,则返回 true;否则,我们使用以前添加到字符串中的 isBlank 属性进行测试。我们现在可以写: 从今往后,当你需要判断字符串是否为空时,就再也用不到 isEmpty 了。

2019/5/22
articleCard.readMore

我如何自学 iOS 开发

即将回重庆去完成毕业答辩,所以我想回顾我从自学 iOS 开发起至现在的历程,也谈谈对我目前短暂的开发生涯来说最重要的三样东西:兴趣、成就感和世界观。 其实我最开始的兴趣并不是编程,而是对于各种软件、系统的使用。在大三之后,我还是没有用到我真的所需要的那样的软件,也没有打造出我所想象中科技无限便利生活的环境,所以别人编写的程序满足不了我的需求,于是我有了自己编写软件的想法,同时这也是我的兴趣所在,不知道该如何去确切的描述这种兴趣,但我能感觉到,这并不是单纯的编程的兴趣,也许是想要一种改变。 大学时期 那时候是大三寒假末期,我不再像前几年那样整天泡在游戏,我买了二手 Macbook 开始自学 iOS 开发,我从网上找来许多电子书和视频,都是特别零散的学习资源,现在唯一还有印象的就是慕课网。前期我大概把 UIButton,UILabel,UIView 等这些基础控件全部试用了一遍,再是由于 Storyboard 的便利性,大三下期开学时,我已经可以做一些像是温度转换器之类的无聊应用。 然后我开始寻求更广阔的知识,而国内的大部分开发教程都是好几年前的,所以我不得不去找一些国外的新的资源,我偏向于视频学习,但那时候我英文很差,英文的视频教程我没办法看,于是我从英文书开始看起。 得益于 MacBook 的「用力点按」功能,在英文书中有任何不明白的单词只要重重按下触控板就会显示词意,再配上朗读功能还可以知道单词发音,如果是长段的英文就直接放进 Google 翻译。随着时间的流逝,我看英文变得越来越轻松。 在每本 iOS 开发的入门书籍里,都会讲到 UITableView,我那时就在想,不要只按照教程去做,我想独立开发应用,那时候我对 UITableView 最熟悉,所以我就想开发一款待办清单类应用。但仍保持继续学习,只是每当学到一些知识的时候,我会思考如何将它放进我的应用里。 在不断的学习中,不断将照自己的想法写入代码,将电子世界里的代码编译输出,在现实世界呈现并产生改变,这件事跨越两个世界,是极具成就感的。当花一个下午甚至好几天的时间去实现一个功能,或是修复一个错误,成功后,这种成就感无可比拟,这种成就感也推动我不断深入学习。 这段时期里,我差不多每天早上七八点钟起床,然后去食堂买早饭,在路上边走边吃,一直走到图书馆,正好吃完,然后上楼打开电脑写代码。有需要上课的话,就把电脑放在桌子下面写代码,下课再去图书馆写。吃午饭和晚饭前,我都会回寝室,把电脑充电,吃完饭后,再回寝室玩一玩,又再去图书馆。晚上大概九点离开图书馆,把电脑放回寝室后,再去操场跑几圈。 但我也会做其他事,比如晚上我也经常会在寝室看电影,下午也说不定会和朋友打羽毛球,上瘾了也有去网吧玩游戏,天气好还可以在操场晒太阳,下雨可以在我们学校的「花果山」上荡秋千,饭后可以去江边吹吹风,再参加参加校园摄影比赛,还可以作为正方四辩总结陈词…… 好像直到大四,我完成了两款应用的开发,其中一款名为:行动日 ,就是我想做的待办清单类应用,已经上架苹果应用商店,这是当时我为它写的介绍:我独立开发的第一个应用:行动日。另一款没能上架,所以我打算在毕业答辩时使用它。 那时我一些同学已经找到实习,我也广投简历,最初的面试经历惨不忍睹,然后才知道去看一般 iOS 面试时的问题,又在好像几个星期时间里,我不断的学习网上所流传的面试题所包涵的知识,最终在上海找到我的实习公司。 实习时期 在开始实习的第一个月里,我被分配到一个使用 OC 的项目,那时候我完全不会 OC,所以代码写得很慢,不过好在有同事可以请教。一个月之后,公司启动新项目,我去了一个使用 Swift 的项目,一直做到现在,已有半年左右,期间获益良多,除开发能力的提升外,也知道产品的开发流程,如何与同事协作等等,大学独自写了半年代码,实习期我和前后端十几位同事共同写了半年代码,到现在也算有一年开发经验。 实习期我感到,虽然每天都在写代码,但我并没有像大学时那样每天都会获取新知识,而只是在积累经验。但承蒙主管和老板们的关照,他们经常和我谈心,一方面担心我刚来上海的生活,一方面是对我的引导。在与他们的谈话中,他们都结合着自己的经历,告诉我去追求「广度」「深度」「责任感」与「自身价值」。 所以有时候,我会去公司天台、公司旁边的交大医学院的教室或者操场继续学习,那时我已经看完了几本的入门级的开发书籍,觉得都大同小异,然后我开始看进阶级的书籍,并关注了一些开发者、博客和 Youtube 频道等等。在看那些博文时,我几乎会对于每一篇都做笔记,但这里的笔记大部分都是对文中的重要段落和代码的摘录。 发现这样的知识转化率并不太高,于是我开始尝试费曼技巧,这是一种十分强大的学习方法,这种学习方法的核心含义是,只有我让别人也能掌握我所掌握的知识,那我才算真正掌握这种知识。所以我开始写博客,为了让别人明白我所写的内容,我被迫将我脑中含糊不清概念弄清楚,被迫去追究细节。 但还是觉得不够,有一些复杂理论或者逻辑,并不方便通过文字、图片、或者视频表现出来,于是我用工资买了 iPad mini 和 Apple Pencil,得益于 Mac OS 和 iOS […]

2019/4/18
articleCard.readMore

为什么我不喜欢社交网络

首先要说明的是,虽然我不喜欢社交网络,但我并不厌恶与排斥它。 信息的媒介 我们在社交网络中通过媒介获取各种信息,媒介可以是图片,文字,音频,视频等等,关于媒介,Marshall McLuhan 在他的代表作《Understanding Media —— The Extensions of Man》提出一个重要观点:The medium is the message(媒介即是信息)。即相同内容,通过不同媒介,最后得到会是不同信息。 例如图书,当我们主动阅读,我们可以掌握阅读的节奏,在单调乏味的部分加快阅读速度,在晦涩难懂的部分放慢阅读速度。而如果选用听书的方式,思维就必须跟随朗读者语速,内容无趣时注意力会被分散而难以集中,内容重要时我们可能会放弃原本独立思考的时间,即使可以按下暂停,那也代表着思维的中断和注意力的转移,这对于专注是巨大的破坏,长此以往,不仅丧失原本兴趣,也难以重建注意力。 所以比起音频、视频这类被动形式的媒介,图文这类主动形式的媒介会更利于我们对信息的思考与吸收,但在社交网络中充斥着的各种信息也造成了另一个问题,就是信息碎片化。 信息碎片化 社交网络中的绝大部分信息都是碎片化的,当浏览这些碎片化的信息时,大脑无需保持专注与持续思考,且注意力会不断被分散跳转切换,久而久之,就无法对事物保持专注,无法长时间的集中注意力。并且随着时间的变化,大脑会越来越适应这样松散的思维模式,而如果再想重新提高专注度和保持注意力的长时间集中就只会越来越难。 信息的碎片化体现在诸如微博、脸书等等,首先是字数限制使其无法承载足够全面有深度的内容来促进大脑思考,而且信息资讯源源不断,总有新东西涌现出来转移注意力……,总的来说,长时间沉溺在社交网络碎片化的信息中,会浪费时间并且让大脑变得懒惰。 姊妹文章 为什么我不喜欢即时通讯

2019/3/26
articleCard.readMore

如何与人见面

见面的方式有许多种,可以是约定好时间地点的见面,可以是在某个地方不期而遇的见面,也可以是极力逃避却仍被命运安排一般的见面,当然还可以是在脑海里见面。 但还有一种,就是当我们死亡后重新化作分子,这些分子,仍会宇宙间遇见。

2019/3/2
articleCard.readMore

为什么我不喜欢即时通讯

首先要说明的是,虽然我不喜欢即时通讯,但我并不厌恶与排斥它。 交流的层次 人的交流方式是分层次的,层次越高,交流的效率与准确性也就越高。 最高级的交流方式是眼神交流,无需任何动作、语言,只用一个眼神就能让交流的对象明白自己想要表达的意思。其次是语言交流,可以加以动作、神态,使交流对象明白自己的意思,但从这种交流方式开始,双方在交流理解上就会开始出现偏差与误解。再其次是文字交流,文字无法附加动作、神态,甚至语气,这种交流方式更有可能加大双方交流间发生误会的可能性。 即时通讯与电子邮件 即时通讯中所发送与接收的信息往往是浅薄并且破碎的,即时通讯内容大多都以文字为载体,文字无法直观传达情感,而需自行理解,所以信息的接收者对于内容的理解很可能与发送方的本意出现偏差。其次即时通讯中文字又大多都以短句的形式呈现,双方交流时一般会把想要表达的意思拆分成多个短句,这是因为在即时通讯中思维是碎片化的,所以即时通讯其实可以看作是不断将自己思维碎片扔给对方,并由对方自行拼凑。即时通讯出现的目的本来是为了方便人们的交流,但实际在某种程度上却破坏了交流的高效性、准确性以及连贯性。 而以电子邮件的形式进行交流则可以避免掉所有即时通讯的不足。人在写信时思维是连贯的,是深入思考的。同样的意思,也许在即时通讯中表达需要三句话,而在邮件,经过清晰的思考后只需要一句话。由于邮件不会让人认为有字数限制,所以邮件可以包含更多的文字,可以承载更多的意思与情感,也使得阅读的人更容易准确理解。 姊妹文章 为什么我不喜欢社交网络

2018/12/26
articleCard.readMore

以配置信息(UserDefaults)的形式存储应用数据

存储配置信息,可以使用 UserDefaults,这是一种最简单的储存数据的方法,适合用来储存轻量级的数据,UserDefaults 支持储存的数据类型只有 Data,String,Number,Date,Array 和 Dictionary 这几种。 声明:笔者自身对 UserDefaults 也是初学,而本文介绍的 UserDefaults 知识也都是自己的一些理解,同时尽量不涉及过于原理性的内容,一切以普通工程师实用为目标原则。其中可以想象在很多地方会有理解的错误,还请多包涵。如您发现问题,也往不吝赐教指正,感激不尽。 储存 储存值为「Hello」的字符串: 而如果准备将储存的数据在主程序(Container)和其他扩展(Extensions)之间传递,则需要在 UserDefaults 中添加 Group 字符串: 加载 加载 Key 值为「helloString」的数据: 同样在其他扩展(Extensions)中,也需要添加 Group 字符串,才能加载相应数据。

2018/9/10
articleCard.readMore

在文件沙盒中读取与写入应用数据

iOS 应用程序在安装时,会创建属于自己的沙盒文件,应用程序不能直接访问其他应用程序的沙盒文件。应用程序中所有的非代码文件都保存在沙盒中,比如图片、声音、属性列表,sqlite 数据库和文本文件等。沙盒的的根目录有三个文件夹分别是: 而本文所描述的存储方式就是在 Documents 目录下的储存方式。 声明:笔者自身对文件沙盒也是初学,而本文介绍的文件沙盒知识也都是自己的一些理解,同时尽量不涉及过于原理性的内容,一切以普通工程师实用为目标原则。其中可以想象在很多地方会有理解的错误,还请多包涵。如您发现问题,也往不吝赐教指正,感激不尽。 储存 储存的步骤主要分为两步。第一步是确定存储数据的文件的位置。第二步是将数据储存在文件中。 获取存储数据的文件 此方法的目的是构建存储数据的文件的路径。此方法没有标准名称,您可以使用任何您喜欢的名称。 该方法是在上一个方法中所构建的路径中创建储存文件。这个文件被命名为 "SomeName.plist" ,以后需要存储的所有数据都可以存储在这个文件中。 将数据储存至文件 接下来的方法会将任何的数据内容,转换为二进制数据,然后写入该存储数据文件。首先需要创建一个 PropertyListEncoder 的实例:encoder,该实例会将要存储的任何数据编码成某种可以写入该文件的二进制数据格式。 但是,如果编码方法由于某种原因无法对数据进行编码,则会引发错误。例如,数据不是预期的格式,或者已损坏等。幸运的是,Swift 通过抛出错误来处理某些条件下的错误。在这种情况下,您需要一段代码来捕获错误并进行处理。do 关键字表示有可能抛出错误的代码块的开始。try 关键字表示代码所执行的任务可能失败,如果发生这种情况,它将抛出错误。catch 语句表示捕获所抛出的错误的代码块,do 代码块中的任何代码抛出的错误都将被捕获,并执行相应的代码。在这里,我们只是简单地将错误打印到 Xcode 控制台。 如果数据被上一个方法成功编码,则使用 dataFilePath() 调用存储文件的路径,将数据写入该文件。写入方法也会导致错误,所以你必须在方法调用之前使用另一个 try 语句。 加载 储存做好了,但还不够用。所以,我们还要实现加载 SomeName.plist 文件的功能。在加载数据的方法中。首先将 dataFilePath() 的数据放入一个名为 path 的临时常量中。 再尝试将 SomeName.plist 的内容加载到新的 Data 对象中。try 关键字尝试创建 Data 对象,但如果失败则返回 nil,这就是为什么你把它放在一个 if let 语句中。 为什么会失败?如果没有 SomeName.plist,那么显然没有要加载的数据。这是应用程序第一次启动时发生的情况,在这种情况下,您将跳过此方法的其余部分。 然后创建解码器实例:decoder。当应用程序找到 SomeName.plist 文件时,您将使用 decoder 从文件加载所有数据。 解码器将保存的数据加载回原来的位置。这里唯一有趣的数据是传递给解码器的第一个参数。解码器需要知道解码操作的结果是什么类型的数据,并通过指示它将是存储时的数据类型来告诉它。 最后,将 saveData() 方法和 loadDate() 方法放在需要调用的地方。例如,当程序开始运行时,结束时之类的。

2018/9/8
articleCard.readMore

在 iOS 开发中使用键值对监听(KVO)与通知(Notification)

声明:笔者自身对 KVO 与 Notification 也是初学,而本文介绍的 KVO 与 Notification 知识也都是自己的一些理解,同时尽量不涉及过于原理性的内容,一切以普通工程师实用为目标原则。其中可以想象在很多地方会有理解的错误,还请多包涵。如您发现问题,也往不吝赐教指正,感激不尽。 注册 KVO 被监听的对象,必须继承 NSObject,被监听的变量,必须加上 @objc dynamic 修饰符。 KVO 注册监听的方式有三种: Notification 触发 KVO 通过重写 observeValue(forKeyPath:of:change:context:),当被监听的值发生改变的时候即可触发事件。 Notification 注销 KVO Notification

2018/9/6
articleCard.readMore

介绍 GCD 中的线程,队列,延迟执行,线程阻断,信号量,任务组与任务对象

GCD 全称 Grand Central Dispatch,是 iOS 开发中最常使用的一种管理多线程的方式,也是苹果公司最为推崇的一种,GCD 最大的优点在于它的简单方便,虽然可能不如其他多线程管理方式那样灵活,但也能适用于绝大部分多线程中的情况。在 GCD 层面没有线程的概念,只有队列。任务都是以闭包的形式提交到对列上,然后 GCD 会自动创建线程去执行这些任务。 声明:笔者自身对 GCD 也是初学,而本文介绍的 GCD 知识也都是自己的一些理解,同时尽量不涉及过于原理性的内容,一切以普通工程师实用为目标原则。其中可以想象在很多地方会有理解的错误,还请多包涵。如您发现问题,也往不吝赐教指正,感激不尽。 线程 一个程序将执行某个操作的时候,就会将这个操作放在程序中的线程里去执行,一个程序可以拥有多个线程。因为有时程序需要同时执行多个操作,所以也就可以拥有多个线程。 线程可以是同步的,也可以是异步的。同步任务不会开启新的线程,所有任务会在当前线程中,按顺序一个个执行,执行完一个再执行下一个。异步任务彼此独立,互不影响,各自执行各自的任务,无需等待其他任务完成,在绝大多数情况下,执行异步任务时会创建新的线程。 队列 与线程的关系 线程是代码执行的路径,队列则是用于保存以及管理任务的,线程负责去队列中取任务进行执行。 分类 队列主要分为串行队列和并行队列两类:在串行队列中,任务按照其在队列中的顺序被调度,前一个任务执行完毕,才会开始执行下一个任务,串行队列一次只能执行一个任务。而在并行队列中,一次能同时执行多个任务,只要有空闲的线程,队列就会调度当前任务,交给线程去执行。并行是 CPU 的多核芯同时执行多个任务。 需要注意的是,并发,并发是指单核 CPU 在同一时间间隔内交替执行两个或多个任务。并行需要并发,但并发不能保证并行。并发是关于结构,而并行是关于执行。 在串行队列和并行队列的基础上,队列还可以继续细分为三类: 主队列:DispatchQueue.main 主队列在主线程上运行,是一个专门用来在主线程上调度任务的串行队列。所有的 UI 更新都必须放在主队列中。 全局队列:DispatchQueue.global() 全局队列是一个整个系统共享的并发队列。在使用多线程开发时,如果对队列没有特殊需求,在执行异步任务时,可以直接使用全局队列。 自定义队列:let customQueue = DispatchQueue(label: String, qos: DispatchQoS = .unspecified, attributes: DispatchQueue.Attributes = [], autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency = .inherit, target: […]

2018/9/4
articleCard.readMore

iOS 原生 URLSession 网络请求

应用无论是从服务器获取信息,还是更新社交媒体信息,抑或是下载文件,这都归功于应用核心的 HTTP 网络请求。为了帮助开发者满足网络请求的众多需求,苹果提供了 URLSession,这是一个完整的网络 API,用于发送和接收 HTTP/HTTPS 请求。 你可以通过 URLSessionConfiguration 来创建 URLSession,它有三种形式: .default:创建全局持久化本地缓存,证书和 cookie 存储对象。 .ephemeral:与默认配置类似,只是所有与任务相关的数据都存储在内存中,可将此视为「私密」任务。 .background:允许在后台执行上传或下载任务。即使应用本身被系统暂停或终止,任务仍会继续。 URLSessionConfiguration 还允许你配置其他属性,例如超时值,缓存策略和 HTTP 头部信息等。 URLSessionTask 是一个表示网络请求任务的抽象类。网络请求会创建一个或多个任务来获取数据,和上传或下载。这里有四种类型的网络请求任务: URLSessionDataTask:此任务用于 HTTP GET 请求,以将数据从服务器检索到内存。 URLSessionUploadTask:此任务通常用于 HTTP POST 或 PUT 方法将文件从本地上传到服务器。 URLSessionDownloadTask:此任务用于将文件从服务器下载到临时文件位置。 URLSessionStreamTask:此任务用于建立 TCP/IP 长连接。 您也可以暂停,恢复和取消任务。URLSessionDownloadTask 可以保存暂停时的状态,以至于恢复任务时,不用从头开始。 声明:笔者自身对 URLSession 也是初学,而本文介绍的 URLSession 知识也都是自己的一些理解,同时尽量不涉及过于原理性的内容,一切以普通工程师实用为目标原则。其中可以想象在很多地方会有理解的错误,还请多包涵。如您发现问题,也往不吝赐教指正,感激不尽。 组装 URL 在进行任何一项网络请求时,都需要配置 URL,苹果提供 URLComponents 以供开发者配置 URL。比起使用纯字符串形式的 URL,用这种方式可以根据 URLComponents 值的内容轻松获取 URL 值,反之亦然。 发起 GET 请求 发起 GET 请求时,必须先创建 URLSessionTask 对象和获取 URL 地址。为防止重复发起请求,可在 dataTask 的调用 .resume() 方法开始每次任务前,调用 .cancel() 方法。 另一种发起 GET 请求的方式,同样是调用 dataTask(with:completionHandler:) 方法,只不过第一个参数可以直接传入 URL 地址。 […]

2018/9/2
articleCard.readMore

什么是自动引用计数(ARC)和引用循环

ARC 全称 Automatic Reference Counting,中文译名为:自动引用计数。通过 ARC 的机制,当创建一个新对象时,它的引用计数为 1,当有一个新的指针指向这个对象时,其引用计数会自动加 1,当某个指针不再指向这个对象时,其引用计数会自动减 1。当对象的引用计数变为 0 时,说明这个对象不再被任何指针指向,然后系统会自动销毁对象,回收内存。 声明:笔者自身对 ARC 也是初学,而本文介绍的 ARC 知识也都是自己的一些理解,同时尽量不涉及过于原理性的内容,一切以普通工程师实用为目标原则。其中可以想象在很多地方会有理解的错误,还请多包涵。如您发现问题,也往不吝赐教指正,感激不尽。 引用循环 得益于 ARC 的工作,开发者不需要太过于关心内存泄露的问题,但是总有意外情况发生。 想象一下,当两个对象已经不再被需要,但这两个对象相互引用了对方作为自己的成员变量,只有当自己销毁时,才会将成员变量的引用计数减 1。由于这两个对象互相引用,所以他们各自的引用计数都为 1,因此这两个对象永远不会被销毁。这种情况称之为强引用循环(Strong Reference Cycle) 弱引用 想要解决这个问题,可以将引用计数对象之间的引用关系指定为弱引用。 如果不手动指定,那所有引用都默认会是强引用。 弱引用不会增加对象的引用计数。此外,弱引用始终为可选类型。 这意味着当引用计数变为零时,引用可以自动设置为 nil。 具体的实现方法就是,在成员变量前加上 weak 修饰符。 无主引用 无主引用也是弱引用,它与弱引用的区别就在于弱引用始终是可选的,并且在引用的对象取消初始化时会自动变为 nil。 这就是为什么必须将弱引用的成员变量定义为可选 var类型(因为变量需要更改)。 而无主引用不是可选类型。 如果尝试访问已取消初始化对象的无主引用的成员变量,则会触发强制解包 nil 的错误。 与闭包有关的引用循环 当成员变量相互引用时,会出现对象内部的引用循环。 与对象一样,闭包也是引用类型,所以也可能会导致循环。 由于闭包对使用它们的对象有一个强引用,所以如果对象对闭包有一个强引用,同时在闭包的代码块中又对该对象本身有一个强引用(比如 self),那这样就会引起引用循环。 解决这个这个问题的方式就是,在闭包内部使用 [unowned self] in 语句,这样就将闭包内部对对象的引用变为弱引用。但是需要注意的是,如果在调用闭包的时候,对象已经被释放的话,会出现错误。或者是使用 [weak self] in 语句,那在闭包内部的 self将变为可选值。 但是这样仍然没有解决在调用闭包时,对象被释放的错误,想要解决这个错误就需要在闭包内部将对对象的应用重新变为强引用,而避免对象在执行过程中被释放。 这种做法的名称为 Weak-Strong Dance,从而就保证了对象在执行过程中不会被释放。

2018/8/28
articleCard.readMore

在 iOS 开发中使用代理与协议

创建和使用代理主要分为五个步骤:定义协议,创建实现协议的类的引用,告诉该类谁将实现其协议,将任务传递给实现协议的类,并在该类实现协议中的所有方法。 声明:笔者自身对代理与协议也是初学,而本文介绍的代理与协议知识也都是自己的一些理解,同时尽量不涉及过于原理性的内容,一切以普通工程师实用为目标原则。其中可以想象在很多地方会有理解的错误,还请多包涵。如您发现问题,也往不吝赐教指正,感激不尽。 1. 定义协议 定义一个协议时,只需要列出需要实现的方法的名称,而不用方法的完整代码。如果一个类是这个类的代理,那么这个类需要实现协议中的所有方法。 2. 创建实现该协议的类的引用 创建一个名为 delegate 的变量,该变量表示实现该类中的协议的类。 3.告诉该类,哪个类会实现它的协议 通过重写 prepare(for:, sender:) 方法,将定义该协议的类中的 delegate 变量值赋为实现该协议的这个类。所以该类现在能知道谁是它的代理。 4. 将任务传递给实现该协议的类 在定义协议的类中,当执行包含 delegate?… 的语句的方法时,实现该协议的类将接收来定义该协议的类的通知。 5. 实现协议中的所有方法 接收到通知后,它需要开始实现它所遵循的协议中的所有方法。 代理与协议的基本逻辑与事件就是这样。

2018/8/24
articleCard.readMore

独立开发的第一个应用:行动日

「行动日」是一款以「日」为基础,包含「不办清单」的,助您效率提升的待办清单类应用。 之所以我会开发这个应用,是因为我那段时间里对效率、时间管理感兴趣,但是现有的待办清单应用总是不能满足我,有的不能重复提醒,有的不能添加子项目,有的太复杂,有的我觉得太丑等等,所以想要开发一个对自己来说得心应手的待办清单类应用。而且马上大四,准备找工作,这样面试时也有能拿出手的作品。那接下来我会简述我是如何打造「行动日」,然后介绍它的独特之处。 简述 在最初设计之时,我设想让用户以最快捷和方便的方式管理待办事项,所以我仔细构思着一些小细节,希望能帮助用户减少点击屏幕的次数,并且以此画出草图,看看大概的布局和控件摆放,以及各部分之间的关联,然后标注上一些可能会用的功能,或相关代码。 有了基本雏形之后,我开始在脑海里设计应用界面,我想让「行动日」看起来干净简洁,让用户带着愉悦的心情使用「行动日」。所以我选用鲜艳的橙色作为应用的基调色,而应用大部分界面则是以白色为主。 然后就是具体的开发了,由于我是边自学边开发,所以开发过程很漫长,遇到的问题也多,所以开发过程也可以说是我如何自学的过程,未来我可能会专门写一篇相关文章详细描述。而接下来要说的则是贯穿开发过程的核心理念。 核心理念 我最初的理念是想让用户以最快捷和方便的方式管理待办事项,所以一开始我就砍掉了「标签」功能。因为我认为标签的选择和出现,只会让徒增用户的使用和界面复杂度,而「行动日」则主要是以「日」来区分待办事项。 而后来又有幸得到少数派编辑们向我推荐的一篇马萨诸塞州综合医院战略规划和信息管理的前任高级副总裁 Allison Rimm 所写的关于待办清单的哈佛商业评论文章《Taming the Epic To-Do List》,她的文章中有写道: 大多数人不分青红皂白的在使用时间管理工具,所以成了时间的仆人。 说出这种绝对能够印在少数派公司内部的墙上当醒世恒言的话的人,她做法很值得信服。她为避免她所述的情况发生,用三个清单应对: 于是我开始重新思考,的确现在很多人每天都想着应该做什么,而没有想过不该做什么,甚至每天花许多时间投入在没有意义,也没有意思的事情上。上过电脑玩物站长的讲座课程的朋友,或许在里面听过一个概念: 增加效率最有效的方法就是「不要做」,比起努力把 10 个琐事变得熟练,还不如想办法去掉其中 8 件琐事。如果可以放下、舍弃或自动化这些杂务,那么生活与工作自然多出更多自己可以运用的时间。 所以除只是在交互方式上设计得足够快捷以外,我像这位头衔很长的 Allison Rimm 一样,为「行动日」设计最高效的时间管理模式,并将 Allison Rimm 的理论作为「行动日」的理论背景,再依照此背景开发出最核心的功能。 核心功能 一日 「一日」代表确定的一天,用户创建的带有具体提醒时间的待办事项,将显示在「一日」,并按时间顺序排序。如果时间相同,则按重要性排序。 点击位于「一日」右上角的「三行按钮」,「一日」可分别再细分为「今日」、「重要」与「今日重要」。而通知中心中的「一日」小部件,也会按照主应用的显示方式进行显示,有助于用户专注在真正重要的事情上。 不做 「不做」即是「行动日」中的「不办清单」,当用户添加不办事项时,会默认不做这件事直至当晚 10 点,当然用户可以自定义,不做此事多长时间,两小时,两日,甚至永远。当不办事项未到截止时间时,是不能够点击完成按钮的,但是如果用户在此期间违背自己本来意愿,做了不该做的事,应该删除此不办事项。用户可以启用通知中心的「不做」小部件,这样可以经常看到,从而提醒自己有意识地将精力放在真正值得去做的事情上。 所以「一日」和「不做」这两个页面,实现的是头衔很长的 Allison Rimm 的三个清单的功能,这也是「行动日」最核心的功能。但我没有满足于此,所以我在我最初的理论基础上开发出新的非核心功能,我将它称之为「表面功能」。 表面功能 某日 「某日」代表不确定的一天,不带有提醒时间的待办事项将现实在「某日」中。之所以设计这个页面,是因为我有时候会想做一些事情,但是又没有明确的时间去做,像这样的事情,就可以放入「某日」,既是为不将此事遗忘,也是为未来指明方向。 当用户点击「某日」上的加号按钮,新建待办事项时,在事项的详情页面,将会默认不开启提醒,而从「一日」添加待办事项时,将会默认开启提醒,并默认提醒时间为两小时后。但用户总可以自己设置是否开启提醒。 此外,用户还可以选择事项是否需要重复提醒,是否将其标记为重要等。 完成 从「一日」、「某日」和「不做」中完成的事项,都会在「完成」中显示。在「完成」中,可以查看和搜索已经完成的事项,并且可以根据已完成的事项直接再次生成新的待办事项,省下用户重新添加待办事项的时间。 最后 在未来的版本中,我会陆续增加对 iCloud 的支持,对 Apple Watch 的支持,以及运用其他我的所学知识继续完善「行动日」。无论您对「行动日」有想法、建议或是疑问,还是想与我讨论学习,都欢迎与我联系。希望我这点微不足道的开发能力能助你驯化时间。 「行动日」已登陆 App […]

2018/7/18
articleCard.readMore

为什么我会把 Googel Pixel 换成 iPhone SE?

于我而言,Google Pixel 从硬件、系统、到设计,每一处都无可挑剔,堪称顶级,是我用过最棒的安卓手机。再用过 Pixel 后,我再也不想去用其他厂商的安卓手机。但之所以不再使用 Pixel,主要是基于以下考量: 首先是我倾向于更小尺寸的手机,我不喜欢在手机上玩游戏或者看视频之类的。我把只手机当作是一种工具的延伸。iPhone SE 仅仅四英寸大的屏幕极大的提高了操作的便捷性。 其次安卓生态环境很差,限制不了流氓应用和全家桶。为了达到正常使用手机的目的,用户只有通过,绿色守护、黑狱之类的软件,再加上复杂的配置和设置,才能让手机不那么耗电。即使 Pixel 搭载最新的安卓系统,也无法解决这些问题。所以以前我经常对手机 Root,刷 Xposed 框架,今天用这个系统,明天换另一个系统,后天再换个内核等等,当功能和性能终于满意时,又开始想着怎么美化系统……,用 Pixel 之后,我没解除 BL 锁,没有再去玩发烧友那一套,所有应用都从 Google Play 下载,所以当我开始用 iPhone SE,没有糟糕的生态环境所带来的种种问题,并且对于操作系统感到非常熟悉。 最重要的是我开始注重隐私,我发现安卓应用所需要的权限实在是很没道理。仅以微信为例,将安卓系统中的微信的位置、电话权限关掉后再打开微信,微信会提示,为提供各种什么可能根本不需要的服务,或者为了什么安全,必须开启这些权限,否则微信将会闪退,我实在不喜欢这样流氓的强制获取用户权限和信息,而在 iOS 系统上,微信根本无法获取电话权限,而且即使授予给位置、相片存取等权限,微信仍然可以在 iPhone 上正常使用。

2018/3/24
articleCard.readMore

手动进行 Nexus 和 Pixel 系列手机的 OTA 更新

本文将介绍谷歌 OTA 更新的推送机制,如何快速获取最新的 OTA 更新推送,以及如何手动刷入 OTA 更新文件(不会清除数据,效果和正常 OTA 更新一样,未解锁的设备也可以这样做)。 OTA 全称 Over-the-air programming,意为空中编程,是一种为设备分发新软件、配置等的方法。OTA 的一项特征是,一个中心位置可以向所有用户发送更新,该更新立即应用到频道上的每个人。 谷歌会以 OTA 的形式对 Nexus 和 Pixel 系列手机每月会推送一次系统安全补丁更新,每年推送一次大的系统版本更新。但按照谷歌的推送机制,每次推送的第一批对象只占所有可更新用户的 1%,第二批推送对象占可更新用户的 11%,一直这样直到全部推送完毕。这样做是为了,如果新推送的更新出现问题,可以把坏的影响控制在最小范围内。 快速获取 OTA 更新推送 根据谷歌软件工程师 Elliott Hughes 所说,要想最快获取 OTA 更新的推送,需要主动去点击设置 > 关于手机 > 系统更新 > 检查更新(Check for update),这样相当于主动请求更新,可以跳过推送队列,尽早收到更新。 但总有人会抢在您前面点击检查更新,所以您仍然没有收到更新推送,这时候我们可以手动刷入 OTA 更新文件。 手动刷入 OTA 更新文件 注意:在应用更新之前,最好要先备份相片等个人数据。 前期准备 首先从发布 OTA 更新文件的 官方页面,找到并下载跟自己设备对应的最新的 OTA 更新文件。 使用 OTA […]

2018/3/18
articleCard.readMore

开启 Chromebook 的夜间模式

文:Tom Westrick,译:杜金珂,校对:杜金珂,原文:www.androidcentral.com/how-enable-night-light-chrome-os,本文基于创作共同协议(BY-NC),由杜金珂在《木土金王可》发布。 在夜里,眼睛如果盯着电子屏幕,会使眼睛暴露在光谱中的蓝色部分中,眼睛会很容易疲劳,并且会让入睡变得更加困难。 在 Windows,Android 和 iOS 上,用户已经可以通过开启夜间模式来滤掉屏幕中的蓝光。现在这项功能也能在 Chrome OS 中使用。 这项功能已经可以在稳定版的 Chrome OS 中使用,但这项功能不是直接在系统设置中开启,它需要用到 Chrome flags 页面。Chrome 网上应用商店(Chrome Web Store)中有一些扩展功能(Extensions)也可以实现此功能,但将其作为操作系统的一部分能让这一功能更加稳定,并且不太影响电池寿命。 启用夜间模式功能 现在,您可以快速设置菜单中使用「夜间模式」功能。 再次开启或关闭夜间模式

2018/1/12
articleCard.readMore