早在去年,落格输入法的用户就有报告说落格输入法 macOS 在 有道云笔记 的 MarkDown 模式下无法正常键入中文,经过测试证明确实如此,体现为打中文字的时候,buffer的刷新会奇怪的删除掉光标前的一个字符——对,不多不少,就删一个。
捣鼓了很久未果,最后我没招了打印出了所有内容,发现了谜团:
当我把输入法获取到的光标左边的文字打印出来后,我发现文字的后边被追加了一个奇怪的字符[……]
对于 iOS 开发者来说,面对 app 盗版,最大的问题不是技术破解,反而是越来越多的 Apple ID 共享盗版,有的人可能会说这样的盗版就相当于是“试用”了,喜欢的人自然会去入正……但实际上,由于一分钱共享账号盗版的存在,导致无数独立开发者最终走向了投简历。
总之,去年,Surge 的作者发布了这么一篇文章 Surge 2.0 是如何实现在 iOS 上反盗版的 他的理论是从 app 购买[……]
在 iOS 上,如果我们要一个 View 显示阴影,那么基本上是这么做的:
1 2 3 4 5 |
self.view.layer?.shadowColor = NSColor.black.cgColor self.view.layer?.shadowOpacity = 0.1 self.view.layer?.shadowOffset = CGSize(width: 0, height: 0) self.view.layer?.shadowRadius = 3 self.view.layer?.masksToBounds = false |
不过,到了 macOS 上,这样就不灵了——没有任何效果。
答案在于 macOS 上如果你想要给一个 View 使用
layer ,你必须手动标记,比如说这样:
[crayon-6724d[……]
这一篇其实两个月前就应该写了,不过有一些事情拖延于是就到了现在。前几天和朋友讨论到独立开发的“小众”的概念,我觉得有必要再细致的定义一下。究竟独立开发者要做的这个小众是什么,所谓的细分市场,究竟又该怎么细分。
一说到小众和细分,可能很多人的第一印象是那些无人问津的东西比如学校里一小撮学生的小需求,或者是律师在工作上的一些需求……这里我们回顾一下细分市场:独立开发者该如何确定开发项目中[……]
今天落格博客的证书到期了,之前我有写过如何用 letsencrypt 来给博客加 https 支持,并且在文章的末尾教大家写了一个定时更新服务,这样你就不用每三个月自己手动去更新了。
不过,如果你的证书要过期了,那么其实 letsencrypt 会有机器人给你发提醒邮件的,内容大致是这样:
Hello,
Your certificate (or certificates) for t[……]
之前我写过一篇Poker 2 机械键盘 Mac 键位修改的文章,现在由于我买了一个升降桌,然后poker是有线的,于是很不方便,就寻思买一款蓝牙键盘,没想到当年梦想的蓝牙机械键盘已经有了现成的,正好,寻思着就定制一个。
我对poker的wasd方向键情有独钟,尤其是改 capslock 为 fn 后,简直是编程利器,爽的一批,所以这次找键盘也必然是 60键,也要支持 capslock + w[……]
一般情况下,你不需要了解这些内容。
在极少数情况下,你的app可能需要去获取用户按下的按键信息,比如盗号木马 开发一款输入法。只有这样你才能给用户提供候选。
怎么在 macOS 下创建一个输入法,我在Swift 使用 InputMethodKit 写输入法这篇文章中有详细的说明,这里略过不提,我们重点放在如何处理用户按键,尤其是修饰按键的处理上。
落格输入法一直以来有一个不大不小[……]
最近做 Windows 上的项目,客户要求要做的“炫”一点,所以,动态的窗口背景永远是必不可少的内容(比如手机qq的登录界面对吧?
我本以为这是一个很容易实现的功能于是就满口答应下来……是的,在 winform 里,并不是那么容易就能达到你想要的效果的。
理所当然,我们想到如果要播放视频,那么就用系统自带的 media player,只要添加一个控件就可以搞定——结果就是播放的视频要么[……]
更新:升级 Ubuntu 20.04 LTS 后,csf 无法正常工作了,提示找不到 iptables:
1 |
Testing ip_tables/iptable_filter...open3: exec of /sbin/iptables -I OUTPUT -p tcp --dport 9999 -j ACCEPT failed: No such file or directory at /usr/local/csf/bin/csftest.pl line 144. |
这是由于 Ubuntu 20.04 LTS 更改了 iptables 相关命令位置导致的,csf 的脚本并没有及时更新。
1 |
/sbin/iptables → /usr/sbin/iptables |
要解决这个问题,我们可以到[cr[……]