月度归档:2013 年三月

bash shell实现文本域名统计

文本内容如下:

http://www.baidu.com/index.html

http://www.baidu.com/1.html

http://post.baidu.com/index.html phperz.com

http://mp3.baidu.com/index.html

http://www.baidu.com/3.html

http://post.baidu.com/2.html

用awk实现如下:

awk -F '/' '{print $3}' urls.txt|sort|uniq -c|sort -r

TSVNCache.exe占用高CPU问题的解决

刚安装最新版本svn感觉机器反应很慢,查看进程后发现有一个陌生的进程:TSVNCache.exe,这个进程占用CPU比较高,甚至占用100%,网上搜索后才知道,这是因为因为安装TortoiseSVN后引起的问题,TSVNCache.exe的进程驻留内存,这个进程会定时地去扫描Subversion管理的文件夹/文件是否被修改了,一旦发现有更新,那本地的这些有更新的文件/文件夹就会被更新,这个动作不仅会占用10-50MB左右的内存,而且也会在执行的瞬间占用超过CPU 50%的负载甚至占用100%,它把所有状态信息缓存在一个独立进程中(TSVNCache.exe),该进程监视所有驱动器的更改,并在工作副本中的文件被修改时重新获取其状态:  从网上搜到解决方法:去掉缓存进程:打开系统的文件夹管理–>右键–>TortoiseSVN–>settings–>Icon Overlays–>Status cache 设为”none”就可以了。

js实现瀑布墙效果

参考:

    var canScroll = true;
$(window).scroll(function () {
      if (!canScroll) return;
 
      var dh = $(document).height();
      var st = $(window).scrollTop();
      var wh = $(window).height();
 
      var fh = $("#PageFooter").height();
 
      var sx = dh - st - wh;
 
      $("title").text(fh + " DH: " + dh + " ST: " + st + " WH: " + wh + " [=" + sx + "]");
 
      var lable = $("<span/>").text("这是一个新行");
      if (sx < 100) {
        canScroll = false;
        FillUrls();
        canScroll = true;
 
        for (var i = 0; i < 20; i++) {
          var nl = "<span>这是一个新行 [" + i + "] " + new Date() + "</span>";
          //$("#ab").append(nl + "<br/>");
        }
        //$("#ab").append("<hr/>");
      }
    });

爱人者人恒爱之,敬人者人恒敬之

《爱人者人恒爱之》出自《孟子》的《离娄章句下》。这是一段典型的劝人互爱互敬的文字,在论述中又强调了个人修养中的反躬自省。读起来,使人感到与西方基督教的精神有相通之处。

【原文】


孟子曰:“君子所以异于人者,以其存心也。君子以仁存心. 以礼存心。仁者爱人,有礼者敬人。爱人者,人恒爱之;敬人者, 人恒敬之。有人于此,其待我以横逆①,则君子必自反也:我必不 仁也,必无礼也,此物奚宜至哉”?其自反而仁矣,自反而有礼矣, 其横逆由③是也,君子必自反也:我必不忠。自反而忠矣,其横道 由是也,君子曰:‘此亦妄人也已矣。如此,则与禽兽奚择④哉?于 禽兽又河难⑤焉?’是故君子有终身之忧,无一朝之患也。乃若所 忧则有之:舜,人也;我,亦人也。舜为法(6)于天下,可传于后世. 我由未免为乡人也,是则可忧也。忧之如何?如舜而已矣。若夫 君子所患则亡矣。非仁无为也,非礼无行也。如有一朝之患,则 君子不患矣。”

【注释】

①横逆:蛮横无礼。②此物:指上文所说“横逆”的态度。奚宜:怎 么应当。③由:通“犹”。下文“我由未免为乡人也”中的“由”也通 “犹”。④择:区别。⑤难:责难。(6)法:楷模。

【译文】

孟子说:“君子与一般人不同的地方在于,他内心所怀的念头 不同。君子内心所怀的念头是仁,是礼。仁爱的人爱别人,礼让 的人尊敬别人。爱别人的人,别人也经常爱他;尊敬别人的人,别 人也经常尊敬他。假定这里有个人,他对我蛮横无礼,那君子必 定反躬自问:我一定不仁,一定无礼吧,不然的话,他怎么会对 我这样呢?如果反躬自问是仁的,是有礼的,而那人仍然蛮横无 礼,君子必定再次反躬自问:我一定不忠吧?如果反躬自问是忠 的,而那人仍然蛮横无礼,君子就会说:‘这人不过是个狂人罢了。 “这样的人和禽兽有什么区别呢?而对禽兽又有什么可责难的呢?’ 所以君子有终身的忧虑,但没有一朝一夕的祸患。比如说这样的 忧虑是有的:舜是人,我也是人;舜是天下的楷模,名声传于后 世,可我却不过是一个普通人而已。这个才是值得忧虑的事。忧 虑又怎么办呢?像舜那样做罢了。至于君子别的什么忧患就没有 了。不是仁爱的事不于,不合于礼的事不做。即使有一朝一夕的 祸患来到,君子也不会感到尤患了。”

c#实现多站点ftp文件同步

1.把本地文件列表同步到各服务站点,可以使用ftp或sftp等协议,通过对比更改时间或大小来判断要不要更新;

2.最好能实现双向同步,比如服务端的上传文件目录;

基础代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using FTP;
using System.Configuration;
 
namespace BatFtp
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 站点所在的Ftp文件夹
        /// </summary>
        static string siteRoot = ConfigurationManager.AppSettings["SiteDir"];
        List<FileInfo> _selectFiles = new List<FileInfo>();
 
        private void btnOk_Click(object sender, EventArgs e)
        {
            if (Directory.Exists(txtUploadPath.Text) && File.Exists(txtPwdFile.Text))
            {
                Application.UseWaitCursor = true;
                if (_selectFiles.Count == 0)
                {
                    MessageBox.Show("没有选择要上传的文件,请确认!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                try
                {
                    int index = 0;
                    txtNote.Clear();
                    string logPath = Directory.GetCurrentDirectory() + "\\Log_" + DateTime.Today.ToString("yyyy_MM_dd") + ".Log";
                    //FileInfo[] files = new DirectoryInfo(txtUploadPath.Text).GetFiles("*.*", SearchOption.AllDirectories);
                    tctlInfo.SelectedTab = ftpLog;
                    Application.DoEvents();
                    using (var sr = new StreamReader(txtPwdFile.Text, Encoding.Default, true))
                    {
                        var s = "";
                        while ((s = sr.ReadLine()) != null)
                        {
                            index++;
                            var arr = s.Split(new char[] { '\t', ' ' }, StringSplitOptions.RemoveEmptyEntries);
                            txtNote.AppendText(("NO:" + index.ToString()).PadRight(8) + arr[1] + Environment.NewLine);
                            try
                            {
                                Application.DoEvents();
                                FTPclient ftp = new FTPclient(arr[0], arr[1], arr[2]);
                                Application.DoEvents();
 
                                #region ...... 删除web文件夹下二级内的所有文件及目录 ......
                                //if (ftp.FtpDirectoryExists("/web"))
                                //{
                                //    Application.DoEvents();
                                //    FTPdirectory _listDetail = ftp.ListDirectoryDetail("/web");
                                //    Application.DoEvents();
                                //    foreach (FTPfileInfo info in _listDetail)
                                //    {
                                //        if (info.FileType == FTPfileInfo.DirectoryEntryTypes.Directory)
                                //            RecursionDelDirAndFile(ftp, info.FullName);
                                //        else
                                //        {
                                //            ftp.FtpDelete(info.FullName);
                                //            txtNote.AppendText(string.Format("\t\t删除文件[{0}]", info.Filename) + Environment.NewLine);
                                //            Application.DoEvents();
                                //        }
                                //    }
                                //}
                                #endregion
 
                                string upLoadFileName = string.Empty;
                                if (ftp.FtpDirectoryExists(siteRoot))
                                {
                                    foreach (FileInfo file in _selectFiles)
                                    {
                                        List<string> DirPath = new List<string>(file.DirectoryName.Split(new char[] { '\\' }));
                                        if (DirPath[DirPath.Count - 1] == UpLoadRoot)
                                        {
                                            upLoadFileName = siteRoot + "/" + Path.GetFileName(file.FullName);
                                            if (ftp.FtpFileExists(upLoadFileName))
                                            {
                                                ftp.FtpDelete(upLoadFileName);
                                                txtNote.AppendText(string.Format("\t\t删除文件[{0}]", upLoadFileName) + Environment.NewLine);
                                            }
                                            ftp.Upload(file, upLoadFileName);
                                            txtNote.AppendText(string.Format("\t\t上传文件[{0}]", upLoadFileName) + Environment.NewLine);
                                        }//根目录
                                        else
                                        {
                                            string sitePath = getFtpSitePath(DirPath);
                                            if (!ftp.FtpDirectoryExists(sitePath))
                                            {
                                                ftp.FtpCreateDirectory(sitePath);
                                                txtNote.AppendText(string.Format("\t\t创建[{0}]文件夹", sitePath) + Environment.NewLine);
                                            }
                                            upLoadFileName = sitePath + "/" + Path.GetFileName(file.FullName);
                                            if (ftp.FtpFileExists(upLoadFileName))
                                            {
                                                ftp.FtpDelete(upLoadFileName);
                                                txtNote.AppendText(string.Format("\t\t删除文件[{0}]", upLoadFileName) + Environment.NewLine);
                                            }
                                            ftp.Upload(file, upLoadFileName);
                                            txtNote.AppendText(string.Format("\t\t上传文件[{0}]", upLoadFileName) + Environment.NewLine);
                                        }
                                        Application.DoEvents();
                                    }
                                }
                                ftp = null;
                                Application.DoEvents();
                            }
                            catch (Exception ex)
                            {
                                txtNote.AppendText("\t\t" + ex.Message + Environment.NewLine);
                            }
                        }
                    }
                    File.WriteAllText(logPath, txtNote.Text, Encoding.UTF8);
                    Application.UseWaitCursor = false;
                    MessageBox.Show("批量FTP更新完成,日期已经保存!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
 
        }
 
        string getFtpSitePath(List<string> _dirPath)
        {
            string ftpSitePath = siteRoot;
            int pos = _dirPath.FindIndex(p => p == UpLoadRoot);
            if (pos >= 0)
            {
                for (int i = pos + 1; i < _dirPath.Count; i++)
                    ftpSitePath += string.Format("/{0}", _dirPath[i]);
            }
            return ftpSitePath;
        }
 
        /// <summary>
        /// 删除文件和目录,之支持一级
        /// </summary>
        /// <param name="ftp"></param>
        /// <param name="parentPath"></param>
        private void RecursionDelDirAndFile(FTPclient ftp, string parentPath)
        {
            FTPdirectory _listDetail = ftp.ListDirectoryDetail(parentPath);
            int _dirNum = 0;
            foreach (FTPfileInfo info in _listDetail)
            {
                if (info.FileType == FTPfileInfo.DirectoryEntryTypes.Directory)
                    _dirNum++;
                else
                {
                    ftp.FtpDelete(info.FullName);
                    txtNote.AppendText(string.Format("\t\t删除文件[{0}]", info.Filename) + Environment.NewLine);
                }
                Application.DoEvents();
            }
            if (_dirNum == 0)
            {
                ftp.FtpDeleteDirectory(parentPath);
                txtNote.AppendText(string.Format("\t\t删除目录[{0}]", parentPath) + Environment.NewLine);
            }
        }
 
        private void btnSelectFile_Click(object sender, EventArgs e)
        {
            if (FleDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                txtPwdFile.Text = FleDlg.FileName;
        }
 
        private void btnSelectDir_Click(object sender, EventArgs e)
        {
            if (fldBrw.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtUploadPath.Text = fldBrw.SelectedPath;
                relateTreeView(tvLeft, fldBrw.SelectedPath);
            }
        }
 
        #region ....... Treeview 操作 .......
        static string UpLoadRoot = "";
        void relateTreeView(TreeView tv, string path)
        {
            tv.Nodes.Clear();
            string[] pathinfo = Path.GetFullPath(path.Trim()).Split(char.Parse("\\"));
            UpLoadRoot = pathinfo[pathinfo.Length - 1];
            TreeNode root = new TreeNode(UpLoadRoot, 0, 1);
            tv.Nodes.Add(root);
            TraversingCatalog(tv.Nodes[0], path);
            root.Expand();
        }
 
        bool TraversingCatalog(TreeNode tn, string path)
        {
            if (Directory.Exists(path) == false) { return false; }
            DirectoryInfo dirInfo = new DirectoryInfo(path);
 
            int allNum = dirInfo.GetDirectories().Length + dirInfo.GetFiles("*.*").Length;
            if (allNum == 0)
            {
                return false;
            }
 
            int folderIndex = -1;
            foreach (DirectoryInfo folder in dirInfo.GetDirectories())
            {
                folderIndex++;
                TreeNode folderNode = new TreeNode(folder.Name, 0, 1);
                folderNode.Tag = folder;
                folderNode.ToolTipText = folder.Name;
                tn.Nodes.Add(folderNode);
                Application.DoEvents();
                TraversingCatalog(tn.Nodes[folderIndex], path + "/" + folder.Name);
            }
 
            foreach (FileInfo file in dirInfo.GetFiles("*.*"))
            {
                TreeNode fileNode = new TreeNode(file.Name, 2, 3);
                fileNode.Tag = file;
                fileNode.ToolTipText = file.Name;
                tn.Nodes.Add(fileNode);
                Application.DoEvents();
            }
            return true;
        }
 
        private void tvLeft_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown)
            {
                //选中子节点
                CheckAllChildNodes(e.Node, e.Node.Checked);
                //处理选中的节点
                ProceSelectFile(e.Node, e.Node.Checked);
                //选中父节点 
                bool bol = true;
                if (e.Node.Parent != null)
                {
                    for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
                    {
                        if (!e.Node.Parent.Nodes[i].Checked)
                            bol = false;
                    }
                    e.Node.Parent.Checked = bol;
                }
            }
        }
 
        #region  选中子节点
        void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
        {
            foreach (TreeNode node in treeNode.Nodes)
            {
                node.Checked = nodeChecked;
                ProceSelectFile(node, nodeChecked);
                if (node.Nodes.Count > 0)
                    this.CheckAllChildNodes(node, nodeChecked);
            }
        }
 
        void ProceSelectFile(TreeNode node, bool nodeChecked)
        {
            if (node.Tag != null && node.Tag is FileInfo)
            {
                if (nodeChecked)
                {
                    _selectFiles.Add(node.Tag as FileInfo);
                }
                else
                {
                    int existIndex = _selectFiles.FindIndex(p => p == (node.Tag as FileInfo));
                    if (existIndex >= 0)
                        _selectFiles.RemoveAt(existIndex);
                }
            }
        }
        #endregion
 
        private void timer_Tick(object sender, EventArgs e)
        {
 
        }
 
        #endregion
 
        private void FrmMain_Shown(object sender, EventArgs e)
        {
 
        }
    }
}

数据库自动备份shell脚本

导出,压缩,上传

#!/bin/sh 
function usage()
{
    echo "Usage: $0 db_name"
    exit 1
}
if [ $# != 1 ]; then
    usage
fi
BIN_DIR="/usr/local/mysql/bin"
DB_USER="root"
DB_PASS="password"
DB_NAME=$1
 
#vars 
DATE=`date +%Y-%m-%d` 
BAKID=`date +%H%M%S`
BCK_DIR="/data/backup/db/$DATE"
if [ ! -d "$BCK_DIR" ]; then
    mkdir -p $BCK_DIR 
fi
cd $BCK_DIR
 
#todo 
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME > $BCK_DIR/${DB_NAME}_$BAKID.sql 
/bin/tar czfP $BCK_DIR/${DB_NAME}_$BAKID.sql.tar.gz $BCK_DIR/${DB_NAME}_$BAKID.sql
rm -rf $BCK_DIR/${DB_NAME}_$BAKID.sql

远程桌面连接无法最大化

使用远程桌面时发现了一个奇怪的状况:启动远程桌面连接客户端时,远程桌面窗口不是全屏;但“最大化”按钮显示窗口已处于最大化状态。如果您单击“最大化”按钮,窗口不能正常进入全屏模式,而是还原为比远程桌面略小。

   查找资料分析原因,找到两个对策:

   原因一:“我的文档”文件夹中的 Default.rdp 文件丢失或被删除,就会出现此问题。

   对策:

   要解决此问题,请重新启动计算机。重新启动远程桌面客户端后,Windows文件保护会立即更换 Default.rdp 文件。

   原因二:个人远程桌面软件设置有误

   对策:

   运行远程桌面登陆窗口,点击右侧的选项按钮,选择显示标签,会看到如下图示界面,拖动红色区域的滑块向右到最右端,下面文字显示为全屏,以后再次运行远程桌面时就可以全屏显示啦