分类
stuff

WWDC2022

一年一度WWDC来啦

2022了, 还在口罩😷时代中, 今年继续线上WWDC.

又看到iPhone从空掉落, 也不知道是不是真的没有受伤(😂.

关于硬件的一点点讨论

熬夜看了开幕演讲. 然后在官网研究了下搭载M2的两款笔记本, 真的是一言难尽的感觉😞.

怎么说呢, Air和Pro在芯片上看起来是同款, 所以有同样的配置选择: RAM 8G/16G/24G; SSD 256G/512G/1T/2T; 8核10核什么的.

然而, Air是配的30W(8核)/35W(10核)电源的, Pro则是仅标配67W电源. 那连接电源的功耗差别这么大, 是不是满载的差来自于对核心的锁定呢... 这么一看那Air就如其名, 只能当做轻薄本用, 不适合开发生产力了.

但是, 再一看价格, 同数据配置情况下, Air更贵一点点. 这...看看效果图, 居然Pro用的机型是旧版, 屏幕也是旧版, 还带TouchBar, 这官方都默认淘汰的玩意儿.

所以苹果不出意外的又开始销库存套路了. 😅

在我的老MacBook(2013)已经不能更新最新的Xcode情况下, 本还以为要新发M2机器可以刚好置换下. 这下又得等10月吗.

软件

啊, CarPlay, DriveKit? 车都没, 不用不用;

桌面端功能, emm, 我还是只写移动端好了;

多端联动? 啊, 从当你SideCar在Catalina上加入时, 我就因为电脑太旧没能用上, 多端联动新功能? 又不能调试, 算了算了;

虚拟机? 可能是最关注的点吧. 自打在M1开始, vbox就没了. Session 10002有关于虚拟机的, 可以关注一下.

反正目前没看到特别感兴趣的技术. 如果后期看到, 再来补吧.

又没有

又没有iPad版Xcode, 只想说...嗯...生产力? 还只是爱奇艺吧. 明年都不想期待这事儿了.

Author

Luo Yu(indie.luo@gmail.com)

Thursday, June 09, 2022

分类
stuff

iOS App Store Review Guidelines 探讨

首先, 这里是App Store Review Guidelines的官网链接.
啥都要以它为准, (哪怕是觉得他们错了要申诉).

“大礼包”

最近才从前公司组里同事那听来这个词, 有点有趣.
在网上看了看大家提的审核问题, 很快就发现了诸如“2.1大礼包”, “4.3大礼包”, “礼包5.0”等等有趣的叫法.
想必是些个坎吧.

2.1 App Completeness

程序完备性.
个人感觉这一块的问题应该算是可以比较容易解决的问题.
某种程度上, 是提交方自己没做好的.
按照指示修复问题即可.

2.3 Accurate Metadata

很常见的, 应用程序元数据不准确.
这里可见Apple的要求比较严格. (我碰到的审核问题大部分都在这一块).

列举常见的此类问题:
- screenshot: 目前对于手机应用, 必传的图有iPhone X/iPhone 8 Plus的尺寸图; 需要注意的是, 图中若出现iPhone, 则需反应对应图片所指代的iPhone(也就是说iPhoneX的图里的手机必须是iPhone X, iPhone Plus里则是普通iPhone).
- 应用介绍内容和应用程序不一致; 不要写太宽泛就好; 需要注意的是, 一些诸如医疗、慈善等相关的内容, 需要发布公司/单位即该内容的提供方, 要不然是肯定不会通过的.
- 搜索关键字;

4.3 Spam

导引上说“Don’t create multiple Bundle IDs of the same app.”
看来这条是重复包改名提交的行为了.
这个我可没做过.
不过试想了一下, 如果真有这种需求, 改动一点再提交吧, 对于有开发人员的情况, 这应该不是什么大问题.
如果只是买了别人的应用代码就想提交的话..恐怕会遇到此问题.

相关审核规则:
4.3.0 - Are a duplicate of another app or are conspicuously similar to another app

IAP应用内购相关

积分or类似积分形式, 数字消耗品, App内消耗品等类似形式的购买物, 都应走In-App Purchase(应用内购).

列举相关:
3.1.1 - Use payment mechanisms other than in-app purchase to unlock features or functionality in the app

隐藏功能相关

若Apple审核以某种手段检测or怀疑提交审核的应用包含隐藏功能, 可能列举如下条款:

1.1.6 - Include false information, features, or misleading metadata.
2.3.0 - Undergo significant concept changes after approval
2.3.1 - Have hidden or undocumented features, including hidden "switches" that redirect to a gambling or lottery website

这里说得很明确了, 隐藏功能, 审核通过后会出现重大功能变更...
马甲包的问题在此.

Legal 法律相关问题

基本指明了, 若要提供相关服务, 必须是具有该资质的机构/公司/单位提交应用.

5.2.1 - Were not submitted by the legal entity that owns and is responsible for offering any services provided by the app
5.2.3 - Facilitate illegal file sharing or include the ability to save, convert, or download media from third party sources without explicit authorization from those sources
5.3.4 - Do not have the necessary licensing and permissions for all the locations where the app is used

借贷问题相关:
3.2.1 - Do not come from the financial institution performing the loan services
具有资质的机构才能提交借贷相关功能的应用.

Author

骆昱(Luo Yu)

Email: indie.luo@gmail.com

Version

1.0.0, Thursday, August 16, 2018

分类
stuff

笔记: WWDC 2016 Session 805 Iterative UI Design

前面

最近在翻看WWDC视频.
这个属于原型设计块的内容, 以前也确实没有发掘看看.
觉得还不错, 有很多更Apple风格的思路. 留点笔记吧.

笔记

805所说的迭代UI设计, 更多的是在讲如何从零开始设计一个App.
迭代的, 是产品设计的实现过程.

围绕一些问题, 可以来梳理思路:

  1. What are we making?
  2. Who is it for?
  3. Does it actually work?
  4. And did we get it right?

Identify the features that matter most to the people who will use your app,
and features that serve your own goals for the app it self.
In order to determine what your app should do.

还大字说明了一件感觉很多“产品经理”应该好好看看的--

You ≠ User

你不是用户.

Designing for yourself distracts you from what matters most to everyone else.

诸多产品经理喜欢用自己的习惯, 套上“用户”如何如何想, “用户”如何如何觉得这样的外衣, 来解读需求.
应该注意注意啦.

视频里还演示了用Keynote来画UI的过程, 并归纳了一下:
1. Use screenshots as references;
2. Draw some squares and lines;
3. Zoom in and out a lot (to make sure that they were pixel perfect);
4. Use believable content.

设计完一个界面后, 再继续延展.
因为一屏界面不是一个App, 需要完善workflow.

基本原则还是:

Started with what I knew and then I evaluated and iterated on all my designs until I ended up with something I was happy with.

整个过程就是805所在提的, iterative design, 迭代设计.

实际看来, 他们的操作, 有多设计, 多比较, 比我日常看到的有更多的互动.
而不是一个人盯着一屏幕的工具, 和别人家的产品, 埋头~~抄抄抄~~画画画.

Author

骆昱(Luo Yu, indie.luo@gmail.com)
Tuesday, August 14, 2018

分类
stuff

笔记: ArchLinux环境

最近把旧电脑的坏硬盘换下来, 然后立马元气满满的样子. 就准备给它装个Linux来用.

另外好久没有更新,就把东西放上来好了.

准备安装U盘

从ArchLinux的官网下载最新的iso文件,文件很小.

然后用它制作启动U盘,因为在Mac中,就直接可以dd到U盘的设备.

启动安装环境

连接U盘,从U盘启动,进入安装环境.

先连上Wifi:

wifi-menu

从选择到配置都很简单.

也可随便ping个地址看连好了没.

准备硬盘空间了:

fdisk -l

列举了磁盘的情况.

我就用cfdisk分区了.

初次进,会让选择分区表类型,配合电脑这边就用的MBR.

创建一个primary分区,准备挂载/,标记上bootable;

因为主硬盘只有120G的SSD,准备在副硬盘上挂数据,这里就不多分区了;

然后准备一个swap分区.

然后write改变,退出 cfdisk.

接下来格式化硬盘,

mkfs.ext4 /dev/sda1
mkswap /dev/sda2

好了就可以激活swap,

swapon /dev/sda2

挂载分区:

mount /dev/sda1 /mnt

安装系统

pacstrap /mnt base
# 也可加上 base-devel

等它下载安装完以后,

创建fstab文件:

genfstab /mnt >> /mnt/etc/fstab

这就可以change-root了:

arch-chroot /mnt #/bin/bash

修改系统的配置

取消/etc/locale.gen文件里en_US.UTF-8的注释,

这个以后配置中文也要对应放开里面相关的项目,

然后激活它:

locale-gen

输出一个/etc/locale.conf文件:

echo 'LANG=en_US.UTF-8' > /etc/locale.conf

链接一下配置时区:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

同步时间:

hwclock --systohc # --utc

可以date试试看输出时间对不~

设置root密码:

passwd

设置hostname:

echo mr_luo_arch > /etc/hostname

启用dhcpcd:

systemctl enable dhcpcd

安装bootloader

先安装好grub:

pacman -S grub os-prober

安装grub引导,

grub-install /dev/sda

生成配置:

grub-mkconfig -o /boot/grub/grub.cfg

这里基础系统就装好了.

其他安装

不过我顺便装上桌面环境,最近觉得gnome3用着挺顺手的,

# 安装相关的包
pacman -Sy --nocomfirm gnome gnome-extra

# 启用gdm
systemctl enable gdm

这里的Gnome还少一个网络配置管理的工具,

顺道给它装上:

# 安装相关的包
pacman -S networkmanager

# 启用
systemctl enable NetworkManager

给加一个普通用户:

useradd -m -s /bin/bash NewUserName
# -m 创建home目录
# -s 设置默认shell

# 给它配置密码
passwd NewUserName

编辑/etc/sudoers文件,加上:

NewUserName ALL=(ALL) ALL

这样新用户可以用上sudo.

结束

退出change-root,重启就好啦~

exit
reboot

Author

骆昱

分类
stuff

Rust-Lang Notes | Day 2

General

变量

变量默认是不可变immutable的.

let x = 5;
x = 6; // ERROR: re-assignment of immutable variable

mut关键字声明可变的变量.

let mut x = 5;
x = 6;

常量 constants

声明常量使用const关键字, 且不允许使用mut.

常量不光默认不能变,它总是不能变.

而且必须注明值的类型.

const MAX_POINTS: u32 = 100_000;
// 声明一个常量MAX_POINTS, 值是100,000.

常量在整个程序生命周期中都有效,位于它声明的作用域之中.

这使得常量可以作为多处代码使用的全局范围的值.

将用于整个程序的硬编码的值声明为常量对后来的维护者了解值的意义很用帮助。它也能将硬编码的值汇总一处,为将来可能的修改提供方便。

隐藏(Shadowing)

重复使用let关键字来隐藏.

分类
stuff

docker fan

 

I AM A DOCKER FAN, ALL CAPS.

 

I ❤️ Docker

 

 

 

分类
stuff

Jenkins on macOS

通过Homebrew

需注意的是,最新的Jenkins需要Java8的环境。

直接brew安装:

yul@MAC-LUOYU > brew install jenkins
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (caskroom/cask).
No changes to formulae.

==> Using the sandbox
==> Downloading http://mirrors.jenkins-ci.org/war/2.70/jenkins.war
==> Downloading from http://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.70/jenkins.war
######################################################################## 100.0%
==> jar xvf jenkins.war
==> Caveats
Note: When using launchctl the port will be 8080.

To have launchd start jenkins now and restart at login:
  brew services start jenkins
Or, if you don't want/need a background service you can just run:
  jenkins
==> Summary
?  /usr/local/Cellar/jenkins/2.70: 7 files, 72.2MB, built in 1 minute 48 seconds

快速又便捷,并给出使用的提示,

如果想启动Jenkins并且让它重启登录时自启动,使用命令:

brew services start jenkins

或如果你不想让它作为后台服务运行,可以直接使用命令:

jenkins

按照上面的提示开启Homebrew服务,并设置Jenkins随系统启动的服务:

 yul@MAC-LUOYU > brew services start jenkins
==> Tapping homebrew/services
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services'...
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 12 (delta 0), reused 7 (delta 0), pack-reused 0
Unpacking objects: 100% (12/12), done.
Tapped 0 formulae (40 files, 53.8KB)
==> Successfully started `jenkins` (label: homebrew.mxcl.jenkins)

配置

Jenkins启动后,默认端口号是8080,

可以直接访问例如本机http://localhost:8080

会显示首次登录的Unlock Jenkins页面

这里会要求一个初始的管理员密码验证,并告知了该密码在服务器上的位置,

所以可以:

cat ~/.jenkins/secrets/initialAdminPassword

安装的过程也很简介,有推荐的插件可以直接开启Jenkins,也可以手选自己需要的插件。

等待各个插件的安装完成..

最后会提示创建一个admin管理员账号:

分类
stuff

RAM Disk 内存磁盘

RAM Disk 内存磁盘

-- 突破磁盘读写瓶颈的好手段!~

特质

RAM内存读写速度特别快,但是断电后会损失数据.

磁盘读写速度相对内存来说,是非常慢的,但是磁盘能持久化数据.

根据此特质,可将内存部分空间划作磁盘进行挂载,而磁盘则为临时文件操作的目录,即可大大提高相关操作的速度(因为提升读写速度).

实现

1. 思路

通过命令创建RAM磁盘 -> 挂载RAM磁盘 -> 创建所需临时文件路径 -> 将系统操作路径指向RAM磁盘内对应的路径 -> DONE.

开机能自动重复此操作: 利用AppleScript编译成Application, 然后使用系统的开机启动应用的设定来自启动该程序.

2. Apple Script

do shell script "
if ! test -e /Volumes/\"Ramdisk\" ; then
diskutil erasevolume HFS+ \"RamDisk\" `hdiutil attach -nomount ram://2097152`
fi
mkdir -p /Volumes/Ramdisk/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Developer/Xcode/DerivedData
ln -s /Volumes/Ramdisk/Library/Developer/Xcode/DerivedData ~/Library/Developer/Xcode/DerivedData
"

编译成Application进行保存.

3. 开机启动设置

System Preferences -> Users & Groups -> User -> Login Items 添加导出好的App即可.

Author

Luo Yu

indie.luo@gmail.com

分类
stuff

密码保护:立春

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

分类
stuff

九月十日先生 App上线啦!

App Store 链接:



⬇️ 长这个样子 ⬇️