August 5, 2011
C语言中 static 和 const
"\u003cp\u003estatic 的两大作用:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e一、控制存储方式:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003estatic被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。\u003c/p\u003e\n\u003cp\u003e1、引出原因:函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现?\n最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。\u003c/p\u003e\n\u003cp\u003e2、 解决方案:因此c++ 中引入了static,用它来修饰变量,它能够指示编译器将此变量在程序的静态存储区分配空间保存,这样即实现了目的,又使得此变量的存取范围不变。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、控制可见性与连接类型 :\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003estatic还有一个作用,它会把变量的可见范围限制在编译单元中,使它成为一个内部连接,这时,它的反义词为”extern”.\u003c/p\u003e\n\u003cp\u003estatic作用分析总结:static总是使得变量或对象的存储形式变成静态存储,连接方式变成内部连接,对于局部变量(已经是内部连接了),它仅改变其存储方式;对于全局变量( …\u003c/p\u003e"
August 5, 2011
程序基础C语言常量(const)参数
"\u003cp\u003e\u003cstrong\u003e函数 – 常量(const)参数\u003c/strong\u003e 非指针参数(也就是传值参数)不会被修改原始值, const 对它是没有意义的。 const 只用于指针。\u003c/p\u003e\n\u003cp\u003e*\u003cem\u003e1. 第一种用法: const 类型 \u003cem\u003e变量:\u003c/em\u003e\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e 这种用法将限制修改指针指向的值。#include\u003c/p\u003e\n\u003cp\u003eint fun(const int *p) {\u003c/p\u003e\n\u003cp\u003e\u003cem\u003ep += 1; /\u003c/em\u003e 只有去掉 const 这句才可以执行 */\u003c/p\u003e\n\u003cp\u003ereturn *p;\u003c/p\u003e\n\u003cp\u003e}int main(void)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003eint num = 3;\u003c/p\u003e\n\u003cp\u003eprintf(“%dn”, fun(\u0026amp;num));\u003c/p\u003e\n\u003cp\u003egetchar();\u003c/p\u003e\n\u003cp\u003ereturn 0;\u003c/p\u003e\n\u003cp\u003e}\u003c/p\u003e\n\u003cp\u003e不过也有办法绕过这个限制:\u003c/p\u003e\n\u003cp\u003e#include\u003c/p\u003e\n\u003cp\u003eint fun(const int *p) {\u003c/p\u003e\n\u003cp\u003eint \u003cem\u003ep2 = p; /\u003c/em\u003e 来个重名指针会绕过 const 的限制 */\u003c/p\u003e\n\u003cp\u003e*p2 += 1;\u003c/p\u003e\n\u003cp\u003ereturn *p;\u003c/p\u003e\n\u003cp\u003e}int main(void)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cp\u003eint num = 3;\u003c/p\u003e\n\u003cp\u003eprintf(“%dn”, fun(\u0026amp;num)); /* 4 */getchar();\u003c/p\u003e"
August 3, 2011
新浪微博、腾讯微博:mysql数据库主表设计猜想
"\u003cp\u003e用户信息表(t_user_info)\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e字段名称\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e字节数\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e类型\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e描述\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eUser_id\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003euint32\u003c/p\u003e\n\u003cp\u003e用户编号(主键)\u003c/p\u003e\n\u003cp\u003eUser_name\u003c/p\u003e\n\u003cp\u003e20\u003c/p\u003e\n\u003cp\u003eChar[20]\u003c/p\u003e\n\u003cp\u003e名称\u003c/p\u003e\n\u003cp\u003eMsg_count\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003euint32\u003c/p\u003e\n\u003cp\u003e发布消息数量,可以作为t_msg_info水平切分新表的auto_increment\u003c/p\u003e\n\u003cp\u003eFans_count\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003euint32\u003c/p\u003e\n\u003cp\u003e粉丝数量\u003c/p\u003e\n\u003cp\u003eFollow_count\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003eUint32\u003c/p\u003e\n\u003cp\u003e关注对象数量\u003c/p\u003e\n\u003cp\u003e备注:以User_id取模分表\u003c/p\u003e\n\u003cp\u003e用户之间关系表(t_user_relation),必须有关注与被关注的关系\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e字段名称\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e字节数\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e类型\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e描述\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eUser_id\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003euint32\u003c/p\u003e\n\u003cp\u003e用户编号(联合主键)\u003c/p\u003e\n\u003cp\u003eFollow_id\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003euint32\u003c/p\u003e\n\u003cp\u003e被关注者编号(联合主键)\u003c/p\u003e\n\u003cp\u003eType\u003c/p\u003e\n\u003cp\u003e1\u003c/p\u003e\n\u003cp\u003eUint8\u003c/p\u003e\n\u003cp\u003e关系类型(0,粉丝;1,关注)\u003c/p\u003e\n\u003cp\u003e备注:关系是单向的,以User_id取模分表\u003c/p\u003e\n\u003cp\u003e用户消息索引表(t_uer_msg_index)\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e字段名称\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e字节数\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e类型\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e描述\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eUser_id\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003euint32\u003c/p\u003e\n\u003cp\u003e用户编号(联合主键)\u003c/p\u003e\n\u003cp\u003eAuthor_id\u003c/p\u003e\n\u003cp\u003e4\u003c/p\u003e\n\u003cp\u003euint32\u003c/p\u003e\n\u003cp\u003e消息发布者编号(可能是被关注者,也可能是自己)(联合主键) …\u003c/p\u003e"
August 2, 2011
nagios访问apache权限问题解决
"\u003cp\u003eIt appears as though you do not have permission to view information for any of the services you requested…\u003c/p\u003e\n\u003cp\u003e打开cgi.cfg配置文件,里面有个参数:\u003c/p\u003e\n\u003cp\u003euse_authentication=1\u003c/p\u003e\n\u003cp\u003e为了保障系统的安全性,nagios设置了这个参数,默认为1,改为0即可\u003c/p\u003e\n\u003cp\u003e1.装了几次,换了几个版本的系统,脑袋都大了,终于解决了\u003c/p\u003e\n\u003cp\u003enrpe在 ./configure时提示\u003c/p\u003e\n\u003cp\u003echecking for SSL… configure: error: Cannot find ssl libraries\u003c/p\u003e\n\u003cp\u003e把openssl-devel装上就可以了\u003c/p\u003e\n\u003cp\u003e2.nagios web界面提示\u003c/p\u003e\n\u003cp\u003eIt appears as though you do not have permission to view information for any of the services you requested…\u003c/p\u003e\n\u003cp\u003e打开cgi.cfg配置文件,里面有个参数:\u003c/p\u003e\n\u003cp\u003euse_authentication=1\u003c/p\u003e\n\u003cp\u003e为了保障系统的安全 …\u003c/p\u003e"
August 1, 2011
理解Linux系统负荷
"\u003cp\u003e\u003cstrong\u003e一、查看系统负荷\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了。\u003c/p\u003e\n\u003cp\u003e在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行)。(另外,它们在苹果公司的Mac电脑上也适用。)\u003c/p\u003e\n\u003cp\u003e你在终端窗口键入uptime,系统会返回一行信息。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2011/08/3c61c58dd6bbd277cc8c71cabb97e277.png\" alt=\"bg2011073001\"\u003e\u003c/p\u003e\n\u003cp\u003e这行信息的后半部分,显示”load average”,它的意思是”系统的平均负荷”,里面有三个数字,我们可以从中判断系统负荷是大还是小。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2011/08/b639ca5e9954b512d726cb480644fbdc.png\" alt=\"bg2011073003\"\u003e\u003c/p\u003e\n\u003cp\u003e为什么会有三个数字呢?你从手册中查到,它们的意思分别是1分钟、5分钟、15分钟内系统的平均负荷。\u003c/p\u003e\n\u003cp\u003e如果你继续看手册,它还会告诉你,当CPU完全空闲的时候,平均负荷为0;当CPU工作量饱和的时候,平均负荷为1。\u003c/p\u003e\n\u003cp\u003e那么很显然,”load average”的值越低,比如等于0.2或0.3,就说明电脑的工作量越小,系统负荷比较轻。\u003c/p\u003e\n\u003cp\u003e但是,什么时候能看出系统负荷比较重呢?等于1的时候,还是等于0.5或等于1.5的时候?如果1分钟、5分钟、15分钟三个值不一样,怎么办?\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、一个类比\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e判断系统负荷是否过重,必须理解load average的真正含义。下面,我根据” \u003ca href=\"http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\"\u003eUnderstanding Linux …\u003c/a\u003e\u003c/p\u003e"
July 31, 2011
Apache下实现隐藏服务器名称
"\u003cp\u003e我这里用的是FreeBSD的操作系统的.用curl 命令查看文件头\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2011/07/apache_hidden_os_name_0.jpg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2011/07/apache_hidden_os_name_0.jpg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e为了安全起见,我们需要将FreeBSD字样及其它信息隐藏起来.操作如下:\u003c/p\u003e\n\u003cp\u003e在httpd.conf文件里添加以下两行\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eServerTokens Prod\nServerSignature Off\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e重启apache即可.\u003c/p\u003e\n\u003cp\u003e如图所示:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2011/07/apache_hidden_os_name.jpg\"\u003e\u003cimg src=\"http://blog.haohtml.com/wp-content/uploads/2011/07/apache_hidden_os_name.jpg\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e"
July 29, 2011
性能测试工具sysbench简介
"\u003cp\u003e\u003ca href=\"http://sysbench.sourceforge.net/\"\u003esysbench\u003c/a\u003e是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试。具体的一些参数设置,需要根据不同的测试要求来进行调整。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e下载\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e**\n编译安装**\n默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e./configure --prefix=/u01/sysbench \\\n--with-mysql-includes=/opt/mysql/include/mysql \\\n--with-mysql-libs=/opt/mysql/lib/mysql\n\nmake \u0026amp;\u0026amp; make install\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003e参数\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eNinGoo:/u01/sysbench/bin\u0026gt;$sysbench\nMissing required command argument.\nUsage:\n sysbench …\u003c/code\u003e\u003c/pre\u003e"
July 28, 2011
mongodb中实现自定义自增ID
"\u003cp\u003ePHP代码:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003efunction get_autoincre_id($name, $db){\n\t$update = array(\u0026#39;$inc\u0026#39;=\u0026gt;array(\u0026#34;id\u0026#34;=\u0026gt;1));\n\t$query = array(\u0026#39;table_name\u0026#39; =\u0026gt; $name);\n\t$command = array(\n\t\t\u0026#39;findandmodify\u0026#39;=\u0026gt;\u0026#39;autoincre_system\u0026#39;, \u0026#39;update\u0026#39;=\u0026gt;$update,\n\t\t\u0026#39;query\u0026#39;=\u0026gt;$query, \u0026#39;new\u0026#39;=\u0026gt;true, \u0026#39;upsert\u0026#39;=\u0026gt;true\n\t);\n\t$id = $db-\u0026gt;command($command);\n\treturn $id[\u0026#39;value\u0026#39;][\u0026#39;id\u0026#39;];\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e其中上面的table_name可以用来区别多个表,这样可以灵活实现单独的几个表的自增ID值.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e$conn = new Mongo(); …\u003c/p\u003e\u003c/blockquote\u003e"
July 27, 2011
修改window下dos窗口的编码为utf8
"\u003cp\u003e在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容。在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集。\u003c/p\u003e\n\u003cp\u003e如果想正确显示UTF-8字符,可以按照以下步骤操作:\u003c/p\u003e\n\u003cp\u003e1、打开CMD.exe命令行窗口\u003c/p\u003e\n\u003cp\u003e2、通过 chcp命令改变代码页,UTF-8的代码页为65001\u003c/p\u003e\n\u003cp\u003echcp 65001\u003c/p\u003e\n\u003cp\u003e执行该操作后,代码页就被变成UTF-8了。但是,在窗口中仍旧不能正确显示UTF-8字符。\u003c/p\u003e\n\u003cp\u003e3、修改窗口属性,改变字体\u003c/p\u003e\n\u003cp\u003e在命令行标题栏上点击右键,选择”属性”-\u0026gt;”字体”,将字体修改为True Type字体”Lucida Console“,然后点击确定将属性应用到当前窗口。\u003c/p\u003e\n\u003cp\u003e这时使用type命令就可以显示UTF-8文本文件的内容了:\u003c/p\u003e\n\u003cp\u003etype filename.txt\u003c/p\u003e\n\u003cp\u003e4、通过以上操作并不能完全解决问题,因为显示出来的内容有可能不完全。可以先最小化,然后最大化命令行窗口,文件的内容就完整的显示出来了。\u003c/p\u003e"
July 27, 2011
MongoDB的ObjectId
"\u003cp\u003e前段时间有个朋友问我,分布式主键生成策略在我们这边是怎么实现的,当时我给的答案是sequence,当然这在不高并发的情况下是没有任何问题,实际上,我们的主键生成是可控的,但如果是在分布式高并发的情况下,那肯定是有问题的。\u003c/p\u003e\n\u003cp\u003e突然想起mongodb的objectid,记得以前看过文档,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库。\u003c/p\u003e\n\u003cp\u003e下面深入一点来翻翻这个Objectid的底细,在mongodb集合中的每个document中都必须有一个”_id”建,这个键的值可以是任何类型的,在默认的情况下是个Objectid对象。\u003c/p\u003e\n\u003cp\u003e当我们让一个collection中插入一条不带_id的记录,系统会自动地生成一个_id的key\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e db.t_test.insert({“name”:”cyz”})\u003c/p\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e db.t_test.findOne({“name”:”cyz”})\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e{ “_id” : …\u003c/p\u003e\u003c/blockquote\u003e\u003c/blockquote\u003e"
July 27, 2011
服务器出现-由注册表引起的I/O操作发生了不可恢复的错误 的解决方法
"\u003cp\u003e昨天一台服务器的80端口突然不行了,3389虽然通,但连接不上,其它的3306和21端口都正常的.初步怀疑是系统资源不足引起的.第二天让机房检查,最后没有办法重启解决了.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e服务器出现此问题:\n很多使用Windows Server 2003系统的用户都会收到如下错误:\n事件类型: 错误\n事件来源: Application Popup\n事件种类: 无\n事件 ID: 333\n日期: 2007-8-11\n事件: 8:48:03\n用户: N/A\n计算机: LZ_YQ\n描述:\n由注册表引起的 I/O 操作发生了不可恢复的错误。 注册表将不能读取、写出或刷新包含注册表系统图像的其中一个文件。\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e然后系统失去响应,需要重新启动。\u003c/p\u003e\n\u003cp\u003e事件ID是333,英文日志为:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eEvent Type: Error\nEvent Source: Application Popup\nEvent Category: None\nEvent ID: 333\nDate: date\nTime: time\nUser: N/A\nComputer: computer name\nDescription: An I/O operation …\u003c/p\u003e\u003c/blockquote\u003e"
July 26, 2011
利用taskset有效控制cpu资源
"\u003cp\u003e常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源;\u003c/p\u003e\n\u003cp\u003e这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源;\u003c/p\u003e\n\u003cp\u003e查看系统下cpu信息:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#cat /proc/cpuinfo\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003etaskset就可以帮我们完成这项工作,而且操作非常简单;\u003c/p\u003e\n\u003cp\u003e该工具系统默认安装,rpm包名util-linux\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e#taskset --help\ntaskset (util-linux 2.13-pre7)\nusage: taskset [options] [mask | cpu-list] [pid | cmd [args...]]\nset or get the affinity of a process\n\n-p, --pid operate on existing given pid\n-c, --cpu-list …\u003c/code\u003e\u003c/pre\u003e"
July 25, 2011
iptables 开放80端口
"\u003cp\u003eiptables -F //清空规则\u003c/p\u003e\n\u003cp\u003eiptables -A INPUT -p tcp –dport 22 -j ACCEPT /*允许包从22端口进入*/\niptables -A OUTPUT -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT /*允许从22端口进入的包返回*/\niptables -A OUTPUT -p udp –dport 53 -j ACCEPT\niptables -A INPUT -p udp –sport 53 -j ACCEPT\niptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /*允许本机访问本机*/\niptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT\niptables -A INPUT -p tcp -s 0/0 –dport 80 -j ACCEPT /*允许所有IP访问80端口*/\niptables -A OUTPUT -p tcp –sport 80 -m state …\u003c/p\u003e"
July 24, 2011
linux下网站排障分析常用的命令
"\u003cp\u003e\u003cstrong\u003e系统连接状态篇:\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e1.查看TCP连接状态\nnetstat -nat |awk \u0026#39;{print $6}\u0026#39;|sort|uniq -c|sort -rn\nnetstat -n | awk \u0026#39;/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}\u0026#39; 或\nnetstat -n | awk \u0026#39;/^tcp/ {++state[$NF]}; END {for(key in state) print key,\u0026#34;t\u0026#34;,state[key]}\u0026#39;\nnetstat -n | awk \u0026#39;/^tcp/ {++arr[$NF]};END {for(k in arr) print k,\u0026#34;t\u0026#34;,arr[k]}\u0026#39;\nnetstat -n |awk \u0026#39;/^tcp/ {print $NF}\u0026#39;|sort|uniq -c|sort -rn\nnetstat -ant | awk \u0026#39;{print $NF}\u0026#39; | grep -v \u0026#39;[a-z]\u0026#39; | …\u003c/code\u003e\u003c/pre\u003e"