原文
简介本文将探索如何创建移动优先的网页设计体验。
为什么我们需要创建移动优先,响应式,适应式网页设计体验?
如何针对适应式站点组织 HTML 结构以便优化性能,优先考虑灵活性?
如何书写优先定义共享样式、针对大屏和媒体查询构建、使用相对单位的 CSS?
如何编写不引人注目的 Javascript 来有条件地加载内容片段,利用触摸事件和地理定位
我们可以做些什么来进一步增强我们的适应性体验
适应性的必要性随着网络环境越来越复杂,为越来越多的环境提供可靠的网络体验变得极为重要.幸运的是,响应式 web 设计给 web 开发者提供了一些可以匹配任意大小屏幕的工具来组织布局.
Homebrewgradle-completion1234567891011121314brew install gradle-completionecho $fpath | grep "/usr/local/share/zsh/site-functions"# 执行结果Add the following line to your ~/.bash_profile: [[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"Bash completion has been installed to: /usr/local/etc/bash_completion.d==> gradle-completionBash completion has been installed to: /usr/local/etc/bash_completion.dzsh ...
gradle
Gradle 升级日志5.0 包含了 Kotlin DSL 生产级支持,依赖版本对齐(类似 Maven BOM),任务超时,Java 11 支持
Kotlin DSL 1.0
依赖版本对齐:
同一逻辑组(platform)下的不同模块在依赖树中可以有相同的版本.也可以导入 Maven BOMs 定义 platform.
123456789dependencies { // 导入 BOM.此文件中版本将覆盖依赖树中的其他版本 implementation(enforcedPlatform("org.springframework.boot:spring-boot-dependencies:1.5.8.RELEASE")) // 使用上面定义的版本 implementation("com.google.code.gson:gson") implementation("dom4j:dom4j") // 覆盖上面的版本 implementation("org.codehaus. ...
config
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192# 修改配置git config --local # 对某个仓库有效git config --global # 对当前用户所有仓库有效git config --system # 对系统所有登录用户有效# 查看配置git config --list --localgit config --list --globalgit config --list --system# 打开编辑器修改configgit config -e # 仅对当前仓库有效# 变更文件名git mv readme readme.md # 避免 mv x y -> git add -> git rmgit log [分支] --o ...
前言JGit 是一个基于 EDL(BSD 协议的变种)授权的轻量级、实现 Git 版本控制系统功能(常规仓库访问,网络协议,版本控制核心算法)的纯 Java 库.
入门获取在仓库搜索引擎中搜索 jgit 即可获取各种添加依赖的方式.我现在基本使用的是 gradle 依赖
12implementation("org.eclipse.jgit:org.eclipse.jgit:5.3.0.201903130848-r")implementation("org.eclipse.jgit:org.eclipse.jgit.http.server:5.3.0.201903130848-r")
JGit 也具有 CLI(功能比 git CLI 少),可以试一下 JGit 的功能.
手动编译 JGit CLI假设已经 clone EGit 仓库. git clone https://git.eclipse.org/r/jgit/jgit.git 具体查看
12345678~/src/jgit$ mvn clean install# 进入 jgit 可执行文 ...
hexo deploy
前言在知乎找到了一个更好的方法: [原文](使用 hexo,如果换了电脑怎么更新博客? - CrazyMilk 的回答 - 知乎https://www.zhihu.com/question/21193762/answer/79109280)在这里我整理一下:
创建仓库 xxx.github.io.
创建两个分支: master/hexo.(可在 github 网页或本地创建)
git clone git@github.com:xxx/xxx.github.io.git
如果没有在网页创建分支,可以在此处创建.git checkout -b master; git checkout -b hexo
接下来执行 npm install hexo; hexo init; npm i; npm i hexo-deployer-git,此处在 hexo 分支操作
修改 _config.yml 的 deploy 参数,此处在 master 分支操作.
我使用了hexo-next-theme,从 git 上下载后,进入 themes/next 执行 git su ...
room kotlin coroutine
OverviewRoom 2.1 开始支持 Kotlin 协程。DAO 方法可以使用 suspend 标记以确保这些方法不会在主线程中被执行。Room 使用 Executor(来自框架组件) 作为 Dispatcher 运行 SQL 语句,当然在编译 RoomDatabase 时,你也可以提供自己的 Executor.
当前协程支持正在开发中,更多特性正在计划中
添加依赖请升级 Room 到 v2.1, 同时 Kotlin v1.3.0+ , Coroutines v1.0.0+
1implementation "androidx.room:room-coroutines:${versions.room}"
现在就可以使用啦
123456789101112131415161718@Daointerface UsersDao { @Query("SELECT * FROM users") suspend fun getUsers(): List<Us ...
OverviewCompose 是一个为了定义和运行多容器 Docker 应用的工具。官方动手示例
特性
一个主机多个隔离环境
当容器创建时保留所有的 volume
只有容器被更改时才触发创建
定义变量和在不同环境中使用
使用场景
自动测试环境
单独主机部署
docker-compose 安装1234sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-composesudo docker-compose --version
pip 安装
1pip install docker-compose
卸载
12sudo rm /usr ...
原文
view(activity/fragment) 和 ViewModel 交流的比较好的方式是 LiveData observables. view 订阅 LiveData 的改变且随时响应。这适用于连续不断的显示在一个屏幕的数据。但是某些数据却更应该被消费一次,比如 Snackbar 消息,navigation 事件 或 dialog 触发器。与其试着通过扩展 Architecture Components 扩展或库解决这个问题,不如我们可以直面这是个设计缺陷。我们推荐你把你的事件看作是状态的一部分。本文我们将列举一些常见的错误和推荐的解决方案。
❌ Bad: 1. 对事件使用 LiveData在 LiveData 对象内部直接持有 Snackbar 消息或 navigation 信号。原则上普通的 LiveData 对象可以这样使用,但实际上会暴露一些问题。在 master/detail 架构的 app 中,如下是 maters 的 ViewModel
12345678910// 请不要对事件这样用class ListViewModel : ViewMod ...
LiveData
LiveData 的优势
确保 UI 和数据状态匹配
LiveData 遵循观察者模式。
无内存泄漏
不会因为 Activity 被终止而崩溃
如果观察者处于 inactive 状态,例如 activity 处于回退栈中,那么它不会接收到任何 LiveData 事件.
不用手动处理生命周期事件
时刻更新数据状态
如果一个观察者的变为 inactive,那么它会在重新 active 时获取最新的数据状态。比如,一个 activiy 如果处于后台,那么它将在重新返回前台时获取到最新的数据。
应对 configuration change
如果一个 activity 或 fragment 由于 configuration change(设备旋转) 导致重新创建,它会立即获取最新可用的数据.
共享资源
可以使用单例模式扩展 LiveData,封装系统服务在 app 内共享。
在 ViewModel 对象中保存可以更新 UI 的 LiveData 对象,而不是在 activity 或 fragment 的原因是:
避免 activty 或 framg ...