理解得越多,需要记忆的越少

2018-05-20
一个简单的生成随机密码的方法

生成随机密码的方式有很多,比如:

1
openssl rand -base64 16
阅读此文

2018-05-20
解决 Chrome 无法访问网络的问题

前段时间安装 Chrome 后发现无论输入什么网址 Chrome 都无法访问,但是用别的浏览器就可以。所以肯定是 Chrome 自己的问题,然后搜索了一顿解决方法竟然是重置 Windows 的一个设置。使用命令行执行以下语句:

1
netsh winsock reset

执行完毕之后,Chrome 好用了…… 😓

阅读此文

2018-05-19
Ubuntu 18.04 on Windows 10 更改 Oh-My-Zsh agnoster 主题下的目录背景色

题外话

我的 MacBook Pro 已经使用了6年多的时间,尽管作为一个 .NET 程序员绝大部分时间都是在 Windows 下工作,直到 .NET Core 的逐步成熟。要说 Mac OS,最满意的地方就是它的终端 iTerm2 + Oh-My-Zsh,既好看又好用。然而在 MacBook Pro 里跑 Windows 无论是用 Parallels Desktop 虚拟机还是 BootCamp,都多多少少有些不便的地方,尤其是电池的续航力,完全无法开开心心的不插电源写代码写上3、4个小时,加上6年时间电池的老化,连 Mac OS 下都撑不住2、3小时。所以,虽然我之前给它升级了512G SSD, 16G RAM(2012款最后一代可以自行升级的MBP),但因为电池问题和 Windows 系统的问题,最终还是决定尝试换回一款 Windows 笔记本,毕竟微软这几年无论是拥抱开源、做 .NET Core,还是出的这些硬件都深得我心(可惜 Windows Phone 还是废了),感觉比苹果进步更大。而苹果已经在“轻薄”这2个字上走火入魔、不顾一切了。

如果你问我为何一个 .NET 程序员买 MBP?因为当年我换笔记本的时候被那一大票的 16:9 宽屏及 13xx * 7xx 分辨率的笔记本恶心到了,写代码完全接受不了那么扁的屏幕和那么低的分辨率,最后一怒之下买了十分昂贵的 16:10 屏幕的 15’’ MBP…

如果你问我现在换了哪款 Windows 笔记本,我现在用的是 Surface Book 2——绝对的生产力利器……只是比当年买的 MBP 还贵上一大大大截…… 😓

阅读此文

2018-03-16
使用 CSS 使 td 元素中的文本换行

简单的备忘:

1
<td style="max-width:175px; word-wrap:break-word;"> Hello World</td>

答案来自stachoverflow.

阅读此文

2018-03-16
在 msbuild 的 Copy Task 中复制子目录

自从上次用 msbuild 重写了整个项目的构建流程,终于体会到一点 msbuild 的强大了。这回我需要在 CI 流程中把一个目录的文件复制到另外一个目录中去,复制之前需要判断目标目录是否存在,存在的话,要先删除原目录,然后在复制。这涉及到一点编程元素,我十分不愿意写 windows batch 脚本,也不愿意写 powershell 脚本(好吧,其实是不会写😓),唯一剩下的选择似乎只有 msbuild 了。

没问题,我用过 msbuild 的 Copy Task,问题应该不大……然而,真正用它完成我的任务时发现了问题,原先我只是用它复制一个目录下的所有文件,但是现在我也需要复制一个目录下的所有子目录。然而 Copy Task 并没有一个简单直观的方法可以做到。必须使用如下“奇怪”的方式

1
2
3
4
5
6
7
8
9
10
11
12
<Project ToolsVersion="15.0" DefaultTargets="CopyFiles" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<SCAdminSourceFolder Include="D:\SCAdmin" />
<SCAdminSourceFiles Include="D:\SCAdmin\**\*.*" />
<SCAdminDestinationFolder Include="E:\SCAdmin" />
</ItemGroup>

<Target Name="CopyFiles">
<RemoveDir Directories="@(SCAdminDestinationFolder)" Condition="Exists('@(SCAdminDestinationFolder)')" />
<Copy SourceFiles="@(SCAdminSourceFiles)" DestinationFolder="E:\SCAdmin\%(RecursiveDir)" />
</Target>
</Project>

以上的例子重点是 Copy Task 的 DestinationFolder 属性,需要注意2点:

  1. %(RecursiveDir) 这是关键,要复制所有文件包括按照原样复制子目录,需要使用这个特定“字符串”,它是固定的。具体解释可以参考这里
  2. DestinationFolder 使用了 %(RecursiveDir) 好像就不能用其它参数了(比如 SCAdminDestinationFolder),不知道为什么……所以没法使用 SCAdminDestinationFolder 参数。
阅读此文