Category Archives: Dev Tools

Miscellaneous tips while developing in WSL (Windows Subsystem for Linux)

File change monitoring doesn’t work, such as the auto-refresh of create-react-app

Use the following before your "npm start" or put it on env file:

CHOKIDAR_USEPOLLING=true

And if you are using Intellij, you need to explicitly "ctrl + s" to save the changes on your code files

Integrate beyond compare with git diff

export TMPDIR='/mnt/c/Users/yourName/AppData/Local/Temp'
alias gitdiff='git difftool -y --no-symlinks &'
#In your ~/.gitconfig  , add the following

[diff]
            tool = BCompare
[difftool "BCompare"]
            path = "/mnt/c/Program Files/Beyond Compare 4/BCompare.exe"
            cmd = \"/mnt/c/Program Files/Beyond Compare 4/BCompare.exe\" -expandall \"`echo $LOCAL | sed 's_/mnt/c_C:_'`\" \"`echo $REMOTE | sed 's_/mnt/c_C:_'`\"

To run it,

$ gitdiff

Install terminator

Click here

Import a merge commit from on branch to another branch

git diff  the-commit-before-your-commit your-commit > abc.diff
git apply --reject --whitespace=fix abc.diff 
#If you not lucky, you will see some *.rej files generated, which mean failed patchings
#You can still a tool to called "wiggle"  deal with them
wget http://neil.brown.name/wiggle/wiggle-1.1.tar.gz
tar xvf wiggle-1.1.tar.gz
# You may have to install ncurses library first
sudo yum search ncurses
sudo yum install ncurses-devel
# Then you install wiggle
sudo make install 
#Now you can use wiggle to fix those rejected files 
wiggle --replace some.file some.file.rej  # Try its best to do a merge

Now go to some.file and manually fix some conflicts if wiggle says there is an. After all that you can commit your changes. 

#Check if the git patch session is done
git status
#If it says you are still in the middle of git apply session, just try
git am --resolved  # if there is never a conflict
# or
git am --skip  # If there is a conflict you can just end this session.  Don't worry, you have committed you thing. It won't do any change.  

Best Practice of showing uml diagrams on github: plantuml + eclipse plugin + maven plugin

Note:  This post is only for laze developers who wants to get things done in a "coding" way. 

You can draw your UML diagram with any kind of UML drawing tool, export it as an image, and save it on github repository. On your github README.md you can then reference this file. 

The problem is too many window switch and too many mouse clicking. 

My solution to this,

1. Use plantuml to generate UML diagrams with plain-text directives.

2. Use plantuml eclipse plugin to see the diagram in real time.

3. Use plantuml’s maven plugin to output PNG files to your code repository, by running a maven command. 

一台电脑使用多个github账号时如何免密登录

1. 生成各自的ssh key

ssh-keygen -t rsa -C "foo@test.com"  #选择key文件为~/.ssh/id_rsa_foo
ssh-keygen -t rsa -C "bar@test.com"  #选择key文件为~/.ssh/id_rsa_bar

2. 将这两个ssh key加入到系统中

ssh-add ~/.ssh/id_rsa_foo
ssh-add ~/.ssh/id_rsa_bar
ssh-add -l

3. 配置两个虚拟ssh host,分别对应每个ssh key.  这样在进行ssh登录github时,系统知道应该选择哪一个ssh key

引用
#~/.ssh/config

Host github-foo

HostName github.com

User git

IdentityFile ~/.ssh/id_rsa_foo

Host github-bar

HostName github.com

User git

IdentityFile ~/.ssh/id_rsa_bar

4. 将这两个ssh key的公钥部分分别粘贴到github的账号设定中,这样才能免密登录

请参考:
https://help.github.com/articles/generating-ssh-keys 中的Step3 . 把 ~/.ssh/id_rsa.pub 分别替换成 ~/.ssh/id_rsa_foo 和 ~/.ssh/id_rsa_bar

5. 测试登录

ssh -T github-foo  #不是github.com,这里要用虚拟host
ssh -T github-bar  

6. Clone时选择ssh clone url,并使用虚拟host替换url中的”github.com”

git clone git@[color=red]github-foo[/color]:SomeUser1/SomeProject1.git
git clone git@[color=red]github-bar[/color]:SomeUser2/SomeProject2.git

7. 修改一下你作为代码作者时的名字和email, 否则github在显示某个改动提交者的信息时可能会张冠李戴

请见 这里

8. 改个文件提交一下(commit + push),你应该不会被提示用户名、密码

注:这里介绍的处理办法不仅限于github, 它适用于任何git repository,或者github + 其他git-repository混合使用的情况,唯一不同的地方可能在于上述的第4步,你需要咨询你的git repository管理员,了解粘贴公钥的办法。

改变当前git repo的author name和author email

如果你原有一个git账号,它是 UserA/UserA@test.com, 并且你用它工作过

现在你又搞了一个git账号,用这个新账号提交代码后,github(或其他git中心)页面上的日志会说刚刚的代码是由“UserA/UserA@test.com" 提交的。这就很搞笑了。

为什么会这样? 因为你可能已经把UserA设置为global username了

可以这样检查一下

git config --global --get user.name
git config --global --get user.email

解决方案是在当前repo中,修改git客户端的username/email:

  cd your-working-dir
  git config user.name "UserB"
  git config user.email UserB@test.com

注: 这里的username/email只用于git commit中的author记录,跟用于登录github的用户名/密码没有关系

Mac下为Safari设置外网socks代理,导致java程序中的内网socket访问全部失败

今天遇到一个问题:Mac下为Safari设置外网socks代理,导致java程序中的内网socket访问全部失败。

刚出现这个问题时觉得很诡异。一个内网URL地址,用chrome浏览器 + switchy proxy # (置为no proxy)可以访问,而用java程序中的URLConnection或Socket代码连网络都会失败。

后来跟进Socket代码才发现原因。

教训就是: Safari所设置的socks代理是系统级的,不仅影响safari,还影响整个系统所有的socks连接。

浏览器看上去发出了请求,但实际上可能没有

测试b/s服务端或http中间件时,需要让浏览器发出请求。 有时浏览器看上去发出了请求,实际上可能并没有。

昨天遇到的真实例子:  在chrome中发出一个请求,服务端迟迟不响应;然后新一个tab,用相同的URL发出请求,浏览器的滚轮会提示正在等待响应,但在服务端设置断点、观看日志发现,请求根本没过来。

如果把第二个tab里的url改一下,重发请求,服务端就会收到。

也就是说,
chrome中如果某个请求处于pending状态,可能就会拒绝发出URL相同的请求

为了避免这种问题,
可以用curl/wget代替浏览器

如何让virtualbox的主机能访问宿机,宿机又能访问主机所在局域网?

如何让virtualbox的主机能访问宿机,宿机又能访问主机所在局域网?

答案是在virtualbox里配置两块网卡:

  1. 配一个Host-Only方式,这样主机就能访问宿机

  2. 再配一个NAT方式,这样宿机就能访问主机所在局域网 (还要在虚拟机里把DNS配的跟主机使用的DNS一样,否则无法用域名访问主机所在局域网里的服务器)

svn中查看已删除的文件

先这样搞一下,找到文件被删除前的revision

引用

svn log –verbose|grep -5 homepage.jsp

假设revision是267,这样来查看它:

引用

svn cat http://svn-rep/web/src/main/webapp/web/jsp/homepage.jsp
@267

如果要恢复它到本地,可以这样

引用

svn cat http://svn-rep/web/src/main/webapp/web/jsp/homepage.jsp@267
> web/src/main/webapp/web/jsp/homepage.jsp

以上方法有点糙,有心人可以去搜些更自动化的办法