解决国内访问s3.amazonaws.com下载文件非常缓慢的问题

今天,尝试从 https://git-for-windows.github.io/ 更新msysgit到最新版本的时候,发现下载链接 https://github.com/git-for-windows/git/releases/download/v2.12.0.windows.1/Git-2.12.0-64-bit.exe被服务器重新定向到了亚马逊的服务器上去了,最后的下载地址是github-cloud.s3.amazonaws.com的某台机器上。但是国内访问亚马逊,基本上没办法下载成功的,很可能是被墙了。
搜索了一下,发现可以通过设置host,强制把访问节点从美国定向到香港的办法来解决这个问题。Windows下,编辑C:\Windows\System32\drivers\etc\hosts然后增加如下解析即可。

对于Linux以及macOS,则修改/etc/hosts

参考链接


github release 的github-cloud.s3.amazonaws.com实在太慢,下载老在10几k徘徊

TortoiseGit 2.4.0.2引入了一个新的BUG,导致无法提交,提示“fatal: protocol error: bad line length character: Welc”

今天(2017.02.27TortoiseGit 2.4.0发布了一个Hotfix来修正几个BUG,网站上的具体的版本信息如下:

2017-02-25 | Released TortoiseGit Hotfix 2.4.0.2 (fixes issue #2909 (Commit dialog unclosable) and issue #2911 (Add returns "invalid path") and contains PuTTY 0.68)

但是这次的修复引入了更大的BUG,导致无法提交代码,不管是拉取还是提交代码,都会提示"fatal: protocol error: bad line length character: Welc",如下图:

修复这个问题最简单的方法就是还原到TortoiseGit 2.4.0版本。

这个BUG是由TortoiseGitPlink.exe里面的代码改动引起的,只要还原这个文件到0.67版本(来自TortoiseGit 2.4.0),也可以解决这个问题。

目前已经提交了BUG给开发人员了。对于的BUG链接地址如下:
TortoiseGit 2.4.0.2 bug ( TortoiseGit 2.4.0 works but TortoiseGit 2.4.0.2 can not pull and push) "fatal: protocol error: bad line length character: Welc"

希望能尽快修复这个问题吧!

到目前为止(2017.05.09)这个问题依旧没有修复的可能,因此建议大家可以改用一下SourceTree-2.0.20.1,可以点击这里下载目前最新的版本。

PuTTY连接跳板机频繁被断开的问题

公司的服务器只能通过跳板机的方式来链接,因此在Windows中使用PuTTY连接跳板机,结果实际使用中发现,会频繁被跳板机断开,而如果在目标机器中执行一个ping 127.0.0.1则连接始终不会被断开。那么说明是由于跳板机设置了一段时间如果没有报文通信就断开连接的功能,而且这个时间设置的比较激进。

请教了一下别人,找到如下设置即可解决这个问题:

puttyconfigurationkeepalives

其实质是开启了TCPKeepAlive心跳报文。默认这个时间是"0",也就是TCP链路中不发送心跳报文。把这个时间设置成"1",也就是每秒都发送一次心跳。

在Windows 7系统上编译运行体验Apache OFBiz-13.07.03

作为Apache基金会的赞助项目,OFBiz(全称为"Open for Business")是一套功能齐全的企业自动化套件,其中包含企业资源规划(简称ERP)、客户关系管理(简称CRM)、电子商务、内容管理、计费与费 率管理、供应链管理、制造资源规划以及企业资产管理等方案。OFBiz拥有丰富的说明文档及指导视频,其基于Java语言因此能够运行在任意支持Java SDK的系统当中,包括WindowsOS XLinux以及Unix

1.去OFBiz的官网http://ofbiz.apache.org/下载目前最新版本的13.07.03。下载完成后,是个zip格式的压缩包。解压压缩包到任意目录。

2.安装最新的JDK(要求最低是1.7,目前的1.8版本是可以正常使用的)。

完成后,直接访问http://localhost:8080/ecommerce即可看到如下页面:
ofbiz_index
其他的参考代码根目录下面的README.

参考链接


Windows 7下WireShark抓取127.0.0.1(Loopback)报文

1.如果已经安装了WireShark,并且使用的是WinPacp,那么需要先卸载WireShark

2.WireShark的版本号必须是高于1.12.81.99.9,建议使用2.0.5以上的版本。下载地址为:https://www.wireshark.org/download/注意:一定要使用这个链接,从首页点击进入的页面下载的时候,会错误的定位到一个不正常的CDN服务器上,导致下载速度极慢。也可以在本站下载:Wireshark-win64-2.0.5

3.下载并且安装最新的Npcap,下载链接地址https://github.com/nmap/npcap/releases,为了防止出现被墙的问题,也可以在本服务器下载:npcap-0.08-r4

安装的时候,需要勾选"Install Npcap in WinPcap API-compatible Mode",否则WireShark是没办法识别到Npcap是否已经安装。

4.WireShark启动之后选择"Npcap Loopback Adapter"进行抓包。如下图:

WireSharkAdapterSel

5.目前遇到的问题就是Npcap还不够稳定,有线情况下,基本都是正常的,但是在WiFi情况下的公司网络中,有时候会导致无法访问网络。此时的解决方法是在出口网卡属性中禁用(不需要在全部网卡中禁用,只需要在出口网卡中禁用即可)。

DisableNpcapWFPDriver

参考链接


在使用了NVIDIA显卡的Windows上出现“UpdatusUser”用户

在使用了NVIDIA显卡的Windows上出现“UpdatusUser”用户,在"控制面板"->"系统和安全"->"管理工具"->"计算机管理"->"本地用户和组"->"用户"中可以看到这个用户,他的描述是"NVIDIA更新软件使用的账户"。具体的描述信息参考NVIDIA官网:

这个账号的存在有些莫名奇妙,一方面他安全性存疑,另外一方面,这个用户生成了一个“UpdatusUser”的文件夹,稍微时间长一些,几百兆的空间就被莫名奇妙的占据了。

删除这个文件夹的方式非常简单:

1.在"控制面板"->"程序"->"程序和功能"里面卸载一个名为"NVIDIA 更新程序"(英文系统的话为"NVIDIA Update",繁体中文系统"NVIDIA 更新程式")后面是版本号。卸载这个应用。
2.在"控制面板"->"系统和安全"->"管理工具"->"计算机管理"->"本地用户和组"->"用户"中,删除“UpdatusUser”用户。
3.重启电脑后,删除“UpdatusUser”用户目录。

参考链接


[Windows 8.1] 如何处理 C:\Users 使用者文件夹中多了 UpdatusUser 文件夹

在Windows 7系统中的Apache Tomcat 7.0.68上部署Apache Archiva 2.2.1

简介

注意: Apache Archiva 2024-02 开始已经停止维护 建议使用 JFrog Artifactory 替代。


Apache Archiva是一套可扩展的Artifact Repository管理系统。它能够与MavenContinuumANT等构建工具完美结合。Archiva提供的功能包括:远程Repository代理,基于角色的安全访问管理,Artifact分发、维护、查询,生成使用报告,提供基于Web的管理界面等。

本来是Sonatype Nexus更加方便的,但是可惜最新的版本不支持在Tomcat中使用了,因此只能转而使用Apache Archiva

操作步骤


1.下载Apache Archiva

Apache官方网站下载,下载其中的War包。如下图:

DownloadArchivaHtml

也可以在本站下载.

2.下载Apache Archiva依赖的Jar包

Apache Archiva需要依赖derby-10.10.1.1.jar(或更高版本)(org.apache.derby:derby:10.10.1.1), activation-1.1.jar(javax.activation:activation:1.1),mail-1.4.jar(javax.mail:mail:1.4.7).可以在Mvn Repository官网下载。也可以在本站打包下载

下载完成后,需要放到Tomcat的安装目录下面的lib目录下。

3.配置Apache Archiva

(1)停止Tomcat,后续的操作是先关闭Tomcat为前提的。
(2)把下载到的apache-archiva-2.2.1.war重命名成archiva.war然后放到Tomcat安装目录下的webapps目录下面。
(3)在开始菜单中找到Tomcat的配置项Configure Tomcat,然后增加两项appserver.homeappserver.base,两者都指向相同的目录即可,本例中,都指向了D:\Archiva这个目录。具体如下图:
ApacheTomcat7Properties
(4)由于Apache Archiva 2.2.1BUG,他没有自动创建一个名为conf的目录,导致如果这个目录不存在会初始化失败。因此我们需要手动创建D:\Archiva\conf这个目录。
(5)在Tomcat的安装目录下的conf\Catalina\localhost目录下面创建一个名为archiva.xml的配置文件,里面的内容如下:

注意其中的Context path为数据库相关配置文件所在的路径,包含配置,数据库等等很多文件,url为数据库的具体存储目录,仅仅包含数据库数据。
(6)启动或者重启Tomcat,等待几分钟之后,即可成功配置完成。如下图:
ApacheArchivaIndexPage
注意,如果在最后一步发生失败,那么我们需要删除D:\Archiva这个目录,以及Tomcat安装目录下面的webapps\archiva这两个目录,原因是在配置过程中修改了部分文件,如果不删除这几个文件,会导致各种异常。

注意上图中的"Create Admin User"按钮,当创建用户的时候,貌似用户名是可以不用"admin"的,但是,实际上,管理员的用户名是不变的,不管你输入什么,最后登陆的时候填写的用户名,永远必须是"admin",否则会一直提示用户名或密码不正确。

引用链接


Windows 路径相关的ShellApi

路径截断与合并函数
PathRemoveArgs 去除路径的参数
PathRemoveBackslash 去除路径最后的反斜杠"\"
PathAddBackslash 在路径最后加上反斜杠"\"
PathRemoveBlanks 去除路径前后的空格
PathAddExtension 在文件路径后面加上扩展名
PathRemoveExtension 去除文件路径扩展名
PathRenameExtension 更改文件路径扩展名
PathRemoveFileSpec 去除文件名,得到目录
PathUnquoteSpaces 去除路径中的首尾空格
PathQuoteSpaces 判断路径中是否有空格,有的话,就是用""引号把整个路径包含起来
PathAppend 将一个路径追加到另一个路径后面
PathCombine 合并两个路径
PathSkipRoot 去掉路径中的磁盘符或UNC部分。
PathStripPath 去掉路径中的目录部分,得到文件名。
PathStripToRoot 去掉路径的文件部分,得到根目录。
   
PathCompactPath 根据像素值生成符合长度的路径。如原始路径:C:\path1\path2\sample.txt
根据120像素截断后为:C:\pat...\sample.txt
根据25像素截断后为: ...\sample.txt
PathCompactPathEx 根据字符个数来生成符合长度的路径。
   
PathSetDlgItemPath 将路径数据设置到对话框的子控件上。
PathUndecorate 去除路径中的修饰——具体还没看明白,的例子只是去掉了括号。
PathUnExpandEnvStrings 将路径中部分数据替换为系统环境变量格式
路径查找比较函数
PathFindOnPath 从路径中查找路径
PathFindExtension 查找路径的扩展名
PathFindFileName 获取路径的文件名
PathFindNextComponent 查找匹配路径(不太熟悉)
PathFindSuffixArray 查找给定的文件名是否有给定的后缀。
PathGetArgs 获取路径参数
PathGetCharType 获取路径字符类型
PathGetDriveNumber 根据逻辑盘符返回驱动器序号
路径转换函数
PathRelativePathTo 创建一个路径到另一个路径的相对路径。
PathResolve 将一个相对路径或绝对路径转换为一个合格的路径,这个理解起来比较拗口。
PathCanonicalize 规范化路径。将格式比较乱的路径整理成规范的路径格式。
PathBuildRoot 根据给定的磁盘序号创建根目录路径
CreateDirectory 创建目录
   
GetShortPathName 将长路径转为8.3格式的短路径格式
GetLongPathName 将短路径格式转为长路径。
PathGetShortPath 将长路径转为短路径格式(8.3格式)
PathCreateFromUrl 将URL路径转为MS-DOS格式
PathMakePretty 把路径全部转为小写,增加可读性。
PathMakeSystemFolder 给路径增加系统属性
PathUnmakeSystemFolder 去除路径中的系统属性。
PathMakeUniqueName 从模板创建统一的路径格式——没用过,不熟悉
PathProcessCommand 生成一个可执行的路径,比如有参数的,会自动将路径用""包含。这在ShellExecute中比较有用。
路径验证函数
PathCleanupSpec 去除路径中不合法的字符
PathCommonPrefix 比较并提取两个路径相同的前缀
PathFileExists 验证路径是否存在
PathMatchSpec 判断路径是否匹配制定的扩展名。
PathIsDirectory 判断路径是否是一个有效的目录
PathIsFileSpec 验证路径是否一个文件名(有可能是一个路径)
PathIsExe 验证路径是否是可执行文件。注意:不仅仅是.exe,还有.bat,.com,.src等
PathIsRoot 路径是否为根路径
PathIsRelative 判断路径是否是相对路径
PathIsContentType 检测文件是否为制定类型。
例如:PathIsContentType("hello.txt", "text/plain") 返回TRUE
PathIsContentType("hello.txt", "image/gif") 返回FALSE
PathIsHTMLFile 判断路径是否是html文件类型——根据系统注册类型判断。
PathIsLFNFileSpec 判断路径是否是长路径格式
PathIsNetworkPath 判断路径是否是一个网络路径。
PathIsPrefix 判断路径是否含有指定前缀
PathIsSameRoot 判断路径是否有相同根目录
PathIsSlow 判断路径是否是一个高度延迟的网络连接——我也不太明白是啥意思。
PathIsSystemFolder 判断路径是否有系统属性(属性可以自己设定)
PathIsUNC 路径是否是UNC格式(网络路径)
PathIsUNCServer 路径是否是UNC服务器
PathIsUNCServerShare 路径是否仅仅是UNC的共享路径格式
PathIsURL 路径是否是http格式。
PathYetAnotherMakeUniqueName 基于已存在的文件,自动创建一个唯一的文件名。比较有用,比如存在"新建文件",此函数会创建文件名"新建文件(2)"。

参考链接


windows 路径相关的shell api

在Visual C++ 2015 中使用Tab Control控件

系统环境:Windows 7
软件环境:Visual Studio 2015 Udpate 2
本次目的:在模态或非模态对话框中使用Tab Control控件,及引申在单/多文档中使用

查阅MSDN文档,对于创建Tab Control控件,MSDN上说明如下:

To use CTabCtrl directly in a dialog box
1. In the dialog editor, add a Tab Control to your dialog template resource. Specify its control ID.
2. Use the Add Member Variable Wizard to add a member variable of type CTabCtrl with the Control property. You can use this member to call CTabCtrl member functions.
3. Map handler functions in the dialog class for any tab control notification messages you need to handle. For more information, see Mapping Messages to Functions.
4. In OnInitDialog, set the styles for the CTabCtrl .
To use CTabCtrl in a nondialog window
1. Define the control in the view or window class.
2. Call the control's Create member function, possibly in OnInitialUpdate, possibly as early as the parent window's OnCreate handler function (if you're subclassing the control). Set the styles for the control.

 

对话框内使用CTabCtrl


1. 在对话框编辑区内,添加一个Tab Control控件到资源模板里面,设置它的控制ID
2. 使用添加成员变量向导,为控件添加一个CTabCtrl类型的成员变量,你可以使用这个变量调用CTabCtrl的成员函数
3. 对话框类的映射处理功能可以处理任何你需要处理的标签控件消息。有关更多信息,请参阅消息映射函数。
4. 在OnInitDialog()函数里面,设置CTabCtrl的风格。

非对话框窗口使用CTabCtrl


1. 定义在视图或窗口类的控件。
2. 调用控件的创建成员函数,可能在OnInitialUpdate中,可能在父窗口的OnCreate处理函数早期(如果你是子类的控件)。设置控件的风格。
下面介绍在对话框中添加Tab Control控件,工程不一定是要MFC基于对话框形式,单文档视图类派生自 CFormView的工程也行,或是任何工程弹出的对话框 ( 如登录界面等等 ) 都行 ( 个人没有都去实验,但理论上应该可以,看了下面就知道。 )
1. 首先在对话框资源上添加一个Tab Control控件IDIDC_LOGIN_TAB,根据需要修改其属性,然后为其添加成员变量m_tab,类型为CTabCtrl
2. 需要几个选项卡,则在对话框资源添加几个对话框,在这里我添加两个选项卡,则要添加两个对话框,其ID分别为 IDD_TAB1_DIALOGIDD_TAB2_DIALOG它们的属性styleChild,BorderNone,其他的再根据自己调整。然后分别为其添加对应的基于CDialogCLoginTab1CLoginTab2
3. 在主对话框添加子对话框头文件,然后再添加三个成员变量,为子对话框添加实例。在OnInitDialog()函数初始化Tab Control控件显示,若对话框没有OnInitDialog()函数,则重载这个函数,具体如下:
//主对话框头文件

//主对话框实现文件

4. 响应选项卡切换事件消息,右键Tab Control控件,添加事件处理程序,选择TCN_SELCHANGE事件,在弹出的编辑区域,填入以下代码:

5. 编译运行。

22

接下来,来看看非模态对话框的实现,因为Tab Control控件要在对话框的OnInitDialog()函数初始化,而MSDN上说:

After the dialog box and all of its controls are created but just before the dialog box (of either type) appears on the screen, the dialog object's OnInitDialog member function is called. For a modal dialog box, this occurs during the DoModal call. For a modeless dialog box, OnInitDialog is called when Create is called. You typically override OnInitDialog to initialize the dialog box's controls, such as setting the initial text of an edit box. You must call the OnInitDialog member function of the base class, CDialog , from your OnInitDialog override.

非模态对话框是在Create的时候一起调用初始化函数的,OnInitDialog()我们仍可以重载这个函数,来实现以上功能。对于单文档/多文档可以看前面的MSDN说明,这里不再详细写。本文若有错误,请指出。

参考链接


在VC++中使用Tab Control控件