eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

September 30, 2018

Oracle跟踪和诊断的利器: ORADEBUG 手册

转载自:http://psoug.org/reference/oradebug.html

Oracle ORADEBUG
Version 11.1
GENERAL
Background Processes List SELECT b.name, p.pid
FROM gv$bgprocess b, gv$process p
WHERE b.paddr = p.addr
ORDER BY 1;
Dispatcher Processes List SELECT d.name, p.pid
FROM gv$dispatcher d, gv$process p
WHERE d.paddr = p.addr;
Job Queue Process List SELECT s.paddr, s.sid, j.job
FROM gv$session s, dba_jobs_running j
WHERE s.sid = j.sid;

SELECT pid
FROM gv$process
WHERE addr = '17';
Parallel Execution Slave Processes List SELECT pid, server_name, status
FROM gv$px_process;
Shared Server Processes List SELECT s.name, p.pid
FROM gv$shared_server s, gv$process p
WHERE s.paddr = p.addr;
SGA Variables List SELECT ksmfsnam
FROM x$ksmfsv
WHERE ksmfsnam LIKE '%\_' ESCAPE '\';
Switches
Switch Format Description
-G <Inst-List | def | all> Parallel oradebug command prefix
-R <Inst-List | def | all> Parallel oradebug prefix return output
CALL
Invoke function with arguments oradebug call <func> [arg1] ... [argn]
SQL> oradebug call ?
CLOSE_TRACE
Close trace file oradebug close_trace
SQL> oradebug close_trace
CORE
Dump core without crashing process oradebug core
SQL> oradebug core
CURRENT_SQL

Get current SQL
oradebug current_sql
SYS UWCLASS
conn / as sysdba conn uwclass/uwclass
GRANT execute ON dbms_support
TO uwclass;
SELECT pid
FROM gv$process
WHERE addr = (
SELECT paddr
FROM gv$session
WHERE sid =
sys.dbms_support.mysid);
oradebug setorapid 26
SELECT t.tablespace_name
FROM all_tables t, all_indexes i
WHERE t.tablespace_name = i.tablespace_name;
oradebug core
DELETE
Delete a watchpoint oradebug delete <local|global|target> watchpoint <id>
SQL> oradebug delete ?
DIRECT_ACCESS
Fixed table access oradebug direct_access <set/enable/disable command | select query>
TBD
DMPCOWSGA
Dump & map SGA as COW oradebug dmpcowsga <SGA dump dir>
SQL> oradebug dmpcowsga "c: emp"
DUMP
Invoke named dump oradebug dump <dump_name> <lvl> [addr]
-- dump_name values can be obtained from oradebug dumplist

SQL> oradebug setmypid
SQL> oradebug dump library_cache 4
Invoke ASH dump SQL> oradebug setmypid
SQL> oradebug dump ashdump 10
DUMPLIST

Print a list of available dumps
oradebug dumplist
SQL> oradebug dumplist

Available Dumps

ADJUST_SCN HANGDIAG_HEADER MMAN_ALLOC_MEMORY
ALRT_TEST HEAPDUMP MMAN_CREATE_DEF_REQUEST
ARCHIVE_ERROR HEAPDUMP_ADDR MMAN_CREATE_IMM_REQUEST
ASHDUMP HM_FW_TRACE MMAN_IMM_REQUEST
ATSK_TEST INSTANTIATIONSTATE MMON_TEST
AWR_FLUSH_TABLE_OFF IOERREMUL MODIFIED_PARAMETERS
AWR_FLUSH_TABLE_ON IOERREMULRNG NEXT_SCN_WRAP
AWR_TEST IR_FW_TRACE OBJECT_CACHE
BC_SANITY_CHECK JAVAINFO OCR
BG_MESSAGES KCBO_OBJ_CHECK_DUMP OLAP_DUMP
BLK0_FMTCHG KDLIDMP OPEN_FILES
BUFFER KRA_OPTIONS PGA_DETAIL_CANCEL
BUFFERS KRA_TRACE PGA_DETAIL_DUMP
CALLSTACK KRB_BSET_DAYS PGA_DETAIL_GET
CHECK_ROREUSE_SANITY KRB_CORRUPT_INTERVAL PIN_BLOCKS
CONTEXTAREA KRB_CORRUPT_REPEAT PIN_RANDOM_BLOCKS
CONTROLF KRB_CORRUPT_SIZE POKE_ADDRESS
CROSSIC KRB_CORRUPT_SPBAD_INTERVAL POKE_LENGTH
CRS KRB_CORRUPT_SPBAD_REPEAT POKE_VALUE
CSS KRB_CORRUPT_SPBITMAP_INTER POKE_VALUE0
CURSOR_STATS KRB_CORRUPT_SPBITMAP_REPEA POOL_SIMULATOR
CURSORDUMP KRB_CORRUPT_SPHEADER_INTER PROCESSSTATE
CURSORTRACE KRB_CORRUPT_SPHEADER_REPEA REALFREEDUMP
DATA_ERR_OFF KRB_FAIL_INPUT_FILENO RECORD_CALLSTACK
DATA_ERR_ON KRB_OPTIONS RECOVERY
DBSCHEDULER KRB_OVERWRITE_ACTION REDOHDR
DROP_SEGMENTS KRB_PIECE_FAIL REDOLOGS
DUMP_ADV_SNAPSHOTS KRB_SET_TIME_SWITCH REFRESH_OS_STATS
DUMP_ALL_COMP_GRANULES KRB_SIMULATE_NODE_AFFINITY ROW_CACHE
DUMP_ALL_COMP_GRANULE_ADDR KRB_TRACE RULESETDUMP
DUMP_ALL_OBJSTATS KRB_UNUSED_OPTION RULESETDUMP_ADDR
DUMP_ALL_REQS KRBMRSR_LIMIT SAVEPOINTS
DUMP_PINNED_BUFFER_HISTORY KRBMROR_LIMIT SELFTESTASM
DUMP_TEMP KRC_TRACE SET_NBLOCKS
DUMP_TRANSFER_OPS KSDTRADV_TEST SET_TSN_P1
DUMPGLOBALDATA KSFQP_LIMIT SHARED_SERVER_STATE
ENQUEUES KSKDUMPTRACE SIMULATE_EOV
ERRORSTACK KTPR_DEBUG SYSTEMSTATE
EVENT_TSM_TEST KSTDUMPALLPROCS SYSTEMSTATE_GLOBAL
EXCEPTION_DUMP KSTDUMPALLPROCS_CLUSTER TEST_DB_ROBUSTNESS
FAILOVER KSTDUMPCURPROC TEST_GET_CALLER
FBHDR KUPPLATCHTEST TEST_SPACEBG
FBINC KXFPCLEARSTATS TEST_STACK_DUMP
FBTAIL KXFPDUMPTRACE TR_CRASH_AFTER_WRITE
FILE_HDRS KXFPBLATCHTEST TR_CORRUPT_ONE_SIDE
FLASHBACK_GEN KXFXCURSORSTATE TR_READ_ONE_SIDE
FLUSH_CACHE KXFXSLAVESTATE TR_SET_ALL_BLOCKS
FLUSH_JAVA_POOL LATCHES TR_SET_BLOCK
FULL_DUMPS LDAP_KERNEL_DUMP TR_SET_SIDE
GC_ELEMENTS LDAP_USER_DUMP TRACE_BUFFER_OFF
GES_STATE LIBRARY_CACHE TRACE_BUFFER_ON
GLOBAL_AREA LOCKS TREEDUMP
HANGANALYZE LOGERROR TR_RESET_NORMAL
HANGANALYZE_PROC LOGHIST UPDATE_BLOCK0_FORMAT
HANGANALYZE_GLOBAL LONGF_CREATE WORKAREATAB_DUMP
DUMPSGA
Dump fixed SGA oradebug dumpsga

oradebug dumpsga <bytes>
SQL> oradebug dumpsga
c:\oracle\product\admin\orabase\udump\orabase_ora_2120.trc
DUMPTYPE
Print/dump an address with type info oradebug dumptype <address> <type> <count>
TBD
DUMPVAR
Print/dump a fixed PGA/SGA/UGA variable oradebug dumpvar <pga|sga|uga> <name> [level]
SQL> oradebug setmypid
SQL> oradebug dumpvar SGA kcbnbh
EVENT
Set trace event in process oradebug EVENT <event>
TRACE NAME CONTEXT FOREVER, LEVEL <level>
SQL> oradebug setmypid

SQL> oradebug EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12

SQL> oradebug unlimit
FFBEGIN
Flash Freeze the Instance oradebug ffbegin
SQL> oradebug ffbegin
FFDEREGISTER
FF deregister instance from cluster oradebug ffderegistger
SQL> oradebug ffderegister
FFRESUMEINST
Resume the flash frozen instance oradebug ffresumeinst
SQL> oradebug ffresumeinst
FFSTATUS
Flash freeze status of instance oradebug ffstatus
SQL> oradebug ffstatus
FFTERMINST
Call exit and terminate instance oradebug ffterminst
SQL> oradebug ffterminst
FLUSH
Flush the current contents of the trace buffer to the trace file use oradebug flush
SQL> oradebug flush
HANGANALYZE

Analyze system hang for stand-alone
oradebug hanganalzye [level] [syslevel]
SQL> oradebug setmypid;
SQL> oradebug hanganalyze;
SQL> oradebug flush;
Analyze system hang for RAC SQL> oradebug setmypid;
SQL> oradebug -g def hanganalyze 1
SQL> oradebug flush;
HELP
Describe one or all commands oradebug help

oradebug help <command>
SQL> oradebug help
SQL> oradebug help flush
LKDEBUG
Invoke global enqueue service debugger oradebug lkdebug
SQL> oradebug lkdebug
MAPCOWSGA
Map SGA as COW oradebug mapcowsga <SGA dump dir>
SQL> oradebug mapcowsga "c: emp"
NSDBX
Invoke CGS name-service debugger oradebug nsdbx
SQL> oradebug nsdbx
PEEK
Print/Dump memory oradebug peek <addr> <len> [level]
SQL> oradebug peek 0x20005F0C 12
POKE
Modify memory. Never perform this function on a production database! oradebug poke <addr> <len> <value>
SQL> oradebug poke 0x20005F0C 4 0x46495845
PROCSTAT
Dump process statistics oradebug procstat
SQL> oradebug setmypid

SQL> oradebug procstat
RESUME
Resume execution oradebug resume
SQL> oradebug resume
SESSION_EVENT
Set trace event in session oradebug session_event <text>
SQL> oradebug session_event 10053 TRACE NAME CONTEXT FOREVER, LEVEL 1
SETINST
Set instance list oradebug setinst <instance# .. | all>
SQL> oradebug setinst "1"
SETMYPID
Sets the oradebug PID to the current process oradebug setmypid
SQL> oradebug setmypid
SETORAPID

Set PID of Oracle process to debug
oradebug setorapid <orapid> ['force']
SELECT pid
FROM gv$process
WHERE addr = (
SELECT paddr
FROM gv$session
WHERE sid = DBMS_SUPPORT.MYSID);

or

SELECT pid
FROM gv$process
WHERE addr = (
SELECT paddr
FROM gv$session
WHERE sid = (SELECT sid FROM gv$mystat WHERE ROWNUM = 1));

/*
or one of the processes from the background, dispatcher, job queue, parallel, or shared server process lists
*/

SQL> oradebug setorapid 19
SETOSPID
Set OS pid of process to debug

The operating system process ID is the PID on Unix systems and the thread number for Windows systems
oradebug setospid <ospid>
Do not use as it often fails. Use setorapid instead.
SETORAPNAME
Set Oracle process name to debug oradebug setorapname <orapname>
TBD
SETVAR
Modify a fixed PGA/SGA/UGA variable oradebug setvar <pga|sga|uga> <name> <value>
SQL> oradebug setvar SGA kcfdfk 200
SGATOFILE
Dump SGA to file oradebug sgatofile <SGA dump dir>
SQL> oradebug ffbegin
SQL> oradebug sgatofile "c: emp"
SQL> oradebug ffresumeinst
SHORT_STACK
Get abridged OS stack oradebug short_stack
SQL> oradebug short_stack
SHOW
Show watchpoints oradebug show <local|global|target> watchpoint <id>
SQL> oradebug show?
SKDSTTPCS
Helps translate PCs to names oradebug skdsttpcs <ifname> <ofname>
SQL> oradebug skdsttpcs?
SUSPEND
Suspends the current process oradebug suspend
SQL> oradebug suspend
TRACEFILE_NAME
Get trace file name

Will not return a value on Windows systems
oradebug tracefile_name
SQL> oradebug tracefile_name
UNLIMIT
Unlimit the size of the trace file oradebug unlimit
SQL> oradebug unlimit
WAKEUP
Wake up Oracle process oradebug wakeup <orapid>
SELECT pid
FROM gv$process
WHERE addr = (
SELECT paddr
FROM gv$bgprocess
WHERE name = 'SMON');

SQL> oradebug wakeup 7
WATCH
Watch a region of memory oradebug watch <address> <len> <self|exist|all|target>
SQL> oradebug watch?
Demo

Taking a heap dump during a large (sorting) query
-- This example requires two sessions, session 1 logged on SYS AS SYSDBA and session 2 which
-- executes the query. In session 2 identify the PID using


SELECT pid
FROM gv$process
WHERE addr IN (
SELECT paddr
FROM gv$session
WHERE sid = dbms_support.mysid);

In this example the PID was 12

In session 1 set the Oracle PID using

ORADEBUG SETORAPID 12

In session 2 start the query

SELECT ... FROM t1 ORDER BY ....

In session 1 suspend session 2

ORADEBUG SUSPEND

The query in session 2 will be suspended

In session 1 run the heap dump

ORADEBUG DUMP HEAPDUMP 1

The heapdump will show the memory structures allocated for the sort. At this point further dumps e.g. subheap dumps can be taken.

In session 1 resume session 2

ORADEBUG RESUME

The query in session 2 will resume execution

Posted by eygle at 12:52 PM | Permalink | Oracle摘 (117)

September 13, 2018

Percona最新发布XtraBackup for MySQL 8.0

原文链接:http://www.enmotech.com/web/detail/1/593/1.html

相关文章链接:http://www.enmotech.com/web/detail/1/577/1.html

更多精彩请关注"数据和云"公众号

我们的产品:http://www.enmotech.com/services/software.html

zData 一体机:http://enmotech.com/web/classify/26.html

Bethune(白求恩)https://bethune.enmotech.com/

SQMhttp://www.enmotech.com/web/classify/25.html

ZONEhttp://www.enmotech.com/web/classify/28.html

在下文所有的废话之前,先说正事:

Percona在9月12日,终于宣布第一个测试用的XtraBackup for MySQL 8.0版本给大家试用:

(复制链接打开)https://www.percona.com/blog/2018/09/12/announcement-experimental-build-of-percona-xtrabackup-8-0/

MySQL 8.0今年4月份GA以来,虽然大家多有测试,但实际上敢用到生产环境的,只是极少数.而我个人认为最重要的原因之一,就是缺乏一个可用的备份工具.而在MySQL备份这件事情上,功德无量的Percona公司,却迟迟没有见到发布针对MySQL 8.0的备份工具,着实让人着急.

在9月12日之前,已知的MySQL 8.0的备份方式有这些:

  1. 官方MySQL商业版备份工具. 这个名为 MySQL Enterprise Backup 的软件,是官方商业版本的一部分,如果需要用,得掏钱买授权.先不说用的人比较少,使用文档本身也不在 MySQL 的公开文档导致学都很繁琐,就只是照着实例数收钱这点,就断绝了现在这种千库万表的 MySQL 大规模部署形势下的使用.

  2. 使用mysqldump命令.mysqldump 本身只是导出数据的命令行工具,但结合事务选项,以及master data选项,就可以导出满足一致性的备份SQL文件,即原生,又省心省力,对于小型数据库来说,是非常不错的选择(这里的小型,一般指的是100GB以下的数据库),但对于非常大个头的数据库来说,一来mysqldump是单线程导出,速度比较慢,说不定得搞一天,又由于MySQL的事务可见性的要求,undo文件会被执行导出的事务一直拖着不让缩小(如果没有使用独立表空间,那问题就更严重了-ibdata1过大的问题早年困扰不知多少DBA),导致磁盘空间比较大.而另外一个比较少遇到,但遇到就非常心碎的问题是,由于导出的是单个文本文件,如果文本文件中,某一个字节的存储出现问题,那么整个数据库的恢复就到此为止了.

  3. FLUSH TABLES WITH READ LOCK;见过很多以为备份数据库就是把数据文件直接复制走的哥们,如果他们在复制文件前,使用命令停掉所有的写入,之后再复制,也不能说人家有问题,奈何大部分人就是少这一步,而且,考虑到8.0开始,授权表都是innodb了,如果不小心,导致授权表损坏了,那可真是苦都没地方哭了.

  4. 考虑到很多人的备份不追求事务一致性,但速度要快,这种情况下,还有两个工具可以用,一个是mysql自带的mysqlpump,和 mysqldump 不同,mysqlpump支持表级别的并行导出,加快了导出速度,但放弃了事务的一致性要求.而mydumper则是早年,社区开发的一款并行导出MySQL数据的命令行工具,可以在一个表上,发起多个基于主键(或者唯一键)分区的并行导出,速度更快.

  5. 备份是为了恢复,恢复就要讲究恢复时间,那怎么样加快数据的恢复时间呢?那就是MySQL复制给出的答案: 建立一个开启了延迟备份的从库,在需要恢复数据到指定时间点的时候,直接用start slave until命令搞定. 注:个人建议是,对重要数据库,以及超大数据库(比如1TB以上的),都使用这种方式,来降低恢复时间,参考官方文档:(复制链接打开) https://dev.mysql.com/doc/refman/8.0/en/replication-delayed.html

  6. 既然说起从库,那么在从库上,就可以很方便地搞备份了,比如搞一个没有业务访问的从库,需要备份的时候,停掉slave(政治正确的叫法是replication)线程,然后用前面提到的方式3,4进行备份,也不是不可以,或者说,考虑到主库需要承担访问压力,这种备份方式从效率和一致性,以及对线上业务扰动综合看,实际上是非常好的一个方式.

  7. 数据文件存在磁盘上,既然方式3可以用cp命令拷贝,实际上就是允许使用所有文件系统/块设备/存储设备的快照备份了,只要记得执行前后FLUSH TABLES WITH READ LOCK;,那备份就有保障了.

我故意漏掉了myisam这过时玩意的备份恢复的手段,估计没人看也应该没人用,就不写了.

在前面列举的种种备份中,最理想的,实际上就是MySQL Enterprise Backup这种,所谓真正的热备份,在备份效率,与备份的一致性,安全性等方面,都是非常好的选择,开源世界中,对应的就是 XtraBackup.

这里也不多说XtraBackup本身的意义与使用方式,估计用MySQL的DBA,没有几个没有折腾过这玩意的,下文主要讨论的,还是Xtrabackup for MySQL 8.0.

首先看看Percona公司自己的说法(以下为作者提取的重点,原文参考前面的链接地址):

  1. 虽然已经发布了,但版本号是 8.0.1,并且提示为实验性质的(experimental)alpha版本.

  2. innobackupex命令终于被彻底删除,宣告一个时代的正式落幕,当然,也宣告着,很多MySQL自动化备份脚本需要改了.

  3. 由于MySQL 8.0数据目录,以及redo格式的种种变化,新的Xtrabackup for MySQL 8.0,仅仅提供给MySQL 8.0(以及Percona自己基于MySQL 8.0改的Percona Server),对于5.x版本,依然需要使用XtraBackup 2.4来备份,当然,也宣告着,很多MySQL自动化备份脚本需要改的地方更多了.

  4. 目前提供支持的操作系统版本为(其中Ubuntu 14.04 Trusty以及Debian 8 Jessie后续可能不再支持):

  • RHEL/Centos 6.x

  • RHEL/Centos 7.x

  • Ubuntu 14.04 Trusty*

  • Ubuntu 16.04 Xenial

  • Ubuntu 18.04 Bionic

  • Debian 8 Jessie*

  • Debian 9 Stretch

5. 如果需要下载,需要从Percona的repo源中下载,没有单独的下载地址(打算从官方软件下载页面找进去的同志可以放弃了):

centos 7 http://repo.percona.com/experimental/7/RPMS/x86_64/percona-xtrabackup-80-8.0.1-1.alpha.el7.x86_64.rpm

centos 6 http://repo.percona.com/experimental/6/RPMS/x86_64/percona-xtrabackup-80-8.0.1-1.alpha.el6.x86_64.rpm

至于其他发行版的同志,可以参考 https://www.percona.com/doc/percona-repo-config/index.html 这个地址的方法进行设置并下载

使用方法还是没有变化,想要试一把的同志,可以开搞了.

原创:刘伟。

投稿:有投稿意向技术人请在公众号对话框留言。

转载:意向文章下方留言。

更多精彩请关注 "数据和云" 公众号 。

招聘专栏

云和恩墨(北京)信息技术有限公司

Oracle 售前工程师(广州、深圳、上海、武汉、北京、石家庄)

Oracle 高级工程师(上海、深圳、北京、成都、昆明、贵州、西宁)

MySQL 技术经理(上海、南京、成都)

MySQL 工程师(上海、杭州)

超高待遇:丰厚的年终奖,五险一金,高额学习基金,团建旅游,法定节假日,福利假期等。

推荐他人成功入职有好礼(iPhone X)相送 。

投递简历至邮箱:hr@enmotech.com

末4.png

Posted by eygle at 11:11 AM | Permalink | IT新闻 (45)

September 12, 2018

对话李飞飞:在谷歌听得见炮火 回斯坦福看下个方向

文:本刊记者 谢丽容 刘以秦 引自:https://news.cnblogs.com/n/606943/

 人工智能产业进入快速上升通道,这一切既有赖于过去六十年学术界的知识沉淀,更得益于近些年学术界和工业界互动效率空前。

  一边是人工智能产业界最大巨头谷歌,一边是人工智能学术研究皇冠上的明珠斯坦福大学,李飞飞数度进出,完成了学术界和产业界的串联。

  2016 年 11 月,谷歌云 CEO Diane Greene 向外界宣布,斯坦福大学终身教授,斯坦福大学人工智能实验室主任李飞飞加入谷歌,任谷歌云机器学习负责人。今年 9 月 11 日,在外界传言"李飞飞将离职谷歌"一事逾两月后,Diane Greene 再次向外界宣布,李飞飞将回归斯坦福大学进行学术研究,她的谷歌职位接任者,是来自另一个 AI 顶尖学府的卡内基梅隆大学的计算机科学院院长 Andrew Moore 教授。

  9 月,在北京参加斯坦福大学的一个学术会议期间,李飞飞接受了《财经》记者专访。她向《财经》记者确认,随着斯坦福新学年的开学,两年学术假将满,当初加入谷歌和如今回归斯坦福,均在预计日程表上。今后,她不会完全离开谷歌,还将继续担任谷歌云的 AI/ML(Machine Learning)顾问。

  在全球人工智能学术界中,由于是女性、华人,李飞飞是一位在中国认知度较高的研究学者。

  她的主要研究方向为机器学习、计算机视觉、认知计算神经学。最著名的项目是 ImageNet,可以被理解为一个极大程度上方便了计算机对海量图像进行快速和准确识别的"数据库",被几乎所有主流大小公司的机器视觉研究所采用,成为了学界和业界的标准。改变了人工智能的发展历史,促进了深度学习的崛起。

  尽管 ImageNet 项目备受产业界欢迎,但在加盟谷歌之前的长达 18 年时间,直到近几年,她才和谷歌等产业公司有实质性的交集。

  在谷歌近两年,李飞飞干了两件事。

  第一件事情,推动成立 Google AI 中国中心。全程参与 Google AI 中国中心的规划和建设,推动将这一中心的成立定义为公司级的战略。李飞飞的光环,吸引不少中国 AI 人才加入。除此之外,李飞飞还参与了谷歌云的日常业务决策。

  第二件事情,在谷歌推行"AI 平民化"理论,两年来,谷歌云结合既定战略,确实在推动 AI 平民化、降低 AI 使用门槛上有不小进展。

  在谷歌云期间,李飞飞主持了一项名为 Cloud AutoML 的项目。这个项目被业内称为"Google Cloud 发展的战略转型",这意味着一直以来面向开发者的 Google Cloud,这次将服务对象转向了普罗大众。

  今年 1 月,AutoML Vision 上线,这是 Cloud AutoML 大项目推出的第一项服务,提供自定义图像识别系统自动开发服务。据谷歌介绍,即使是没有机器学习专业知识的小白,只需了解模型基本概念,就能轻松搭建定制化的图像识别模型。

  到了今年 7 月,AutoML Vision 产品线已经从图像拓展到翻译、和自然语言处理领域。

  如近期谷歌博客对外公布的信息,接下来,李飞飞将按照原定计划回到斯坦福大学,继续 AI 方面的研究工作。

  得益于深度学习技术的突破,人工智能产业在这几年进入快速上升通道,这一切有赖于过去六十年学术界的沉淀和坚持,更得益于近些年学术界和工业界互动效率空前。李飞飞作为学术研究者,过去两年的两栖经历是一个缩影。

  李飞飞认为,下一阶段人工智能产业的良性发展的趋势,除了 AI 学术界,包括人类学、社会学、法律学、伦理学、生物学等更大范围的学术界也需参与进来,和产业界形成新的互动模式。

  谷歌的"炮火" VS 斯坦福的"灯塔"

  《财经》:在谷歌和在斯坦福做研究区别一定很大?

  李飞飞:是的,区别很大,也相当必要。直到 2017 年,AutoML 还是一个基础科学,论文刚刚出来,谷歌的研究环境让我们意识到,这不仅是学术的问题,可以直接解决产业界痛点。谷歌两年,时刻被产业需求和场景所触动,很多问题学术界此前并没有关注。

  《财经》:所以很多人说,这一轮人工智能热潮是产业界推动的,在产业界能够更好的听到前方的炮火,从应用反推了研究。

  李飞飞:科学家有两个不同的"前方",一个是产业界的"前方",是需求、应用和产品,这个"前方",通常是有需求声音的,更像一种反馈;另一个是学术界的"前方",是高瞻远瞩的思想,思想要走在需求之前。60 年前提出 AI 的时候,谁需要 AI?那个时候连个人电脑都还没有,那就是思想的前方。

  我们 6 年前开始做 AI 医疗相关科研时,可能前方有需求,但是听不到声音的,这也是思想的前方,要做吗?一定要做。

  今天的 AI 走到了一个历史性的时刻,既有产业界大量需求,需要普世、通用的 AI,研发出更好的产品,这既包括给产业赋能,也包括给消费者带来更惊喜的产品。同时,在思想界、学术界,也需要新的 AI 研究,点亮未来道路。

  人类科技发展,就像在大海航行,每一次探索,都是走进黑暗的海域,你并不知道这艘船开往哪个方向,思想界、学术界的使命是造一座灯塔,照亮前方,让产业界得以继续进行。

  《财经》:如果出现多座灯塔,产业界应该看什么?

  李飞飞:出现多个灯塔是正常现象,不止是斯坦福大学在做基础科研,历史会告诉我们,哪一个灯塔是正确的。

  《财经》:今天 AI 的灯塔,应该照亮哪几个方向?

  李飞飞:其一,深度学习绝对不是 AI 的终极。深度学习依然很重要,在 AI 商业化落地方面还有很强的生命力。AI 作为一门科学,还有很多没有解决的难题,比如无监督学习(unsupervised learning)、迁移学习(transfer learning)等,都是 AI 技术前沿。我们下一步需要把脑科学、认知科学、生命科学的精髓和 AI 工程学结合起来。

  今天的深度学习,是五六十年前神经生物学的一个火花,这么小小的一个火花,今天给人类带来了第四次工业革命,人类需要更多火花。

  其二,说起 AI,很多人会担心人类被 AI 取代,我认为不是取代,而是辅助、强化(enhance),是助力。

  其三,学术界有责任和使命,去结合经济学、伦理学、法律学,甚至政治学等,去了解 AI 会对人类产生的文化、伦理的影响。

  《财经》:中国一些科技公司开始试图探索基础科学研究的无人区,比如华为、阿里,大型商业公司有能力建立自己的灯塔吗?

  李飞飞:企业替代不了高校,美国的科技公司有基础研究的传统,最著名的经典案例是贝尔实验室,拿了那么多诺贝尔奖,今天,IBM、微软、谷歌、脸书、亚马逊都在做基础研究。商业公司加大了基础研究的力度,最大的作用是搭建了一座桥----可以更好地与学术界互动,双方可以尽可能近地交流、合作。如果学术界只做技术研究,产业界只做产品开发,双方很可能连话都说不上。比如,我作为斯坦福的研究者,我想和谷歌对话,我可以通过谷歌 AI 的研发团队,这是一个桥梁。

  我很鼓励产业界有一部分基础研究,但产业界的 DNA 会让基础研究更重视应用,他们也需要和学术界有更多互动。

  这个时代,基础研究越来越重要,但这需要耐心和定力,60 年前学术界点燃的火花,今天才看到成果。

  《财经》:作为斯坦福的教授,您可以休长达两年的学术假到谷歌任职,有人说斯坦福是硅谷的沃土,也有人说硅谷带给斯坦福灵感,您是如何看待的?

  李飞飞:这是硅谷的文化,非常鼓励学术界和产业界的互动,包括方方面面:作为教授,我们学术上的合作者,既来自产业界,也来自学术界;我们可以休学术假,可以像我一样去谷歌,也鼓励学生们创业,既可以和教授合作,也可以在工业界自己打拼。

  《财经》:像一个成熟运转的机器体系?

  李飞飞:硅谷很自由,机器是严丝合缝,设计好了就不会改变的,我更愿意说它是一个"生态"。硅谷不断推陈出新,是一个自由、有机的生态。这套生态体系下,我很幸运,短短两年在谷歌,几乎从零建立了一个几百人的团队,产品线体系也基本搭建起来了,既做了基础研究,也推出了很多重要的产品。

  硅谷的产业、高校、研究机构这些点自由、开放地连接起来,才能形成一个良好的生态。

  《财经》:回到斯坦福大学会做什么?

  李飞飞:一部分精力继续 AI 医疗相关领域和 AI 基础科学的研究。同时,斯坦福大学在筹备一个新的校级 AI 项目,将在不久的将来公诸于众,我是这个项目的负责人。这个项目我们已经筹备了一年,接下来,这个项目和产业界包括谷歌也会有密切的合作。

  深度研究 VS 落地前景

  《财经》:我们事先找了很多人聊最想你谈的话题,大家最关心 AI 的实际落地和应用。

  李飞飞:这是国内外都关心的问题,我在谷歌最大的收获,就是接触了很多传统行业,真正要让 AI 渗透到生活的衣食住行,就要通过不同的垂直领域来进行。

  我目前最看好的是医疗健康的 AI 落地。我给你举一个例子。有一个数字大家不能忽略,在美国,GDP 的 15-16% 花在医疗上,1% 花在重症监护室(ICU),ICU 的整个工作流程中,AI 其实可以做很多事情。现在,大家在 AI 医疗的实践上,主要集中在医疗影像和数据分析上,这是很基础的应用。

  比如人工智能在 ICU 领域可以做的一个项目,是减少院内感染。

  医疗是一个非常复杂的过程,每一个环节都跟人命相关,稍微出一个错,就是生与死。美国每年因为医院感染死亡的人数是 9 万,远高于每年车祸死亡人数的 3.3 万,看似小小的医院感染这一个程序,不仅造成大量医疗事故,还导致大量医疗资源的浪费。

  医院感染的主要原因之一,是医护人员手部消毒不规范。美国医疗系统如此发达,但依然没有好的方式来实时监控手部消毒的问题,你可能完全不能相信,美国医院要做院感的监控,很多情况下还是只能派一个人站在走廊里拿一个板子计数,这简直是中世纪的方式。这是 AI 很快就可以做的一件事情。通过智能感应器和深度学习的算法,可以做到实时自动提醒医护人员。

  另一个人工智能可以切入的场景是健康,尤其是养老健康和医疗。

  老龄化是很多国家都在面临的社会问题,老人最关切的诉求是能在家自理生活,延续生活高质量。目前,老人日常生活的行为数据,医护人员和家属很难去全面了解,很多时候你不并知道老人在做什么,一不小心就出事了。

  我看到有公司做了可穿戴式的设备,但是老人不爱戴,原因很简单,这些可穿戴设备通常只能监控一两个指标,有的是专门针对糖尿病人的,有的是报警器,那么问题来了,你要保证一个老人的安全,他(她)需要同时穿戴多少个设备?

  我们在斯坦福大学正在做的一个研究,是把智能传感器背后的算法加进来,对整个家庭生活场景进行全面联网分析,打破一个设备一个功能的状态。

  不过,这个项目目前还在实验室阶段。目前的合作对象是旧金山的一个养老院,也有斯坦福大学。但是你可以想象,不久的将来,假设有老人的家庭有了这样的一个装备,会是另一个场景。我还要强调一下,这项目研究包括老人,但不仅限于老人,也包括慢性病的长期康复等。

  《财经》:医疗健康之外的其他领域有没有很快就落地的机会?

  李飞飞:AI 在其他领域也会有机会,比如无人车、金融业、制造业等。金融行业的数据量非常大,天然适合 AI。

  谷歌云已经与保险公司展开合作,用户自己通过拍照就可以自动评估、车辆定损。这在美国已经相对成熟,整个流程变得轻了很多,金融还有很多应用的场景,比如金融反欺诈等。

  不过还有一个方向让我觉得很兴奋,但是我目前还没开始做,是农业。

  AI 会是人类公敌吗?

  《财经》:很多人在讨论,人工智能技术发展的终极,是逐步取代人类。

  李飞飞:说起 AI,很多人联想到第一个英文单词就是 Replace,我认为不是取代,而是助力(Enhance)。不管医疗、教育、制造业,协助工具至关重要。我们希望让大家看到,做 AI 医疗是为了帮助人类,不是取代人类。

  《财经》:但人们会简单粗暴地认为,AI 取代人力,本来医院需要 200 个医生,AI 技术成熟后,就只需要 100 个了。

  李飞飞:确实太简单粗暴了。这个问题需要经济学家和技术人士一起来讨论,举个例子,银行的自动取款机出现之后,很多人说银行会减少很多前台工作人员,但是数据表示,ATM 机增加的同时,前台的工作人员也增加了,为什么呢?机器把简单重复的工作减少之后,银行可以把金融的产品做的更丰富了。

  作为一个科学者,我特别不喜欢把一件事情说得很夸张,无限放大优点和缺点,我们需要准确、理性地去传递。

  《财经》:我们看到很多科幻作品里,有机器人伤害、取代人类的场面。

  李飞飞:这里有一个例子。我有一个人类学家朋友曾经跟我分享,现在的美国青少年,会经常嘲笑自己的父母,因为他们的父母在跟智能音箱聊天的时候,总是习惯性说"谢谢"。她很想跟我探讨:AI 会给人类的文化带来什么影响?我们会不会教出一群不懂礼貌的孩子,反正 AI 不需要礼貌。

  这是一个很小的点,甚至很多人不会在意。但是我的那位人类学家朋友提醒我:我们确实还不清楚 AI 会给人类社会带来什么,会不会下一代的孩子都没有礼貌了?

  学术界有责任和使命,去结合经济学、伦理学、法律学,甚至政治学等等,去了解 AI 会对人类产生的文化、伦理的影响。这个非常重要,就业是一个问题,还有 AI 的透明性,公平性,可解释性,安全性等。

  相比机器人会不会杀死人类,我们目前更应该注意到,AI 技术是时候需要开始与其他领域的专业人士深度合作统筹研究了,他们包括但不仅限于社会科学家、人文主义者、律师、艺术家和政策制定者。

  《财经》:提到公平性,有人提出,AI 只会成为一小部分人的工具,而非全人类。

  李飞飞:这个问题很好。这也是为什么我之前一直在强调 AI 的普世性。AI 的普世性,也是人类的灯塔之一。我们需要重视怎么让 AI 的可解释性更好,这些都会促进它往更好的方向发展。如果你把技术做到完全可解释,就很难把它做得不公平。

  《财经》:现在全世界都在加强数据保护,这对 AI 的发展是好是坏?

  李飞飞:AI 是人类的一个工具,工具需要被良性、正面地应用,需要尊重人的需求,人的价值观,现在欧盟出台的 GDPR 也好,其他国家打击数据隐私泛滥也好,都是短痛。短痛之后,是秩序。机器没有独立的价值观,机器的价值观是人类的价值观。只有以人为本的科技才能真正地造福人类。

Posted by eygle at 4:18 PM | Permalink | IT新闻 (45)

September 3, 2018

数据库流行度排行榜

原文链接:http://www.enmotech.com/web/detail/1/578/1.html

更多产品:http://www.enmotech.com/services/software.html

zData 一体机:http://enmotech.com/web/classify/26.html

Bethune(白求恩):https://bethune.enmotech.com/

SQM:http://www.enmotech.com/web/classify/25.html

ZONE:http://www.enmotech.com/web/classify/28.html

排行榜的前十名中,最大的变化是 Elasticsearch 前进一名超过了 Redis,以1.67分的微弱优势改变了排名;此外主要数据库产品前四名都录得下降,这可能和炎炎夏日以及季节性假期有关。

前三名表现最好的是 Oracle 数据库,在上个月狂增34分之后,本月下降2.9分,Oracle 在 8月发布了 Oracle 18c 自治数据库的 OLTP版本,简称 ATP ,也就是说 Oracle Cloud 上自 8月开始提供 OLTP 类型的自治数据库服务,这将进一步推动 Oracle 云数据库的市场推进。

同时,在中国8月初举行的『甲骨文云数据库大会』上,Oracle 宣称将于 8月 正式发布和腾讯云合作的『Oracle中国云数据中心』,然而时至9月1日,市场毫无声息,Oracle的中国云战略『海誓山盟、言之凿凿』的宣称了三四个年头之后,依然不断跳票。在中国的云市场上,Oracle 一直是『犹抱琵琶半遮面』,我们最担忧的是未来可能不再有人关心Oracle的中国云。

1.jpg

虽然 9 月 Oracle 积分小跌,但是较2017年同比,降幅大大缩窄,相信Oracle的版本发布计划将会持续刺激用户市场的活跃性。

排在第二位的 MySQL ,积分下挫 26 分,已经将上个月的涨幅跌去,并且创出了历年新低。

第三位的 SQL Server ,积分下挫 21 分,同样录的历年最低积分。

从下图趋势可以看出,在前三名的表现中,Oracle 似乎稳住了下降趋势,而 MySQL 和 SQL Server 尚未摆脱向下的势头。

2.jpg

紧随前3强的是 PostgreSQL 和 MongoDB ,这两个兄弟长久以来相伴相生,在历史上已经经过了积分的3度交错,作为后起之秀的 MongoDB 可谓后生可畏,今年以来积分上升了 10%,本月更是前五名中唯一获得增长的数据库产品。并且 MongoDB 已经获得了连续11个月的增长。

MongoDB 于2018年6月发布了 4.0 版本,这一版本的发布获得了市场的广泛关注,并且其云数据库战略发展良好,预计其增长势头将会继续维持。

3.jpg

受益于MongoDB 云数据库的成功,在2018年内,其股价已经获得了 146% 的涨幅,年初每股价格仅仅 29.25 ,而现在则是高达 71.96美元,市值接近40亿美元:

4.jpg

MongoDB公司公布2018第一季度收入同比增长49%至4820万美元,订阅收入增长53%至4460万美元,服务收入增长14%至370万美元。市场普遍看好其增长前景。

我们顺便来看一下Oracle近年来的股价,整体看波动不大,近半年有所下跌,但是如何改变后续的走势,是Oracle要靠时间来证明的 Cloud 战略成败。

5.jpg

最后总结一下数据库排行榜9月的表现,那就是:Oracle 老骥伏枥,志在千里,MongoDB 另辟蹊径,逆风飞扬。

末4.png

Posted by eygle at 11:32 AM | Permalink |

解析 vcard规范 二维码名片的格式

引自:https://blog.csdn.net/johnsuna/article/details/8482454

如果你希望生成的二维码名片可以被智能设备识别,并可以直接导入到通讯录中,那么就应遵循某种标准格式。常见的是生成vcard标准格式。一个简单的vcard名片格式例子参考如下:

BEGIN:VCARD
VERSION:3.0
FN:任侠
TEL;CELL;VOICE:15201280000
TEL;WORK;VOICE:010-62100000
TEL;WORK;FAX:010-62100001
EMAIL;PREF;INTERNET:lzw#lzwme
URL:http://lzwme
orG:工作室
ROLE:产品部
TITLE:CTO
ADR;WORK;POSTAL:北京市朝阳区北四环;100101
REV:2012-12-27T08:30:02Z
END:VCARD

如果你想更详细的定制所需要的格式,则需要详细的了解vcard的格式标准。

3.1 vcard格式简介

vCard(或称做Versitcard)最早是由Versit联盟于1995年提出的,当时联盟成员包括苹果公司,AT&T科技(后来的朗讯),IBM及西门子。在1996年十二月,格式的拥有权移至因特网邮件联盟(IMC),此联盟是由一些关注因特网电子邮件的公司所组成。

vCard标准的2.1版被电子邮件客户端广泛支持。3.0版是一个包含在RFC 2425和RFC 2426中的IETF标准跟踪提案。vCard的常用文件扩展名是.vcf。

不同的程序对vCard标准实现亦不同。Mac OS X中的Address Book允许把所有联系人导出到一个vcf文件,而Microsoft Outlook只能每人一个文件。Linux中KDE的Kontact允许每个文件导入或导出一人或多人。

3.2 vcard标准通信薄基本格式

3.2.1 VCard 数据格式的标识符 - VCARD

  预定义的值类型:uri, date, date-time, float
  新增加的值类型:binary, phone-number, utc-offset and vcard value
  预定义的类型:SOURCE, NAME, PROFILE, BEGIN, END.
  新增加的类型:FN, N, NICKNAME, PHOTO, BDAY, ADR, LABEL, TEL, EMAIL,
  MAILER, TZ, GEO, TITLE, ROLE, LOGO, AGENT, orG, CATEGORIES, NOTE,
  PRODID, REV, SORT-STRING, SOUND, URL, UID, VERSION, CLASS, KEY
  预定义的参数:ENCODING, VALUE, CHARSET, LANGUAGE, CONTEXT.
  新增加的参数:TYPE

3.2.2 vCard数据格式行: 类型 [;参数]:值

  ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;433330;中国
  ADR:是一个类型,表示是一条地址信息
  ";"号是分隔符合
  HOME;POSTAL;PARCEL表示参数,表示ADR的用途或者是类别
  :;;街道地址;深圳;广东;433330;中国 表示是一个ADR值,地址值

3.2.3 预定义类型的用法  

3.2.3.1 BEGIN 和 END 类型

  Vcard内容必须以BEGIN:VCARD开头,以END:VCARD结尾vcard的类型标志特征详解

3.2.3.2 标识类型

  FN 类型定义

  目的:vcard对象的名称,一个vcard对象必须包含FN类型。
  例子:FN:Mr. John Q. Public\, Esq.

  N类型定义

  目的:FN表示一个vcard对象的名称,N表示这个对象名称的组成部分
  例子:N:Public;John;Quinlan;Mr.;Esq.
  N:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.
  各个组成部分可以用分号分号,每个组成部分可以用逗号。

  NICKNAME类型定义

  目的:表示别名
  例子:NICKNAME:Robbie
  NICKNAME:Jim,Jimmie

  PHOTO类型定义

  目的:vcard对象的图像信息
  例子:PHOTO;VALUE=uri:图片地址

PHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN
AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
&lt;...remainder of "B" encoded binary data...&gt;

  如果使用内联的二进制数据表示图片信息,那么;ENCODING=b

  BDAY类型定义

  目的:表示出生日期
  例子:BDAY:1996-04-15
  BDAY:1953-10-15T23:10:00Z
  BDAY:1987-09-27T08:30:00-06:00

3.2.3.3 联系方式

  ADR 类型定义

  目的:是一个组合,用来表示一个地址信息,值类型是一个用分号分开的文本值
  例子:ADR;TYPE=dom,home,postal,parcel:;;123 Main Street;Any Town;CA;91921-1234;A
  ADR;HOME;POSTAL;PARCEL:;;街道地址;深圳;广东;444444;中国
  组合由一下部分顺序的组成:

  the post office box;
  the extended address;
  the street address;
  the locality (e.g., city);
  the region (e.g., state or province);
  the postal code;
  the country name

  七个部分组成,如果,其他的一个部分没有,必须用分号分开

  type 参数的说明
  "dom" 国内地址
  "intl" 国际地址
  "parcel"包裹递送地址
  "home" 居住地址;
  "work"工作地址;
  "pref" 有多个地址的时候,优先的地址
  缺省的"TYPE=intl,postal,parcel,work",可以替换

  LABEL类型定义

  目的:是一格式化的文本值,表示一个地址
  例子:LABEL;TYPE=dom,home,postal,parcel:Mr.John Q. Public\, Esq.\n
  Mail Drop: TNE QB\n123 Main Street\nAny Town\, CA 91921-1234
  \nU.S.A.

  type 参数的说明
  "dom" 国内地址
  "intl" 国际地址
  "parcel"包裹递送地址
  "home" 居住地址;
  "work"工作地址;
  "pref" 有多个地址的时候,优先的地址
  缺省的"TYPE=intl,postal,parcel,work",可以替换

  和ADR的不同是 ADR的值是用分号分开的数据,LABEL就是一个格式化的文本。
电话通信地址类型

  TEL类型定义

  目的:指定一个电话号码
  例子:TEL;TYPE=work,voice,pref,msg:+1-213-555-1234
  说明:值是一个规范的全球唯一的电话号码
  TYPE参数的值有:

  "home"表示家庭电话
  "msg" 表示这个号码支持语音
  "work" 工作电话
  "pref" 表示多个电话中最喜欢使用的电话
  "voice" 声音电话号码
  "fax"传真号码
  "cell" 表示手机电话
  "video" 视频电话
  "pager" 调度电话,估计是总机的电话
  "bbs" 公开的广播系统的电话
  "modem" 调制解调器电话
  "car"汽车电话
  "isdn" ISDN连接电话号码
  "pcs" 个人通信服务电话

  缺省是 "voice".
  TYPE参数的用法是TYPE=work;TYPE=voice或者"TYPE=work,voice",缺省值可以被重置
  "TYPE=work,home,voice,fax".

  EMAIL类型定义

  目的:指定一个电子邮件
  例子:EMAIL;TYPE=internet:邮箱地址
  EMAIL;TYPE=x400:邮箱地址
  EMAIL;TYPE=internet,pref:邮箱地址

  TYPE参数的使用

  "internet" 表示一个internet 类型地址
  "x400" 表示是一个 X.400 地址
  "pref"最喜欢使用的邮件电子

  缺省是"internet".

MAILER 类型定义

  目的:指定一个电子邮件发送者
  例子:MAILER:PigeonMail 2.1

3.2.3.4 地理类型

  TZ类型定义

  目的:时区信息
  例子:TZ:-05:00
  TZ;VALUE=text:-05:00; EST; Raleigh/North America
  缺省是一个utc-offset值.

GEO类型定义

  目的:地理位置信息
  例子GEO:37.386013;-122.082932
  CEO 经度;纬度

3.2.3.5 组织类型

  TITLE类型定义

  目的:工作位置,工作职能(job title)
  例子TITLE:Director\, Research and Development

  ROLE 类型定义

  目的:公司的职业(occupation)
  例子ROLE:Programmer

  LOGO类型定义

  目的:公司logo,是一个图像信息
  例子LOGO;VALUE=uri:图片地址

LOGO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm
ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
&lt;...the remainder of "B" encoded binary data...&gt;

  说明:TYPE知道图像的格式,ENCODING=b表示是二进制的数据流
  URI表示是一个外部图像对象

  AGENT类型定义

  目的:指定另外一个人替换他的个人行为
  例子:AGENT;VALUE=uri: CID:JQPUBLIC.part3.960129T083020.邮箱地址
  AGENT:BEGIN:VCARD\nFN:Susan Thomas\nTEL:+1-919-555-
  1234\nEMAIL\;INTERNET:主机地址\nEND:VCARD\n
  说明:缺省是一个Vcard对象,当时也可是一个URI指定的外部Vcard对象

  ORG类型定义

  目的:表示一个组织的名称
  例子ORG:ABC\, Inc.;North American Division;Marketing

3.2.3.6 解释类型

  CATEGORIES类型定义
  目的:vcard应用的分类信息
  例子:CATEGORIES:TRAVEL AGENT
  CATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY

  NOTE 类型定义

  目的:对vcard的注释和说明
  例子:NOTE:This fax number is operational 0800 to 1715
  EST\, Mon-Fri.

  PRODID类型定义

  目的:指定创建Vcard对象的产品的ID
  例子:PRODID:-//ONLINE DIRECTORY//NONSGML Version 1//EN

  REV类型定义

  目的:指定当前Vcard的修改信息
  例子:REV:1995-10-31T22:27:10Z
  REV:1997-11-15

  SORT-STRING类型定义

  目的:指定家庭名称或者其他名称对FN和N类型排序
  例子:

FN:Rene van der Harten
  N:van der Harten;Rene;J.;Sir;R.D.O.N.
  SORT-STRING:Harten
  FN:Robert Pau Shou Chang
  N:Pau;Shou Chang;Robert
  SORT-STRING:Pau
  FN:Osamu Koura
  N:Koura;Osamu
  SORT-STRING:Koura
  FN:Oscar del Pozo
  N:del Pozo Triscon;Oscar
  SORT-STRING:Pozo
  FN:Chistine d'Aboville
  N:d'Aboville;Christine
  SORT-STRING:Aboville

  SOUND类型定义

  目的:指定Vcard的数字声音信息,缺省是指定vcard的name类型的发音信息。
  例子: SOUND;TYPE=BASIC;VALUE=uri:CID:JOHNQPUBLIC.part8.
  19960229T080000.地址
  SOUND;TYPE=BASIC;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcN AQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bm ljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0 &lt;...the remainder of "B" encoded binary data...&gt;

  可以用URI指定一个外部声音二进制流
  可以是内置的声音二进制流,ENCODING=b

  UID类型定义

  目的:指定一个全球唯一的个人或资源标识。
  例子:UID:19950401-080045-40000F192713-0052
  URL类型定义
  目的:指定Vcard 参考的路径。
  例子:URL: 网址

  VERSION类型定义

  目的:指定Vcard使用的vcard规范的版本。
  例子: VERSION:3.0

3.2.3.7 Security 类型

  CLASS类型定义

  目的:指定访问Vcard对象的访问分级。
  例子: CLASS:PUBLIC
  CLASS:PRIVATE
  CLASS:CONFIDENTIAL
  说明:安全分级需要参考目录服务的访问分级

  KEY 类型定义

  目的:指定Vcard的公共钥匙值(加密解密是使用)或者是授权认证。
  例子:

KEY;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQA
  wdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYX
  Rpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0
  ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNj
  E5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYD
  VQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAx
  MPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRz
  Y2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqGSIb3DQ
  EBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2
  dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MB
  EGCWCGSAGG+EIBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau
  +hUMbsQukjANBgkqhkiG9w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIP
  mx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNjZYW8vJDSoi//y
  rZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7
  UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ==

3.2.3.8 扩展类型

可以定义自己的类型,自己定义的类型需要以"x-"开头
比如例子中的信息:

  X-QQ:000000
  X-ICQ:icq
  X-WAB-GENDER:2

本文来源于:『志文工作室 - 计算机基础技术学习博客』详细地址:http://lzw.me/Category/Learning/php-qrcode-vcard.html

Phonebook
registration
function
formats
Property
name
Parameter description
Name N: Designates a text string to be set as the name in the phonebook. (0 or more characters)
When a field is divided by a comma (,), the first half is treated as the last name and the second half is treated as the first name.
Reading SOUND: Designates a text string to be set as the kana name in the phonebook. (0 or more characters)
When a field is divided by a comma (,), the first half is treated as the last name and the second half is treated as the first name.
TEL TEL: Designates a text string to be set as the telephone number in the phonebook. (1 to 24 digits)
TEL-AV TEL-AV: Designates a text string to be set as the videophone number in the phonebook. (1 to 24 digits)
E-mail EMAIL: Designates a text string to be set as the e-mail address in the phonebook. (0 or more characters)
Memo NOTE: Designates a text string to be set as the memo in the phonebook. (0 or more characters)
Birthday BDAY: Designates a text string to be set as the birthday in the phonebook. (8 digits)
The 8 digits consist of the year (4 digits), month (2 digits) and day (2 digits), in order.
Address ADR: Designates a text string to be set as the address in the phonebook. (0 or more characters)
The fields divided by commas (,) denote PO box, room number, house number, city, prefecture, zip code and country, in order.
URL URL: Designates a text string to be set as the homepage URL in the phonebook. (0 or more characters)
Nickname NICKNAME: Designates a text string to be set as the nickname in the phonebook. (0 or more characters)

上面是MECARD的格式,是日本的docomo公司制定的,一般手机应该都能用,详细的说明文档在

还有其他俩种:VCARD 或 MEMORY 格式,Vcard这个比较常见,文档在这!

举俩个例子:
1.

MECARD:URL:http://www.liero.tk;EMAIL:liero@liero.tk;NOTE:I'm an EE Student;NICKNAME:Liero;;

2.

MECARD:N:陈某某;ORG:某某有限公司;TIL:人事经理;TEL:13800138000;URL:weibo.com/siphp;DIV:siphp;EMAIL:xxx@163.com;ADR:中国深圳;NOTE:QQ :123456;;

一般这个是和二维码QR Code

Posted by eygle at 10:19 AM | Permalink | 软件工具 (31)

近期发表

  • Jonathan Lewis:我很为DBA们的未来担心(图灵访谈) - November 26, 2013
  • 吕海波(Vage)- 突然35岁:捡点我的职业生涯 - July 31, 2013
  • 吕海波(Vage)- 漂泊的技术人生 - ITPUB访谈录 - July 31, 2013
  • Oracle群英录 - 2013上海OOW名人录 - July 26, 2013
  • 冯大辉(@Fenng):信息真正的意义(图灵访谈) - July 5, 2013
  • 从网易到快钱 - 关国光 创业创到七十岁 - August 5, 2012
  • Linux虚拟内存管理 - Page Table的作用 - May 24, 2012
  • Hadoop 简介 - 福布斯:你不得不了解的大数据工具 - April 8, 2012
  • Hadoop 简介 - Microsoft大数据战略的核心 - April 8, 2012
  • Hadoop 简介 - 从初出茅庐的小象变身行业巨人 - April 8, 2012


  • CopyRight © 2004 ~ 2012 eygle.com, All rights reserved.