﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-逝者如斯夫</title><link>http://www.blogjava.net/ideame/</link><description>静而思之</description><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 18:47:00 GMT</lastBuildDate><pubDate>Sun, 03 May 2026 18:47:00 GMT</pubDate><ttl>60</ttl><item><title>Docker Registry 安装和运行</title><link>http://www.blogjava.net/ideame/archive/2018/08/03/433314.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Fri, 03 Aug 2018 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2018/08/03/433314.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/433314.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2018/08/03/433314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/433314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/433314.html</trackback:ping><description><![CDATA[<h2 id="toc_0">使用场景</h2>

<ul>
<li>内部网络，无法访问 <a href="http://hub.docker.com/">Docker Hub</a></li>
<li>控制 image 的存储方式和存储位置</li>
<li>控制 image 的部署流程</li>
<li>内部开发流程需要集成控制 image 的部署和存储</li>
</ul>

<p>应用逻辑示意图：</p>

<p><img src="http://www.blogjava.net/images/blogjava_net/ideame/15332784526885.png" alt="" style="width:396px;"/>￼</p>

<h2 id="toc_1">安装 Registry 服务</h2>

<h3 id="toc_2">概要</h3>

<p>Docker Registry 在 docker hub 的名称是 <a href="https://hub.docker.com/_/registry/">registry</a>。v1 版本的源码地址 <em>github.com/docker/docker-registry</em> 已经废弃，v2 版本源码地址在 <a href="https://github.com/docker/distribution">github.com/docker/<strong>distribution</strong></a>，对应的 API 是 <a href="https://github.com/docker/distribution/blob/master/docs/spec/api.md">Docker Registry HTTP API V2</a>。</p>

<p>以下安装没有使用 HTTPS 方式，启用 HTTPS 相关的证书配置参考这个文档：</p>

<ul>
<li><a href="https://blog.csdn.net/qq_29245097/article/details/60138072">Docker Registry 私有 Docker 站</a></li>
</ul>

<p>官方文档参考：</p>

<ul>
<li><a href="https://hub.docker.com/_/registry/">Docker Hub 上的 registry 镜像介绍文档</a></li>
<li><a href="https://github.com/docker/docker.github.io/blob/master/registry/deploying.md">Docker 官方 Registry 部署文档</a></li>
<li>Docker 相关命令行介绍

<ul>
<li><a href="https://docs.docker.com/engine/reference/commandline/build/">docker build</a></li>
<li><a href="https://docs.docker.com/engine/reference/commandline/tag/">docker tag</a></li>
<li><a href="https://docs.docker.com/engine/reference/commandline/push/">docker push</a></li>
</ul></li>
</ul>

<h3 id="toc_3">最简安装（启动）</h3>

<pre><code>docker run -d -p 5000:5000 --name registry registry:2
</code></pre>

<p>以上命令未使用用户名密码登录策略。</p>

<h3 id="toc_4">启用登录密码</h3>

<h4 id="toc_5">生成密码</h4>

<p>登录密码可以通过 host 的文件传入，以下命令调用容器的 <code>htpasswd</code> 命令生成密码文件：</p>

<pre><code class="language-bash">mkdir auth
docker run --entrypoint htpasswd registry:2 \
    -Bbn &lt;USER_NAME&gt; &lt;PASSWORD&gt; &gt; auth/auth.htpasswd
</code></pre>

<h4 id="toc_6">启用密码</h4>

<p>通过 &ndash;volume 参数传入密码文件：</p>

<pre><code class="language-bash">docker run -d -p 5000:5000 --restart=always --name registry \
  --volume `PWD`/auth:/auth \
  --env &quot;REGISTRY_AUTH=htpasswd&quot; \
  --env &quot;REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm&quot; \
  --env REGISTRY_AUTH_HTPASSWD_PATH=/auth/auth.htpasswd \
  registry:2
</code></pre>

<h3 id="toc_7">修改镜像存储</h3>

<p>默认镜像数据存储在 Docker Volume 中，可以通过 bind mount 进行修改，参数信息参考 <a href="https://docs.docker.com/storage/volumes/#use-a-volume-driver">Volume文档</a>。下面的例子将本机目录 <code>PWD</code>/images 绑定到容器的 /var/lib/registry</p>

<pre><code>docker run -d -p 5000:5000 \
    --name auth-registry \
    -v `PWD`/images:/var/lib/registry \
    -e SQLALCHEMY_INDEX_DATABASE=sqlite:////opt/docker-image/docker-registry.db \
    -e STORAGE_PATH=/opt/docker-image \
    --restart=always \
    docker.onestch.com:5000/admin/registry:0.1
</code></pre>

<p>默认的存储引擎为本地文件系统，可以修改文件的存储引擎为 Amazon S3 bucket、Google Cloud Platform 或其他引擎，可以通过配置 config.yml  的方式修改存储配置，更多信息参考 <a href="https://docs.docker.com/registry/configuration/#storage">Docker Registry 存储配置文档</a>。</p>

<h3 id="toc_8">停止服务</h3>

<p>停止 registry 容器并清理运行数据</p>

<pre><code>docker stop registry &amp;&amp; \
docker rm -v registry
</code></pre>

<h3 id="toc_9">验证</h3>

<p>查看容器信息</p>

<pre><code>docker ps --no-trunc
</code></pre>

<p>查看全部配置信息或部分信息</p>

<pre><code>docker inspect &lt;CONTAINER_ID&gt; 

docker inspect &lt;CONTAINER_ID&gt; | grep -C3 -e &quot;Volumes\&quot;:&quot;
docker inspect &lt;CONTAINER_ID&gt; | grep -C2 Binds
docker inspect -f &#39;{{ .Mounts }}&#39; &lt;CONTAINER_ID&gt;
</code></pre>

<p>查看映射的详细信息</p>

<pre><code>docker volume inspect 4496b0a257b966052ef8d0743014a4f63fc9924251c8de0df0e9c70fde4c45e6
</code></pre>

<h2 id="toc_10">发布镜像</h2>

<h3 id="toc_11">登录服务</h3>

<p>如果安装（启动）的 registry 服务需要登录访问时，执行：</p>

<pre><code>docker login &lt;REGISTRY_HOST&gt;:&lt;REGISTRY_PORT&gt;
</code></pre>

<p>输入安装时设定的用户名密码。</p>

<h3 id="toc_12">目标地址</h3>

<p>使用 docker tag 设定镜像的目标地址，镜像的目标地址包括三部分</p>

<pre><code>&lt;HOST_NAME&gt;[:&lt;HOST_PORT&gt;]/&lt;IMAGE_NAME&gt;:&lt;IMAGE_VERSION&gt;
</code></pre>

<ul>
<li><p>HOST_NAME : HOST_PORT </p>

<p>目标 registry 服务地址，缺省时使用官方 docker hub 的地址 registry-1.docker.io，且不允许包含下划线</p></li>
<li><p>IMAGE_NAME 发布目标镜像名称</p></li>
<li><p>IMAGE_VERSION 发布目标镜像版本</p></li>
</ul>

<p>例如：<code>repo.company.com:3456/myapp:0.1</code></p>

<h3 id="toc_13">发布镜像</h3>

<p>发布的镜像文件可以从 docker hub 中 Pull 或者本地使用 Dockerfile build 获得</p>

<p><strong>Pull</strong></p>

<pre><code>docker pull registry
</code></pre>

<p><strong>Build</strong></p>

<pre><code>docker build -t docker.onestch.com:5000/admin/registry:0.1 .
</code></pre>

<p>首先需要对镜像 tag 设定目标仓库，如果 build 的时候已经设置了目标地址，可以不用进行 tag 操作</p>

<pre><code>docker tag registry:latest docker.onestch.com:5000/admin/registry:0.1
</code></pre>

<p>然后 Push</p>

<pre><code>docker push docker.onestch.com:5000/admin/registry:0.1
</code></pre>

<h3 id="toc_14">验证</h3>

<p>重新从私有仓库中获取镜像</p>

<pre><code>docker pull localhost:5000/admin/registry:0.1

0.1: Pulling from admin/registry
Digest: sha256:d738e358b6910d3a53c9c7ff7bbb5eac490ab7a9b12ffb4c1c27f2c53aae9275
Status: Image is up to date for localhost:5000/admin/registry:0.1
</code></pre>

<h2 id="toc_15">安装 Registry UI</h2>

<p>选择 registry ui，可选的有 <a href="https://hub.docker.com/r/atcol/docker-registry-ui/">atcol/docker-registry-ui</a>、<a href="https://hub.docker.com/r/hyper/docker-registry-web/">hyper/docker-registry-web</a>、<a href="https://hub.docker.com/r/konradkleine/docker-registry-frontend/">konradkleine/docker-registry-frontend</a>等</p>

<h3 id="toc_16">安装运行</h3>

<p>针对 hyper/docker-registry-web，使用 BASIC 认证，未使用 HTTPS的情况</p>

<pre><code>docker run -it -p 8080:8080 \
    --rm \
    --name registry-web \
    --link auth-registry \
    -e REGISTRY_URL=http://auth-registry:5000/v2 \
    -e REGISTRY_AUTH_ENABLED=false \
    -e REGISTRY_BASIC_AUTH=YWRtaW46MTIzNDU2 \
    -e REGISTRY_NAME=docker.onestch.com:5000 hyper/docker-registry-web
</code></pre>

<p>命令中 <code>auth-registry</code> 是自定的 registry 镜像。</p>

<blockquote>
<p>使用 HTTPS 时需要传入 /config/auth.key 文件，或自定义 config.xml 配置，例如：<br/>
     docker run -it -p 8080:8080 &ndash;name registry-web \<br/>
       &ndash;link auth-registry \<br/>
       -v $(pwd)/config.yml:/conf/config.yml:ro \<br/>
       hyper/docker-registry-web</p>
</blockquote>

<h3 id="toc_17">管理界面</h3>

<p>建立了 registry 服务后，对 registry 的管理界面在本机的访问地址是<a href="http://localhost:8080%EF%BC%8C%E4%B8%80%E8%88%AC">http://localhost:8080，一般</a> ui 服务会和 registry 服务同样运行在私有网络，所以我们可以发布 registry ui 到 registry 服务器再运行。</p>

<pre><code>docker tag docker.io/hyper/docker-registry-web docker.onestch.com:5000/admin/docker-registry-web

docker push docker.onestch.com:5000/admin/docker-registry-web
</code></pre>

<p>查看 UI 界面如下图</p>

<p><img src="http://www.blogjava.net/images/blogjava_net/ideame/15332851482630.jpg" alt="" style="width:783px;"/>￼</p>
<img src ="http://www.blogjava.net/ideame/aggbug/433314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2018-08-03 11:49 <a href="http://www.blogjava.net/ideame/archive/2018/08/03/433314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zookeeper Cli 常用命令</title><link>http://www.blogjava.net/ideame/archive/2016/10/10/431878.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Mon, 10 Oct 2016 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2016/10/10/431878.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/431878.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2016/10/10/431878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/431878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/431878.html</trackback:ping><description><![CDATA[<h2 id="toc_0">服务管理</h2>

<ul>
<li>启动ZK服务: zkServer.sh start</li>
<li>查看ZK状态: zkServer.sh status</li>
<li>停止ZK服务: zkServer.sh stop</li>
<li>重启ZK服务: zkServer.sh restart</li>
</ul>

<h2 id="toc_1">终端操作</h2>

<p>使用 zkCli 可以简单的对 ZooKeeper 进行访问，数据创建，数据修改等操作. 连接命令行如下： </p>

<pre><code>zkCli.sh -server 127.0.0.1:2181
</code></pre>

<p>命令行工具常用操作：</p>

<ul>
<li><p>显示根目录下文件</p>

<pre><code>ls /              //查看当前节点数据
ls2 /             //查看当前节点数据并能看到更新次数等数据
</code></pre></li>
<li><p>创建文件, 并设置初始内容： </p>

<pre><code>create /config &quot;test&quot; //创建一个新的节点并设置关联值
create /config “”     //创建一个新的空节点
</code></pre></li>
<li><p>获取文件内容</p>

<pre><code>get /brokers      //获取节点内容
</code></pre></li>
<li><p>修改文件内容</p>

<pre><code>set /zk &quot;zkbak&quot;   //对 zk 所关联的字符串进行设置
</code></pre></li>
<li><p>删除文件</p>

<pre><code>delete /brokers  //删除节点
rmr    /brokers  //删除节点及子节点
</code></pre></li>
</ul>

<h2 id="toc_2">四字命令</h2>

<p>ZooKeeper 支持某些特定的四字命令字母与其的交互，用来获取服务的当前状态及相关信息。在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令。命令行如下：</p>

<pre><code>echo conf | nc 132.37.3.26 26181
</code></pre>

<p>ZooKeeper 常用四字命令：</p>

<ul>
<li><p>conf</p>

<p>输出相关服务配置的详细信息</p></li>
<li><p>cons</p>

<p>列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息</p></li>
<li><p>dump</p>

<p>列出未经处理的会话和临时节点。</p></li>
<li><p>envi</p>

<p>输出关于服务环境的详细信息（区别于 conf 命令）。</p></li>
<li><p>reqs</p>

<p>列出未经处理的请求</p></li>
<li><p>ruok</p>

<p>测试服务是否处于正确状态。如果确实如此，那么服务返回“ imok ”，否则不做任何相应</p></li>
<li><p>stat</p>

<p>输出关于性能和连接的客户端的列表。</p></li>
<li><p>wchs</p>

<p>列出服务器 watch 的详细信息</p></li>
<li><p>wchc</p>

<p>通过 session 列出服务器 watch 的详细信息，它的输出是一个与 watch 相关的会话的列表</p></li>
<li><p>wchp</p>

<p>通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径</p></li>
</ul>
<img src ="http://www.blogjava.net/ideame/aggbug/431878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2016-10-10 17:54 <a href="http://www.blogjava.net/ideame/archive/2016/10/10/431878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMH(Java Micro Benchmark) 简介</title><link>http://www.blogjava.net/ideame/archive/2016/08/01/431411.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Mon, 01 Aug 2016 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2016/08/01/431411.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/431411.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2016/08/01/431411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/431411.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/431411.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JMH简介本文由 ImportNew - hejiani 翻译自 java-performance。JMH是新的microbenchmark（微基准测试）框架（2013年首次发布）。与其他众多框架相比它的特色优势在于，它是由Oracle实现JIT的相同人员开发的。特别是我想提一下Aleksey Shipilev和他优秀的博客文章。JMH可能与最新的Oracle JRE同步，其结果可信度很高。JMH...&nbsp;&nbsp;<a href='http://www.blogjava.net/ideame/archive/2016/08/01/431411.html'>阅读全文</a><img src ="http://www.blogjava.net/ideame/aggbug/431411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2016-08-01 17:12 <a href="http://www.blogjava.net/ideame/archive/2016/08/01/431411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何将 SVN 源码库转换为 Mercurial</title><link>http://www.blogjava.net/ideame/archive/2014/02/28/410445.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Fri, 28 Feb 2014 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2014/02/28/410445.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/410445.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2014/02/28/410445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/410445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/410445.html</trackback:ping><description><![CDATA[
		<h2 id="svnmercurialgooglecode:movingaprojectfromusingsubversionforcodehostingtomercurialgooglesupport">如何将 SVN 源码库转换为 Mercurial <a href="#fn:1" id="fnref:1" title="see footnote" class="footnote">[1]</a></h2>
		<p>首先得安装 Subversion 库函数</p>
		<pre>
				<code>    wget http://mirrors.hust.edu.cn/apache/subversion/subversion-1.8.8.tar.gz

    tar xzf subversion-1.8.8.tar.bz2 

    cd subversion-1.8.8

    subversion-1.8.8 aliang$ ./autogen.sh 
        buildcheck: checking installation...
        buildcheck: autoconf not found.
                    You need autoconf version 2.59 or newer installed.

    brew install autoconf
        ==&gt; Downloading https://downloads.sf.net/project/machomebrew/Bottles/autoconf-2.69.mavericks.bottle.tar.gz
        #################################################### 100.0%
        ==&gt; Pouring autoconf-2.69.mavericks.bottle.tar.gz
        🍺 /usr/local/Cellar/autoconf/2.69: 69 files, 2.0M

    ./autogen.sh 
        buildcheck: checking installation...
        buildcheck: autoconf version 2.69 (ok)
        buildcheck: autoheader version 2.69 (ok)
        buildcheck: libtool not found.
        You need libtool version 1.4 or newer installed

    brew install libtool
        Warning: A newer Command Line Tools release is available
        Update them from Software Update in the App Store.
        ==&gt; Downloading https://downloads.sf.net/project/machomebrew/Bottles/libtool-2.4.2.mavericks.bottle.2.tar.gz
        ##################################################### 100.0%
        ==&gt; Pouring libtool-2.4.2.mavericks.bottle.2.tar.gz
        ==&gt; Caveats
        In order to prevent conflicts with Apple''s own libtool we have prepended a "g"
        so, you have instead: glibtool and glibtoolize.
        ==&gt; Summary
        🍺  /usr/local/Cellar/libtool/2.4.2: 66 files, 2.2M

    ./autogen.sh 
        buildcheck: checking installation...
        buildcheck: autoconf version 2.69 (ok)
        buildcheck: autoheader version 2.69 (ok)
        buildcheck: libtool version 2.4.2 (ok)
        Copying libtool helper: /usr/local/share/aclocal/libtool.m4
        Copying libtool helper: /usr/local/share/aclocal/ltoptions.m4
        Copying libtool helper: /usr/local/share/aclocal/ltsugar.m4
        Copying libtool helper: /usr/local/share/aclocal/ltversion.m4
        Copying libtool helper: /usr/local/share/aclocal/lt~obsolete.m4
        Creating build-outputs.mk...
        Creating svn_private_config.h.in...
        Creating configure...

        You can run ./configure now.

        Running autogen.sh implies you are a maintainer.  You may prefer
        to run configure in one of the following ways:

        ./configure --enable-maintainer-mode
        ./configure --disable-shared
        ./configure --enable-maintainer-mode --disable-shared
        ./configure --disable-optimize --enable-debug
        ./configure CUSERFLAGS='--flags-for-C' CXXUSERFLAGS='--flags-for-C++'

        Note:  If you wish to run a Subversion HTTP server, you will need
        Apache 2.x.  See the INSTALL file for details.

    brew install swig
        ==&gt; Downloading http://downloads.sourceforge.net/project/swig/swig/swig-2.0.11/swig-2.0.11.tar.gz
        ######################################################################## 100.0%
        ==&gt; ./configure --prefix=/usr/local/Cellar/swig/2.0.11
        ==&gt; make
        ==&gt; make install
        🍺  /usr/local/Cellar/swig/2.0.11: 597 files, 6.2M, built in 10.1 minutes 

    ./configure --with-swig=/usr/local/bin/swig
        configure: Configuring Subversion 1.8.8
        ... ...
        ==================================================================
        WARNING: You have chosen to compile Subversion with a different
                 compiler than the one used to compile Apache.

            Current compiler:  gcc
           Apache's compiler:  /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc

        This could cause some problems.
        ==================================================================
        ... ...

    make swig-py
    make install
    make check-swig-py        
    sudo make install-swig-py

    sudo cp -r /usr/local/lib/svn-python/ /Library/Python/2.7/site-packages/
</code>
		</pre>
		<p>执行转换命令 </p>
		<pre>
				<code>    mkdir hgpath

    cd hgpath

    hg init

    hg convert -s svn -d hg ${local_path} ./hgpath
</code>
		</pre>
		<p>注意，这里转换的 SVN 目录只能是仓库目录而不是工作目录</p>
		<div class="footnotes">
				<hr />
				<ol>
						<li id="fn:1">
								<p>
										<a href="http://code.google.com/p/support/wiki/ConvertingSvnToHg">Google Code: Moving a project from using Subversion for code hosting to Mercurial</a>
										<a href="#fnref:1" title="return to article" class="reversefootnote"> ↩</a>
								</p>
						</li>
				</ol>
		</div>
<img src ="http://www.blogjava.net/ideame/aggbug/410445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2014-02-28 11:25 <a href="http://www.blogjava.net/ideame/archive/2014/02/28/410445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ditaa</title><link>http://www.blogjava.net/ideame/archive/2013/11/03/405942.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Sun, 03 Nov 2013 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2013/11/03/405942.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/405942.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2013/11/03/405942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/405942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/405942.html</trackback:ping><description><![CDATA[<p> </p><blockquote><p>ditaa is a small command-line utility written in Java, that can<br /> convert diagrams drawn using ascii art ('drawings' that contain<br /> characters that resemble lines like <tt>| / - </tt>), into proper<br /> bitmap graphics. This is best illustrated by the following<br /> example -- which also illustrates the benefits of using ditaa in<br /> comparison to other methods :)</p><table border="0" cellspacing="15" align="center"><tbody><tr><td><pre>    +--------+   +-------+    +-------+
    |        | --+ ditaa +--&gt; |       |
    |  Text  |   +-------+    |diagram|
    |Document|   |!magic!|    |       |
    |     {d}|   |       |    |       |
    +---+----+   +-------+    +-------+
        :                         ^
        |       Lots of work      |
        +-------------------------+
</pre></td></tr><tr><td align="center">After conversion using ditaa, the above<br /> file becomes:<br /><img src="images/first.png" alt="round 		corner demo" /></td></tr></tbody></table><p>ditaa interprets ascci art as a series of open and closed<br /> shapes, but it also uses special markup syntax to increase the<br /> possibilities of shapes and symbols that can be rendered.</p><p>ditaa is open source and free software (<em>free</em> as in free<br /> speech), since it is released under the GPL license.</p><h3>BUT WHY? Does this thing have any <em>real</em> use?</h3><p>There are several reasons why I did this:</p><ol><li>Simply for <strong>hack value</strong>. I wanted to know if/how it could be<br /> done and how easily.</li><li><strong>Aesthetic reasons and legacy formats:</strong> there are<br /> several old FAQs with ascii diagrams lying out there. At this<br /> time and age ascii diagrams make my eyes hurt due to their<br /> ugliness. ditaa can be used to convert them to something<br /> nicer. Although ditaa would not be able to convert all of them<br /> (due to differences in drawing 'style' in each case), it could<br /> prove useful in the effort of modernising some of those<br /> documents without too much effort. I also know a lot of people<br /> that can make an ascii diagram easily, but when it gets to using<br /> a diagram program, they don't do very well. Maybe this utility<br /> could help them make good-looking diagrams easily/quickly.</li><li><strong>Embedding diagrams to text-only formats:</strong> There is a<br /> number of formats that are text-based (html, docbook, LaTeX,<br /> programming language comments), but when rendered by other<br /> software (browsers, interpreters, the javadoc tool etc), they<br /> can contain images as part of their content. If ditaa was<br /> intergrated with those tools (and I'm planning to do the javadoc<br /> bit myself soon), then you would have readable/editable diagrams<br /> within the text format itself, something that would make things<br /> much easier. ditaa syntax can currently be embedded to <a href="#html_mode">HTML</a>.</li><li><strong>Reusability of "code":</strong> Suppose you make a diagram in<br /> ascii art and you render it with version 0.6b of ditaa. You keep<br /> the ascii diagram, and then version 0.8 comes out, which<br /> features some new cool effects. You re-render your old diagram<br /> with the new version of ditaa, and it looks better, with zero<br /> effort! In that sense ditaa is a diagram markup language, with<br /> very loose syntax.</li></ol><p><a name="download"></a><br /> </p><h2><a name="download"></a>Download</h2><p><a name="download"></a> </p><p align="center">(((-<a href="#intro">intro</a>-))) (((-<a href="#download">download</a>-))) (((-<a href="#usage">usage and syntax</a>-))) (((-<a href="#friends">friends</a>-))) (((-<a href="#contact">contact</a>-)))</p><p>The latest version of ditaa can be obtained from its <a href="http://sourceforge.net/projects/ditaa/">SourceForge project page</a>.</p><p>You can checkout the code using:</p><p>   <tt>svn co https://ditaa.svn.sourceforge.net/svnroot/ditaa ditaa</tt></p><p>You can also <a href="http://ditaa.svn.sourceforge.net/viewvc/ditaa/">browse the code online</a>.</p><p><a name="usage"></a><br /> </p><h2><a name="usage"></a>Usage and syntax</h2><p><a name="usage"></a></p><p align="center">(((-<a href="#intro">intro</a>-))) (((-<a href="#download">download</a>-))) (((-<a href="#usage">usage and syntax</a>-))) (((-<a href="#friends">friends</a>-))) (((-<a href="#contact">contact</a>-)))</p><h3>Command line</h3><p>You need the latest Java runtimes (JRE) to use ditaa. The best<br /> anti-aliasing can be achieved using Java 1.5 or higher.</p><p>To start from the command line, type (where XXX is the version number):</p><pre class="console">java -jar ditaaXXX.jar</pre><p>You will be presented with the command-line options help:</p><pre> <strong>-A,--no-antialias</strong>          Turns anti-aliasing off.
 <strong>-d,--debug</strong>                 Renders the debug grid over the resulting
                            image.
 <strong>-E,--no-separation</strong>         Prevents the separation of common edges of
                            shapes. You can see the difference below:
</pre><table border="0" cellspacing="15" align="center"><tbody><tr><td align="center"><pre>+---------+
| cBLU    |
|         |
|    +----+
|    |cPNK|
|    |    |
+----+----+
			</pre></td><td align="center"><img src="images/separation.png" alt="" /></td><td align="center"><img src="images/no_separation.png" alt="" /></td></tr><tr><td align="center" valign="top">Before processing</td><td align="center" valign="top">Common edge<br />separation (default)</td><td align="center" valign="top">No separation<br />(with the <tt>-E</tt> option)</td></tr></tbody></table><pre> <strong>-e,--encoding &lt;ENCODING&gt;</strong>   The encoding of the input file.
 <strong>-h,--html</strong>                  In this case the input is an HTML file. The
                            contents of the &lt;pre class="textdiagram"&gt; tags
                            are rendered as diagrams and saved in the
                            images directory and a new HTML file is
                            produced with the appropriate &lt;img&gt; tags.
                            See the <a href="#html_mode">HTML section</a>.
    <strong>--help</strong>                  Prints usage help.
 <strong>-o,--overwrite</strong>             If the filename of the destination image
                            already exists, an alternative name is chosen.
                            If the overwrite option is selected, the image
                            file is instead overwriten.
 <strong>-r,--round-corners</strong>         Causes all corners to be rendered as round
                            corners.
 <strong>-s,--scale &lt;SCALE&gt;</strong>         A natural number that determines the size of
                            the rendered image. The units are fractions of
                            the default size (2.5 renders 1.5 times bigger
                            than the default).
 <strong>-S,--no-shadows</strong>            Turns off the drop-shadow effect.
 <strong>-t,--tabs &lt;TABS&gt;</strong>           Tabs are normally interpreted as 8 spaces but
                            it is possible to change that using this
                            option. It is not advisable to use tabs in
                            your diagrams.
 <strong>-v,--verbose</strong>               Makes ditaa more verbose.
</pre><h3>Syntax</h3><h4>Round corners</h4><p>If you use / and \ to connect corners, they are rendered as<br /> round corners:</p><table border="0" cellspacing="15" align="center"><tbody><tr><td align="center"><pre>/--+
|  |
+--/
		  </pre></td><td align="center"><img src="images/round_corner.png" alt="round corner demo" /></td></tr><tr><td align="center" valign="top">Before processing</td><td align="center" valign="top">Rendered</td></tr></tbody></table><h4>Color</h4><p>Color codes can be used to add color to the diagrams. The<br /> syntax of color codes is</p><pre class="console">cXXX</pre><p>where XXX is a hex number. The first digit of the number<br /> represents the red compoment of the color, the second digit<br /> represents green and the third blue (good ol' RGB). See below for<br /> an example of use of color codes:</p><table border="0" cellspacing="15" align="center"><tbody><tr><td align="center"><pre>/----\ /----\
|c33F| |cC02|
|    | |    |
\----/ \----/

/----\ /----\
|c1FF| |c1AB|
|    | |    |
\----/ \----/
		  </pre></td><td align="center"><img src="images/color.png" alt="color demo" /></td></tr><tr><td align="center" valign="top">Before processing</td><td align="center" valign="top">Rendered</td></tr></tbody></table><p>This can become a bit tedious after a while, so there are (only<br /> some for now) human readable color codes provided:</p><table border="0" cellspacing="15" align="center"><tbody><tr><td><pre>Color codes
/-------------+-------------\
|cRED RED     |cBLU BLU     |
+-------------+-------------+
|cGRE GRE     |cPNK PNK     |
+-------------+-------------+
|cBLK BLK     |cYEL YEL     |
\-------------+-------------/
</pre></td><td align="center"><img src="images/color_codes.png" alt="color code" /></td></tr><tr><td align="center" valign="top">Before processing</td><td align="center" valign="top">Rendered</td></tr></tbody></table><p>As you can see above, if a colored shape contains any text, the<br /> color of the text is adjusted according to the underlying<br /> color. If the undelying color is dark, the text color is changed<br /> to white (from the default black).</p><p>Note that color codes only apply if they are within closed<br /> shapes, and they have no effect anywhere outside.</p><h4>Tags</h4><p>ditaa recognises some tags that change the way a rectangular<br /> shape is rendered. All tags are between { and }. See the table below:</p><table border="0" cellspacing="5" align="center"><tbody><tr><th>Name</th><th>Original</th><th>Rendered</th><th>Comment</th></tr><tr><td valign="top">Document</td><td align="center"><pre>+-----+
|{d}  |
|     |
|     |
+-----+
		  </pre></td><td><img src="images/document.png" alt="" /></td><td valign="top">Symbol representing a document.</td></tr><tr><td valign="top">Storage</td><td align="center"><pre>+-----+
|{s}  |
|     |
|     |
+-----+
		  </pre></td><td><img src="images/storage.png" alt="" /></td><td valign="top">Symbol representing a form of storage,<br />like a<br /> database or a hard disk.</td></tr><tr><td valign="top">Input/Output</td><td align="center"><pre>+-----+
|{io} |
|     |
|     |
+-----+
		  </pre></td><td><img src="images/io.png" alt="" /></td><td valign="top">Symbol representing input/output.</td></tr></tbody></table><h4>Dashed lines</h4><p>Any lines that contain either at least one <strong>=</strong> (for horizontal<br /> lines) or at least one <strong>:</strong> (for vertical lines) are rendered as<br /> dashed lines. Only one of those characters can make a whole line<br /> dashed, so this feature "spreads". The rationale behind that is<br /> that you only have to change one character to switch from normal<br /> to dashed (and vice versa), rather than redrawing the whole<br /> line/shape. Special symbols (like document or storage symbols) can<br /> also be dashed. See below:</p><table border="0" cellspacing="15" align="center"><tbody><tr><td><pre>----+  /----\  +----+
    :  |    |  :    |
    |  |    |  |{s} |
    v  \-=--+  +----+
</pre></td><td align="center"><img src="images/dashed_demo.png" alt="" /></td></tr><tr><td align="center" valign="top">Before processing</td><td align="center" valign="top">Rendered</td></tr></tbody></table><h4>Point markers</h4><p>If <strong>*</strong> is encountered on a line (but not at the end of the<br /> line), it is rendered as a special marker, called the point<br /> marker (this feature is still experimental). See below:</p><table border="0" cellspacing="15" align="center"><tbody><tr><td><pre>*----*
|    |      /--*
*    *      |
|    |  -*--+
*----*
</pre></td><td align="center"><img src="images/point_marker.png" alt="point marker demo" /></td></tr><tr><td align="center" valign="top">Before processing</td><td align="center" valign="top">Rendered</td></tr></tbody></table><h4>Text handling</h4><p>(This section is still being written)</p><p>If the pattern ' o XXXXX' is encountered, where XXXXX is any<br /> text, the 'o' is interpreted and rendered as a bullet point. Note<br /> that there must be a space before the 'o' as well as after it. See<br /> below:</p><table border="0" cellspacing="15" align="center"><tbody><tr><td><pre>/-----------------\
| Things to do    |
| cGRE            |
| o Cut the grass |
| o Buy jam       |
| o Fix car       |
| o Make website  |
\-----------------/
</pre></td><td align="center"><img src="images/bullet.png" alt="bullet point demo" /></td></tr><tr><td align="center" valign="top">Before processing</td><td align="center" valign="top">Rendered</td></tr></tbody></table><p><a name="html_mode"></a></p><p> </p><h4><a name="html_mode"></a>HTML mode</h4><p><a name="html_mode"></a></p><p><a name="html_mode"></a>When ditaa is run using the <tt>--html</tt> option, the input<br /> is an HTML file. The contents of the <tt>&lt;pre<br /> class="textdiagram"&gt;</tt> tags are rendered as diagrams and<br /> saved in the <tt>images</tt> directory and a new HTML file is<br /> produced with the appropriate <tt>&lt;img&gt;</tt> tags.</p><p><a name="html_mode"></a></p><p><a name="html_mode"></a>If the <tt>id</tt> parameter is present in the<br /> <tt>&lt;pre&gt;</tt> tag, its value is used as the filename of the<br /> rendered png. Otherwise a filename of the form<br /> <tt>ditaa_diagram_X.png</tt> is used, where X is a<br /> number. Similarly, if there is no output filename specified, the<br /> converted html file is named in the form of<br /> <tt>xxxx_processed.html</tt>, where xxxx is the filename of the<br /> original file.</p><p><a name="html_mode"></a></p><p><a name="html_mode"></a>In this mode, files that exist are not generated again, they<br /> are just skipped. You can force overwrite of the files using the<br /> <tt>--overwrite</tt> option.</p></blockquote><img src ="http://www.blogjava.net/ideame/aggbug/405942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2013-11-03 15:21 <a href="http://www.blogjava.net/ideame/archive/2013/11/03/405942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to install ZXing in Xcode 4</title><link>http://www.blogjava.net/ideame/archive/2013/11/03/405939.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Sun, 03 Nov 2013 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2013/11/03/405939.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/405939.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2013/11/03/405939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/405939.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/405939.html</trackback:ping><description><![CDATA[
		<ul>
				<li>April 2011</li>
				<li>Posted By Yannick Loriot</li>
				<li>81 Comments</li>
		</ul>
		<p style="text-align: justify;">After an upgrading to Xcode 4, I have been having trouble compiling my own ZXing iOS project. That’s why I decided to explain you how to install easily ZXing with Xcode 4.</p>
		<p style="text-align: justify;">First of all (for those who don’t know), <a href="http://code.google.com/p/zxing/">ZXing</a> is an open-source library to read the 1D/2D barcodes. This library is available on many platforms such as the iOS, Android, Blackberry, ect. You can find it here: <a href="http://code.google.com/p/zxing/">http://code.google.com/p/zxing/</a>.</p>
		<p style="text-align: justify;">Before to start, be sure that you have the latest version of ZXing on your computer. If you don’t, you must download it via a SVN client here: <a href="http://zxing.googlecode.com/svn/trunk/">http://zxing.googlecode.com/svn/trunk/</a>.</p>
		<p> </p>
		<p style="text-align: justify;">To use ZXing into your project in Xcode 4 follow these steps:</p>
		<p style="text-align: center;">
				<a href="http://yannickloriot.com/wp-content/uploads/2011/04/Capture-d’écran-2011-04-16-à-21.37.21.png">
						<img title="ZXingWidget.xcodeproj" src="http://yannickloriot.com/wp-content/uploads/2011/04/Capture-d’écran-2011-04-16-à-21.37.21.png" alt="" />
				</a>
		</p>
		<ol>
				<li style="text-align: justify;">Firstly go to the “<strong>zxing/iphone/ZXingWidget/</strong>” and drag and drop the <strong>ZXingWidget.xcodeproj</strong> file onto your Xcode “Project navigator” sidebar. <em>If a dialog appears uncheck the “Copy items” and verify that the “Reference Type” is “Relative to Project” before clicking “Add”.</em><p style="text-align: center;"><a href="http://yannickloriot.com/wp-content/uploads/2011/04/Capture-d’écran-2011-04-16-à-21.38.46.png"><img title="XZingWidget Target Dependencies" src="http://yannickloriot.com/wp-content/uploads/2011/04/Capture-d’écran-2011-04-16-à-21.38.46.png" alt="" height="176" width="283" /></a></p></li>
				<li>Now we are going to add ZXingWidget as a dependency of your project to allow Xcode to compile it whenever you compile the main project:<ol><li style="text-align: justify;">First select your project file in the “Project navigator”.</li><li style="text-align: justify;">Then select the corresponding target.</li><li style="text-align: justify;">After choose the “<strong>Build Phases</strong>” tab and expand the “<strong>Target Dependencies</strong>” section.</li><li style="text-align: justify;">Click the “+” (add) button to display a dialog.</li><li style="text-align: justify;">To finish add the “<strong>ZXingWidget</strong>” target as shown above.</li></ol><p style="text-align: center;"><a href="http://yannickloriot.com/wp-content/uploads/2011/04/Capture-d’écran-2011-04-16-à-21.39.37.png"><img title="Static ZXing Library" src="http://yannickloriot.com/wp-content/uploads/2011/04/Capture-d’écran-2011-04-16-à-21.39.37.png" alt="" height="179" width="305" /></a></p></li>
				<li>Now we are going to link the ZXingWidget static library (libZXingWidget.a) to the project:<ol><li style="text-align: justify;">Firstly choose the “<strong>Build Phases</strong>” tab and expand the “<strong>Link Binary With Libraries</strong>” section.</li><li style="text-align: justify;">Then click the “+” (add) button to display a dialog.</li><li style="text-align: justify;">To finish add the “<strong>libZXingWidget.a</strong>” which is located in the “Workspace” category as shown above.</li><li>By the way add the following iOS frameworks too:<ul><li style="text-align: justify;"><strong>AddressBook</strong></li><li style="text-align: justify;"><strong>AddressBookUI</strong></li><li style="text-align: justify;"><strong>AudioToolbox</strong></li><li style="text-align: justify;"><strong>AVFoundation</strong></li><li style="text-align: justify;"><strong>CoreMedia</strong></li><li style="text-align: justify;"><strong>CoreVideo</strong></li><li style="text-align: justify;"><strong>libiconv.dylib</strong></li></ul></li></ol><p style="text-align: center;"><a href="http://yannickloriot.com/wp-content/uploads/2011/04/Capture-d’écran-2011-04-16-à-21.42.51.png"><img title="Header Search Path" src="http://yannickloriot.com/wp-content/uploads/2011/04/Capture-d’écran-2011-04-16-à-21.42.51.png" alt="" height="130" width="376" /></a></p></li>
				<li>Then you must configure the header search path of your project to allow Xcode to find the ZXingWidget headers. To do that:<ol><li>In the “Project navigator” select the main project (not the target).</li><li>Go to the “<strong>Build Settings</strong>” tab and search the “<strong>Header Search Paths</strong>“.</li><li>Double-click on it and add:<ul><li>The full path of the “<strong>zxing/iphone/ZXingWidget/Classes</strong>” directory. Check the “<strong>recursive path</strong>“.</li><li>The full path of the “<strong>zxing/cpp/core/src/</strong>” directory. Uncheck the “<strong>recursive path</strong>“.</li></ul></li></ol></li>
		</ol>
		<p>Now you just have to import the “<strong>ZXingWidgetController.h</strong>” and the “<strong>QRCodeReader.h</strong>” to your project and use them.<br /><em><strong>Attention</strong>: Make sure that the files in which you are using the ZXing headers have the <strong>.mm</strong> extension because they use c++ library files</em>.</p>
		<p>Voilà! Now all should be ok. I hope it’ll help you!</p>
		<p>
				<span id="post-ratings-197" class="post-ratings" data-nonce="d893f75f4c">
						<img id="rating_197_1" style="cursor: pointer; border: 0px;" title="1 Star" src="http://yannickloriot.com/wp-content/plugins/wp-postratings/images/stars_crystal/rating_on.gif" alt="1 Star" />
						<img id="rating_197_2" style="cursor: pointer; border: 0px;" title="2 Stars" src="http://yannickloriot.com/wp-content/plugins/wp-postratings/images/stars_crystal/rating_on.gif" alt="2 Stars" />
						<img id="rating_197_3" style="cursor: pointer; border: 0px;" title="3 Stars" src="http://yannickloriot.com/wp-content/plugins/wp-postratings/images/stars_crystal/rating_on.gif" alt="3 Stars" />
						<img id="rating_197_4" style="cursor: pointer; border: 0px;" title="4 Stars" src="http://yannickloriot.com/wp-content/plugins/wp-postratings/images/stars_crystal/rating_on.gif" alt="4 Stars" />
						<img id="rating_197_5" style="cursor: pointer; border: 0px;" title="5 Stars" src="http://yannickloriot.com/wp-content/plugins/wp-postratings/images/stars_crystal/rating_half.gif" alt="5 Stars" /> (<strong>33</strong> votes, average: <strong>4.55</strong> out of 5)</span>
		</p>
		<p>
				<span class="post-ratings" data-nonce="d893f75f4c">http://yannickloriot.com/2011/04/how-to-install-zxing-in-xcode-4/</span>
		</p>
<img src ="http://www.blogjava.net/ideame/aggbug/405939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2013-11-03 14:45 <a href="http://www.blogjava.net/ideame/archive/2013/11/03/405939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL-python 安装的问题</title><link>http://www.blogjava.net/ideame/archive/2013/07/22/401813.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Sun, 21 Jul 2013 17:59:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2013/07/22/401813.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/401813.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2013/07/22/401813.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/401813.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/401813.html</trackback:ping><description><![CDATA[在Mac下安装MySQL-python一直有问题，不管是用pip还是用setup.py，都是返回如下错误：<br /><br /><div style="background-color: rgb(0, 0, 0);"><font color="#F5F5DC" face="Courier New"><br />sudo python setup.py install<br /><br />running install<br />running bdist_egg<br />running egg_info<br />writing MySQL_python.egg-info/PKG-INFO<br />writing top-level names to MySQL_python.egg-info/top_level.txt<br />writing dependency_links to MySQL_python.egg-info/dependency_links.txt<br />reading manifest file 'MySQL_python.egg-info/SOURCES.txt'<br />reading manifest template 'MANIFEST.in'<br />writing manifest file 'MySQL_python.egg-info/SOURCES.txt'<br />installing library code to build/bdist.macosx-10.7-x86_64/egg<br />running install_lib<br />running build_py<br />copying MySQLdb/release.py -&gt; build/lib.macosx-10.7-x86_64-2.7/MySQLdb<br />running build_ext<br />building '_mysql' extension<br />/ A p p l i c a t i o n s / X c o d e . a p p / C o n t e n t s / D e v e l o p e r / T o o l c h a i n s / X c o d e D e f a u l t . x c t o o l c h a i n / u s r / b i n / c l a n g   - f n o - s t r i c t - a l i a s i n g   - f n o - c o m m o n   - d y n a m i c   - I / u s r / l o c a l / i n c l u d e   - I / u s r / l o c a l / o p t / s q l i t e / i n c l u d e   - i s y s r o o t   / A p p l i c a t i o n s / X c o d e . a p p / C o n t e n t s / D e v e l o p e r / P l a t f o r m s / M a c O S X . p l a t f o r m / D e v e l o p e r / S D K s / M a c O S X 1 0 . 7 . s d k   - I / A p p l i c a t i o n s / X c o d e . a p p / C o n t e n t s / D e v e l o p e r / P l a t f o r m s / M a c O S X . p l a t f o r m / D e v e l o p e r / S D K s / M a c O S X 1 0 . 7 . s d k / S y s t e m / L i b r a r y / F r a m e w o r k s / T k . f r a m e w o r k / V e r s i o n s / 8 . 5 / H e a d e r s   - D N D E B U G   - g   - f w r a p v   - O 3   - W a l l   - W s t r i c t - p r o t o t y p e s   -Dversion_info=(1,2,4,'final',1) -D__version__=1.2.4 -I/usr/local/Cellar/mysql/5.6.10/include -I/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c _mysql.c -o build/temp.macosx-10.7-x86_64-2.7/_mysql.o -Os -g -fno-strict-aliasing<br />unable to execute /: Permission denied<br />error: command '/' failed with exit status 1</font></div><br /><br />经过Google，发现原来是XCode没有安装Command line Tools的问题，参考：http://sourceforge.net/p/mysql-python/bugs/333/<br /><img src ="http://www.blogjava.net/ideame/aggbug/401813.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2013-07-22 01:59 <a href="http://www.blogjava.net/ideame/archive/2013/07/22/401813.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件级负载均衡器(LVS/HAProxy/Nginx)的特点和对比</title><link>http://www.blogjava.net/ideame/archive/2013/07/16/401636.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Tue, 16 Jul 2013 07:52:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2013/07/16/401636.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/401636.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2013/07/16/401636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/401636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/401636.html</trackback:ping><description><![CDATA[<h2>LVS的特点是：</h2><ol><li>抗负载能力强、是工作在网络4层之上仅作分发之用，没有流量的产生，这个特点也决定了它在负载均衡软件里的性能最强的；</li><li>配置性比较低，这是一个缺点也是一个优点，因为没有可太多配置的东西，所以并不需要太多接触，大大减少了人为出错的几率；</li><li>工作稳定，自身有完整的双机热备方案，如LVS+Keepalived和LVS+Heartbeat，不过我们在项目实施中用得最多的还是LVS/DR+Keepalived；</li><li>无流量，保证了均衡器IO的性能不会收到大流量的影响；</li><li>应用范围比较广，可以对所有应用做负载均衡；</li><li>软件本身不支持正则处理，不能做动静分离，这个就比较遗憾了；其实现在许多网站在这方面都有较强的需求，这个是Nginx/HAProxy+Keepalived的优势所在。</li><li>如果是网站应用比较庞大的话，实施LVS/DR+Keepalived起来就比较复杂了，特别后面有Windows Server应用的机器的话，如果实施及配置还有维护过程就比较复杂了，相对而言，Nginx/HAProxy+Keepalived就简单多了。</li></ol><h2>Nginx的特点是：</h2><ol><li>工作在网络的7层之上，可以针对http应用做一些分流的策略，比如针对域名、目录结构，它的正则规则比HAProxy更为强大和灵活，这也是许多朋友喜欢它的原因之一；</li><li>Nginx对网络的依赖非常小，理论上能ping通就就能进行负载功能，这个也是它的优势所在；</li><li>Nginx安装和配置比较简单，测试起来比较方便；</li><li>也可以承担高的负载压力且稳定，一般能支撑超过几万次的并发量；</li><li>Nginx可以通过端口检测到服务器内部的故障，比如根据服务器处理网页返回的状态码、超时等等，并且会把返回错误的请求重新提交到另一个节点，不过其中缺点就是不支持url来检测；</li><li>N1.ginx仅能支持http和Email，这样就在适用范围上面小很多，这个它的弱势；</li><li>N1.ginx不仅仅是一款优秀的负载均衡器/反向代理软件，它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构，大有和以前最流行的LAMP架构分庭抗争之势，在高流量的环境中也有很好的效果。</li><li>Nginx现在作为Web反向加速缓存越来越成熟了，很多朋友都已在生产环境下投入生产了，而且反映效果不错，速度比传统的Squid服务器更快，有兴趣的朋友可以考虑用其作为反向代理加速器。</li></ol><h2>HAProxy的特点是：</h2><ol><li>HAProxy是支持虚拟主机的，以前有朋友说这个不支持虚拟主机，我这里特此更正一下。</li><li>能够补充Nginx的一些缺点比如Session的保持，Cookie的引导等工作</li><li>支持url检测后端的服务器出问题的检测会有很好的帮助。</li><li>它跟LVS一样，本身仅仅就只是一款负载均衡软件；单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度，在并发处理上也是优于Nginx的。</li><li>HAProxy可以对Mysql读进行负载均衡，对后端的MySQL节点进行检测和负载均衡，不过在后端的MySQL slaves数量超过10台时性能不如LVS，所以我向大家推荐LVS+Keepalived。</li></ol><p>HAProxy的算法现在也越来越多了，具体有如下8种：</p><ol><li>roundrobin，表示简单的轮询，这个不多说，这个是负载均衡基本都具备的；</li><li>static-rr，表示根据权重，建议关注；</li><li>leastconn，表示最少连接者先处理，建议关注；</li><li>source，表示根据请求源IP，这个跟Nginx的IP_hash机制类似，我们用其作为解决session问题的一种方法，建议关注；</li><li>ri，表示根据请求的URI；</li><li>rl<em>param，表示根据请求的URl参数'balance url</em>param' requires an URL parameter name；</li><li>hdr(name)，表示根据HTTP请求头来锁定每一次HTTP请求；</li><li>rdp-cookie(name)，表示根据据cookie(name)来锁定并哈希每一次TCP请求。</li></ol><img src ="http://www.blogjava.net/ideame/aggbug/401636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2013-07-16 15:52 <a href="http://www.blogjava.net/ideame/archive/2013/07/16/401636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Git on Windows</title><link>http://www.blogjava.net/ideame/archive/2011/11/12/363571.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Sat, 12 Nov 2011 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2011/11/12/363571.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/363571.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2011/11/12/363571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/363571.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/363571.html</trackback:ping><description><![CDATA[
		<p>下载文件 <a href="http://msysgit.googlecode.com/files/PortableGit-1.7.7.1-preview20111027.7z" target="_self">http://msysgit.googlecode.com/files/PortableGit-1.7.7.1-preview20111027.7z</a></p>
		<p>解压至 D:\JavaSoft\git-1.7.7.1</p>
		<p>增加系统环境路径：D:\JavaSoft\git-1.7.7.1\bin;D:\JavaSoft\git-1.7.7.1\cmd;</p>
		<pre>设置系统属性：<br />git config --global user.name "your.name"
git config --global user.email git.mail.name@gmail.com</pre>
		<p>创建密钥：</p>
		<p>mkdir /.ssh</p>
		<p>ssh-keygen -f D:\JavaSoft\git-1.7.7.1\.ssh\id_rsa -t rsa -C 'git.mail.name@gmail.com' -t rsa</p>
		<p>复制 id_rsa.pub 的内容，到github.com增加公钥，然后粘贴保存。</p>
		<p>测试：git -v -T git@github.com</p>
		<p>Hi your.name! You've successfully authenticated, but GitHub does not provide shell access.</p>
<img src ="http://www.blogjava.net/ideame/aggbug/363571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2011-11-12 11:27 <a href="http://www.blogjava.net/ideame/archive/2011/11/12/363571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>yum 上海交通大学 Repository</title><link>http://www.blogjava.net/ideame/archive/2011/05/18/350516.html</link><dc:creator>ideame</dc:creator><author>ideame</author><pubDate>Wed, 18 May 2011 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/ideame/archive/2011/05/18/350516.html</guid><wfw:comment>http://www.blogjava.net/ideame/comments/350516.html</wfw:comment><comments>http://www.blogjava.net/ideame/archive/2011/05/18/350516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ideame/comments/commentRss/350516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ideame/services/trackbacks/350516.html</trackback:ping><description><![CDATA[/etc/yum.repos.d/CentOS-Base.repo<br /><br /><div style="background-color:#eeeeee;font-size:13px;BORDER:1px solid #CCCCCC;PADDING-RIGHT: 5px;PADDING-BOTTOM: 4px;PADDING-left: 4px;PADDING-TOP: 4px;WIDTH: 98%;word-break:break-all"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">base</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; "><br />name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">CentOS-</span><span style="color: #000000; ">5</span><span style="color: #000000; "> - Base</span><span style="color: #000000; "><br />repo</span><span style="color: #000000; ">=</span><span style="color: #000000; ">os</span><span style="color: #000000; "><br />baseurl</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/</span><span style="color: #000000; ">5</span><span style="color: #000000; ">/os/$basearch/<br />gpgcheck</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />gpgkey</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/RPM-GPG-KEY-CentOS-5<br /><br />#released updates<br /></span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">update</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; "><br />name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">CentOS-</span><span style="color: #000000; ">5</span><span style="color: #000000; "> - Updates</span><span style="color: #000000; "><br />baseurl</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/</span><span style="color: #000000; ">5</span><span style="color: #000000; ">/updates/$basearch/<br />gpgcheck</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />gpgkey</span><span style="color: #000000; ">=http://ftp.sjtu.edu.cn/centos/RPM-GPG-KEY-CentOS-5</span><span style="color: #000000; "><br /><br />#packages used/produced in the build but not released<br /></span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">addons</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; "><br />name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">CentOS-</span><span style="color: #000000; ">5</span><span style="color: #000000; "> - Addons</span><span style="color: #000000; "><br />baseurl</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/</span><span style="color: #000000; ">5</span><span style="color: #000000; ">/addons/$basearch/<br />gpgcheck</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />gpgkey</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/RPM-GPG-KEY-CentOS-5<br /><br />#additional packages that may be useful<br /></span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">extras</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; "><br />name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">CentOS-</span><span style="color: #000000; ">5</span><span style="color: #000000; "> - Extras</span><span style="color: #000000; "><br />baseurl</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/</span><span style="color: #000000; ">5</span><span style="color: #000000; ">/extras/$basearch/<br />gpgcheck</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />gpgkey</span><span style="color: #000000; ">=http://ftp.sjtu.edu.cn/centos/RPM-GPG-KEY-CentOS-5</span><span style="color: #000000; "><br /><br />#additional packages that extend functionality of existing packages<br /></span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">centosplus</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; "><br />name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">CentOS-</span><span style="color: #000000; ">5</span><span style="color: #000000; "> - Plus</span><span style="color: #000000; "><br />baseurl</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/</span><span style="color: #000000; ">5</span><span style="color: #000000; ">/centosplus/$basearch/<br />gpgcheck</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />enabled</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />gpgkey</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/RPM-GPG-KEY-CentOS-5<br /><br />#contrib - packages by Centos Users<br /></span><span style="color: #800000; font-weight: bold; ">[</span><span style="color: #800000; ">contrib</span><span style="color: #800000; font-weight: bold; ">]</span><span style="color: #000000; "><br />name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">CentOS-</span><span style="color: #000000; ">5</span><span style="color: #000000; "> - Contrib</span><span style="color: #000000; "><br />baseurl</span><span style="color: #000000; ">=</span><span style="color: #000000; ">http://ftp.sjtu.edu.cn/centos/</span><span style="color: #000000; ">5</span><span style="color: #000000; ">/contrib/$basearch/<br />gpgcheck</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br />enabled</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; "><br />gpgkey</span><span style="color: #000000; ">=http://ftp.sjtu.edu.cn/centos/RPM-GPG-KEY-CentOS-5</span><span style="color: #000000; "></span></div><br /><img src ="http://www.blogjava.net/ideame/aggbug/350516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ideame/" target="_blank">ideame</a> 2011-05-18 17:36 <a href="http://www.blogjava.net/ideame/archive/2011/05/18/350516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>