Jump to content
IPS Community Suite 简体中文

ipscn

Administrators
  • Content count

    1,306
  • Joined

  • Last visited

  • Days Won

    3

Everything posted by ipscn

  1. ipscn

    IPS 用户登录 WordPress

    IPB4/IPS 用户登录 WordPress 1. 处理 IPS 这样就可以从远程通过 API 获取到 IPS 数据库中的用户加密后的密码了。 再添加一个方法,用于处理从API 发出的请求,响应对比所提供的用户名/Email与其密码是否匹配: 2. 写 PHP 库并测试 返回示例 array (size=3) 'status' => string 'SUCCESS' (length=7) 'pass_valid' => string '1' (length=1) 'user' => array (size=5) 'id' => string '2' (length=1) 'user_email' => string 'ips2@ips2.cc' (length=12) 'user_login' => string 'ips2' (length=4) 'pwd' => string 'ips2ips2' (length=8) 'group_id' => string '3' (length=1) 使用自己写 PHP 库进行测试之后, 再次回到 IPS ,对它进行处理 3. WordPress 插件 4. 不修改 IPS 核心的方法 使用 IPS 开放工具创建一个 Application, 自定义 API 端点,用于用户鉴权或者文章同步。 鉴权API端点规范 /ipswp/hello /ipswp/auth /ipswp/userSync /ipswp/lastestTopicsByForumIDs 以上4个分别用于测试,用户鉴权(From IPS的关系),用户同步(To IPS的关系)获取特定论坛版块ID内的最新帖子,获取帖子的数量为可选参数,默认为5.
  2. 1. 启用外部数据库 在系统->登陆处理 页面上,启用外部数据库这个登录选项: 2. 设置外部数据库 编辑外部数据库,输入与该 IPS 实例目录相邻的 WordPress 实例的数据库信息: 密码加密类型这一项,其实无用。 3. 修改 IPS 的文件 由于 WordPress 的用户密码加密类型(WordPress 采用的时 phpAss 这个加密“算法”,因为这种算法已经在多种语言中实现了)不在上面的选择列表中,所以我们需要按照提示: 以修改 IPS 文件的方式来让 WordPress 用户可以登录这个 IPS 实例。 修改方案如下: 修改`/system/Login/External.php`中的: 为 在这个类中添加两个方法: 经过测试, WordPress 的用户已经可以在这个 IPS 实例上进行登录以及登录后的各种操作了。 条件限制: WordPress 和 IPS 安装在同一个服务器的相邻子目录中。 更好的实现 在 WordPress 中添加自定义的鉴权 REST API, 在 IPS 中做个用户登录处理应用,调用那个 REST API,进行鉴权。 更更好的实现 SSO: 通过 REST API,让 IPS 和 WordPress 的用户保持一致,缺点是要使用两个重复很大的用户数据表,优点是用户体验比较好。
  3. ipscn

    WordPress IPS

    是一个 WordPress 插件,用于和 IPS/ IPB 论坛程序互联互通。 需要使用和这个插件同时提供的 IPS 应用 IPS WP Connector , 才能实现下面的特性。 特性 通过 自定义 IPS API 获取指定版块下的若干最新个帖子,支持在 WordPress 实例中,通过 短代码调用和通过小工具调用; [sso]通过自定义 IPS API 和 IPS 实时同步用户; [pages]通过 自定义 IPS API 获取指定IDs的页面内容; [commerce]通过 自定义 IPS API 获取指定商品IDs的商品内容; [commerce]通过 自定义 IPS API 获取指定订单IDs的订单内容; [commerce]在 WordPress 中, 通过 自定义 IPS API 获取指定的商品密钥是否有效; 截图 截图仅展示插件本体和 sso 扩展: 下载
  4. ipscn

    IPS Community Suite 的优化

    IPS Community Suite 使用了Google 的诸多服务,可惜,我们用不了,它们又拖慢网速,那么,就需要处理掉。 后台快多了!
  5. ipscn

    IPS 简体中文字体优化

    本文记录如何更改 IPB / IPS 的前后台字体。 常规字体 到后台->自定义->主题,点击当前主题行的编辑: 这样处理后,点击保存按钮, IPS Community Suite 就可以以舒服些的字体显示汉字了: 前台其它地方的字体,更改为 代码字体的更改 这些代码字体 全部改为 效果展示 下载字体 Yahei Consolas Hybrid 字体下载 https://github.com/yakumioto/YaHei-Consolas-Hybrid-1.12 Hack 字体预览 https://www.dafont.com/hack.font Hack 字体下载 链接: https://pan.baidu.com/s/1hstP89m 密码: 6f4b 或者 https://github.com/powerline/fonts/tree/master/Hack
  6. 因为准备把原来用 CRUCIAL CT256MX100 换为富士通的 SLC SSD,先拿一块 Toshiba / 东芝 Q200 EX (240G) 做下系统迁移实验。 相关软件下载 NTI Echo 是东芝 SSD 附赠的软件 http://www.toshiba-personalstorage.net/en/support/download/ssd/ot_q200ex/cn-s.htm 下载链接 http://www.nticorp.com/url/e3texe http://ftp4.nticorp.com/update/NTI_Echo_3.0.3.79_Full_Version_for_Toshiba.exe 序列号 这个软件要装在USB 接口的硬盘盒里,这个软件才识别,所以我没有用它,用了傲梅分区助手。 虽然网上对这个软件的系统迁移功能褒贬不一,我还是决定试一下。 先来检测下旧有的 SSD: CRUCIAL CT256MX100 检测原有的 SSD 很诡异,C盘明明是我的 256GB 的 英睿达 SSD,可是却识别为我的第二块机械硬盘,但是数据又明显是那块英睿达 SSD 的: 检测数据表明有坏块了。 之所以迁移操作系统盘到新的硬盘,就是因为这个 SSD 上的操作系统,已经给我蓝屏了好几回了,实在受不了,就买了个东芝 SSD 作为工作盘,买了2块富士通 SLC SSD 作为系统盘,可是东芝的 SSD 先到货了,那就在它上面先做个实验吧。 换另外一个检测软件试试 C 盘(还是原有的 CRUCIAL CT256MX100 ) 检测下新的 东芝 Q200 EX (240G) 复制分区 傲梅分区助手专业版可轻松完成这个任务,网上相关教程或者资料也有许多,我这里关键说一点: PreOS 屏幕上 status 的含义。 我发现它是个百分比的数字部分,含义不明,可能是检测原有分区的数据吧: 等 status 到100 后,开始进行数据复制,复制完成后,会提示重启 重启,检查下,然后关机,卸掉原有的硬盘,再次开机,就从新硬盘启动了:
  7. 本站免费提供 IPS Community Suite core 简体中文 语言包。 下载 导入 后台->自定义->本地化->语言 将默认的 English(USA)语言包 copy 一份: copy 之后,点击新的语言包右侧的铅笔符号,进行编辑: 重命名为 “Chinese” 或者 “中文”,Locale Code 一栏必须输入 cn ,然后把它作为默认的语种: 导入下载到的语言包: 即可见到效果:
  8. 如果面试官问你:描述下Unicode与UTF-8之间的关系,你可能会嗤之以鼻,觉得简单,但是呢,你描述一番之后,可能与面试官的理解还是有区别的。下面我来抛砖引玉地介绍下字符编码常识吧。 基本常识 1.位和字节 说起编码,我们必须从最基础的说起,位和字节(别觉得这个过于简单不值一说,我还真见过很多个不能区分这两者的程序员)。位(bit)是指计算机里存放的二进制值(0/1),而8个位组合成的“位串”称为一个字节,容易算出,8个位的组合有256( 28 )个组合方式,其取值范围是“00000000-11111111”,常用十六进制来表示。比如“01000001”就是一个字节,其对应的十六进制值为“0x41”。 而我们通常所讲的字符编码,就是指定义一套规则,将真实世界里的字母/字符与计算机的二进制序列进行相互转化。如我们可以针对上面的字节定义如下的转换规则: 01000001(0x41)<-> 65 <-> 'A' 即用字位序“01000001”来表示字母’A’。 2.拉丁字符 拉丁字符是当今世界使用最广泛的符号了。通常我们说的拉丁字母,指的的是基础拉丁字母,即指常见的”ABCD“等26个英文字母,这些字母与英语中一些常见的符号(如数字,标点符号)称为基础拉丁字符,这些基础拉丁字符在使用英语的国家广为流行,当然在中国,也被用来当作汉语拼音使用。在欧洲其它一些非英语国家,为满足其语言需要,在基础拉丁字符的基础上,加上一些连字符,变音字符(如’Á’),形成了派生拉丁字母,其表示的字符范围在各种语言有所不同,而完整意义上的拉丁字符是指这些变体字符与基础拉丁字符的全集。是比基础拉丁字符集大很多的一个集合。 编码标准 前文提到,字符编码是一套规则。既然是规则,就必须有标准。下面我就仔细说说常见的字符编码标准。 1.拉丁编码 ASCII的全称是American Standard Code for Information Interchange(美国信息交换标准代码)。顾名思义,这是现代计算机的发明国美国人设计的标准,而美国是一个英语国家,他们设定的ASCII编码也只支持基础拉丁字符。ASCII的设计也很简单,用一个字节(8个位)来表示一个字符,并保证最高位的取值永远为’0’。即表示字符含义的位数为7位,不难算出其可表达字符数为27 =128个。这128个字符包括95个可打印的字符(涵盖了26个英文字母的大小写以及英文标点符号能)与33个控制字符(不可打印字符)。例如下表,就是几个简单的规则对应: 字符类型 字符 二进制 16进制 10进制 可打印字符 A 01000001 0x41 65 可打印字符 a 01100001 0x61 97 控制字符 \r 00001101 0x0D 13 控制字符 \n 00001010 0xA 10 前面说到了,ASCII是美国人设计的,只能支持基础拉丁字符,而当计算机发展到欧洲,欧洲其它不只是用的基础拉丁字符的国家(即用更大的派生拉丁字符集)该怎么办呢? 当然,最简单的办法就是将美国人没有用到的第8位也用上就好了,这样能表达的字符个数就达到了28 =256个,相比较原来,增长了一倍, 这个编码规则也常被称为EASCII。EASCII基本解决了整个西欧的字符编码问题。但是对于欧洲其它地方如北欧,东欧地区,256个字符还是不够用,如是出现了ISO 8859,为解决256个字符不够用的问题,ISO 8859采取的不再是单个独立的编码规则,而是由一系列的字符集(共15个)所组成,分别称为ISO 8859-n(n=1,2,3…11,13…16,没有12)。其每个字符集对应不同的语言,如ISO 8859-1对应西欧语言,ISO 8859-2对应中欧语言等。其中大家所熟悉的Latin-1就是ISO 8859-1的别名,它表示整个西欧的字符集范围。 需要注意的一点的是,ISO 8859-n与ASCII是兼容的,即其0000000(0x00)-01111111(0x7f)范围段与ASCII保持一致,而10000000(0x80)-11111111(0xFF)范围段被扩展用到不同的字符集。 2.中文编码 以上我们接触到的拉丁编码,都是单字节编码,即用一个字节来对应一个字符。但这一规则对于其它字符集更大的语言来说,并不适应,比如中文,而是出现了用多个字节表示一个字符的编码规则。常见的中文GB2312(国家简体中文字符集)就是用两个字节来表示一个汉字(注意是表示一个汉字,对于拉丁字母,GB2312还是是用一个字节来表示以兼容ASCII)。我们用下表来说明各中文编码之间的规则和兼容性。 对于中文编码,其规则实现上是很简单的,一般都是简单的字符查表即可,重要的是要注意其相互之间的兼容性问题。如如果选择BIG5字符集编码,就不能很好的兼容GB2312,当做繁转简时有可能导致个别字的冲突与不一致,但是GBK与GB2312之间就不存在这样的问题。 3.Unicode 以上可以看到,针对不同的语言采用不同的编码,有可能导致冲突与不兼容性,如果我们打开一份字节序文件,如果不知道其编码规则,就无法正确解析其语义,这也是产生乱码的根本原因。有没有一种规则是全世界字符统一的呢?当然有,Unicode就是一种。为了能独立表示世界上所有的字符,Unicode采用4个字节表示一个字符,这样理论上Unicode能表示的字符数就达到了231 = 2147483648 = 21 亿左右个字符,完全可以涵盖世界上一切语言所用的符号。我们以汉字”微信“两字举例说明: 微 => \u5fae => 00000000 00000000 01011111 10101110 信 => \u4fe1 => 00000000 00000000 01001111 11100001 容易从上面的例子里看出,Unicode对所有的字符编码均需要四个字节,而这对于拉丁字母或汉字来说是浪费的,其前面三个或两个字节均是0,这对信息存储来说是极大的浪费。另外一个问题就是,如何区分Unicode与其它编码这也是一个问题,比如计算机怎么知道四个字节表示一个Unicode中的字符,还是分别表示四个ASCII的字符呢? 以上两个问题,困扰着Unicode,让Unicode的推广上一直面临着困难。直至UTF-8作为Unicode的一种实现后,部分问题得到解决,才得以完成推广使用。说到此,我们可以回答文章一开始提出的问题了,UTF-8是Unicode的一种实现方式,而Unicode是一个统一标准规范,Unicode的实现方式除了UTF-8还有其它的,比如UTF-16等。 话说当初大牛Ben Thomson吃饭时,在一张餐巾纸上,设计出了UTF-8,然后回到房间,实现了第一版的UTF-8。关于UTF-8的基本规则,其实简单来说就两条(来自阮一峰老师的总结): 规则1:对于单字节字符,字节的第一位为0,后7位为这个符号的Unicode码,所以对于拉丁字母,UTF-8与ASCII码是一致的。 规则2:对于n字节(n>1)的字符,第一个字节前n位都设为1,第n+1位为0,后面字节的前两位一律设为10,剩下没有提及的位,全部为这个符号的Unicode编码。 通过,根据以上规则,可以建立一个Unicode取值范围与UTF-8字节序表示的对应关系,如下表, 举例来说,’微’的Unicode是’\u5fae’,二进制表示是”00000000 00000000 01011111 10101110“,其取值就位于’0000 0800-0000 FFFF’之间,所以其UTF-8编码为’11100101 10111110 10101110’ (加粗部分为固定编码内容)。 通过以上简单规则,UTF-8采取变字节的方式,解决了我们前文提到的关于Unicode的两大问题。同时,作为中文使用者需要注意的一点是Unicode(UTF-8)与GBK,GB2312这些汉字编码规则是完全不兼容的,也就是说这两者之间不能通过任何算法来进行转换,如需转换,一般通过GBK查表的方式来进行。 常见问题及解答 1.windows Notepad中的编码ANSI保存选项,代表什么含义? ANSI是windows的默认的编码方式,对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。所以,如果将一个UTF-8编码的文件,另存为ANSI的方式,对于中文部分会产生乱码。 2.什么是UTF-8的BOM? BOM的全称是Byte Order Mark,BOM是微软给UTF-8编码加上的,用于标识文件使用的是UTF-8编码,即在UTF-8编码的文件起始位置,加入三个字节“EE BB BF”。这是微软特有的,标准并不推荐包含BOM的方式。采用加BOM的UTF-8编码文件,对于一些只支持标准UTF-8编码的环境,可能导致问题。比如,在Go语言编程中,对于包含BOM的代码文件,会导致编译出错。 3.为什么数据库Latin1字符集(单字节)可以存储中文呢? 其实不管需要使用几个字节来表示一个字符,但最小的存储单位都是字节,所以,只要能保证传输和存储的字节顺序不会乱即可。作为数据库,只是作为存储的使用的话,只要能保证存储的顺序与写入的顺序一致,然后再按相同的字节顺序读出即可,翻译成语义字符的任务交给应用程序。比如’微’的UTF-8编码是’0xE5 0xBE 0xAE’,那数据库也存储’0xE5 0xBE 0xAE’三个字节,其它应用按顺序从数据库读取,再按UTF-8编码进行展现。这当然是一个看似完美的方案,但是只要写入,存储,读取过程中岔出任何别的编码,都可能导致乱码。 4.Mysql数据库中多个字符集变量(其它数据库其实也类似),它们之间分别是什么关系? 我们分别解释: character_set_client:客户端来源的数据使用的字符集,用于客户端显式告诉客户端所发送的语句中的的字符编码。 character_set_connection:连接层的字符编码,mysql一般用character_set_connection将客户端的字符转换为连接层表示的字符。 character_set_results:查询结果从数据库读出后,将转换为character_set_results返回给前端。 而我们常见的解决乱码问题的操作: mysql_query('SET NAMES GBK') 其相当于将以上三个字符集统一全部设置为GBK,这三者一致时,一般就解决了乱码问题。 character_set_database:当前选中数据库的默认字符集,如当create table时没有指定字符集,将默认选择该字符集。 character_set_database已经character_set_system,一般用于数据库系统内部的一些字符编码,处理数据乱码问题时,我们基本可以忽略。 5.什么情况下,表示信息丢失? 对于mysql数据库,我们可以通过hex(colname)函数(其它数据库也有类似的函数,一些文本文件编辑器也具有这个功能),查看实际存储的字节内容,如: 通过查看存储的字节序,我们可以从根本上了解存储的内容是什么编码了。而当发现存储的内容全部是’3F’时,就表明存储的内容由于编码问题,信息已经丢失了,无法再找回。 之所以出现这种信息丢失的情况,一般是将不能相互转换的字符集之间做了转换,比如我们在前文说到,UTF-8只能一个个字节地变成Latin-1,但是根本不能转换的,因为两者之间没有转换规则,Unicode的字符对应范围也根本不在Latin-1范围内,所以只能用’?(0x3F)’代替了。 总结: 本文从基础知识与实际中碰到的问题上,解析了字符编码相关内容。而之所以要从头介绍字符编码的基础知识,是为了更好的从原理上了解与解决日常碰到的编码问题,只有从根本上了解了不同字符集的规则及其之间的关系与兼容性,才能更好的解决碰到的乱码问题,也能避免由于程序中不正确的编码转换导致的信息丢失问题。 其它 Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案。 UTF-8 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码(定长码),也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部份修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码。 UTF-8使用一至四个字节为每个字符编码: 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。 带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码(Unicode范围由U+0080至U+07FF)。 其他基本多文种平面(BMP)中的字符(这包含了大部分常用字)使用三个字节编码。 其他极少使用的Unicode辅助平面的字符使用四字节编码。 在处理经常会用到的ASCII字符方面非常有效。在处理扩展的拉丁字符集方面也不比UTF-16差。对于中文字符来说,比UTF-32要好。同时,(在这一条上你得相信我,因为我不打算给你展示它的数学原理。)由位操作的天性使然,使用UTF-8不再存在字节顺序的问题了。一份以utf-8编码的文档在不同的计算机之间是一样的比特流。 总体来说,在Unicode字符串中不可能由码点数量决定显示它所需要的长度,或者显示字符串之后在文本缓冲区中光标应该放置的位置;组合字符、变宽字体、不可打印字符和从右至左的文字都是其归因。所以尽管在UTF-8字符串中字符数量与码点数量的关系比UTF-32更为复杂,在实际中很少会遇到有不同的情形。 UTF-8应该是目前应用最广泛的一种Unicode编码方案。 必要的术语解释 字符集(Character Set),字面上的理解就是字符的集合,例如ASCII字符集,定义了128个字符;GB2312定义了7445个字符。而计算机系统中提到的字符集准确来说,指的是已编号的字符的有序集合(不一定是连续)。 字符码(Code Point)指的就是字符集中每个字符的数字编号。例如ASCII字符集用0-127这连续的128个数字分别表示128个字符;GBK字符集使用区位码的方式为每个字符编号,首先定义一个94X94的矩阵,行称为“区”,列称为“位”,然后将所有国标汉字放入矩阵当中,这样每个汉字就可以用唯一的“区位”码来标识了。例如“中”字被放到54区第48位,因此字符码就是5448。而Unicode中将字符集按照一定的类别划分到0~16这17个层面(Planes)中,每个层面中拥有216=65536个字符码,因此Unicode总共拥有的字符码,也即是Unicode的字符空间总共有17*65536=1114112。 编码的过程是将字符转换成字节流。 解码的过程是将字节流解析为字符。 字符编码(Character Encoding)是将字符集中的字符码映射为字节流的一种具体实现方案。例如ASCII字符编码规定使用单字节中低位的7个比特去编码所有的字符。例如‘A’的编号是65,用单字节表示就是0x41,因此写入存储设备的时候就是b’01000001’。GBK编码则是将区位码(GBK的字符码)中的区码和位码的分别加上0xA0(160)的偏移(之所以要加上这样的偏移,主要是为了和ASCII码兼容),例如刚刚提到的“中”字,区位码是5448,十六进制是0x3630,区码和位码分别加上0xA0的偏移之后就得到0xD6D0,这就是“中”字的GBK编码结果。 代码页(Code Page)一种字符编码具体形式。早期字符相对少,因此通常会使用类似表格的形式将字符直接映射为字节流,然后通过查表的方式来实现字符的编解码。现代操作系统沿用了这种方式。例如Windows使用936代码页、Mac系统使用EUC-CN代码页实现GBK字符集的编码,名字虽然不一样,但对于同一汉字的编码肯定是一样的。 大小端的说法源自《格列佛游记》。我们知道,鸡蛋通常一端大一端小,小人国的人们对于剥蛋壳时应从哪一端开始剥起有着不一样的看法。同样,计算机界对于传输多字节字(由多个字节来共同表示一个数据类型)时,是先传高位字节(大端)还是先传低位字节(小端)也有着不一样的看法,这就是计算机里头大小端模式的由来了。无论是写文件还是网络传输,实际上都是往流设备进行写操作的过程,而且这个写操作是从流的低地址向高地址开始写(这很符合人的习惯),对于多字节字来说,如果先写入高位字节,则称作大端模式。反之则称作小端模式。也就是说,大端模式下,字节序和流设备的地址顺序是相反的,而小端模式则是相同的。一般网络协议都采用大端模式进行传输。
  9. ipscn

    IPS的主题一般都在哪里找

    @BestChen 如果你有代码基础的话,你可以在审查主题代码后放心使用,如果没有的话,强烈不建议你使用盗版。
  10. ipscn

    Q7

    已知:前6个素数是2, 3, 5, 7, 11, 13, 我们说第6个素数是13; 那么:第10001个素数是多少呢? package main import ( "fmt" "math/big" ) func isPrimeNumber(intV int64) bool { return big.NewInt(intV).ProbablyPrime(0) } func GetPrimeNumberByIndex(indexV int64) int64 { var i int64 = 1 var indexTemp int64 = 1 for { i++ if isPrimeNumber(int64(i)) { indexTemp++ if indexTemp > indexV { break } } } return i } func main() { var indexV int64 = 10001 var v int64 = GetPrimeNumberByIndex(indexV) fmt.Println("GetPrimeNumberByIndex(indexV)") fmt.Println(v) }
  11. ipscn

    Q6

    已知: 前10个正整数的和的平方是 (1 + 2 + ... + 10)^2 = 55^2 = 3025 前10个正整数的平方和是 1^2 + 2^2 + ... + 10^2 = 385 上面第一个结果减去第二个结果的差是: 3025 − 385 = 2640 那么,前100个正整数的和的平方与平方的和的差是多少? package main import ( "fmt" "math" ) func GetSquareOfSumElThan(intV int) int { sum := (intV + 1) * intV / 2 return int(math.Pow(float64(sum), float64(2))) } func GetSumOfSquareElThan(intV int) int { i := 1 var r int = 0 for ; i <= intV; i++ { r += int(math.Pow(float64(i), float64(2))) } return r } func GetDiff(intV int) int { return GetSquareOfSumElThan(intV) - GetSumOfSquareElThan(intV) } func main() { intV := 100 fmt.Println(GetDiff(intV)) }
  12. ipscn

    Q5

    已知: 可被数集[1,10]上的所有整数整除的最小正数是2520; 那么,可以能被数集[1,10]上的所有整数整除的最小正数是多少? 未支持并发的Go语言版本 package main import ( "fmt" "math/big" ) func isPrimeNumber(intV int64) bool { return big.NewInt(intV).ProbablyPrime(0) } func GetPrimeNumberListElThan(intV int64) []int64 { var i int64 = 1 var r []int64 for ; i <= intV; i++ { if isPrimeNumber(i) { r = append(r, i) } } return r } func GetMinNumberCanBeDividedAllNumberElThan(intV int64) int64 { var result int64 = 1 var div int64 var primes []int64 = GetPrimeNumberListElThan(intV) for i := range primes { div = primes[i] for div <= intV { div *= primes[i] } div /= primes[i] result *= div } return result } func main() { var intV int64 = 20 //fmt.Println(GetPrimeNumberListElThan(intV)) fmt.Println(GetMinNumberCanBeDividedAllNumberElThan(intV)) }
  13. ipscn

    Q4

    回文数是指从左边读和从右边读都一样的数。由最大的两个两位数的乘积构成的回文数是91×99=9009 。 求由两个最大的3位数的乘积组成的回文数。 package main import ( "fmt" "math" ) func isPalindromicNumber(intV int64) bool { var remainder, temp int64 var reverse int64 = 0 temp = intV for { remainder = intV % 10 reverse = int64(reverse*10 + remainder) intV /= 10 if intV == 0 { break } } return temp == reverse } func GetMaxPalindromicNumber(lenV int64) []int64 { var minV int64 = int64(math.Pow(float64(10), float64(lenV-1))) var maxV int64 = int64(math.Pow(float64(10), float64(lenV))) - 1 var x int64 = 0 var y int64 = 0 var product int64 = 0 var max int64 = 0 var r []int64 r = make([]int64, 3) /* fmt.Println(minV) fmt.Println(maxV)*/ for x = minV; x <= maxV; x++ { for y = x; y <= maxV; y++ { product = x * y if isPalindromicNumber(product) { if max < product { max = product r[0] = x r[1] = y r[2] = max } } } } return r } func main() { var lenV int64 = 3 fmt.Println(GetMaxPalindromicNumber(lenV)) }
  14. ipscn

    Q3

    数字13195的素数元素是5,7,13和29 那么,数字600851475143 的最大素数元素是? 不支持并发的Go语言基础版本 package main import ( "fmt" "math" "sort" ) func MinInt64ElOfSlice(v []int64) int64 { sort.Slice(v, func(i, j int) bool { return v[i] < v[j] }) return v[0] } func MaxInt64ElOfSlice(v []int64) int64 { sort.Slice(v, func(i, j int) bool { return v[i] > v[j] }) return v[0] } func getPrimeFactors(intV int64) []int64 { var sliceInstance []int64 sliceInstance = make([]int64, 1) var i int64 = 3 for intV%2 == 0 { intV = int64(intV / 2) } for ; i <= int64(math.Floor(math.Sqrt(float64(intV)))); i = i + 2 { for intV%i == 0 { sliceInstance = append(sliceInstance, i) intV = int64(intV / i) } } if intV > 2 { sliceInstance = append(sliceInstance, intV) } return sliceInstance[1:] } func main() { var intV int64 = 600851475143 var sliceInstance []int64 sliceInstance = getPrimeFactors(intV) fmt.Println(sliceInstance) fmt.Println(MaxInt64ElOfSlice(sliceInstance)) }
  15. ipscn

    Q2

    Fibonacci序列从1和2开始,前10项的值是: 1,1,2,3,5,8,13,21,34,55,89 ...... 求这个数列上值不大于四百万的偶数值的和。 支持并发的 Go语言版本 package main import ( "fmt" "strconv" "time" ) func fib_V3(c chan int64, maxValue int64) { var n int64 = 0 var m int64 = 1 c <- n c <- m for { temp := n + m n = m m = temp if m > maxValue { close(c) break } c <- m } } func getEvenValuePrimeSumBelow(maxInt int64) int64 { var r int64 = 0 var fibV int64 = 0 isTrue := true c := make(chan int64) go fib_V3(c, maxInt) for { fibV, isTrue = <-c if !isTrue { break } if fibV%2 == 0 { r += fibV } } //close(c) return r } func main() { var maxInt int64 = 4000000 start := time.Now() var r int64 = getEvenValuePrimeSumBelow(maxInt) fmt.Println("值不大于400万的偶数值得项得和是=>" + strconv.FormatInt(r, 10)) fmt.Println("运行耗时:", time.Now().Sub(start)) }
  16. ipscn

    Q1

    已知: 不大于10的所有是3或5的倍数的数字是3,5,6,9, 这四个数字的和是23; 求不大于1000的所有3或5的倍数的总和。 package main import ( "fmt" ) //不支持并发的基础版本 func getIt(maxInt int) int { r := 0 for i := 0; i < maxInt; i++ { if i%3 == 0 || i%5 == 0 { r += i } } return r } func main() { maxInt := 1000 fmt.Println(getIt(maxInt)) } 以上是Go语言的一个解决方案。
  17. @amaozjy 最好是用插件实现。
  18. ipscn

    IPS Community Suite 的优化

    @jvs520i 本地环境安装,后台本地化吧,这是最方便的,虽然没有PoEdit 好用,但是这玩意儿还没准备支持po,因为它支持的基于文件的缓存,在启用了 Opacache 的机器上,速度很快,我这机器还没启用opcache。
  19. WC Checkout For Chinese 是一个免费的 WordPress 插件,用于在结算页面,为收货地在中国的顾客提供友好的地址输入/选择方式。 WC Checkout For Chinese is a free WordPress plugin , it allow Chinese customers to input/select address fields friendly. 已有特性 把结算页面的“账单地址”和“送货地址”的地址输入栏改变顺序,以更符合中国人使用; 结算页面上,使用和账单地址不同的收货地址: [需升级]为送货地址添加手机输入栏: 为地址输入添加市/州/盟 级别区域的联动选择栏,以替代原有的输入栏; 订单完成后的视图中关于地址的输出修改如下: [需升级] 支持在个人账户页面进行操作: 需要更多? 如需更多特性,留言吧。 下载 https://wordpress.org/plugins/wc-checkout-for-chinese/ 重点重点 由于 WooCommerce 核心限制,我在 GitHub 向 WooCommerce 提了 PR,被拒绝了,拒绝的原因是这是没必要,我了个草,如需让这个插件正常工作,就需要 hack 下了。 /wp-content/plugins/woocommerce/includes/class-wc-countries.php 文件中的类 WC_Countries 中的 getter 方法: /** * Auto-load in-accessible properties on demand. * @param mixed $key * @return mixed */ public function __get( $key ) { if ( 'countries' == $key ) { return $this->get_countries(); } elseif ( 'states' == $key ) { return $this->get_states(); } } 修改为: /** * Auto-load in-accessible properties on demand. * @param mixed $key * @return mixed */ public function __get( $key ) { if ( 'countries' == $key ) { return $this->get_countries(); } elseif ( 'states' == $key ) { return $this->get_states(); } //suifengtec //woocommerce/includes/class-wc-contries.php else{ return apply_filters('woocommerce_countries_get_attribute',null,$key); } } 才能在 WooCommerce 结算页面使用城市下拉选择。 版本 1.0.0 : 初始发布;
  20. ipscn

    WC Checkout For Chinese

    统一回复: 等我最近有空了,给出完整的方案吧。
  21. ipscn

    大佬,首页标题后台能设置吗

    @guoaibing 后台,系统->设置->综合设置页面,站点名称输入栏中随意更改啊。
  22. ipscn

    LinuxMint Font

    LinuxMint 中文字体相关的问题。 字体配置 使用 LinuxMint 默认的字体配置即可。 字体配置路径: 菜单->首选项->字体。 安装后变楷体的问题 大多数情况下,是因为拼音输入法导致的,解决如下 sudo apt remove fonts-arphic-ukai fonts-arphic-uming 汉字字体发虚 sudo apt remove fonts-wqy-microhei 注销后重新进入系统如果还不行: sudo apt remove fonts-droid-fallback 菜单字体 菜单字体为宋体或者楷体: cd /usr/share/themes/Mint-X/cinnamon sudo nano cinnamon.css 修改 stage中的字体配置。 以上部分为来自 MINTOS.org 的说法,的确有效。
  23. 引入PHP脚本 wp_enqueue_script( 'heartbeat' ); wp_register_script('acg-faceid', FACE_ID_PLUGIN_URL . 'assets/js/faceid-0.9.js',array('jquery','heartbeat' ),false,true); Jq $(document).on('heartbeat-send', function(event, data) { data.acg_faceid = { 'uid': faceId.uid }; console.log(data); }); $(document).on('heartbeat-tick', function(event, data) { console.log('心跳响应'); if (data.acg_faceidd) { console.log(data.acg_faceidd); console.log('data.acg_faceidd.v'); console.log(data.acg_faceidd.v); if (true === data.acg_faceidd.v) { $('#acg-faceid-qr-c').remove(); $('#place_order').removeAttr('disabled'); if (wp.heartbeat.isQueued('acg_faceid')) { wp.heartbeat.dequeue('acg_faceid'); } } } }); jQ中wp.heartbeat可用的方法 connectNow: r() dequeue: w(a) disableSuspend: s() enqueue: u(a,b,c) getQueuedItem: x(a) hasConnectionError: q() hasFocus: p() interval: t(a,b) isQueued: v(a) interval 单位是秒,应在15-120之间。
  24. ipscn

    WordPress Heartbeat using Javascript

    https://wp-mix.com/wordpress-difference-between-home_url-site_url/
  25. ipscn

    Visual Studio

    Visual Studio 2015 的卸载 使用微软官方的工具 https://github.com/Microsoft/VisualStudioUninstaller/releases Visual Studio 2015 的光盘 Visual Studio Community 2015 with Update 3 https://go.microsoft.com/fwlink/?LinkId=615448&clcid=0x409 Visual Studio Professional 2015 with Update 3 https://go.microsoft.com/fwlink/?LinkId=615434&clcid=0x409 .NET Framework 4.6 https://go.microsoft.com/fwlink/?LinkId=528232 Visual Studio 2017 Visual Studio Community 2017 https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community Visual Studio Professional 2017 https://www.visualstudio.com/thank-you-downloading-visual-studio/?sku=Professional
×