对富文本的一点想法

385次浏览

今天工作的时候需要在cocos2dx3.10里实现一个多颜色文本排版。查阅后发现有一个RichText的控件已经实现了这个功能。但仔细一看,他的实际是对字符串分割后,设置颜色,用多个控件再拼接起来。这虽然说从一定程度上来讲的确实现了多色文本的显示。但从应用上来讲,不方便,很不方便。

比如策划要指定一个句子中某几个关键字改变颜色着重显示,那岂不是要写三句话,多么反人类的做法呀!于是折中一下,要求策划写一个类似html的文本,然后程序解析分割后,再组合成RichText。从某种意义上来说呢,稍微好用了些。但针对程序的多样性需要,仍然有点捉襟见肘。

整个做下来,我就在想word,html的都已经轻松实现的多颜色文本排版,为什么在程序开发层上都这么难呀?对于编程,字符串就是一个奇葩的东西,什么时候可以跳过这个东东呢?

如果谁有高效好用的富文本,请留言,谢谢~

64af63cd83ee47e2b07aacf096b7de54

c/c++多语言字符串格式保证参数顺序

1858次浏览

在c/c++字符串格式化还是很常用的,一般情况下也不会出现什么问题。但是,当开发多国语言的时候就会发现问题了。如:

1
format("%s对%s施放了法术-%s", a, b, c);

假设英文的一种翻译,仅做示例,语法错误勿怪。如下:

1
format("%s has been fired with %s by %s", a, b, c);

这就看出问题了,第一个的结果的是“a对b施放了法术c”,但第二个结果就是“a has been fired with b by c”,汉语就是“c对a施放了法术b,明显牛头不对马嘴。当然也有同学说了,可以在翻译的时候,来保证参数的使用顺序。如:

1
format("%s fired to %s with %s", a, b, c);

那好,英文ok了,那法语,德语,俄语,阿拉伯语呢,都能保持一致吗?显然是不可能的。

那么如何让参数自已找到正确的位置呢?很简单,c/c++里面可在格式化字符串里使用1$, 2$, 3$等表示位置。如下:

汉语:

1
format("%1$s对%2$s施放了法术-%3$s", a, b, c);

英文:

1
format("%2$s has been fired with %3$s by %1$s", a, b, c);

这样的结果就是“b has been fired with c by a”。

Wp-syntax支持的语言

773次浏览

wp-syntax支持以下语言:

abap, actionscript, actionscript3, ada, apache, applescript, apt_sources, asm, asp, autoit, avisynth, bash, bf, bibtex, blitzbasic, bnf, boo, c, c_mac, caddcl, cadlisp, cil, cfdg, cfm, cmake, cobol, cpp-qt, cpp, csharp, css, d, dcs, delphi, diff, div, dos, dot, eiffel, email, erlang, fo, fortran, freebasic, genero, gettext, glsl, gml, bnuplot, groovy, haskell, hq9plus, html4strict, idl, ini, inno, intercal, io, java, java5, javascript, kixtart, klonec, klonecpp, latex, lisp, locobasic, lolcode lotusformulas, lotusscript, lscript, lsl2, lua, m68k, make, matlab, mirc, modula3, mpasm, mxml, mysql, nsis, oberon2, objc, ocaml-brief, ocaml, oobas, oracle11, oracle8, pascal, per, pic16, pixelbender, perl, php-brief, php, plsql, povray, powershell, progress, prolog, properties, providex, python, qbasic, rails, rebol, reg, robots, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, sql, tcl, teraterm, text, thinbasic, tsql, typoscript, vb, vbnet, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xml, xorg_conf, xpp, z80

使用格式:<pre lang=”java” line=”1″> code </pre>

WordPress WPImageEditorImagick 指令注入漏洞

1743次浏览

在/wp-includes/media.php的_wp_image_editor_choose函数内部找到:

1
$implementations = apply_filters( 'wp_image_editors', array( 'WP_Image_Editor_Imagick' , 'WP_Image_Editor_GD' ) );

修改为下面这行:(即调换最后数组的顺序)

1
$implementations = apply_filters( 'wp_image_editors', array( 'WP_Image_Editor_GD' ,'WP_Image_Editor_Imagick' ) );

根据漏洞提示找到的,已经验证,状态结果为:“漏洞文件被修改”。

e

服务器安全要重视呀

183次浏览

前几天刚申请了一个外网服务器,然后每天都有大量的登录尝试。由于git账号密码设置过于简单,结果被暴力破解了。我原想着刚买的一个服务器,应该没有人攻击吧,结果被狠狠的打了一巴掌!!!

登录尝试记录1:b 登录尝试记录2:
c

异常的异地登录记录:d

阿里云ECS+Git(三)

1077次浏览

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

本文就来讲一下使用git来构建远程服务器,及本地git仓库的clone与push,pull。

1、建立远程git服务器

建立远程git服务器到本地的clone/push/pull,一般需要经过下几个步骤。

  • 安装git(可选)
  • 建立远程git用户(可选,建议)
  • 建立远程git目录,并初始化(git init –bare)
  • 修改远程git目录的owner为git用户(可选)
  • 创建远程git用户’~/.ssh/authorized_keys’文件,并修改文件权限
  • 禁用远程shell登录git账号

1> 安装git,命令如下。如果已安装可以跳过,可以输入git测试。

1
apt-get install git

2> 建立远程git用户

远程登录终端,执行以下命令,并输入git用户的密码。

1
2
3
adduser git
#输入git的用户密码
#以次回车,或自定义git用户的内容,最后输入Y。

40

3> 建立远程git目录,并初始化(git init –bare)

选择或创建一个目录做为git目录,然后执行以下命令,一般git远程仓库都会以git结尾。

1
2
cd /home/git
git init --bare work.git

40看到上面的界面就表示git初始化成功了,这仅仅是一个空的仓库,不过没关系。同时通过ls -al命令也看到这个仓库现在是属于root用户的,那么git用户是没有权限修改的。接下来我们就来修改仓库的所属用户。

4> 修改远程git目录的owner为git用户

如果是以git用户登录创建的可以跳过,以root或其它用户创建的话,以root用户远程登录,然后执行一下命令:

1
chown -R git:git work.git

42

5> 创建远程git用户’~/.ssh/authorized_keys’文件,并修改文件权限 

authorized_keys文件是记录仓库可访问者的ssh公钥,需要远程登录git用户添加并修改文件权限,执行以下命令:

1
2
3
4
5
6
7
login git #ssh git@ighoo.com
cd ~
mkdir .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys

48 49

6> 禁用远程shell登录git账号

一般来说我们会设置不允许git用户远程shell登录,只允许git-shell的push和pull,这样可以让服务器相对安全一些(不过最好在authorized_keys文件创建并权限修改成功后设置)。具体方法如下:

方法一:通过编辑/etc/passwd文件完成,找到类似下面的一行:

1
git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

1
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

方法二:通过以下shell命令

1
2
3
4
which git-shell   #查看一下git-shell的位置 /usr/bin/git-shell
echo /usr/bin/git-shell >> /etc/shells  #将git-shell的路径添加到/etc/shells文件中
chsh git #修改git用户的shell
#输入 /usr/bin/git-shell 回车

a

通过测试实际第二种的作用也是修改了/etc/passwd的相应内容,换句话说就是效果是一样的,唯一区别是第一个没有修改/etc/shells文件。

OK,到这里服务器上的就先告一段落了。接下我们说一下client本地仓库的部分。


2、cline远程git仓库,并push/pull

添加一个本地仓库,
相对比较简单了,需要以下几个步骤。

  • 安装git
  • 生成本地ssh公钥‘~/.ssh/id_rsa.pub’
  • 将本地ssh公钥添加到远程git用户的‘~/.ssh/authorized_keys’文件
  • 本地git client的clone/push/pull

1> 安装git

安装git可以参考服务器部分,或根据不同的系统安装相应的版本,这里就不多说了。如果是第一次使用git,需要先配置git的用户名和用户邮箱。如下:

1
2
git config --global user.name "ighoo"
git config --global user.email ighoo@ighoo.com

45

2> 生成本地ssh公钥‘~/.ssh/id_rsa.pub’

如果已经生成过,可以直接使用~/.ssh/id_rsa.pub文件内容。生成命令如下:

1
2
ssh-keygen -t rss -C "ighoo@ighoo.com"
#一路回车即可

44

3> 将本地ssh公钥添加到远程git用户的‘~/.ssh/authorized_keys’文件

使用cat命令显示文件内容,然后远程登录终端将内容copy到git用户的authorized_keys文件。authorized_keys里一行代表一个用户。

1
2
3
4
5
6
7
8
9
10
11
cat ~/.ssh/id_rsa.pub
#远程登录终端,git账号的用户文件夹是在/home/git
cd /home/git/.ssh
vi authorized_keys
#复制id_rsa.pub内容并保存,先复制好id_rsa.pub的文件内容,然后整个vi操作过程如下:
G   #shift+g,移到尾行
o    #新起一行并开始编辑
command+v   #粘贴命令
ESC  #退出编辑
:wq    #保存并退出
回车   #执行

4 > 本地git client的clone/push/pull

在本机上,选择或创建git仓库目录,可以不用.git结尾。执行clone命令:

1
2
3
4
5
6
7
8
9
10
11
cd ~
mkdir work
cd work
git clone git@ighoo.com:work.git .
touch readme.md
git add readme.md
git commit -a -m "add read"
#push,并添加默认push源
git push git@ighoo.com:work.git master -u 
git push
git pull

47


OK,git相关的服务器及client部分都讲完了,到此结束。

 

 

 

阿里云ECS+WordPress(二)

238次浏览

上篇讲到了ECS+AMH架构站点,接下讲WordPress的安装。WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用

1、建立数据库

登录AMH面板,在MySQL导航中,选择快速建库。此数据库是为安装WordPress做准备的。

  • 数据库名称:db_blog
  • 数据库编码:一般用utf8
  • 同时创建用户:可选,一般选是。
  • 用户名:db_blog_user
  • 用户密码:123456
  • 允许链接来源地址:localhost,如果失败换成127.0.0.1;需要允许远程连接输入 %

数据库名、用户名、密码需要记录下来。如果不选同时创建用户,请记录mysql的root用户密码。

点击创建,即可成功。

22

2、下载安装WordPress

登录远程终端,切换到站点的web目录下,输入命令下载WordPress,解zip,并将wordpress目录改名为blog,用于blog二级域名绑定。

1
2
3
4
5
cd /home/wwwroot/ighoo/web
wget https://cn.wordpress.org/wordpress-4.5.2-zh_CN.zip
unzip wordpress-4.5.2-zh_CN.zip
mv wordpress blog
chown -R www:www blog #改变用户,让php可以修改此文件夹

21

然后访问blog.ighoo.com或www.ighoo.com/blog,将出现wordpress的安装界面

23

这里会用到之前建立的数据库等相关信息。

  • 数据库名:db_blog
  • 用户名:db_blog_user
  • 密码:123456
  • 数据库主机:localhost,如果不能使用换127.0.0.1,或记录的内网IP
  • 表前缀:wp_

24

如果成功则跳过,如果失败是因为没有权限写入wp-config.php文件。那我们就手动来创建吧。

25

先复制区域内文本,然后远程登录主机,输入命令:

1
2
3
cd /home/wwwrott/ighoo/web/blog
touch wp-config.php
vi wp-config.php

先确定复制wordpress安装界面的wp-config.php文本,然后在vi编辑器里以次输入

1
2
3
4
5
a    #vi的insert文本命令
command+v   #粘贴命令
ESC  #vi的退出编辑命令
:wq    #vi的保存并退出命令
return #回车

26

键入a,开始编辑文本

28

复制之前框里的文本,键入command+v,粘贴。键入ESC退出编辑,输入:wq回车,保存并退出vi编辑器。

29

保存wp-config.php后,返回到wordpress的安装界面,点击进行安装。此过程也可以先保存wp-config.php文件到本地,然后用ftp上传,或其它文件上传功能。

30

如果没有意外,将看到欢迎界面,然后输入博客个人信息。

  • 站点标题:博客的标题
  • 用户名:登录博客的账号
  • 密码:登录博客的密码
  • 您的电子邮件:个人邮箱

点击安装WordPress,等待结束。。。

31

当看到如图界面表示安装成功。点击登录,在登录界面输入用户名密码。

32 33

登录成功后,点击左上角的 个人博客名字,进入个人博客主页。

34 35


至此WordPress个人博客已经建立成功。可以自定义页面,也可以登录仪表盘发表文章,管理文章等操作了。

 

 

阿里云ECS+AMH(一)

283次浏览
  • 准备:
  1. 阿里云ECS虚拟主机一台(其它虚拟主机也可以,本文以阿里云ECS虚拟主机为例,公网IP以12.23.34.45为例,内网ip为10.0.0.102为例)
  2. 域名一个或多个(本文以 abc.com为例)
  • 步骤: 
  1. 添加域名解析。
  2. 安装/更换系统ubuntu 12.04 纯净版
  3. ssh登录虚拟主机终端
  4. 安装Git
  5. 安装AMH
  6. AMH-添加虚拟主机
  7. 建立远程Git仓库,本地仓库clone及push
  8. 安装WordPress
  9. 完成

1、查看公网及内网IP

打开管理控制台,选取云服务器ECS,在左侧栏选择实例。在IP地址列将公网内网的IP记录下来。本文公网IP以12.23.34.45为例,内网IP为10.0.0.102为例

3

 

2、添加域名解析

域名解析是添加域名与公网IP地址的映射,可以让域名被DNS服务器识别。简单的就是在浏览器里输入相应的网址可以访问到具体的IP地址。

打开阿里云管理控制台,在左侧栏选择云解析。在右侧列表中找到相应的域名,点击解析。

1

 

选择添加解析 ,会有4个框,添加如下三个域名解析。

1
2
3
A  --  <空>或@  -- 默认 -- 12.23.34.45
A  --  www  -- 默认 -- 12.23.34.45
A  --  blog  -- 默认 -- 12.23.34.45

2

如果第一次到这个界面,可能会出现新手引导设置,将与下示图不同,选取高级设置即可。

 

3、安装/更换系统

AMH4.2 编译安装支持的系统
支持目前 CentOS、Ubuntu、Debian 以下版本

  • CentOS 6 x64、CentOS 6 i386、CentOS 5 x64、CentOS 5 i386
  • Ubuntu 12 x64、Ubuntu 12 i386
  • Debian 6 x64 (squeeze)、Debian 6 i386 (squeeze)

本文选用的是Ubuntu 12 x64的系统。

返回管理控制台的实例,在右侧点击更多,先停止实例的运行,然后选择更改系统盘。

4

选取公共镜像Ubuntu 12.04 64位系统,登录名及登录密码需要记录下来,将在远程登录时使用。完成后返回管理控制台实例,等待实例启动运行。

6

 

4、远程连接管理终端

实例启动运行后,点击实例的更多,选择连接管理终端。如图所示:

7

按提示,如果出现黑屏,点击任意键激活。如果是第一次连接终端,将出一个6位的终端密码,该密码仅出现一次。记录该密码,可以在后续操作中修改,不过修改后需要重启实例才起效。

激活终端后,输入终端密码,确定。

8

如果你期待终端连接成功了,那么你就要失望了。因为到这里这个终端还什么都不能做,你需要再次登录。还记得安装系统时让输入的用户名及密码吗?用户名固定为root,密码就是你输入的。OK,继续输入root,密码xxxxxxx 回车,密码输入时不会有任何显示,然后登录成功。

9

10

如果登录失败或不记得密码了,可以在实例->更多->重置密码,重新登录即可。另外你可以用其它ssh远程登录工具登录,本文以mac终端 ssh 命令远程连接。命令为

1
2
#ssh <用户名>@<IP或域名>
ssh root@12.23.34.45 #ssh root@abc.com

然后输入之前的用户root密码就登录成功了。如果你使用阿里云自身的终端系统,本文后续的复制粘贴,请使用其复制命令输入代替。

5、安装AMH4.2

连接终端成功后,执行以下命令

1
wget http://amh.sh/file/AMH/4.2/amh.sh && chmod 775 amh.sh && ./amh.sh 2>&1 | tee ah.log

11

命令执行后选取1 安装,安装过程会提示输入数据库mysql的root密码,及登录AMH的密码。如果提示需要输入IP,是amh没有匹配到本地IP,输入记录的虚拟主机的内网IP即可。

13

如果看到上面的界面就表示安装成功了,访问12.23.34.45:8888或abc.com:8888(<IP或域名:8888>)

14

输入admin <AMH密码>登录AMH面板。如果密码忘了,只能重新安装AMH了。

17

AMH4.2 编译安装支持的系统
支持目前 CentOS、Ubuntu、Debian 以下版本

  • CentOS 6 x64、CentOS 6 i386、CentOS 5 x64、CentOS 5 i386
  • Ubuntu 12 x64、Ubuntu 12 i386
  • Debian 6 x64 (squeeze)、Debian 6 i386 (squeeze)

 

6、添加AMH虚拟主机

登录AMH面板,点击虚拟主机,这里会显示所有的虚拟主机。接下来我们在新建虚拟主机表单中填写信息。

18

  • 主标识域名:网站的目录
  • 绑定域名:这个就是个人注册的域名,如abc.com。可以添加所有要访问该网站的域名,本文填写了个三个,如图。另外如果你有多个域名映射到该IP,可以由此决定哪个域名访问的是哪个站点。如果需要IP访问,也添加到这里。
  • 默认主页:如果需要可以添加,如index.js。
  • Rewrite规则:默认
  • 二级域名绑定子目录:勾选。这样,blog.abc.com,就是访问的是abc/web/blog/目录下的站点了。

19

填写完毕保存,如果域名解析生效了,可以用域名访问。当看到如下图页面,就表示成功了。

20


至此服务器站点已经初步构架完毕,AMH算是一种比较简洁的构架方法,当然也可以用主流的Node.js。我觉得AMH比较好的一点,就是绑定域名的功能,帮助你把不同域名映射到相同IP上的不同站点。