Hi, this is Alice Home


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404

Happy Linux CLI

发表于 2018-03-24 | 分类于 Linux

我喜欢使用命令行,因为那很 Cool,当然也很方便,在刚开始使用的时候,有些东西可能比UI工具麻烦,但是只要去搜索一番,熟练了就会返现比UI工具好用多。CLI 的好处是:简单,轻量,灵活,做我所想 … … 不需要我在电脑的屏幕上找来找去,终于找到这个按钮了,very nice,其实 Low 的 1B。而且可视化工具的UI布局版本之间的差异真的是让人受不了,一会儿再view下面,一会儿再 Tool 下面 , 😲

正题 …

Happy Linux CLI 是我阅读《The Linux Command Line》 的实践记录,可能需要搞很久了,毕竟是 540 页的手册书籍,哈哈

##: Ch 01 引言
图形用户界面让简单的任务更容易完成,而命令行界面使完成复杂的任务成为可能。

参考

快乐的Linux命令行 - 好奇猫工作室 双语版

看云中文版

The Liux Command Line

Advanced Debugging and the Address Sanitizer WWDC 2015-Session 413

发表于 2018-03-24 | 分类于 WWDC

这是昨天,同事无意将 Xcode 中的Address Sanitizer 开启导致的问题。经过多方查证,找到了2015的视频。我个人的理解是:内存中毒检测,什么意思呢,就是如果在开发的构成中,你将 Address Sanitizer(开启方式:Edit Scheme ->Run -> Diagnostics -> 勾选 Address Ssaitizer)开启,那么当你的应用程序访问的中毒区域的内存的时候,那么程序就会停止报错,然后通过堆栈信息进行分析,可以找到出现问题的地方。

这是苹果为开发者提供的一种检测App 运行期间堆栈出现问题的一种方式,然而,当我第一次看到程序因为这些而停止的时候,还不知所措,罪过罪过。

这段 WWDC 视频大约 30 分钟左右,我花了一个半小时看完。整个视频内容分为两部分:
第一部分: 主要讲解 View Debugger(也就是我们说的小面包工具的使用) 以及 break point 的使用,编辑断点,po $arg1 异常信息等
第二部分: 主要是 Address Sanitizer 的使用以及原理(原理这块我是蒙圈的,牵扯的单个内存以及C++的信息,后面还要加油看看这块)。最后最后,是对 Xcode 提供的程序内存检测工具的综合分析,这些工具主要有: Guard Malloc,NSZombie,Malloc Scrible,Leaks Instrument,以及其他的参考信息。

视频内容学习

View Debug

这个是我们日常使用的小面包工具,傻瓜式操作,当你的程序视图显示的和你预想的不一样的时候你可以选用它来查看视图层级结构以及约束,当然我个人觉得查看约束是个令人头疼的事情,哈哈。

Break Point

  1. 全局断点,这里可以检测程序崩溃的时候的信息,帮你定位到出现问题的代码部分。这里主要说了,可以通过配置断点中的 action ,通过 pod $arg1 将异常信息输出
  2. 程序运行时候的action可以针对,多次运行的程序的某个对象内容进行打印 也是通过 po 对象 方式

Address Sanitizer 基本使用。

这个很简单,就是将这个功能打开,然后重新编译程序,运行,当程序访问到中毒内存的时候就会停止,然后查看堆栈信息,一步步寻找问题,是不是很开心😊,因为你要分析地址,分析内存,视频中分析了byte double占用的字节什么的,调试程序就是这么有意思,你要深入到每个字节,每个位到底存了什么,应该放什么,我想这已经是最原子的操作了

Address Sanitizer 对程序性能的影响分析。

这个看看 PDF 的那个文件上面有记录,反正不大。

Address Sanitizer 原理分析。

这个我看不懂,但是我看懂的部分是,这个工具的原理是在你申请的内存周围填充上了一些中毒内存,如果你的运行期间的内存超出了你之前申请的内存,那么运行的程序就会踏入中毒内存,这样就监听到了问题指出,是不是很 nice 的设计。我很佩服 Apple Developer。

Xcode 内存分析工具综述

这部分内容其实很好,虽然是最后一笔带过,但是句句都是精华,表明了各个工具的使用场景,缺陷以及优势所在。

WWDC linking

OmniPlan 使用

发表于 2018-03-16 | 分类于 项目管理

有时候对于项目中的任务需要一个可视化的描述,甘特图是最好的选择,而OmniPlan是非常好的绘制甘特的工具,Nice!

文档在此

阅读列表小计

发表于 2018-03-13

iOS

书名(中文) 书名(英文) 作者 源码 出版时间
1. Objective-C 编程之道(iOS 设计模式解析) Pro Objective-C Design Patterns for iOS Carlo Chung https://github.com/apress/pro-objective-c-design-patterns-for-ios 2011
2. Effective Objective C 2.0:编写高质量iOS与OS X代码的52个有效方法 Effective Objective-C 2.0: 52 Specific Ways to Improve Your IOS and OS X Programs Carlo Chung https://github.com/apress/pro-objective-c-design-patterns-for-ios 2011
1. Objective-C高级编程:iOS与OS X多线程和内存管理 ‘Pro Objective-C Design Patterns for iOS Carlo Chung https://github.com/apress/pro-objective-c-design-patterns-for-ios 2011

算法

Coding

书名(中文) 书名(英文) 作者 源码 出版时间 备注 阅读时间 阅读次数
1. 重构改善既有代码的设计 Refactoring Improving the Design of Existing Code Martin Fowler(熊节 译) 2018 1

Git 学习资源

  1. CyC2018
  2. 网络资源

Mac 提高开发效率

发表于 2018-03-12 | 分类于 Mac

Mac 是开发者必备,如果通过使用工具,就可以如虎添翼。

终端神器 Iterm2

O(1) 复杂度打开app

我在使用 Iterm2 的时候通过设置快捷键 ctrl + . 快速打开 Iterm2,但是如果app没有启动这种方式就会失效。这里就需要借助一款强大的快捷键工具app —— Snap

Dock 栏快捷方式

通过功能键 + 数字键,可以快速打开dock栏上的app

App 快捷键

通过添加经常用到的app以及其快捷键实现快速打开你想要打开的app

Mac 轻量级 IDE

发表于 2018-03-12 | 分类于 Mac

之前一直想找一个顺手的IDE,在使用Mac开发的时候,也使用了各种IDE,电脑上装了不下十种。
因为平时除了工作中的开发外,喜欢写一些博客,或者C 或者其他语言比如python,shell脚本等验证一些问题。写C,我用过gcc编译,也用过QT,还用过sublime … …
一堆的IDE都用过,但是平时工作的时候适应了一些界面,总是感觉用起来不太爽。
今天发现了 CodeRunner,我靠,神器~~~~,各种舒服啊。

CodeRunner.dmg Version 2.2.2

  1. 下载之后,双击打开,将app拖拽到Application中
  2. 运行 /Crack 下面的 CodeRunner2 hosts防联网验证程序
  3. 通过 CORE Keygen 生成注册码
  4. 打开 CodeRunner ,并输入注册码,OK了。

盛大的说法

Nice !

Flutter(二) Building Layouts in Flutter tutorial

发表于 2018-03-10

这部分是 Flutter 官网中 Learn More 模块中的布局课程。布局在Flutter应用中作用很大,学习时间2天。

结构

首先通过一个例子介绍了整体的布局,直观。
后面介绍一些布局原理和细节。

例子

Flutter中引入了一个新的概念,叫做widget,这里面包含了可视化的UI和布局模型。

整体结构

单个结构分析

整体展示

Widget 布局详解

Flutter 布局方法

  1. Widgets 是UI元素
  2. Widgets 是布局元素
  3. 通过简单的 Widgets 组成复杂的 Widgets

Widgets 是布局核心部分。在 Flutter中,几乎所有的东西都是 widget,甚至布局模型也是。图片,图标,文本所有能看到的东西都是widgets。但是有些你看不到的依然是widget,比如行,列以及格子。

布局一个 widget

  1. app 本身就是widget
  2. 创建添加以及布局一个widget很简单
  3. 将布局widget添加到app的widget上,就会显示到设备上
  4. Scaffold,是 Material 组件库中的一个widget,有一些默认的设置可供使用
  5. 我们可以通过是使用标准的widgets创建app

这一部分主要是创建并添加一个简单的 widget,包括创建一个简单的app。

在flutter中,只需要简单几步就可以将文本,icon还有图片显示到屏幕上:

  1. 选择一种你想是使用的 widget(这里使用Center,更多布局组件)
  2. 创建一个包含可显示内容的widget
1
2
3
4
5
6
// 文本 widget
new Text('Hello world', style: new TextStyle(fontSize:32.0))
// 图片 widget,这里涉及到向工程中添加图片资源
new Image.asset('images/myPic.jpg', fit: BoxFit.cover)
// 图标 widget
new Icon(Icons.star, color: Color.ret[500])
  1. 将可视化的widget添加到布局widget上
    所有的布局widget,都有 child 属性,或者是 children 属性,这取决于你要向布局widget中添加怎样的 widget。

    1
    2
    new Center (
    child: new Text('Hello world, style:new TextStyle(fontSize:f 32.0))
  2. 将 布局 widget 添加到页面上

标准 widgets

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

import 'package:flutter/material.dart';

void main() {
runApp(new MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
decoration: new BoxDecoration(color: Colors.white),
child: new Center(
child: new Text('Hello World',
style: new TextStyle(fontSize: 40.0, color: Colors.black87)),
),
);
}
}

material widget

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new Container(
decoration: new BoxDecoration(color: Colors.white),
child: new Center(
child: new Text('Hello world',
style: new TextStyle(fontSize: 40.0, color: Colors.black87),
textDirection: TextDirection.ltr,),

),
);
}
}

从竖直和水平两个方向布局多个widgets

最常用的一种布局模式是根据竖直和水平方向排列widgets。使用 Row widget 排列水平方向,使用 Column布局竖直方向。

  1. Row 和 Column 是最常见的布局模式;
  2. 行和列可以通过 child 属性交叉排列;
  3. 一个 child widget 可以是 Row ,Column 或者其他的复杂 widget
  4. Row 和 Column 可以定义自己的方向和子widget
  5. 可以拉伸或者约束某个widget
  6. 没看懂这句 ‘You can specify how child widgets use the Row’s or Column’s available space.’

内容

——————————————————————参考文章—————————————————————–

  1. Building Layouts in Flutter
  2. 为什么说Flutter是革命性的?)

算法 - 插入排序

发表于 2018-03-10 | 分类于 算法

《算法导论》第一个算法,插入排序。

伪代码 - 降序

缩进表示包含
A 代表数组

1
2
3
4
5
6
7
for j = 2 to A.len
i = j - 1
K = A[j]
while i > 0 and A[i] > K
A[i+1]= A[i]
i = i - 1
A[i + 1] = K

如果要写升序呢?伪代码该怎么改???

算法过程

代码实现

C

python

Python 实现入了大坑, & 和 and

Swift

Dart

Flutter 是什么?

发表于 2018-03-10

初识 Flutter 是在 吴小龙同学 个人微信账号的推送消息见到。不知道为什么突然对这个东西感兴趣了,于是在第二天就自己搭建了环境,做了官网上的demo试了下效果。下午的时候通过和安卓同学的了解,觉得对于安卓同学来说,做这个东西会相对简单很多,因为 Flutter的语言 Dart和 Kotlin以及 Java 的语法很相似。

开发环境

Android Studio
之前没有怎么用过 Android Studio,只是用他来编译过安卓程序,其他的就没怎么了解了。这次在安装Flutter环境的时候,通过 Flutter Doctor 检测的时候,输出信息告诉我要安装 Android Studio,于是乎就安装了。

Xcode 当然是需要的,如果直接安装Xcode 然后能够打包 iOS 项目,Flutter Doctor 检测会直接通过的。还会输出一条命令让你打开模拟器(open -a Simulator)。当然在检测的时候需要通过brew做些配置的修改通过控制台信息进行修改就是了,没什么难点。

开发语言

Dart 语言,其实到现在我都不知道是个什么语法,只是照着葫芦画瓢,将官网上的示例代码敲了一遍。感觉和 Swift 差不多,当然除了OC之外,感觉其他语言 – Java, Swift 等面向对象语言的语法都差不多。

Demo 过程

  1. 首先就是展示普通的界面(创建项目之后就会有)
  2. 做些简单的修改,改改文字啊,改改属性啊
  3. 导入一个包,是个语言包,搞这个的时候费了些时间,因为老是超时,多搞几次就好了,我重启了一次电脑
  4. 写了个列表,添加了交互以及页面的跳转,还有主题的修改
  5. 齐活。

后续

学习并尝试新的东西,提升自己的兴趣,虽然现在 iOS 和 安卓不火了,但是学习一个东西,去学习通用的东西,比如 Flutter怎么实现的跨平台,与 JS 有什么异同,以及其设计理念等。我觉得对于自己以后的技术之路还是有很大帮助的,您说呢 … … 哈哈 just one day 感觉理清了好多东西,从未知到相识,nice!

————–参考网站—————-

官网
InforQ - 为什么说Flutter是革命性的?
为什么原生应用开发者需要关注Flutter

pip install 失败

发表于 2018-03-08

最近换了一台电脑开发,在安装python的模块的时候出现了权限问题。在这里记录下解决方案。

我的是Mac电脑,系统是 High Sierra(10.13.1)

问题 一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Exception:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py", line 342, in run
prefix=options.prefix_path,
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 778, in install
requirement.uninstall(auto_confirm=True)
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 754, in uninstall
paths_to_remove.remove(auto_confirm)
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove
renames(path, new_path)
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/utils/__init__.py", line 267, in renames
shutil.move(old, new)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
...

解决: 关闭 sip 机制,重启电脑,按住 cmd +R 让电脑进入系统恢复模式,找到终端输入

1
$csrutil disable

当然,在关闭电脑之前你也可以通过 csrutil status来查看当前的sip状态

问题二

1
IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/ipython_genutils/tempdir.py'

这是没权限, 执行

1
sudo pip install ipython

问题三

1
2
3
4
5
6
Requirement already satisfied: ipython in /Library/Python/2.7/site-packages
Requirement already satisfied: traitlets>=4.2 in /Library/Python/2.7/site-packages (from ipython)
Requirement already satisfied: setuptools>=18.5 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ipython)
Requirement already satisfied: simplegeneric>0.8 in /Library/Python/2.7/site-packages (from ipython)
Requirement already satisfied: backports.shutil-get-terminal-size; python_version == "2.7" in /Library/Python/2.7/site-packages (from ipython)
Requirement already satisfied: pygmen

这种问题是你已经安装过,需要忽略

1
sudo pip install --upgrade ipython --ignore-installed six

问题 四

1
2
3
File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/_vendor/requests/packages/urllib3/response.py", line 246, in _error_catcher
raise ReadTimeoutError(self._pool, None, 'Read timed out.')
ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed out.

这个科学上网就好了。

这些方法不一定好使,当时目前我遇到的情况通过这几步都已经解决。再遇到问题再继续解决。当然也可以通过虚拟机的方式。

1…8910…13
Alice

Alice

The Loneliest Whale in the World

121 日志
35 分类
30 标签
© 2021 Alice
由 Hexo 强力驱动
主题 - NexT.Pisces