gdb调试python

gdb对python的调试支持还是比较成熟的,如果gdb版本(>7)够高的话,gdb默认编译了对python的支持,可以直接:

当然,需要先安装对应版本的python-debuginfo

 

参考资料:

1. http://www.cnblogs.com/dkblog/p/3806277.html 这里的libpython.py 可能并不需要

2.

 

 

  • 在gdb可以使用generate-core-file命令生成一个coredump文件。之后可以用gdb –core来打开coredump文件进行debug。避免一直attach住进程,可以快速重启恢复服务
  • gdb-heap是gdb的一个扩展。可以打印Python的内存使用情况

 

mysql 数据导入导出

场景:

mysql导出导入大数据文件时,如果文件很大,导入时最好先把索引都去掉,如果导出时包含表结构,则在一个很大的文件上编辑表结构将非常麻烦,所以正确的做法:

1. 导出表结构(不包含数据)

2. 编辑表结构(去掉索引)

3. 创建表

4. 导出表数据 (不包含表结构)

5. 导入数据

6. 添加索引

 

附:

解压大文件直接到mysql:

如何知道灌到什么程度了?

tar 在解压的时候,使用的也是外部的解压程序(如:gzip),通过管道交互,可以查看gzip读的那个文件读到哪里了,如:

 

vagrant 之 insecure key

vagrant package 有两种方式,一种基于虚拟机名字的,一种基于vagratfile的。

对于自己安装的虚拟机,如果已经在使用privatekey的方式在登录了,那么package的时候,虽然该privatekey也能被打包,但是会认为该privatekey是打包的人提供的,不够安全,所以,会认为

 

正确的打包方式:

  1. 基于Vagrantfile打包,Vagrantfile中不要设置privatekey_path ,而是设置config.ssh.username 和 config.ssh.password ,并且虚拟机是开机状态
  2. vagrant package –vagrantfile Vagrantfile –output my.box
    此时,会自动生成一套全新的秘钥对,并且注入到虚拟机内,如下:
  3. 然后自动关机并打包

(尽管如此,使用同一个box的人使用的秘钥不还是一样的吗?不还是不安全的吗?暂且不管这么多了,至少每次启动新的虚拟机都能正常进入并完成初始设置)

使用该box启动新的虚拟机:

可见,该虚拟机有自己的private_key了

 

就算打包的时候没有重新生成privatekey,如果在创建虚拟机的vagrantfile中指定了ssh的用户名密码,在启动虚拟机的时候,也能自动删掉不安全的privatekey,并且自动写入一个新生成的privatekey,如下:

查看ssh-config:

可见,私钥写在了自己的目录下了(但是,这里还证明不了pubkey确实从guest中移除了,至少现在在guest中有两个pubkey)

如果在vagrant up的时候,由于某种原因没有能Insert一个安全的密码,在问题解决后,即使是在vagrant halt,如果发现存在不安全的key,也会即使更新能安全的key的:

关键点: 每次打包的时候,vagrantfile中指定用户名和密码

 

privatekey是否安全似乎是根据privatekey文件名判断的,后来打包的时候也没有重新生成privatekey

正解:

 

关键是,折腾了好几天,原来的镜像又好使了,啥问题没发现,xxx

注: virtualbox的动态磁盘一旦被撑大就回不去了,打包后的vbox,压缩也压缩不了

 

Linux 控制台编程

最初学习C语言的时候,只能在控制台上输出一些东西,和windows相比感觉非常的不实用,虽然也看见过一些程序能在控制台上输出炫酷的颜色的动画,但是基本语法还掌握不牢的时候,这样的程序也只能是欣赏一下,不敢想象自己去写这样的程序,后来也没再有机会研究这方面的东西。

今天,觉得控制台上输出只能顺序输出,最多也就是通过 \b 回退,不过这个回退也不过回退到行首,还有,虽然可以通过 \v 直接跳到下一行,但是:如何回退上上一行呢?如何在屏幕上指定坐标输出呢?

且看下面这个shell:

可以在控制台的右上角显示系统时间;

可见tput这个东西可以定位光标位置,那么tput是个什么东西呢?

其实,常用的clear命令就属于ncurses包

把ncureses-devel开发包安装一下就可以开发了; 文档: http://download.csdn.net/detail/Kevinxtq/1063483。该库方便开发terminal程序,当然没有该库也能做简单的光标定位,如:

在0行78列输出一个醒目的Hello World;  但是我不知道如何让光标回到原来的位置。

 

python 的snack模块就可以用于开发控制台窗口应用: http://www.wanware.com/tsgdocs/snack.html  linux上认证方式配置程序: authconfig-tui 就是使用python借助snack来实现的

 

php 也有ncurses的封装: http://php.net/manual/en/book.ncurses.php

实例:

https://devzone.zend.com/173/using-ncurses-in-php/

https://github.com/PHPGangsta/PHP-NCurses-Example

安装: yum install php-pecl-ncurses

 

参考资料:

http://bbs.chinaunix.net/thread-4179287-1-1.html

http://www.cnblogs.com/Xiao_bird/archive/2009/07/21/1527947.html

http://blog.csdn.net/chenxiaohua/article/details/2099304

http://download.csdn.net/detail/Kevinxtq/1063483

c++之多态与虚函数

多态玩的就是虚

什么是多态?
函数的形参中定义基类的情况,当然,这里的基类不一定是爷爷类,父亲类也可以,当实际调用时传递的如果是子类,那么,运行时会检查要调用的类的方法在基类(因为形参是基类,所以要参考基类)中是否virtual的,如果不是virtual的,则直接执行基类中的定义(即使当前确实是子类的实例,也不会执行子类的该方法,换言之,就是不允许覆盖,这就是virtual存在的意义,某些语言是直接覆盖的,没法选择不覆盖),如果是virtual的,则根据继承链向下检查,直到查到该方法的最后一个实现,哪怕继承链中的某些子类没有明确写virtual关键字也没关系(换言之,virtual属性是自动、强制继承的,或者说,dog类中的run方法的virtual关键字是多余的);具体实现上可能不是一个一个查,但至少逻辑上是这样的; 如果animal类的run方法不是virtual的,并不意味着子孙类的run方法再也不能添加virtual了,比如:animal的run没有virtual,dog的run使用了virtual,则run(animal *a)函数只能执行animal类中的run,而dog_run(dog *d) 却可以多态, 即: dog_run(new jinmao()) 时打印金毛的跑法

虚函数

就是允许覆盖,多态的实现方式

纯虚函数

就是没有函数的定义,只有声明,子类想不覆盖都不行,除非子类自己不创建对象,期待孙类的继承;

语法上来讲,函数不定义是不行的,但是纯虚函数就是不定义,所以必须明确说明不定义,即: =0 ,如下: (没有 =0 是不行的)

抽象类与接口

c++中没有抽象类,也没有接口,更没有abstract、interface、implements等关键字,有的只有class和virtual

如果一个类中包含了纯虚函数,则该类自然为抽象类;

如果一个类中只包含纯虚函数,则该类相当于接口;

画图工具

50款JavaScript图表库分享:

http://my.oschina.net/u/935975/blog/220987

纯文本流程图: http://my.oschina.net/iamancoder/blog/652233

13个JavaScript图表(JS图表)图形绘制插件:

http://blog.jobbole.com/13671/

js版的visio: http://demo.qunee.com

js通过数据生成流程图: http://my.oschina.net/blogshi/blog/221749

d3: https://github.com/cpettitt/dagre-d3  功能上来看,基本是dotgraph的js实现

js写的国际象棋: http://www.jointjs.com/demos/chess

 

 

iTerm2 之文件上传下载

iTerm2 可以方便地上传下载文件,甚至直接在终端显示图片。

第一步: 登录自己经常访问的服务器

第二步: 点击iTerm2菜单,选择: Install shell integration
这一步会自动在你的终端里面执行一些命令,就是往服务器上安装一些东西

第三步: 退出,重新登录你的服务器

 

上传文件:

按住option从finder往iTerm2上拖文件,就可以上传到指定目录了(这时候会发现菜单栏多一个upload菜单)

下载文件:

按住Command键,点击要下载的文件,就下载到指定目录了(这时候会发现菜单栏多一个download菜单)

查看图片:

imgcat a.gif

 

参考: https://iterm2.com/documentation-shell-integration.html

systemtap 之 基础命令

示例1:

通过 -e 选项直接执行probe,如:

示例2:

跟踪指定进程,如:

示例3:

执行stp脚本,如;

 

 

 

systemtap 跟踪PHP

参考资料:

http://php.net/manual/zh/features.dtrace.php

通过mark的方式,了解php都提供了哪些探针:

php探针完全版: all_probes.stp