MAC下编译动态链接库函数的可见性

编译的时候加上 -fvisibility=hidden,可以隐藏一般函数的可见性,如果要使得函数可见,则要加上__attribute__((visibility(“default”)))

代码如下:

 

保存成a.c,然后用命令行编译:

gcc -shared -fPIC a.c -fvisibility=hidden

此时生成a.out,然后用nm查看,可以看到函数a前面是小t,说明是隐藏的,函数b前面是大T,说明是可见的

孕20周

关于无创DNA

这周终于收到了杭州市妇产科医院的无创DNA短信,宝宝没有异常,真是个好消息。
这个杭州市妇产科医院的无创DNA太慢了,要2周才出短信,加上过年放假,都3周了。建议取省妇保、邵逸夫医院做,大概3~5个工作日就出来了。
唐氏筛查杭州已经免掉了,查么就要贡献血。 高龄产妇还是直接无创DNA吧,唐氏筛查对高龄来说基本上就是不准,它本身只有60%~70%的准确率,再加上高龄,误报的可能性大大增加了,白白担心了好一阵子。羊水穿刺也是很准的,不好的是会有千分之一的流产概率,也是要命的,保守一点还是无创DNA了,21体的准确率99%,其他2个也有90%以上,比唐氏筛查好,就是要花一千多。

心理一块大石头落下了。接着就去预约四维彩超,就中档的吧。社区医院还有优惠券领,附近的几家医院都有券。

再就是看建大卡的攻略了。有的说20周以后就可以去建大卡,社区医生说是24周。先把攻略贴出来:

 

1)挂号:
糖耐:9点之前医生必须开单,也就是说9点之后是做不了的,所以挂号要挂9点之前的号子

2)晚上9点加餐、喝水,10:30后禁食
10:30–8:30 大概10小时空腹
准备好刻度杯、水杯

建卡材料:建卡当天需带上市民卡、医保证历本、围产期保健手册以及前期所有的检查报告。
建卡时候,爱美的孕妈们不要穿连体裤、长靴这类不方便穿脱的服装

3)社保卡里面存入1000元

4)带着《孕产妇保健手册》去找门口的护士,登记、测量身高和体重
=> 拿到:建卡通知单、入院须知、孕妇学校听课证
登记完后再到门口去等待叫号

5)医生会开检查单:糖耐、甲状腺和心电图、生化类检查、凝血功能四项、微量元素、贫血三项、血常规、尿常规。

6)老公去预约心电、准备好糖粉和杯子
如果糖耐没通过,可以挂一个下午的营养门诊号子,详细问下饮食

7)
8:30 做空腹抽血
尿检,医生不建议糖耐测试喝过糖水之后再留尿

自带有刻度的量水杯,75g葡萄糖粉+300ml温水,5分钟内喝完
2次抽血空隙可以去门诊六楼听孕妇课堂

9:40 葡萄糖后第1次抽血(不需要重新拿号子排队),时间差不多到了提前五分钟直接到一号窗口抽血就行了
10:40 葡萄糖后第2次抽血(不需要重新拿号子排队),时间差不多到了提前五分钟直接到一号窗口抽血就行了

8)吃饭

9)14:00出糖耐结果,给医生看

 

也有攻略说分2次的:
第一次大概22周去,挂产科初诊(建大卡)号子,不做糖耐,光准备钱、开单、预约到24周做糖耐、心电图。然后就可以回去了
第二次再按上面的流程走一遍,不过要注意挂下午产科复诊号子

 

 


小结

要带的东西:
小卡
NT超声单
三维/四维超声单
市民卡
病历本

手机(挂号、支付、看排队叫号都需要)
刻度杯
水杯
面包

 

数组读取性能比较

1~255的数组,如何组织起来,读取比较快?

1)用BYTE数组
2)用int数组(32位)
3)用long long数组(64位)

 

 

 

结论:64位的最快,但比32位只快了一点点,比BYTE数组快很多(一倍以上)

计算Hamming Distance汉明距离速度对比

汉明距离 Hamming Distance
两个二进制数不同的位,的数量
比如:
bin 001000
bin 000100
————–
第三位和第四位不同,所以它们的汉明距离为2
参考[ref]:
https://www.cnblogs.com/grandyang/p/6201215.html
https://blog.csdn.net/chouisbo/article/details/54906909

 

第1种:查二维表法,事先建一张256*256的表hmd
第2种:Wegner (1960) 提出了一种计算汉明权重(即计算给定整数的二进制表示中1的个数)的算法,通过反复查找并消除最低的非零bit位来实现
第3种:移位
第4种:异或最末位,再移位

 

 

 

第1种:最快,废空间
第2种:节省空间的情况下最快
第3种、第4种:差不多,3稍快

移位操作测试

最近用到一个移位操作,需求:
有一个数,取值范围是(0~0x7FFF],不断做左移操作,直到大于0x8000

翻译成C代码如下:

那用下面的if来判断,然后直接左移n位,会不会快一点呢?

 

实测:当count等于10^8时,p2会快大约1秒钟。下面是main函数

 

 

java.lang.UnsatisfiedLinkError: no XXX in java.library.path

其中涉及的测试源码如下:

For those who didn’t install Java with default settings, a systematic way for solving JNI class path problem is:
1> include “System.out.println(System.getProperty(“Java.library.path”)); ” in your “static” block, right before loading the class.
2> run your program and not surprisingly you got the err again, but this time with java.library.path info for your system. (it’s important since this path name varies among systems).
3> cp your libxxx.so into the java.library.path

 

Java一般使用两个path:classpath 和 java.library.path

classpath是指向jar包的位置

java.library.path是非java类包的位置如(dll,so)

解决办法:

第一种方法,在代码里设置环境变量

第二种方法:执行时在vm arguments里添加-Djava.library.path= /usr/local/lib,例如java -Djava.library.path=.   xxx(xxx是某个类文件的名字,不包括后缀)

第三种方法:设置环境变量java.library.path

1:Linux下的系统变量LD_LIBRARY_PATH来添加java.library.path

2:Windows下设置哪个环境变量???????????????????

 

如果你上面看不懂的话就继续向下面看:
1、 在你载入jni类之前 放入“System.out.println( System.getProperty(“java.library.path”));
2、运行你的程序你将获得java.library.path指向的目录
3、拷贝你的libxxx.so到java.library.path指向的某个目录下面。
注意:
Linux下:一定要将Linux下的共享库(我暂且这么叫:)命名成libxxx.so的形式,”xxx”是你在System.loadLibrary(“xxx“)中用到的加载库名称。

Windows下:一定要将Windows下的共享库(我暂且这么叫:)命名成xxx.dll的形式(没有前边的lib三个字母),”xxx”是你在System.loadLibrary(“xxx“)中用到的加载库名称。

 

查了其他的资料:
也可以通过设置LINUX下的系统变量LD_LIBRARY_PATH来添加java.library.path,只要在启动~/.bashrc中添加如下代码然后重新登录shell,就可以将动态库放在当前目录下运行你的jni程序了。
export LD_LIBRARY_PATH=.:..:$LD_LIBRARY_PATH

另外也可以通过如下I’m new to JNI. I see there are several ways to set JVM to look for libraries dll, so, etc.

 

System.setProperty(“java.library.path”, “.”);
System.loadLibrary(“hello”);
That’s when UnsatisfiedLinkError

java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:822)
at java.lang.System.loadLibrary(System.java:992)
at HelloWorld.main(HelloWorld.java:17)

人生不只是学知识

11.16.
几位家长与周校长交流,有幸聆听周校长的教导。稍微总结如下:
1. 以爱的方式接纳犯错的A同学,让孩子学会包容心。
2.传递正能量,目的是解决问题,大事化小、小事化了是对的。不能是制造问题、使问题扩大、发酵,传递负面情绪
3.内部矛盾,不要弄成敌对矛盾
4.找自己的原因,孩子的问题都是父母自身的问题
5.每个突发事件都可以当做教育的素材,教孩子如何正确地看问题,正确、正面地引导孩子
6.不要把大人看到社会的阴暗面太多,把成人的负面思维带给孩子,孩子还是很单纯的,要多哄哄,是可以教育好的。孩子之间的打闹问题没家长想象的那么严重
7. 要维护老师在小朋友面前的威信。周校长私下里叫C老师为小C,但有小朋友在的时候只能叫C老师。

作为老师,要想知道孩子有没有被某某欺负,要把小朋友单独叫到办公室问,而且不能直接问都要从侧面去问,比如:最近有没有什么开心、不开心的事?
不能直接说某某某对你怎么样?那会是一种心理暗示,某某某不是好学生。

而家长冲进教室,直接问所有小朋友被A同学打过你几次,并且进行统计,是非常错误的行为。首先要跟老师说,进教室打算做某某事情,征得老师同意才能进去做。其次,直接问小朋友被A同学打过几次,会造成A同学在小朋友心中不良影响。