So Tired !_! 逆水行舟, 不进则退!

7Dec/18

(苹果Mac OSX系统)绿联USB无法连接网络解决方案

Posted by Nick Xu

检测驱动是否装载:

sudo kextload /Library/Extensions/AX88772.kext
1
note:如果已装载成功,则执行成功,否则显示错误提示。

操作如下:
step1:关机重启立马按住command+R,等待进入language界面。
step2:按需求选择后,在工具栏打开终端。
step3:输入csrutil status查看当前状态,状态为enabled。
step4:输入csrutil disable,关闭System Integrity Protection。
step5:重启电脑。
再次重新装载,如若查看还未装载成功,请下载最新驱动AX88179。
---------------------
作者:shannon-Li
来源:CSDN
原文:https://blog.csdn.net/weixin_42555131/article/details/81843315
版权声明:本文为博主原创文章,转载请附上博文链接!

Filed under: Mac OS Comments Off
23Oct/18

关于 “does not contain bitcode.”的错误解决办法

Posted by Nick Xu

Xcode7运行项目时出现了如下的错误:

does not contain bitcode. You must rebuild it with bitcode enabled
(Xcode setting ENABLE_BITCODE), obtain an updated library from the
vendor, or disable bitcode for this target. for architecture armv7

关于什么bitcode的错误,那bitcode是个什么鬼呢?

什么是 bitcode ?

通俗解释:在线版安卓ART模式。

Apple 官方文档– App Distribution Guide – App Thinning (iOS, watchOS) 是这样定义的:

Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.

翻译过来就是:

bitcode 是被编译程序的一种中间形式的代码。包含 bitcode 配置的程序将会在 App Store 上被编译和链接。 bitcode 允许苹果在后期重新优化我们程序的二进制文件,而不需要我们重新提交一个新的版本到 App Store 上。

在 Xcode简介— What’s New in Xcode-New Features in Xcode 7 中这样描述:

Bitcode. When you archive for submission to the App Store, Xcode will compile your app into an intermediate representation. The App Store will then compile the bitcode down into the 64 or 32 bit executables as necessary.

也就是

当我们提交程序到 App Store上时, Xcode 会将程序编译为一个中间表现形式( bitcode )。然后 App store 会再将这个 bitcode 编译为可执行的64位或32位程序。

请看这里 http://blog.csdn.net/soindy/article/details/48518717

如果你的应用也准备启用 Bitcode 编译机制,就需要注意以下几点:

Xcode 7默认开启 Bitcode ,如果应用开启 Bitcode,那么其集成的其他第三方库也需要是 Bitcode编译的包才能真正进行 Bitcode 编译

开启 Bitcode 编译后,编译产生的 .app 体积会变大(中间代码,不是用户下载的包),且 .dSYM文件不能用来崩溃日志的符号化(用户下载的包是 Apple 服务重新编译产生的,有产生新的符号文件)

通过 Archive 方式上传 AppStore 的包,可以在Xcode的Organizer工具中下载对应安装包的新的符号文件

出现的问题原因是什么呢?

原来是某些二进制库不支持bitcode.而Xcode默认是要支持bitcode的,而且如果支持的话,其中所有的二进制库和framework都必须包含bitcode.

怎么样解决呢?

我们可以直接将bitcode直接关掉就可以了。target —> Built Seeting —>搜索 bitcode —>将Yes置为No
---------------------
作者:ismilesky
来源:CSDN
原文:https://blog.csdn.net/ismilesky/article/details/50721365
版权声明:本文为博主原创文章,转载请附上博文链接!

Filed under: Mac OS Comments Off
23Oct/18

如何隐藏SDK中(.a库之间的冲突)符号 iOS/C/C++

Posted by Nick Xu

一、 问题引入

在当下的开发中,应用的功能做的越来越复杂,工程也越来越大,所以为了

尽可能缩短开发周期,不可避免的会用到许多第三方库,随之而来的也会遇到好

多问题。比如,程序调用函数funa,funa函数从在于两个库liba.a,libb.a中,

并且程序执行需要连接这两个库,那么程序执行时是调用liba.a中funa还是调用

的libb.a中的funa呢?

其实这个取决于链接时的顺序,比如先链接的liba.a,这个时候通过liba.a的导出符号表就可以找到funa在liba.a中定义,并加入符号表中;链接libb.a的

时候发现符号表已经存在funa,就不会再次更新符号表,所以调用的始终是liba.a中的funa函数。

这里的调用严重的依赖于链接库加载的顺序,很大程度上会导致混论。作为SDK的提供者,我们尤其要避免这点。

正常我们使用的库中包含了好多符号信息,如图1所示:

图1

这些符号信息有以下几个弊端:

1、增大了库的体积;

2、隐蔽性较差;

3、容易带来冲突。在开发过程中第三点带来的问题尤其严重,特别是当我们提供的SDK用到第

三方库的时候(因为使用我们SDK的客户也有可能用到跟我们一样的第三方库)。

二、 解决办法

1、对第三方库处理  (C/C++)

下面继续以x264(下文以libx264.a带过)为例说明如何编译第三方的库。

没有隐藏符号的第三方库如“图1”所示,函数前面会带有external的标示。

在最终对外发布的SDK中_x264_predict_16x16_dc_c还是打着external的标签,

及对外可见。如图2所示:

图2

隐藏符号后,在libx264.a中,原先打上external标签的函数,会以private external标识。如图3所示:

图3

那么如何才能得到我们想要的、打上private external标签的库呢,有两种方

法可以做到。

1)对每个函数加属性__attribute__((visibility(“hidden”))) void funa_hidden()

{

printf(“hidden symbol\n”);

}

void funa_visible()

{

printf(“exported symbol”);

}

这样做的好处是可以根据需要对每个函数做定制处理。但若我们用到的三方库代码量大,这种方法就是费时费力了。

2)编译库时统一处理

利用gcc的扩展属性,编译库时加上-fvisibility=hidden。

a)静态库

gcc –static –o libtest.a –fvisibility=hidden –c test.c

b)动态库

gcc –dynamic –o libtest.so –fvisility=hidden –c test.c,其中dynamic为clang的写法,大部分gcc写法为shared。

上边两种方法只处理了c/c++,因为语法问题,汇编需要做特殊里,但也是在函数头加属性,但它的属性写法为.private_extern。.macro function name, export=0, align=2

.macro endfunc

ELF .size \name, .

- \name

FUNC .endfunc

.purgem endfunc

.endm

.text

.align \align

.if \export

.global EXTERN_ASM\name

ELF .type EXTERN_ASM\name, %function

FUNC .func EXTERN_ASM\name

EXTERN_ASM\name:

.private_extern

EXTERN_ASM\name

.else

ELF .type

FUNC .func    \name:   .endif

.endm

\name, %function

\name

因为需要处理的汇编文件较少,所以对汇编采用了直接编辑源文件的方法。

其实个人觉得也应该能在编译时做统一处理,有兴趣的可以自己找一下方法。

2、对xcode工程的处理 (iOS)

对xcode工程处理相对直观、简单了许多。只需在工程的设置里做如下处理。

1)打开工程设置,跳转到build setting页面;

2)搜索hidden;

3)将Symbols Hidden by Default设置Yes;

图4

其实通过观察编译的过程可以发现,通过上述设置,苹果最终将其转化为步

骤1的命令进行编译。编译的结果也是在库里加了private external而已。

3、符号剥离

最后一步,也是最关键的一步,就是真正将步骤1或步骤2中打上private

external标签的函数做最终的处理,把它们从要发布的库里剥离。

1)首先设置prelink

在target的build setting里搜索prelink,将Perform Single-Object Prelink置为

Yes,然后把该工程需要的库都直接拖到Prelink libraries中。如图5所示:

图5

2)设置 post process

将Deployment Postprocessing置为Yes。如图6所示:

图6

3)设置剥离方式

将Strip Style设置为Non-Global Symbols。如图7所示:

图7

到目前为止,所有的设置都已经完成,接下来编译。有兴趣的同学可以观察

一下编译的过程,会发现通过设置prelink,xcode会将库里所有的目标文件根据

你支持的architecture分类打包,如libxxx-armv7-master.o/libxxx-arm64-master.o,

最后一步执行Strip命令将所有需要隐藏的符号剥离。

作者:atme
链接:https://www.jianshu.com/p/761fca990325
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Filed under: Mac OS Comments Off
25Jul/18

H3C交换机 从console口配置 到设置远程访问(web/telnet)

Posted by Nick Xu

一、console口配置:

现在一般的电脑没有装配com的公口,所以,需要另外购买1根转换线。这里先说原装线的配置:

1、使用交换机自带的,rj45(及网线口)转com(RS232,9孔)线:
买了线才发现,台式服务器(IBM)后面是有这个接口的(机柜式服务器不确定)。
(1)插上线后,xp,打开超级终端;win7、win2008等等,推荐SecureCRT,比网上找的其他的软件好用多了!!
(2)随便写个名字,选择com1端口(!这个很重要!),具体的参数最好按照说明指导书设置,说明指导书可以通过搜索H3C网站相关型号找到。也可以直接点下“恢复默认设置”。
(3)我的经验是,如果只有光标在闪,那么按下回车键,就会出来信息了。

2、使用rj45(网口)转USB线:
(1)首先安装这条线的驱动;
(2)插上线后,xp,打开超级终端;win7、win2008等等,推荐SecureCRT,比网上找的其他的软件好用多了!!
(3)随便写个名字,选择的端口要看“设备管理器”中,“端口”项目中多出来的那个“service。。。”是com几,比如,我的就是“com3”(!这个很重要!),具体的参数最好按照说明指导书设置,说明指导书可以通过搜索H3C网站相关型号找到。也可以直接点下“恢复默认设置”。
(4)我的经验是,如果只有光标在闪,那么按下回车键,就会出来信息了。

二、配置远程访问,包括http和telnet访问:
(1)配置ip和http访问:
sys
[h3c]interface vlan 1  //进入vlan1进行配置
[h3c-vlan-interface1]ip address 192.168.1.1 255.255.255.0 //设置交换机的ip地址
[h3c-vlan-interface1]quit

(1) Device

# Web 用 名为 admin, 为 admin, 为 http,用 为 network-admin。 [Sysname] local-user admin

[Sysname-luser-manage-admin] service-type http
[Sysname-luser-manage-admin] authorization-attribute user-role network-admin

[Sysname-luser-manage-admin] password simple admin

[Sysname-luser-manage-admin] quit

# HTTP 。
[Sysname] ip http enable
(2) PC
在 PC 的 内 的 IP 并 , 示 Web 面。
在 Web 用 对 中 用 名、 及 , < > 可 , 示 Web 面。成 ,用 可以在 对 进行 。

 

(2)配置telnet访问:
sys
[h3c]telnet server enable  //设置允许telnet服务
[h3c]user-interface vty 0  //
[h3c-vty-0]authentication-mode scheme //设置访问模式,包括none(无账户无密码)、password(无账户有密码)、scheme(有账户有密码)
[h3c-vty-0]quit
[h3c]local-user 你的用户名
“[h3c-user-]password cipher 你的密码”//如果之前设置了可以不用写了
“[h3c-user-]anthorization-attribute level 3 “ //设置访问级别  //如果之前设置了可以不用写了
[h3c-user-]service-type telnet//设置该账户的访问模式
[h3c-user-]quit

(3)访问:
之后就可以通过网页访问交换机了,网页输入192.168.1.1,就会进入交换机的登录页面;
xp可以直接在运行里输入”telnet 192.168.1.1“,win7等系统,需要先安装telnet服务,在”程序“,”安装windows功能“里就可以安装了。

Filed under: Linux, Mac OS Comments Off
25Jul/18

rs232 for mac

Posted by Nick Xu

PL-2303芯片,Prolific公司的产品,到官网下载驱动!

打开网站 http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41下载最新的MAC串口驱动,下载完成后安装,安装完还要重启。

重启完成之后我们在“网络偏好设置”中,发现多了一项USB-SerialController

这说明我们的驱动安装成功了!

下面进行简单的测试,终端执行命令:

cd /dev

ls tty.*

你会发现输出中有一项为tty.usbserial,没错,这就是我们的串口设备。

首先配置minicom(minicom的安装非常简单,使用brew安装,终端输入sudo brew install minicom即可),终端输入

安装完了后需要配置,下面是我的配置过程

[root@sheryuan ~]# minicom -s

+-----[configuration]------+
≠ Filenames and paths      ≠
≠ File transfer protocols  ≠
≠ Serial port setup        ≠
≠ Modem and dialing        ≠
≠ Screen and keyboard      ≠
≠ Save setup as dfl        ≠
≠ Save setup as..          ≠
≠ Exit                     ≠
≠ Exit from Minicom        ≠
+--------------------------+

1、Serial port setup选项配置
选择配置项,这里我们主要配置Serial port setup选项,下面是基本配置

+-----------------------------------------------------------------------+
≠ A -    Serial Device      : /dev/ttyS0                                ≠
≠ B - Lockfile Location     : /var/lock                                 ≠
≠ C -   Callin Program      :                                           ≠
≠ D -  Callout Program      :                                           ≠
≠ E -    Bps/Par/Bits       : 115200 8N1                                ≠
≠ F - Hardware Flow Control : No                                        ≠
≠ G - Software Flow Control : No                                        ≠
≠                                                                       ≠
≠    Change which setting?                                              ≠
+-----------------------------------------------------------------------+
A选项Serial Device 根据我们的串口来,如果是COM1我们就选择ttyS0(不过后面说的出错也有例外),COM2口选择ttyS1等等

E选项Bps/Par/Bits串口波特率、数据位、奇偶校验未、停止位设置为115200 8N1

F选项一定要改为NO,不然终端只能打印从下位机发过来的信息,而不能接受键盘的输入

 

2、Modem and dialing选项配置

有些网上的资料都写到Modem and dialing的配置,不过这个可要可不要,因为不配置它和配置它没有感觉有啥区别,不过我每次都进行了配置。

下面是它的配置选项:

+--------------------[Modem and dialing parameter setup]---------------------+
≠                                                                            ≠
≠ A - Init string .........                                                  ≠
≠ B - Reset string ........                                                  ≠
≠ C - Dialing prefix #1.... ATDT                                             ≠
≠ D - Dialing suffix #1.... ^M                                               ≠
≠ E - Dialing prefix #2.... ATDP                                             ≠
≠ F - Dialing suffix #2.... ^M                                               ≠
≠ G - Dialing prefix #3.... ATX1DT                                           ≠
≠ H - Dialing suffix #3.... ;X4D^M                                           ≠
≠ I - Connect string ...... CONNECT                                          ≠
≠ J - No connect strings .. NO CARRIER            BUSY                       ≠
≠                           NO DIALTONE           VOICE                      ≠
≠ K - Hang-up string ......                                                  ≠
≠ L - Dial cancel string .. ^M                                               ≠
≠                                                                            ≠
≠ M - Dial time ........... 45      Q - Auto bps detect ..... No             ≠
≠ N - Delay before redial . 2       R - Modem has DCD line .. Yes            ≠
≠ O - Number of tries ..... 10      S - Status line shows ... DTE speed      ≠
≠ P - DTR drop time (0=no). 1       T - Multi-line untag .... No             ≠
≠                                                                            ≠
≠ Change which setting?       (Return or Esc to exit)                        ≠
+----------------------------------------------------------------------------+
这里A、B、K三个选项后面开始本来都有相应的参数,我们需要将他们删除,设置为无参数

 

这样,我们的minicom就基本配置完成了

 

三、minicom使用过程中遇到的问题

安装和配置minicom都很简单,不过使用中途会出现一些问题,也许这些问题也是安装过程会出现的

 

问题1、执行minicom时locked

[root@sheryuan ~]# minicom
Device /dev/ttyS0 is locked. 或者出现 Device /dev/ttyS0 lock failed: Operation not permitted.

解决方法:这个问题一般是上次直接关闭putty,而没有关闭minicom,或者是putty死机的情况重新打开putty后会出现这种情况,相当于minicom还在后台执行,只是我们没有发觉而已,这里我们执行ps -aux 查看一下是否有minicom进程,获取minicom的进程号,kill -9命令结束后台的minicom,然后启动minicom就会解决问题了

如果遮掩不能解决问题,可能是因为系统自动在目录/var/lock中生成了lockfile而导致,我们只要进入/var/lock,删除lockfile,那么minicom又可以正常启动了。

 

问题2、minicom只能打印下位机信息不能接受键盘的输入

解决方法:这里是由于我们minicom配置没有配置好,重新minicom -s进行Serial port setup配置,Hardware Flow Control : No ,Software Flow Control : No,将软硬控制流都设置为NO。

 

问题3、不能打开串口设备

minicom: cannot open /dev/ttyUSB0

这个问题是我当时重装系统后用,再次用虚拟机时候进入minicom后出现的

解决方法:断开相应的串口然再次连接(虚拟机的右下角操作),然后进入minicom看是否有效。如果实在解决不了问题。我们最好重启一下虚拟机,然后就应该没问题了

 

问题4、minicom运行缓慢,甚至进不去,出现minicom: cannot open /dev/ttyUSB0: Connection timed out的打印信息。

因为我用的是USB转串口线,前段时间在虚拟中用可以不把该端口当USB口用而是当物理串口用,不过安装完系统后不能把其当物理串口,只能把该端口作为USB口用,在/dev下也出现ttyUSB0设备。不过开始在minicom中配置端口为ttyUSB0也可以连接进入arm环境,不过运行很慢,ls命令出来成列文件就有问题,而且经常出现打印的错误,重启了虚拟机几次,换了minicom的版本,还是不行,后来干脆进入不了minicom,出现minicom: cannot open /dev/ttyUSB0: Connection timed out的错误,感觉与问题3相似,但他们完全是两码事情。

解决方法:后来无意中重启物理windows系统,然后运行虚拟机后,发现串口设置中可以将USB串口设置为实际的物理串口,这样我们就不用ttyUSB0而是直接用ttyS0串口,这样下来进入minicom很顺利,而且运行很流畅。

这个问题我思考了一下,可能是我刚装物理机后,USB转串口驱动安装后,最好要重启一下系统。具体问题我现在也数不清楚。

 

问题5、minicom环境下黑白屏显示问题

也是我解决完问题4进入minicom出现的问题,当时感觉很郁闷,因为文件显示没有颜色区分,文件夹、文件、可执行文件等都是一种颜色,白字黑底色。这样当然不行,所以网上搜了很长时间。

进入mincom时采用这个命令minicom -c on代替minicom就可以进入彩色界面了

具体原因我也了解了网上的说法,不过配置里面没有找到相关的设置。

有些终端(如Linux控制台)支持标准ANSI转义序列色彩,minicom硬性内置了这些转义 序列的代码,但是此选项缺省为off,需要使用‘-c on’打开此项。

不过每次都输入minicom -c on 有点烦哦。使用环境变量吧,export minicom="minicom -c on" 以后想要打开对色彩的支持就输入minicom 即可

 

问题先就写这么多,你出现的问题与我一样,但是用我的方法不能解决也是不足为奇的。大家可以到多了解minicom的设置,到网上搜索别人的解决方法进行对比都是可行的。希望能够给予大家帮助,如果以后出现其他的问题,还会继续添加到后面。

 

在Linux下退出minicom 按ctrl-a x 即可。
但是在Mac OS X这个方法失效了。后来找到方法是

http://osxdaily.com/2013/02/01/use-option-as-meta-key-in-mac-os-x-terminal/

把option键映射成 meta键。即打开终端的偏 好设置,把option键映射
这里写图片描述

设置后,按option(即alt)+ a x 即可退出。

 

 

Filed under: Mac OS Comments Off
29Jun/17

linux dd命令刻录启动U盘详解

Posted by Nick Xu

dd命令做usb启动盘十分方便,只须:sudo
dd if=xxx.iso of=/dev/sdb bs=1m

用以上命令前必须卸载u盘,sdb是你的u盘,bs=1M是块的大小,后面的数值大,写的速度相对块一点,但也不是无限的,我一般选2M,注意,执行命令后很块完成,但u盘还在闪,等不闪了,安全移除。

注意:你的镜像需要支持dd命令。

dd命令的解释。

定义

dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

参数

1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

bs=bytes:同时设置读入/输出的块大小为bytes个字节。

4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

8. conv=conversion:用指定的参数转换文件。

ascii:转换ebcdic为ascii

ebcdic:转换ascii为ebcdic

ibm:转换ascii为alternate ebcdic

block:把每一行转换为长度为cbs,不足部分用空格填充

unblock:使每一行的长度都为cbs,不足部分用空格填充

lcase:把大写字符转换为小写字符

ucase:把小写字符转换为大写字符

swab:交换输入的每对字节

noerror:出错时不停止

notrunc:不截短输出文件

sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

编辑本段dd应用实例。

1.将本地的/dev/hdb整盘备份到/dev/hdd

dd if=/dev/hdb of=/dev/hdd

2.将/dev/hdb全盘数据备份到指定路径的image文件

dd if=/dev/hdb of=/root/image

3.将备份文件恢复到指定盘

dd if=/root/image of=/dev/hdb

4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径

dd if=/dev/hdb | gzip > /root/image.gz

5.将压缩的备份文件恢复到指定盘

gzip -dc /root/image.gz | dd of=/dev/hdb

6.备份磁盘开始的512个字节大小的MBR信息到指定文件

dd if=/dev/hda of=/root/image count=1 bs=512

count=1指仅拷贝一个块;bs=512指块大小为512个字节。

恢复:dd if=/root/image of=/dev/hda

7.备份软盘

dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M)

8.拷贝内存内容到硬盘

dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)

9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件

dd if=/dev/cdrom(hdc) of=/root/cd.iso

10.增加swap分区文件大小

第一步:创建一个大小为256M的文件:

dd if=/dev/zero of=/swapfile bs=1024 count=262144

第二步:把这个文件变成swap文件:

mkswap /swapfile

第三步:启用这个swap文件:

swapon /swapfile

第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:

/swapfile swap swap default 0 0

11.销毁磁盘数据

dd if=/dev/urandom of=/dev/hda1

注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。

12.测试硬盘的读写速度

dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

dd if=/root/1Gb.file bs=64k | dd of=/dev/null

通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。

13.确定硬盘的最佳块大小:

dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file

dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file

dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file

dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file

通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。

14.修复硬盘

dd if=/dev/sda of=/dev/sda

当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic fluxpoint。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

Tagged as: Comments Off
25Nov/16

Mac原生系统对ntfs格式写操作支持

Posted by Nick Xu

弹出移动硬盘
执行 hdiutil eject /Volumes/Toshiba\ Portable\ Hard\ Drive/,如下输出
"disk1" unmounted.
"disk1" ejected.

创建一个目录,稍后将mount到这个目录
sodu mkdir /Volumes/MYHD

将移动硬盘以NTFS格式mount到上面的目录
sudo mount_ntfs -o rw,nobrowse /dev/disk1s1 /Volumes/MYHD/
执行完上面命令后,你可以看到你的移动硬盘灯又两起来了,没有任何输出,表示成功。

此时,你的移动硬盘可写了。 不过你不能在Finder里面操作,因为上面加了nobrowse选项。但是这个选项是必须的,否则你无法写。

Tagged as: , , Comments Off
22Mar/16

Mac OS X 下部分Android手机无法连接adb问题之解决方案

Posted by Nick Xu

打开终端,在任意当前路经下都可以直接执行adb命令,通过USB线将Android手机和Mac PC连接后,adb devices,没有相应设备的列表。下面是解决办法:
1. 打开终端,输入:system_profiler SPUSBDataType,查看Mac系统所有USB设备信息,找到相应的厂商Vender ID。
查到相应连有Android手机设备的usb hub,找到相应的厂商Vender ID,比如,我的测试机K-Touch T619天语手机就无法连接adb,查到的相应信息片段如下:
  1. -----------------
  2.  Spreadtrum phone:
  3.               Product ID: 0x5d04
  4.               Vendor ID: 0x1782
  5.               ...
  6.        Serial Number: T619
  7.        ...
  8. -----------------

2. 终端进入/Users/user/.android,应该有一个adb_usb.ini文件,如果没有就创建,然后将上面的Vender ID “0x1782”单独一行加入到该文件,然后退出。

  1. # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
  2. # USE 'android update adb' TO GENERATE.
  3. 1 USB VENDOR ID PER LINE.
  4. 0x1782

3. 重启adb server进程。

终端依次执行下面命令:
  1. adb kill-server
  2. adb start-server

然后通过adb devices命令就可以查看到以相应设备Serial Number为名字的设备。如:

  1. -MacBook-Pro:.android user$ adb devices
  2. List of devices attached
  3. emulator-5554   device
  4. T619    device

PS:

1. 有时 adb devices不能显示连接设备,需要拔掉数据线,多插几次,并且退出终端,然后重新打开,再输入命令就能发现连接的设备,再无法连接请重启电脑,等待系统初始化环境设置。
需要注意的是并不是所有的android机器都能解决,比如有的手机有供应商ID,缺少产品ID,依然无法识别,这种奇葩形的就只能找其它方法了。
2. Windows(XP、7)下面也可以同样的方法解决。但是前提也是已经指定了adb环境变量并且安装了相应Android手机设备的adb usb驱动,判断有没有装通过将手机和Windows连接,设备管理器里面没有发现显示有问号的设备就说明装了,有就说明没有安装。然后在C:\Users\username\.android目录下面也有一个adb_usb.ini文件,像前面那样别起一行添加相应设备的Vender ID,重启adb server进程即可。
3. 如果发现无法启动ADB SERVER, 运行下面这行查看具体原因:
adb nodaemon server
Tagged as: , , Comments Off
17Mar/16

install Python Imaging Library on mac

Posted by Nick Xu

# download
curl -O -L http://effbot.org/media/downloads/Imaging-1.1.7.tar.gz
# extract
tar -xzf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7
# build and install
ln -s /usr/local/include/freetype2 /usr/local/include/freetype
xcode-select --install
python setup.py build
sudo python setup.py install
# or install it for just you without requiring admin permissions:
# python setup.py install --user
Tagged as: , Comments Off
2Mar/16

在 Mac 下用 Homebrew 安装 MySQL

Posted by Nick Xu

在 Mac 下用 Homebrew 安装 MySQL, 网上的教程倒是很多,不过大多数都很默契地雷同。如果稍有点定制要求,就无从下手了。

我先也不免俗,从基本的开始:

一、首先安装 Homebrew

1
2
3
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
$ brew install git
$ brew update

二、安装 MySQL

用下面的命令就可以自动安装了:

1
$ brew install mysql

如果想让 MySQL 开机自动启动,可以如下操作:

1
2
3
4
$ mkdir -p ~/Library/LaunchAgents
$ ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$ find /usr/local/Cellar/mysql/ -name "homebrew.mxcl.mysql.plist" -exec cp {} ~/Library/LaunchAgents/ \;
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

设置 MySQL 用户以及数据存放地址

1
2
$ unset TMPDIR
$ mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

好了,可以启动了

1
$ mysql.server start

另外的参数还有 {start|stop|restart|reload|force-reload|status}

大部分的介绍就在此结束了。

三、更详细的设置

配置文件 my.cnf

作为用惯了 Linux 的人, 一定会去 /etc 下找 my.cnf, 让你失望了,这个文件要自己建立。如果看一下帮助

1
$ mysqld --help --verbose

就会发现系统会按这个顺序去找 my.cnf

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/etc/my.cnf
  4. ~/.my.cnf

一般网上大虾都会这么教小白建立 my.cnf, 其实这个默认的文件里面几乎没什么内容。

1
$ sudo cp $(brew --prefix mysql)/support-files/my-default.cnf /etc/my.cnf

所以,还是自己老老实实参考 linux 下的配置文件吧。

my.cnf (my.cnf.txt)download
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with 
# ticks/quotes escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing 
# the socket location.
[client]
port        = 3306
#socket     = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions 
# are currently parsed.
[mysqld_safe]
#socket     = /var/run/mysqld/mysqld.sock
#nice       = 0

[mysqld]
#
# * Basic Settings
#

#
# * IMPORTANT
#   If you make changes to these settings and your system uses 
#   apparmor, you may also need to also adjust 
#   /etc/apparmor.d/usr.sbin.mysqld.
#

#user       = mysql
#socket     = /var/run/mysqld/mysqld.sock
port        = 3306
#basedir    = /usr
datadir    = /usr/local/var/mysql
#tmpdir     = /tmp
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer          = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size   = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
#max_connections       = 100
#table_cache           = 64
#thread_concurrency    = 10
#
# * Query Cache Configuration
#
query_cache_limit   = 1M
query_cache_size    = 16M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1

log_error                = /usr/local/var/mysql/MacBook15.local.err

# Here you can see queries with especially long duration
#log_slow_queries   = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or 
# for replication.
# note: if you are setting up a replication slave, see 
#       README.Debian about other settings you may need 
#       to change.
#server-id          = 1
#log_bin            = /var/log/mysql/mysql-bin.log
expire_logs_days    = 10
max_binlog_size     = 100M
#binlog_do_db       = include_database_name
#binlog_ignore_db   = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

# Query Caching
query-cache-type = 1

# Default to InnoDB
default-storage-engine=innodb

[mysqldump]
quick
quote-names
max_allowed_packet  = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer      = 16M

错误日志

错误日志默认会存在数据目录下,也就是上面所定义的 /usr/local/var/mysql/,如果 Mac 电脑名字是 MacBook,那日志的全路径就是 /usr/local/var/mysql/MacBook.local.err

让别的电脑访问数据库

取消下面两个文件中关于绑定 127.0.0.1 的语句
/etc/my.cnf

1
bind-address = 127.0.0.1

~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

1
<string>--bind-address=127.0.0.1</string>

就我个人而言,不需要 MySQL 自启动,所以只要在 /etc/my.cnf 改一下就好了。

Tagged as: Comments Off
site
site