Linux下PHP插件自动编译脚本

注意:如果你不是闲的蛋疼,你可以用apt或者yum等包管理自动安装。。。

需要手动安装的看这里Linux下手动编译为PHP添加扩展

首先,必须的按照那篇文所说,先准备好源码包,然后在ext目录里建立build.sh文件加入脚本内容(或者直接下载本文附件)

脚本内容中需要自行替换的部分有

  1. sourceDir=插件源码目录ext路径(必须以/结尾)
  2. phpDir=PHP安装目录(必须以/结尾)
  3. extension_dir=PHP插件目录(必须以/结尾,不知道请用phpinfo看)
阅读更多...

Linux(Ubuntu) 下时区的修改方法

刚搞到一台HK的Ubuntu,花了N小时一个个配置好nginx+php+mysql+redis环境之后,才想起有一键安装包这种东西ORZ。。

本文内容于Ubuntu14.04下尝试,不保证本文内容在其他版本的Linux下适用。

言归正传,发现默认的时区是GMT+000,每次看时间不对,很不爽有木有

更改方法如下:
(我是在root下执行的,如果不能正确设置,请尝试使用切换到root用户或使用sudo命令)

阅读更多...

vim更改字体

#vim 更改字体
配置文件中加入 set guifont=字体名:字号
字体名如果带有空格或者其他特殊字符,需要加上\转义符

1
set guifont=Source\ Code\ Pro:h10

win10报告字体文件无效问题

win10 提示字体文件无效

今天安装字体结果死活报告字体文件无效。。
以为是网络抽风(从境外网站下载因为众所周知的原因)或者是格式不兼容,然后重新下载了好几遍。。
最后搜了下,发现win10相同情况的很多,
解决方案:开启被禁用的windows firewall服务。
(巨硬特技还真是炫酷啊,搞个字体防火墙也要来插一脚)

【2015.09.27】C++学习笔记

一元运算符重载

  • 友元重载与成员重载
    • 友元重载:
      1
      2
      3
      4
      5
      6
      7
      8
      class Aclass()
      {
      friend bool operator== (Aclass &objectA, Aclass &objectB);
      };
      bool &operator++(Aclass &object)
      {
      //do something..
      }
    • 成员重载:
      1
      2
      3
      4
      5
      6
      7
      8
      class Aclass()
      {
      public:
      bool operator==(Aclass & objectB)
      {
      //do something..
      }
      };
  • 索引运算符[]必须使用成员函数重载
  • ++运算符前置与后置的区分: 前置operator++() 后置operator++(int)

模板

  • 在声明一个 template type parameter(模板类型参数)的时候,class 和 typename 意味着完全相同的东西,可以随意混用。
    • template<class T> class Widget; // uses "class" template<typename T> class Widget; // uses "typename"
      以上完全相同
  • 一个 template(模板)中的依赖于一个 template parameter(模板参数)的名字被称为 dependent names(依赖名字)。 当一个 dependent names(依赖名字)嵌套在一个 class(类)的内部时,我称它为 nested dependent name(嵌套依赖名字)。嵌套依赖名字必须显式使用typename关键字声明其为type,否则将不被认为是type。
    • template<typename C> void print2nd(const C& container) {   C::const_iterator * x;   ... }
      如不使用typename声明,将被认为是C中的static member(静态成员)const_iterator与某个已存在的x进行*运算相乘),如果要声明x为C内的nested dependent name(嵌套依赖名字),必须显式使用:typename C::const_iterator * x; 1
  • 模板参数也可以不使用typename而接受普通值,如template<typename C, int value>,可用于类模板,如
    1
    2
    3
    4
    5
    6
    template<typename C, int value>
    class AClass{
    private:
    C _aC;
    const int _Avalue = value;
    };
  • 类模板,成员函数在类声明外定义时,必须在每个函数前加上template信息,例如
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template<typename C, int value>
    class AClass{
    public:
    void aFunction(int aParm);
    private:
    C _aC;
    const int _Avalue = value;
    };

    template<typename C, int value>
    void AClass<C, value>::aFunction(int aParm)
    {
    }
  • 模板代码不能分离编译(不能分成.h和.cpp,必须根据需要全部写在.h或.cpp)

【2015.09.02】C++学习笔记

  • virtual不可用于修饰函数:构造函数、static函数(不可同时使用)、inline函数(inline将被忽略)

  • virtual修饰析构函数:对一个基类指针delete,将只会调用基类析构函数,而不调用派生类析构函数,可能造成内存泄漏。解决方法:用virtual修饰 基类析构函数,将会执行基类和派生类的析构函数

  • 一个函数一旦声明为虚函数,那么不管你是否加上virtual 修饰符,它在所有派生类中都成为虚函数。但是由于理解明确起见,建议的方式还是加上virtual 修饰符。

  • 静态函数不属于任何一个类的实例,在类被加载的时候,静态函数就会被创建,他的调用是通过类名调用的

  • 先执行基类构造函数,再执行派生类构造函数。析构过程调用顺序相反。

  • 类的数据成员在析构函数执行完毕之前不会被释放

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class B
    {
    ~B() {};
    }
    class A
    {
    public:
    ~A() {};
    private:
    B m_x;
    };

    以上代码在销毁A的实例化对象时,会先执行完毕A::A(),再执行B::B()

RTTI

  • dynamic_cast<type>(expression) 只能用于指针或引用。
    • 对指针转换失败,则返回空指针(传入空指针,会抛出std::bad_typeid异常)
    • 对引用转换失败,则抛出std::bad_cast异常
  • typeid(expression) 返回一个std::type_info的class instance`.
    • 传入空指针,则抛出std::bad_typeid异常
    • 判断类型:typeid(a) == typeid(b)
  • 一般地讲,能用虚函数解决的问题就不要用 dynamic_cast,能够用 dynamic_cast 解决的就不要用 typeid

找回windows体验指数

windows体验指数从win8.1开始就移除了

除了winsat命令行跑分,其实还可以通过注册组件重新找回

以下方法在win8.1和win10(10240专业版)下测试通过

导入以下注册表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{78F3955E-3B90-4184-BD14-5397C15F1EFC}]
@="Performance Information and Tools"
"System.Software.TasksFileUrl"="Internal"
"InfoTip"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,\
6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,\
00,50,00,65,00,72,00,66,00,43,00,65,00,6e,00,74,00,65,00,72,00,43,00,50,00,\
4c,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,32,00,23,00,69,00,6d,00,6d,00,75,\
00,74,00,61,00,62,00,6c,00,65,00,31,00,00,00
"LocalizedString"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,\
6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,\
00,5c,00,50,00,65,00,72,00,66,00,43,00,65,00,6e,00,74,00,65,00,72,00,43,00,\
50,00,4c,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,31,00,23,00,69,00,6d,00,6d,\
00,75,00,74,00,61,00,62,00,6c,00,65,00,31,00,00,00
"System.ApplicationName"="Microsoft.PerformanceInformationAndTools"
"System.ControlPanel.Category"=dword:00000000
[HKEY_CLASSES_ROOT\CLSID\{78F3955E-3B90-4184-BD14-5397C15F1EFC}\DefaultIcon]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,50,00,65,00,\
72,00,66,00,43,00,65,00,6e,00,74,00,65,00,72,00,43,00,50,00,4c,00,2e,00,64,\
00,6c,00,6c,00,2c,00,2d,00,31,00,00,00
[HKEY_CLASSES_ROOT\CLSID\{78F3955E-3B90-4184-BD14-5397C15F1EFC}\InProcServer32]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,68,00,\
64,00,6f,00,63,00,76,00,77,00,2e,00,64,00,6c,00,6c,00,00,00
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID\{78F3955E-3B90-4184-BD14-5397C15F1EFC}\Instance]
"CLSID"="{328B0346-7EAF-4BBE-A479-7CB88A095F5B}"
[HKEY_CLASSES_ROOT\CLSID\{78F3955E-3B90-4184-BD14-5397C15F1EFC}\Instance\InitPropertyBag]
"ResourceID"=dword:00000064
"ResourceDLL"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,\
00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,\
50,00,65,00,72,00,66,00,43,00,65,00,6e,00,74,00,65,00,72,00,43,00,50,00,4c,\
00,2e,00,64,00,6c,00,6c,00,00,00
[HKEY_CLASSES_ROOT\CLSID\{78F3955E-3B90-4184-BD14-5397C15F1EFC}\ShellFolder]
"Attributes"=dword:a0000000
"WantsParseDisplayName"=""

注册以下组件

regsvr32 PerfCenterCPL.dll WinSATAPI.dll diagperf.dll perftrack.dll SysWow64\PerfCenterCPL.dll SysWow64\WinSATAPI.dll

然后控制面板->性能信息和工具

【2015.08.11】C#学习笔记

  1. 对象的要素:属性、方法、事件,Timer对象的事件是Tick
  2. 注册事件使用运算符+=,撤消注册-=
  3. +可以表示 算法的加法、正号、字符串连接、注册事件(+=)
  4. 优先级:算术>关系>逻辑>三目>赋值
  5. bool只能为true或false,不能与数值隐式转换
  6. &&是条件与,也叫短路与。 ||表示条件或 ^是表示异或
  7. 按惯例,C#中的属性、方法、事件的首字母都大写
  8. string是引用类型,int占4个字节(System.Int32)
  9. 声明数组时不可以声明数组长度,必须在定义时使用指定每一维大小。
  10. 定义数组时必须定义每一维的长度,int[,] = new int[1,1];
  11. 交错数组使用Type[,] = new Type[x,y](交错数组实际上是数组的数组,即多维数组)
  12. 二维数组的第一维的大小可以使用GetLength(0)
  13. 数组在new时,其元素会默认初始化
  14. switch语句中,一般情况下每个case都有break。不可跨case
  15. enum本质是上符号化的整数
  16. 字段与方法都要放到类中,不能独立于类之外。
  17. this 是对象,不是指针,后面用.符号来访问其成员而不是->
  18. 构造方法不能写返回类型
  19. static本质上与this是对立的
  20. const编译时确定。readonly仅可赋值一次(由构造函数完成)
  21. abstract类不可实例化,一般都是用来被继承的,但可以有构造方法
  22. interface中的方法自动就是public的,而且是abstruct的,一般用于表示某种特征。命名习惯用字母I开始
  23. 一个类只能继承一个父类,但可以继承多重接口。(如果有父类必须写在继承列表第一个)
  24. 所有的对象都有ToString()方法
  25. 判断一个对象是不是某个类的实例,使用运算符is
  26. internal是基于程序集的访问控制
  27. sealed表示不能被继承
  28. 在catch异常时,子类异常(更具体的异常)在写到父类异常(更一般的异常)的前面。
  29. 自定义异常要从Exception(或其子类)进行继承
  30. Attribute在使用时用方括号
  31. C#中是可以使用指针的,但是要慎用,且只能在unsafe中使用
  32. 在C#2以上的版本中,可以这样写:MyDelegate d2 = obj.myMethod;
  33. 委托具有多播的特点,即一次可以调用多个函数
  34. 运算符本质上是一个函数,但是书写起来更直观
  35. internal修饰符是针对程序集的可访问性
  36. 匿名函数可以不带参数,使用Delegate(){}
  37. 如果try块后有finally子句,不论是否有异常,最终都会执行finally块
  38. C#可以实现函数的函数(高阶函数)
  39. 在C#中,(省略new EventHandler)可以简写为:button1.Click += button1_Click;
  40. 在C#中,要注意还有运算符也都是函数
  41. Lambda本质上是一种匿名函数,(object sender, MouseEventArgs e) => { lbl.Text = e.X + “,” + e.Y; }
  42. Lambda可以省略参数类型,(sender, e) => { lbl.Text = e.X + “,” + e.Y; }
  43. Lambda可以没有参数列表,() => { Console.Write(“my function”); }
  44. 声明委托public delegate ReturnType DelegateName(args…)。然后使用new DelegateName(FunctionName)实例化委托
  45. 运算符重载 public static Complex operator - (Complex c1)

自定义Attribute

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

public class HelpAttribute : System.Attribute
{
public readonly string Url;
private string topic;
public string Topic // 属性 Topic 是命名参数
{
get
{
return topic;
}
set
{
topic = value;
}
}
public HelpAttribute(string url) // url 是位置参数
{
this.Url = url;
}
}
[HelpAttribute("http://msvc/MyClassInfo", Topic="Test"),
Help("http://my.com/about/class")]
class MyClass
{
[Help("http;//my.com/about/method")]
public void MyMethod(int i)
{
return;
}
}

日期相减得到TimeSpan对象

常用库

Color.FromArgb(R,G,B) 表示颜色
Random.Next(MAX) 随机数
int/double.Parse()解析实数
int.TryParse(string, out int)不会抛出异常
as 不抛出异常## 标题文字 ##
数组可以通过Length属性获取长度
object等价于System.Object
int等价于System.Int32
System.Convert.Toxxx

  • Copyrights © 2014-2021 听寒
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信