榫卯 [sǔn mǎo]
榫卯(sǔn mǎo),是古代中国建筑、家具及其它器械的主要结构方式,是在两个构件上采用凹凸部位相结合的一种连接方式。凸出部分叫榫(或叫榫头);凹进部分叫卯(或叫榫眼、榫槽)。——百度百科
这是一款懂设计,有情怀的应用。
一打开APP就感受到它的逼格,浓浓的传统味道。
闪屏过后还有一个小短片的,跳过之后的首页如上图,很直接简单的一个首页,交互也简单:
1.左右滑动
2.点击某一个榫卯
3.上拉底部箭头或者点击,查看榫卯的运用
4.左上角菜单列表
左右滑动到你感兴趣的榫卯点击之后会进去一个特写的榫卯
在这里你可以随意滑动角度,缩放视图,双击还能拆开或者组合,简直满分!
这款应用以前是需要18块解锁部分榫卯的,现在还比以前完善了一些Bug和交互,完全免费!真满分!
点击菜单之后的icons也是满满逼格
点击其中的icon还会有动效反馈。
有一个很帅的交互排版,需要录屏才能感受得到,然而我不会弄,也找不到相关的gif图,有兴趣的可以下载看看。点进去"知识"再进去"器"
左滑动有惊喜,有兴趣可以下载看看。
菜单下还有一个彩蛋,可能有人已经留意到了菜单下面有一个上拉箭头,大家都清楚这是暗示可以上拉或者点击的意思,果然,它是一个预告。
以下内容来自百度,没兴趣可以忽略了~
榫卯是设计公司Tag Design出品的一款应用。Tag Design的创始人孙勇的父亲便是一名木匠,因此他一直希望以应用的形式将木工中的一些精微之处呈现出来。不过毫无疑问,这款应用本身是很难挣钱的,Tag Design基本是贴钱做这款应用。
尽管如此小众,榫卯已经取得了不错的影响力。上线20日来,榫卯取得了16万的下载量,并连续一周停留在App Stote教育类排名第二的位置,目前在教育类排名第十。
坦率而言,我期待这样一款讲述榫卯的移动应用已经很多年了。我身边几乎所有建筑专业的朋友都和我感慨过榫卯结构的多样和美丽,中国的几千年来的木结构建筑诞生了无数简单易用,复杂精巧,甚至是巧夺天工的榫卯。然而现代化带来的材料革新和焊接技术的产生,使得原本常见的榫卯变得难得一见。而移动端的三维模型,显然是让大众了解榫卯的最好的方式之一。
不过非常显然,这样一款小众的应用并不能直接赚钱,因此,即便有人想过要做,之前也并没有人做这样一款应用。现在有人做了,而且反响颇为不错,这让我感到榫卯如同当年的Solar Walk一样,在告诉大家,App Store在渴望着长尾的小众应用。
榫卯的出现让我看到的是一个更为多元化的应用生态的可能性。目前的App Store几乎是游戏和工具类应用二分天下的局面,和乔布斯当年的所期望的,能下载到任何应用的应用商店还有差距。但榫卯的出现和走红却让我看到了两点:
首先,App Store的推荐制度对于非游戏和工具类的应用是利好的,比如音乐类的Magic Pinao和锻炼类的Yoga Studio时常被App Store在首页推荐。也就说App Store本身十分强调其生态内的多样性,只要是App Store里应用较少的领域,出了一款精致的应用,非常容易被得到推荐。
其次,现在应用开发的成本正在逐渐降低。后端的实现正在逐渐接口化,我相信未来的大多数应用的后端代码都不需要自己写,只需要用高质量的后端服务的接口。而前端的模块化也在逐步进行,Swift语言的现代性也在降低前端门槛。所以我相信,未来会涌现出更多的微型团队甚至个人开发者,做更多细分领域内容的应用。
因此,我觉得榫卯是一个信号,它标志着小众的精美应用也可以在App Store的应用生态里受到大众和资本市场的重视。而这样的事实,可以让更多创业者朝着这个方向努力。
下一篇: 古代设计的玩具:孔明锁
推荐阅读
-
集约化小目标检测实践经验,以麦粒为基准,基于嵌入式端超轻机型乐悠悠全系列[n/s/m/l]参数模型开发构建智能精准麦粒检测计数系统
-
模糊匹配的正则表达式 \d, \D, \s, \S, [A-Z], [a-z], [a-zA-Z], +, *, {n,m}, ? , ., re.M、^ 和 $ 等。
-
go语言Socket编程-Socket编程 什么是Socket Socket,英文含义是插座、插孔,一般称之为套接字,用于描述IP地址和端口。可以实现不同程序间的数据通信。 Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket,该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 套接字的内核实现较为复杂,不宜在学习初期深入学习,了解到如下结构足矣。 套接字通讯原理示意 在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+端口号”就对应一个socket。欲建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接。因此可以用Socket来描述网络连接的一对一关系。 常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 网络应用程序设计模式 C/S模式 传统的网络应用设计模式,客户机(client)/服务器(server)模式。需要在通讯两端各自部署客户机和服务器来完成数据通信。 B/S模式 浏览器(Browser)/服务器(Server)模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据的传输。 优缺点 对于C/S模式来说,其优点明显。客户端位于目标主机上可以保证性能,将数据缓存至客户端本地,从而提高数据传输效率。且,一般来说客户端和服务器程序由一个开发团队创作,所以他们之间所采用的协议相对灵活。可以在标准协议的基础上根据需求裁剪及定制。例如,腾讯所采用的通信协议,即为ftp协议的修改剪裁版。 因此,传统的网络应用程序及较大型的网络应用程序都首选C/S模式进行开发。如,知名的网络游戏魔兽世界。3D画面,数据量庞大,使用C/S模式可以提前在本地进行大量数据的缓存处理,从而提高观感。 C/S模式的缺点也较突出。由于客户端和服务器都需要有一个开发团队来完成开发。工作量将成倍提升,开发周期较长。另外,从用户角度出发,需要将客户端安插至用户主机上,对用户主机的安全性构成威胁。这也是很多用户不愿使用C/S模式应用程序的重要原因。 B/S模式相比C/S模式而言,由于它没有独立的客户端,使用标准浏览器作为客户端,其工作开发量较小。只需开发服务器端即可。另外由于其采用浏览器显示数据,因此移植性非常好,不受平台限制。如早期的偷菜游戏,在各个平台上都可以完美运行。 B/S模式的缺点也较明显。由于使用第三方浏览器,因此网络应用支持受限。另外,没有客户端放到对方主机上,缓存数据不尽如人意,从而传输数据量受到限制。应用的观感大打折扣。第三,必须与浏览器一样,采用标准http协议进行通信,协议选择不灵活。 因此在开发过程中,模式的选择由上述各自的特点决定。根据实际需求选择应用程序设计模式。 简单的C/S模型通信 Server端:Listen函数 func Listen(network, address string) (Listener, error) network:选用的协议:TCP、UDP, 如:“tcp”或 “udp” address:IP地址+端口号, 如:“127.0.0.1:8000”或 “:8000” Listener 接口: type Listener interface { Accept (Conn, error) Close error Addr Addr } Conn 接口: type Conn interface { Read(b byte) (n int, err error) Write(b byte) (n int, err error) Close error LocalAddr Addr RemoteAddr Addr SetDeadline(t time.Time) error SetReadDeadline(t time.Time) error SetWriteDeadline(t time.Time) error } 参看 [<u>https://studygolang.com/pkgdoc</u>](https://studygolang.com/pkgdoc) 中文帮助文档中的demo: 示例代码:TCP服务器.go package main import ( "net" "fmt" ) func main { // 创建监听 listener, err:= net.Listen("tcp", ":8000") if err != nil { fmt.Println("listen err:", err) return } defer listener.Close // 主协程结束时,关闭listener fmt.Println("服务器等待客户端建立连接...") // 等待客户端连接请求 conn, err := listener.Accept if err != nil { fmt.Println("accept err:", err) return } defer conn.Close // 使用结束,断开与客户端链接 fmt.Println("客户端与服务器连接建立成功...") // 接收客户端数据 buf := make(byte, 1024) // 创建1024大小的缓冲区,用于read n, err := conn.Read(buf) if err != nil { fmt.Println("read err:", err) return } fmt.Println("服务器读到:", string(buf[:n])) // 读多少,打印多少。 }
-
榫卯 [sǔn mǎo]
-
C 语言中常用的格式化符号。占位符 %d、%c、%f、%p、%x、%s、%m.n 等的含义解释。
-
组合数问题(组合数学 + 二维前缀和)--分析:有多组数据,肯定要考虑预处理,然后(O(1) answer\).\n,m<;=2000\)可以考虑线性递归的组合数\(C[i][j]=C[i-1][j]+C[i-1][j-1]\),因为只有k的倍数才会对答案有贡献、所以可以直接对 k 模进行递归,然后进行二维前缀和 \(f[i][j]=f[i-1][j]+f[i][j -1]-f[i-1][j-1]\) 计算时只需看是否为零即可。
-
云服务器+家用电脑(无公网 IP)Pinode 节点部署教程--理论上,无论你身在何处,只要能上网,就能运行一个固定 IP 的 Pi 节点节点!(注:不能直接部署独立云服务器)本方案相对运营商公网 IP 有以下优势:拥有稳定的固定 IP(阿里云 IP),解决了运营商不分配公网 IP 或分配动态 IP 的问题 ②节点部署在本地电脑上,相对安全。因为是使用阿里云的专网,稳定性也很强。希望对大家有用,帮助大家解决没有公网的节点部署问题。第一步:环境准备 1、本地电脑配置: ①操作系统:推荐 WIN10 专业版(目前节点容器只支持 2004 专业版) ②内存:推荐 4G 及以上 建议:https://item.taobao.com/item.htm?spm=a2126o.success.0.0.61 b94831SbZESt&id=6346663414282,阿里云服务器租用:阿里云(推荐1核2G以上,ECS共享s6,带宽3-5M即可,以下两个链接都可以,选择一个合适的即可)https://www.aliyun.com/minisite/ goods?userCode=is7i4iav
-
标题:除了B站,还有A,C,D,E,F,G,H,I,J,K,L,M,N,O,P站
-
大家口中所说的A站、B站、C站、D站、E站、F站、G站、H站、I站、J站、K站、L站、M站、N站、O站、P站、Q站、R站、S站、T站、U站、V站、W站、X站、Y站、Z站都是什么网站?
-
大家口中所说的A站、B站、C站、D站、E站、F站、G站、H站、I站、J站、K站、L站、M站、N站、O站、P站、Q站、R站、S站、T站、U站、V站、W站、X站、Y站、Z站都是什么网站?