Monday, February 29, 2016

Hades Git .gitignore 文件不起作用?


我用Git 管理自己的Android project, 我已经忽略了一些系统自动生成的文件例如:

.gitignore

*.iml.gradle/local.properties.idea/misc.xml.idea/workspace.xml.idea/libraries.DS_Store/build/gradle

.idea/workspace.xml  是 AS  自动生成的
.idea/libraries  是依赖库



但是,我在push的时候。 还是把 build 文件夹给push 到了服务器,别人在pull 的时候,还是有我的build文件夹,这样就会有冲突。

我参考这篇bolg:http://t.hengwei.me/post/gitignore文件不起作用/#


根本原因




.gitignore文件只是ignore没有被staged(cached)文件,对于已经被staged文件,加入ignore文件时一定要先从staged移除。
下面这段话来自github: 因此,要想用gitignore忽略文件,必须先把它们从staged中移除

所以,解决方案:
1 创建  .gitignore file, 将所有的你需要忽略的文件,全部忽略掉。
 注意,这时候你有自己的依赖项目的话,也要在自己的依赖项目里,创建
 .gitignore file.

2 remove the git cached  file
git rm -r -f --cached ./
    --cached             only remove from the index
    -f, --force           override the up-to-date check
    -r                        allow recursive removal
   .  or  ./                 you want remove index directory

3  git  add .

4  git status   
you can look this file status

5  git push 

or 

git push --set-upstream master master


references:
http://stackoverflow.com/questions/11451535/gitignore-not-working

https://help.github.com/articles/ignoring-files/


http://t.hengwei.me/post/gitignore文件不起作用/#


Android 切图的时候 图片的大小?


下图为图标的各个屏幕密度的对应尺寸

屏幕密度图标尺寸
mdpi48x48px
hdpi72x72px
xhdpi96x96px
xxhdpi144x144px
xxxhdpi192x192px

Sunday, February 28, 2016

git 小技巧

Git  的小技巧


查看git的 log  图形化:
git log --graph --pretty=oneline --abbrev-commit

Git 分支管理

如何管理的自己的Git分支呢?

分支的管理是Git 最牛逼之处

1   如何管理日常的开发分支

git checkout -b dev

如何merge呢?
当我们在dev 开发完毕之后,我们需要回到自己的master 分支,可能有的人也从 master 分支,创建了新的分支 比如:  git checkout -b devA    这个时候,你该如何merge  code?
如果使用  git checkout master
git merge dev
这个时候的merge 只是将指针 直接指向了 dev 的工作区,在git里叫做 快照合并。

所以这个时候我们应该使用:
git merge --no-ff dev -m "@Hades merge devHades"
因为这里直接生成了新的节点,所以这里需要提交一下 commit info.

使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法


2  git  开发分支管理

分支管理
开发过程中,我们往往不是一个人在开发。

git init 初始化的时候,会生成 origin/master 分支。
我们的发开分支  dev
我们的发布的分支  release

dev 是更新最快的分支,我们平时产品的开发维护都是在dev上进行的,但是,我并不建议所有人都在git 分支开发,我觉的只有  TeamLeader 来管理dev 分支。 然后负责,将 dev 分支测试稳定之后  同步到 master 分支! 
我们谈谈开发的时候,如果我们每个人提交代码的时候都提交到 dev 分支,这个跟svn 又有什么区别呢?所以,每一个开发者都要有自己的dev 分支,分支名字建议:  dev+英文名字
这样子可以区分每个分支的是谁来开发和维护。 这样子,我们每个人开发完毕之后, 自己测试没什么大的问题。就可以将自己的devA 的分支,同步到dev 分支。由 TeamLeader 同步到 master  or release branch! If your compay just have one member, You need't do this!

关于 release 分支,他只是用来发布包的时候出来的,我们可以根据自己需要自己处理!
我的方式是: 我们的master分支是最新的代码的分支,也是稳定版本的分支,我们需要发新的版本的时候,我们都需要从master 代码merge 过来。 当需要直接需改发布版本的问题的时候,我们可以直接从release 分支checkout bug 分支,进行管理,修改完毕之后,直接将bug 分支删除!




参考:
http://www.ruanyifeng.com/blog/2012/07/git.html

Friday, February 26, 2016

PHP 基础教程 GerkHades

PHP 是一门类型松散的语言
在上面的例子中,请注意我们不必告知 PHP 变量的数据类型。
PHP 根据它的值,自动把变量转换为正确的数据类型。

在诸如 C 和 C++ 以及 Java 之类的语言中,程序员必须在使用变量之前声明它的名称和类型。


PHP 变量作用域
在 PHP 中,可以在脚本的任意位置对变量进行声明。
变量的作用域指的是变量能够被引用/使用的那部分脚本。
PHP 有三种不同的变量作用域:
  • local(局部)
  • global(全局)
  • static(静态)

Local 和 Global 作用域
函数之外声明的变量拥有 Global 作用域,只能在函数以外进行访问。
函数内部声明的变量拥有 LOCAL 作用域,只能在函数内部进行访问


PHP echo 和 print 语句
echo 和 print 之间的差异:
  • echo - 能够输出一个以上的字符串
  • print - 只能输出一个字符串,并始终返回 1
提示:echo 比 print 稍快,因为它不返回任何值。

PHP 对象
对象是存储数据和有关如何处理数据的信息的数据类型。
在 PHP 中,必须明确地声明对象。
首先我们必须声明对象的类。对此,我们使用 class 关键词。类是包含属性和方法的结构。
然后我们在对象类中定义数据类型,然后在该类的实例中使用此数据类型:
实例
<?php
class Car
{
  var $color;
  function Car($color="green") {
    $this->color = $color;
  }
  function what_color() {
    return $this->color;
  }
}
?>

PHP NULL 值
特殊的 NULL 值表示变量无值。NULL 是数据类型 NULL 唯一可能的值。
NULL 值标示变量是否为空。也用于区分空字符串与空值数据库。
可以通过把值设置为 NULL,将变量清空:
实例
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>


PHP 字符串函数



常量类似变量,但是常量一旦被定义就无法更改或撤销定义。

PHP 常量
常量是单个值的标识符(名称)。在脚本中无法改变该值。
有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。
注释:与变量不同,常量贯穿整个脚本是自动全局的。

设置 PHP 常量
如需设置常量,请使用 define() 函数 - 它使用三个参数:
  1. 首个参数定义常量的名称
  2. 第二个参数定义常量的值
  3. 可选的第三个参数规定常量名是否对大小写敏感。默认是 false。
<?php
define("GREETING", "Welcome to W3School.com.cn!");
echo GREETING;
?>



PHP 算数运算符
运算符
名称
例子
结果
+
加法
$x + $y
$x 与 $y 求和
-
减法
$x - $y
$x 与 $y 的差数
*
乘法
$x * $y
$x 与 $y 的乘积
/
除法
$x / $y
$x 与 $y 的商数
%
模数
$x % $y
$x 除 $y 的余数
下例展示了使用不同算数运算符的不同结果:
实例
<?php 
$x=10; 
$y=6;
echo ($x + $y); // 输出 16
echo ($x - $y); // 输出 4
echo ($x * $y); // 输出 60
echo ($x / $y); // 输出 1.6666666666667
echo ($x % $y); // 输出 4
?>



PHP 赋值运算符用于向变量写值。
PHP 中基础的赋值运算符是 "="。这意味着右侧赋值表达式会为左侧运算数设置值。
赋值
等同于
描述
x = y
x = y
右侧表达式为左侧运算数设置值。
x += y
x = x + y
x -= y
x = x - y
x *= y
x = x * y
x /= y
x = x / y
x %= y
x = x % y
模数

PHP 字符串运算符
运算符
名称
例子
结果
.
串接
$txt1 = "Hello" $txt2 = $txt1 . " world!"
现在 $txt2 包含 "Hello world!"
.=
串接赋值
$txt1 = "Hello" $txt1 .= " world!"
现在 $txt1 包含 "Hello world!"


PHP 递增/递减运算符
运算符
名称
描述
++$x
前递增
$x 加一递增,然后返回 $x
$x++
后递增
返回 $x,然后 $x 加一递增
--$x
前递减
$x 减一递减,然后返回 $x
$x--
后递减
返回 $x,然后 $x 减一递减


PHP 比较运算符
PHP 比较运算符用于比较两个值(数字或字符串):
运算符
名称
例子
结果
==
等于
$x == $y
如果 $x 等于 $y,则返回 true。
===
全等(完全相同)
$x === $y
如果 $x 等于 $y,且它们类型相同,则返回 true。
!=
不等于
$x != $y
如果 $x 不等于 $y,则返回 true。
<>
不等于
$x <> $y
如果 $x 不等于 $y,则返回 true。
!==
不全等(完全不同)
$x !== $y
如果 $x 不等于 $y,且它们类型不相同,则返回 true。
>
大于
$x > $y
如果 $x 大于 $y,则返回 true。
<
大于
$x < $y
如果 $x 小于 $y,则返回 true。
>=
大于或等于
$x >= $y
如果 $x 大于或者等于 $y,则返回 true.
<=
小于或等于
$x <= $y
如果 $x 小于或者等于 $y,则返回 true。

PHP 逻辑运算符
运算符
名称
例子
结果
and
$x and $y
如果 $x 和 $y 都为 true,则返回 true。
or
$x or $y
如果 $x 和 $y 至少有一个为 true,则返回 true。
xor
异或
$x xor $y
如果 $x 和 $y 有且仅有一个为 true,则返回 true。
&&
$x && $y
如果 $x 和 $y 都为 true,则返回 true。
||
$x || $y
如果 $x 和 $y 至少有一个为 true,则返回 true。
!
!$x
如果 $x 不为 true,则返回 true。


PHP 数组运算符
PHP 数组运算符用于比较数组:
运算符
名称
例子
结果
+
联合
$x + $y
$x 和 $y 的联合(但不覆盖重复的键)
==
相等
$x == $y
如果 $x 和 $y 拥有相同的键/值对,则返回 true。
===
全等
$x === $y
如果 $x 和 $y 拥有相同的键/值对,且顺序相同类型相同,则返回 true。
!=
不相等
$x != $y
如果 $x 不等于 $y,则返回 true。
<>
不相等
$x <> $y
如果 $x 不等于 $y,则返回 true。
!==
不全等
$x !== $y
如果 $x 与 $y 完全不同,则返回 true。
下例展示了使用不同数组运算符的不同结果:



PHP 条件语句
在您编写代码时,经常会希望为不同的决定执行不同的动作。您可以在代码中使用条件语句来实现这一点。
在 PHP 中,我们可以使用以下条件语句:
  • if 语句 - 如果指定条件为真,则执行代码
  • if...else 语句 - 如果条件为 true,则执行代码;如果条件为 false,则执行另一端代码
  • if...elseif....else 语句 - 选择若干段代码块之一来执行
  • switch 语句 - 语句多个代码块之一来执行

Switch 语句
如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。
使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。
语法
switch (expression)
{
case label1:
  code to be executed if expression = label1;
  break;  
case label2:
  code to be executed if expression = label2;
  break;
default:
  code to be executed
  if expression is different 
  from both label1 and label2;
}
工作原理:
  1. 对表达式(通常是变量)进行一次计算
  2. 把表达式的值与结构中 case 的值进行比较
  3. 如果存在匹配,则执行与 case 关联的代码
  4. 代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
  5. 如果没有 case 为真,则使用 default 语句


PHP 循环
在您编写代码时,经常需要反复运行同一代码块。我们可以使用循环来执行这样的任务,而不是在脚本中添加若干几乎相等的代码行。
在 PHP 中,我们有以下循环语句:
  • while - 只要指定条件为真,则循环代码块
  • do...while - 先执行一次代码块,然后只要指定条件为真则重复循环
  • for - 循环代码块指定次数
  • foreach - 遍历数组中的每个元素并循环代码块

PHP for 循环
如果您已经提前确定脚本运行的次数,可以使用 for 循环。
语法
for (init counter; test counter; increment counter) {
  code to be executed;
}
参数:
  • init counter:初始化循环计数器的值
  • test counter:: 评估每个循环迭代。如果值为 TRUE,继续循环。如果它的值为 FALSE,循环结束。
  • increment counter:增加循环计数器的值
下面的例子显示了从 0 到 10 的数字:




PHP foreach 循环
foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。
语法
foreach ($array as $value) {
  code to be executed;
}
每进行一次循环迭代,当前数组元素的值就会被赋值给 $value 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。
下面的例子演示的循环将输出给定数组($colors)的值:
实例
<?php 
$colors = array("red","green","blue","yellow"); 

foreach ($colors as $value) {
  echo "$value <br>";
}
?>



PHP 的真正力量来自它的函数:它拥有超过 1000 个内建的函数。

PHP 用户定义函数
除了内建的 PHP 函数,我们可以创建我们自己的函数。
函数是可以在程序中重复使用的语句块。
页面加载时函数不会立即执行。
函数只有在被调用时才会执行。



在 PHP 创建用户定义函数
用户定义的函数声明以关单 "function" 开头:
语法
function functionName() {
  被执行的代码;
}
注释:函数名能够以字母或下划线开头(而非数字)。
注释:函数名对大小写不敏感。
提示:函数名应该能够反映函数所执行的任务。




PHP 数组

什么是数组?
数组是特殊的变量,它可以同时保存一个以上的值。
如果您有一个项目列表(例如汽车品牌列表),在单个变量中存储这些品牌名称是这样的:
$cars1="Volvo";
$cars2="BMW";
$cars3="SAAB";
不过,假如您希望对变量进行遍历并找出特定的那个值?或者如果您需要存储 300 个汽车品牌,而不是 3 个呢?
解决方法是创建数组!
数组能够在单一变量名中存储许多值,并且您能够通过引用下标号来访问某个值。
在 PHP 中创建数组
在 PHP 中, array() 函数用于创建数组:
array();
在 PHP 中,有三种数组类型:
  • 索引数组 - 带有数字索引的数组
  • 关联数组 - 带有指定键的数组
  • 多维数组 - 包含一个或多个数组的数组


PHP 索引数组
有两种创建索引数组的方法:
索引是自动分配的(索引从 0 开始):
$cars=array("Volvo","BMW","SAAB");
或者也可以手动分配索引:
$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB";
下面的例子创建名为 $cars 的索引数组,为其分配三个元素,然后输出包含数组值的一段文本:
实例
<?php
$cars=array("Volvo","BMW","SAAB");
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>






PHP 关联数组
关联数组是使用您分配给数组的指定键的数组。
有两种创建关联数组的方法:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
或者:
$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";
随后可以在脚本中使用指定键:

遍历关联数组
如需遍历并输出关联数组的所有值,您可以使用 foreach 循环,就像这样:
实例
<?php
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");

foreach($age as $x=>$x_value) {
  echo "Key=" . $x . ", Value=" . $x_value;
  echo "<br>";
}
?>


PHP 数组排序

数组中的元素能够以字母或数字顺序进行升序或降序排序。
PHP - 数组的排序函数
在本节中,我们将学习如下 PHP 数组排序函数:

索引数组
  • sort() - 以升序对数组排序
  • rsort() - 以降序对数组排序
关联数组
  • asort() - 根据值,以升序对关联数组进行排序
  • ksort() - 根据键,以升序对关联数组进行排序
  • arsort() - 根据值,以降序对关联数组进行排序
  • krsort() - 根据键,以降序对关联数组进行排序


PHP 全局变量 - 超全局变量
超全局变量 在 PHP 4.1.0 中引入,是在全部作用域中始终可用的内置变量。

PHP 全局变量 - 超全局变量
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。
这些超全局变量是:
  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION
本节会介绍一些超全局变量,并会在稍后的章节讲解其他的超全局变量。




$GLOBALS — 引用全局作用域中可用的全部变量
$GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量。变量的名字就是数组的键。
下面的例子展示了如何使用超级全局变量 $GLOBALS:
实例
<?php 
$x = 75; 
$y = 25;

function addition() { 
  $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; 
}

addition(); 
echo $z; 
?>



PHP $_SERVER
$_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。
表列出了您能够在 $_SERVER 中访问的最重要的元素:

元素/代码
描述
$_SERVER['PHP_SELF']
返回当前执行脚本的文件名。
$_SERVER['GATEWAY_INTERFACE']
返回服务器使用的 CGI 规范的版本。
$_SERVER['SERVER_ADDR']
返回当前运行脚本所在的服务器的 IP 地址。
$_SERVER['SERVER_NAME']
返回当前运行脚本所在的服务器的主机名(比如 www.w3school.com.cn)。
$_SERVER['SERVER_SOFTWARE']
返回服务器标识字符串(比如 Apache/2.2.24)。
$_SERVER['SERVER_PROTOCOL']
返回请求页面时通信协议的名称和版本(例如,“HTTP/1.0”)。
$_SERVER['REQUEST_METHOD']
返回访问页面使用的请求方法(例如 POST)。
$_SERVER['REQUEST_TIME']
返回请求开始时的时间戳(例如 1577687494)。
$_SERVER['QUERY_STRING']
返回查询字符串,如果是通过查询字符串访问此页面。
$_SERVER['HTTP_ACCEPT']
返回来自当前请求的请求头。
$_SERVER['HTTP_ACCEPT_CHARSET']
返回来自当前请求的 Accept_Charset 头( 例如 utf-8,ISO-8859-1)
$_SERVER['HTTP_HOST']
返回来自当前请求的 Host 头。
$_SERVER['HTTP_REFERER']
返回当前页面的完整 URL(不可靠,因为不是所有用户代理都支持)。
$_SERVER['HTTPS']
是否通过安全 HTTP 协议查询脚本。
$_SERVER['REMOTE_ADDR']
返回浏览当前页面的用户的 IP 地址。
$_SERVER['REMOTE_HOST']
返回浏览当前页面的用户的主机名。
$_SERVER['REMOTE_PORT']
返回用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER['SCRIPT_FILENAME']
返回当前执行脚本的绝对路径。
$_SERVER['SERVER_ADMIN']
该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。
$_SERVER['SERVER_PORT']
Web 服务器使用的端口。默认值为 “80”。
$_SERVER['SERVER_SIGNATURE']
返回服务器版本和虚拟主机名。
$_SERVER['PATH_TRANSLATED']
当前脚本所在文件系统(非文档根目录)的基本路径。
$_SERVER['SCRIPT_NAME']
返回当前脚本的路径。
$_SERVER['SCRIPT_URI']
返回当前页面的 URI。



PHP $_REQUEST
PHP $_REQUEST 用于收集 HTML 表单提交的数据。
下面的例子展示了一个包含输入字段及提交按钮的表单。当用户通过点击提交按钮来提交表单数据时, 表单数据将发送到 <form> 标签的 action 属性中指定的脚本文件。在这个例子中,我们指定文件本身来处理表单数据。如果您需要使用其他的 PHP 文件来处理表单数据,请修改为您选择的文件名即可。然后,我们可以使用超级全局变量 $_REQUEST 来收集 input 字段的值:
实例
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_REQUEST['fname']; 
echo $name; 
?>

</body>
</html>



PHP $_POST
PHP $_POST 广泛用于收集提交 method="post" 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。
下面的例子展示了一个包含输入字段和提交按钮的表单。当用户点击提交按钮来提交数据后,表单数据会发送到 <form> 标签的 action 属性中指定的文件。在本例中,我们指定文件本身来处理表单数据。如果您希望使用另一个 PHP 页面来处理表单数据,请用更改为您选择的文件名。然后,我们可以使用超全局变量 $_POST 来收集输入字段的值:
实例
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php 
$name = $_POST['fname']; 
echo $name; 
?>

</body>
</html>


PHP $_GET
PHP $_GET 也可用于收集提交 HTML 表单 (method="get") 之后的表单数据。
$_GET 也可以收集 URL 中的发送的数据。
假设我们有一张页面含有带参数的超链接:
<html>
<body>

<a href="test_get.php?subject=PHP&web=W3school.com.cn">测试 $GET</a>

</body>
</html>
当用户点击链接 "Test $GET",参数 "subject" 和 "web" 被发送到 "test_get.php",然后您就能够通过 $_GET 在 "test_get.php" 中访问这些值了。
下面的例子是 "test_get.php" 中的代码:
实例
<html>
<body>

<?php 
echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
?>

</body>
</html>














































Thursday, February 25, 2016

运维工程师 是做什么的?

运维工程师 是做什么的,感觉就像是一个 网络管家一样的任务。屌屌的。

这是知乎一个哥们的回答:
https://www.zhihu.com/topic/19586098

感觉就是多而不精的角色。这样的工作不会很乏味。
还不错,感觉可以的,可以学习的东西太多了,不是短时间内可以学会的额,头疼。

冬天如何防静电?

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Devymex Wang
链接:https://www.zhihu.com/question/19584885/answer/20530524
来源:知乎

理论分析和实验均表明摸墙壁效果很不理想。现在很多室内墙壁都是乳胶漆粉刷的,导电性不佳,摸墙壁往往并不能充分释放静电,而有些导电性好的墙壁反而会把你打到。再者,遇到在车辆上没有墙的情况怎么办?

勤洗脸、洗手更不可取,在你触摸水龙头时就会被静电打到,一旦被打,电就已经释放完了,洗手有什么用?喷水的方法就更加不恰当了,先不说冬天往身上洒冷水的感觉如何,这个方法根本不能解决问题。

======静电电击原理======

人身上的衣服和别人的衣服或座椅摩擦会产生静电,也就是在你的全身上下充满了静电荷。由于鞋底是橡胶的,绝缘性良好,因此电荷不可能通过鞋导给大地。那么当你触摸水管、机箱等零电位的导体时,你身上的电荷就会通过这些导体导向大地或空气。

由于静电荷的电压很大,在皮肤接近导体而未接触导体时就会把空气击穿,通过电离的空气传导放电。此时你身上所有的电荷都将通过皮肤上离导体最近的那一点瞬间释放,因此皮肤上的这一点在放电瞬间会通过相当大的瞬时电流,从而产生刺痛感。

======避免电击方法======

最经济也最方便的解决方法就是钥匙法:用整个手掌握住钥匙(其它纯金属体亦可),用它的尖端触碰零电位导电物体(比如金属门窗金属水管暖气管金属水槽家电金属外壳等等),让金属的尖端代替你皮肤上的一点来释放电荷。如果有放电的发生,你在暗处就会看到在钥匙尖和导电物体之间有一道电弧。

注意:一定要用金属柄的钥匙,不能戴手套,用尽可能大的接触面积,最好是用整个手掌紧紧地捏住。


一定要大面积紧紧握住!!!
一定要大面积紧紧握住!!!
一定要大面积紧紧握住!!!
重要的话强调三遍,否则无效!

======相关问答======

问:为什么冬天会产生较多静电?
答:主要原因是冬天人们穿的外套含有较多化纤成份,这些材料与毛衣等织物摩擦极易产生静电。

问:产生静电和天气干燥有无关系?
答:有。空气潮湿的时候,由于微小液滴大量存在,空气导电率高,电荷不容易在身上积蓄。

问:钥匙也是导体,为什么摸钥匙没事?
答:钥匙一直和你的身体、衣物接触,它与你身体的电位差为零,所以手和钥匙接触不会产生放电现象。

问:为什么有时会在笔记本的USB接口处被电到?
答:如果笔记本连接了电源线或着网线,那么它的USB接口处的电位是与大地相等的(零电位),也就意味着如果你的身体带有静电荷,就与它产生了电势差。

问:放在木桌子上的金属架子没有和大地相连通,为什么还会被电到?
答:金属物件的导电性极佳,且大金属架子的表面积很大,也就是说和空气的接触面积很大,这样你身上带有的电荷很容易通过金属架子导向空气。

问:如何测试钥匙法是否有效?
答:很简单。在干燥的冬天找一个穿毛衣的同伴,你穿上光滑面料的外套,都穿胶底鞋站立于地面上。然后你用袖子在同伴的背后快速上下摩擦十余次(身体其他部位不能接触,也不要太大力按压,以免击穿放电),之后二人迅速分开,分别手持钥匙,用钥匙尖互碰即可看到放电的电弧光(在暗处)。

问:没带钥匙怎么办?
答:身边任何满足下面三个条件的东西都可以替代钥匙:一、纯金属制成,二、不要超过巴掌大小,三、未与任何其他导电物体接触。比如木桌子上的金属剪刀,床边的金属发卡,塑料笔筒里的金属笔杆,小号金属杯等,这些东西你都可以放心的拿起来用于放电而不会被电到。

总结起来就是“小黄金”原则,小——物件不大,可手持;黄——放置于黄木桌上(随身携带或其它绝缘位置亦可);金——纯金属制成。

只要小黄金,绝对无电击!

Wednesday, February 24, 2016

Android Webview 的坑

作为Ninja浏览器(mthli/Ninja · GitHub)的开发者,我想我遇到的问题应该具有一些代表性吧。下面说说我比较困惑的几个地方。
  1. WebViewClient.onPageFinished()。你永远无法确定当WebView调用这个方法的时候,网页内容是否真的加载完毕了。当前正在加载的网页产生跳转的时候这个方法可能会被多次调用,StackOverflow上有比较具体的解释(How to listen for a Webview finishing loading a URL in Android?), 但其中列举的解决方法并不完美。所以当你的WebView需要加载各种各样的网页并且需要在页面加载完成时采取一些操作的话,可能WebChromeClient.onProgressChanged()比WebViewClient.onPageFinished()都要靠谱一些。
  2. WebView后台耗电问题。当你的程序调用了WebView加载网页,WebView会自己开启一些线程(?),如果你没有正确地将WebView销毁的话,这些残余的线程(?)会一直在后台运行,由此导致你的应用程序耗电量居高不下。对此我采用的处理方式比较偷懒,简单又粗暴(不建议),即在Activity.onDestroy()中直接调用System.exit(0),使得应用程序完全被移出虚拟机,这样就不会有任何问题了。
  3. 切换WebView闪屏问题。如果你需要在同一个ViewGroup中来回切换不同的WebView(包含了不同的网页内容)的话,你就会发现闪屏是不可避免的。这应该是Android硬件加速的Bug,如果关闭硬件加速这种情况会好很多,但无法获得很好的浏览体验,你会感觉网页滑动的时候一卡一卡的,不跟手。
  4. 数据积累问题。开启缓存什么的有利于网页的浏览体验,但你会发现即使是清除了必要的内容,比如Cache、Cookie、Form Data、History、Password等等东西,你的应用程序所占用的存储空间还是会越来越大,到最后只好手动到系统设置的应用信息界面里清除数据了 :(
  5. 滚动条问题。Android System WebView的横向滚动条真是好粗的有木有...
以上是我能想到的啦,没想到的大概是不重要所以自动忽略啦~
另外针对Android System WebView的相关开发,推荐看看Google官方的示例教程 GoogleChrome/chromium-webview-samples · GitHub

PS:我开发Android刚刚满一年,如有疏漏请多多指教 :)

Android 如何修改源代码?

    是的,有的时候你会发现  你需要的,代码并不能给你。这就是 开源的好处,因为开源的东西,你有自己的便利性,你可以自己去改动源代码,这样的话,差不多只有你想不到的,没有你做不到的。关键在于自己的想要什么?这就是最关键的,最可怕的不是你不会什么?最可怕的是,你根本不知道自己不会什么!就是这么简单,做自己喜欢做的事情。

   如何去改动源代码? Android 
  比较的困难。现在我们一般用Android studio,或者本地的v4 的插件,!

我想改动源代码。这样的代价太大了。

最好用 继承来实现!

我的思考

这个世界就是这样子的,谁都靠不住的,除了自己的。因为,每个人都有自己的利益,自己的圈子,自己的想法,我们不可能去左右别人的世界,每个人都是活在自己的世界里面!就像,我们的公司,每个人都有自己的想法,所以,当你无法给别人想要的,金钱 技术的时候,就会有人离开,就是这个样子,因为,当你的身边没有大牛的时候,你就会很累,你需要靠自己去摸索,这种精神真的是很不容易,你可能会走很多的弯路,但是,我有不喜欢去带别人,也不喜欢被别人带的感觉,就是这样子,我只是喜欢靠着自己,但是只是靠自己 成长真的很慢很慢,当你觉的你自己生活的压力很小的时候,工作压力很小的时候,其实你成长的真的很慢,要学会给自己做加减法,我们没有办法去左右别人的想法,我们需要做的就是靠自己的能力的打拼,一般的公司是留不住大牛的,因为大牛不喜欢没有竞争力的团队,真的大牛又是什么呢?他们对于技术的追求的顶级目标又是什么呢?我似乎更在乎自己的圈子,我发现自己真的懒了,也开始害怕了!回想当年,初出茅庐的样子,真的是天不怕地不怕的样子,真的是太不容易了!别人的去与留有什么关系呢?最好的样子 是留下,当时生活就是河里面的水,你无法留住,就是这样子,注定是要走的,只是什么时间走而已,你何必去自责,又何必怨天尤人呢?当你技术牛逼的之后,这家公司给不了你想要的时候,你还会留下吗?答案是否定的,你不会留下,这就是我们的生活,这就是我们的现实!做什么事情,都不要太依赖别人了,因为,天下没有不散的宴席,自己的压力很大,但是公司是不愿意花再多的钱去招人,那是需要很大的money ! 就是这么简单,就是想用最少的人干最多的事情,压力很大的,生活没有什么事简简单单的,主城,什么叫做主程,主城就是别人要做的多得多,当别人玩的时候,吃饭的时候,看电影的时候,陪女朋友逛街的时候,周末睡觉的时候,等等,他都在投资自己,做自己该做的事情,很多的时候,我们都是彻底的迷茫了,很多不知道自己想要什么!想要什么的人,你有可能有留不住的!这就是现在的公司,我并不在乎任何一个人的去留,因为,我真的在乎的只有自己而已,是的,跟我有什么关系呢?爱走走爱溜溜!就是这样子,没了再招,公司又不是没钱。就是你这样子。爱咋咋地!

我现在需要做的事情,并不是去关系别人怎么样子,我最需要关心的就是自己需要怎么样!如果,自己不行了,没有人回去管你的。这就是你的生活!

我要做一个有追求的人。有技术追求的人。不要在浑浑噩噩的过日了,这样子下去,我到了三十岁的时候,也还是这个样子,没有一丝丝的进步!

加油吧 亲!


Tuesday, February 23, 2016

只用root 用户验证了ssh key,可以不用输入密码登录, 普通用户只能通过密码登录

这两天 一直在研究, 为什么自己的Git 登录的时候老是需要输入密码,但是我已经设置了SSH keygen 给VPS 的普通的用户了,还是需要我输入信息,这让我很恼火的!

这两天一直在研究为什么?

找到了原因在这篇博客:

因为 etc/ssh/sshd_config

中有一个参数:
PermitRootLogin yes

所以,只有root用户才有权限使用ssh,其他的用户就算是 添加了ssh  id_rsa.pub key 也是没有用的!依然需要输入密码!


最终解决方案:

将你的 密码设置的短一点!
  哈哈哈




SSH info

How to use SSH ?


How to see the  fingerprint number:


ssh-keygen -lf ~/.ssh/id_rsa.pub



How To Set Up SSH Keys






References:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

Monday, February 22, 2016

思考编程语言

现在的语言太多了,我不知道该做什么呢?现在的技术的更新太快了,如果自己的只是一味的追求最新的东西,

Git 服务器的搭建 教训

Git  的搭建,在服务器端必须要有添加用户的权限,所以一般用户的权限是无法配置的Git仓库的,所以,你需要有 root 权限。


当你,建立完仓库之后,克隆岛本地之后,需要提交代码!

这里一提交Android 代码为例子,

1  ,gitignore

/.gitignore

.gradle
/gradle
/local.properties
/.idea/*

*/build
*/gen
*/*.iml
*iml

.DS_Store



2  不需要的文件, 提交的时候 尽量的只提交 原始的文件。 自动生成的文件不要提交!
原则,
a  所有本地生成的文件 都不提交
b 所有运行时生成的文件 都不提交



所以的build 文件夹一律不提交

.iml  文件不提交


为什么不提交呢?
因为,加入你提交了。在建立新的分支的时候, 每个本地的文件都不同。你需要更新的文件太多了,尽管你没有动过,但是 系统动过了。也算是动过的文件!




WARN - inspections.IntellijLintClient - No projects found for []

Today I use Android studio . I meet this question:

WARN - inspections.IntellijLintClient - No projects found for [] 




I see many the same question, But I can not find the way to resolve the question.  So I use  click File ---> invalidate caches and restart .  And close Charles, I wait  long time. 

In a world ,I don't how to resolve  the question?

when i restart Computer and Android studio!

It is Ok !

Sunday, February 21, 2016

享受你的过程

现在是我最好的年华!我没有那么多的时间,再去纠结自己该学什么,该做什么,该做哪一行?说真的我真的不是很清楚,就像颜总说的,如果你没有在一家公司呆到2年,最好不要写到自己的简历上去。因为,你在这家公司什么也没有学到,就算是学了,那也只是学到了皮毛!

现在,对于我而言是一次不错的机遇和就会,我想跟孙总多学点知识,如果可以的能够实现自己的小理想,在北京买套房子,那也是很不错的呀!我应该感谢超哥,如果不是超哥,我没有这么好的机会的,现在自己有机会去证明自己的能力,其他的都不要再去想了!现在,最主要给的就是靠着自己的能力去做,证明给自己看,如果,自己不行俺也没有办法,那就再请更牛逼的人就好了!就是这样紫的,对于公司,需要的是能够干货的人,不是废物。没有人想要废物,虽然人是可以培养的但是,培养一个人的成本是非常的高的,没有任何一家公司愿意花钱去培养,都他妈的想要现成的人才,中国的老板都是急功近利的,有可能是饮鸩止渴的,你看拉钩就知道,都要3到5年经验的,没有一年的哪来的三年的呢?想不开呢!

想在的北颜,对于我而言是一次机会,目前为止,还没有遇到这么特别的老总,最主要的是自己的能力还是很差的,我还有很长的路要走的,现在的我只是刚刚的入门而已!

对于自己的技术,感觉自己现在的技术还没有搞好,老是想贪得无厌的,想学的东西太多了,但是自己的内心却是什么都想要学的那种人,这种人是我看好的,但是,你需要先精通一门,才可以触类旁通,现在,对于Java 还是一直半解的如何能偶立足呢?所以,我觉的我需要先收收心,先精通一下Java 和 Android ,这才是我安身立命之根本,如果,我连这个都搞不精通,我又怎么去学习其他的,我想学的东西太多了,Python Mac C  Object_C  Ruby Javascript Java go and so on!

我觉,现在自己的Android 的技术还不是炉火纯青,差很多东西,但是自己内心并不是很想学的,只是在应付自己的工作,最终 工作也会应付现在的我,我需要花一年的时间,让自己沉淀一下,让自己真的了解Android  Java, 技术在不断地更新,所以我们需要不断的丰富的自己的技术!让自己的技术不断的提高,并不是在原地踏步不前的,这样自己的饭碗就没有了。我写的代码总是得过且过的,这是在给自己买坑呀!对不起自己的,因为,自己的代码是自己维护的奥,没有被人会去承担你的自己的坑!享受现在这种过程,让自己真的成长起来吧,现在的自己还有很多需要学习的,不要觉得自己的技术已经很牛逼的,其实差的很远的,我现在似乎只是在用被人封装好的框架而已,没什么牛逼的,就算换一个人也是可以的,代码是不会骗人的,看代码就可以知道这个人的性格的!

现在的我,太急功近利的,技术,现在的自己并不是在为了金钱奋斗,至少我的眼里面,不能只有钱,没有其他的东西呀!现在的自己是的被贷款逼着走的,但是自己的眼里不能只看到钱,你挣的钱是作甚的呀?爸妈的钱是不舍得花!但是,你看到他们这么过就会富裕了吗?答案是否定了,我的工资不仅仅是养活自己的,存一部分钱也是可以的,但是,最重要的是投资自己,是对自己的投资,这才是最重要的,自己的圈子,不是所有人都有自己的圈子的,需要维护的自己的圈子,并不是,当你用到别人的时候,一个电话说 我借你点钱,其实并不是这样的! 我需要抽点时间,跟自己的好友,好好的聚聚,好好的交流,从交流中获取自己需要的知识。财富并不是仅仅靠那点工资就可以积累起来的,自己真正需要的是自己的能力和阅历,这才是最牛逼的!

我不打算,在花费自己的时间在找工作上的了,我不会换工作的了,是的,我打算待一段时间,让自己真的成长以来之后,再说,我对这家公司是包








金山文化



至于钱…我始终觉得与其盯着每个月这几个子儿,不如趁着年轻多学点儿东西,当初HR总监的一句话我觉得特有道理“你的能力达到了,金山给不了你的,自有其他地方给你。”



作为旧金山的一员,我很怀念金山,怀念那时候的我们。
哪家公司都不是最完美的,在一定阶段与你想要的切合,就是一家好公司。想清楚自己想要什么,这里能给你什么。想不清楚?那问下自己,能牺牲些什么

一扇窗打开的时候必有一扇门关上,人只有想到了失去,才愈加明白什么值得去珍惜。
然后就是努力跟坚持了。


人要一直往前跑,不一定跑得快,但一定要跑的久。

其实金山现在待遇还是不错的,只是干的不爽了。
怀念珠海金山的食堂
怀念金山的好基友们
怀念金山简单纯粹的工作氛围
怀念走路上下班的日子
怀念一个月几百的房租
怀念珠海干净的空气

Friday, February 19, 2016

《美人鱼》 感思

今天,看了星爷的美人鱼,一般吧。虽然主题不错,但是电影没有了以前的那种星爷的感觉。

不管怎么说,自己感悟良多,自己有再多的钱,又怎么样呢?买不来幸福的,和自己喜欢的人生活,旅游,喝茶。没了,这也许就是我们的幸福。

里面的,张雨绮
很美,是的,作为一个男人,我们都希望找到自己心目中的女神,但是,女神太少了。所以,能够梦想成真的男人,都是非常优秀的。也许幸福很简单,就是跟自己喜欢的人在一起。所以,我觉得,我要等到值得我等的人,所以,现在不找媳妇是对的,因为我的内心深处是有一个梦想的,太早结婚的话是自己的一个负担,现在的自己想怎么搞就怎么搞,但是似乎少一个前提就是和自己喜欢的人!


这就是我的梦想,想找一个完美的女人,这件事情不是家里面的人说的算的,就只有自己一个人知道,自己喜欢什么样子的,生活是不会像自己想的那样子美好的,生活总有不好的一面,我们的责任就是好好的活着,这就是我们的生活!


享受自己的生活,享受生命给自己带来的乐趣。不仅仅是自己一个人闷声在家里面,躺在床上,自己会退化的奥、


加油阿朱,寻找的自己的梦想。

有的时候,当你在没有能力的年纪的时候,你约到了自己想一生守护的人,你该怎么做呢?这个时候,没有钱,没有能力,没有事业,什么都没有,记住,好的资源是抢过来的,谁都喜欢好的的东西,长得漂亮的女人,我也是同一个道理,喜欢一个美女并没有错,但是,自己追不到这就是问题了,是的,女人不仅仅是喜欢车子和房子奥,还要有谈吐和修养的奥,这些事情都不是很简单的事情。所以,现在的自己还有很长的路要走的,自己的选择的路,就算是跪着我也要走完!