蛋疼的mysql

今天蛋疼的吧mysql升级了下,用yum直接导致mysql启动失败。主要两个问题

1.my.cnf总table..size去掉

2.share/mysql/language/…这写文件路径有问题

要查看问题只要看下log   (/var/log/mysql.log)就很清楚

yum安装LAMP

yum -y install httpd php mysql mysql-server php-mysql httpd-manual mod_ssl mod_perl mod_auth_mysql php-mcrypt php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc mysql-connector-odbc mysql-devel libdbi-dbd-mysql

@interface classname () 中的小括号的用法

对已经存的类进行补充说明。例如

1
2
3
4
5
6
@interface NSString (base64)
-(NSString*)base64
{
return....;
}
@end

 

然后在程序中,你可以对一个NSString的对象对送这个base64的消息

1
2
NSString *str  = @"Test";
NSLog(@"%@",[str base64]);

另:

@interface HelloWorld ()
@end

这个是类别Category,如上所说放块中间放入的方法被当成private方法。

因为.m文件不像.h文件一样暴露到外部,所以.m文件中声明的方法外面并不知道,但是实际上还是可以调用的。

retain和copy的区别 #import @class 的区别

#import  @class 的区别

主要为了解决引用死锁

1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。

2.在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。

3.在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。

4.如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。

所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.

retain和copy的区别

retain和copy的区别 2009年08月13日, 11:11 下午 原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别。那究竟是有什么区别呢? assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。 Retain vs. Copy!! copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 那上面的是什么该死的意思呢? Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString对象,地址为0×1111,内容为@”STR” Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化 retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1 也就是说,retain是指针拷贝,copy是内容拷贝。哇,比想象的简单多了…

 

APACHE-[warn] _default_ VirtualHost overlap on port 80, the first has precedence

在apache2的httpd.conf里新增加了1个VirtualHost ,域名是www.ligh.com,此时,服务器总共2个VirtualHost ,apachectl restart的时候却出现了下面的警告提示:

[warn] _default_ VirtualHost overlap on port 80, the first has precedence

大概意思就是说后面新增加的这个VirtualHost 由于端口被占用,不能生效,沿用第一个虚拟主机的配置。

检查了一下,发现,原来在httpd.conf里,我没有把#NameVirtualHost *:80前的注释去掉,导致这个没有生效。

去掉#之后restart,问题解决。

 

Git常用操作

1.建立一个版本库

su – git

cd ~/repositories

mkdir test.git

chmod 750 test.git

cd test.git

git init –bare

然后就可以通过客户端clone下来,也就一个.git隐藏文件

2.clone一个版本库

git clone git@192.168.1.123:repositories/test.git

3.修改后递交版本库

cd test

git add .

git commit -am “备注信息”

git push

4.创建branch

git branch v2.1

5.拉取/切换分支

git checkout  v2.1

HTML JS渲染问题

这几天纠结了一个很蛋疼的问题,用jquery的$.html()方法改变div内容,但是显示上开来似乎没有改变内容。
通过获取html内容发现其实源码的内容已经是变了的,就是显示渲染没有做,导致看上去跟没有变一样。
解决办法。$.html()加一个延时,100ms就足以,视觉上也没什么感觉,但是效果很好,而且目前看来只要一个地方用了这个方法,其它地方都不会再有这个问题。很蛋疼。
这个问题也就只有在android4.0以后的webkit上存在。

HTML5 offline

<!DOCTYPE HTML>
<html manifest="offline.manifest">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="css/style.css" />
<script type="text/javascript" src="js/jquery/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="js/jquery/jquery.mobile-1.1.0-rc.1.event.js"></script>
<style>
#toast {
  position: fixed;
  width: 70%;
  right: 15%;
  bottom: 30%;
  color: #fff;
  border-radius: 1em;
  padding: 2%;
  overflow: hidden;
  text-align: center;
  font-size: 1.5em;
  overflow: hidden;
  background-image: -webkit-gradient(linear, 100% 0%, 71% 100%, from(#424242), to(#3D3D3D), color-stop(1, #303030) );
  bottom: 30%;
}
</style>
</head>
<body style="background: none">
  <div id="toast">正在检查更新...</div>
  <!-- 弹出框容器 -->
  <div id="layer">
    <div class="tips-map">
      <div class="tips-dt">提示</div>
      <p class="box box1">确认退出?</p>
      <div class="btn-div">
        <img src="images/ok_1.png" class="definite" alt="确定"><img src="images/cancel_1.png" class="cancel"
          alt="取消">
      </div>
    </div>
  </div>
</body>
</html>

<script>
  var toast = document.getElementById("toast");
  //判断是更新还是初始化
  var version = localStorage.getItem('version');
  var initOrUpdate = '更新';
  console.log('version:' + version);
  if (version == '' || version == null) {
    initOrUpdate = '初始化';
  }
  //更新处理
  var cache = window.applicationCache;
  var loaded = 0;
  var total = 165;
  cache.addEventListener('progress', function(e) {
    console.log(loaded);
    var progress = Math.round(100 * loaded / total);
    if (progress > 100) {
      progress = 100;
    }
    loaded++;
    message(initOrUpdate + '系统,已完成' + progress + "%");
  }, false);

  /*onupdate事件表示:没有更新。 */
  cache.addEventListener('noupdate', function() {
    location.href = 'login.html';
  }, false);

  /*oncached事件表示:第一次加载完成。 */
  cache.addEventListener('cached', function() {
    message(initOrUpdate + '完成');
    localStorage.setItem('version', 0);
    location.href = 'login.html';
  }, false);
  /*onupdateready事件表示:更新已经处理完成,新的缓存可以使用。*/
  cache.addEventListener('updateready', function() {
    message(initOrUpdate + '完成');
    localStorage.setItem('version', parseInt(version) + 1);
    cache.swapCache();
    location.href = 'login.html';
  }, false);

  function message(msg) {
    toast.innerHTML = msg;
  }

  // 退出
  window.onmessage = function(e) {
    var data = eval('(' + e.data + ')');
    if (data.target == 'back') {
      $("#layer").show();
      $('.definite').bind('vmouseup', function() {
        window.parent.postMessage('{target:"exitnow"}', "*");
      });
      $('.cancel').bind('vmouseup', function() {
        $("#layer").hide();
      });
    }
  };
</script>

offline.manifest

CACHE MANIFEST
#version 2.0.0.0
#dev-version 20121219180022
CACHE:
./css/public.css
./css/reset.css
./css/style.css
./js/Entities.js
./login.html
./index.html
./register.html
NETWORK:
*
FALLBACK:

iScroll输入框不能聚焦

onBeforeScrollStart: function (e) { var nodeType = e.explicitOriginalTarget ? e.explicitOriginalTarget.nodeName.toLowerCase():(e.target ? e.target.nodeName.toLowerCase():”);if(nodeType !=’select’&& nodeType !=’option’&& nodeType !=’input’&& nodeType!=’textarea’) e.preventDefault(); },

CMD查看端口被哪个程序占用

1、Windows平台
在windows命令行窗口下执行:

C:\>netstat -aon|findstr “9050”

TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 2016

看到了吗,端口被进程号为2016的进程占用,继续执行下面命令:

C:\>tasklist|findstr “2016”

tor.exe 2016 Console 0 16,064 K
很清楚吧,tor占用了你的端口