0%

//
// SettingTableViewController.swift


import UIKit

protocol SettingViewControllerDelegate: class {
    func controllerDidChangeDateMode(controller: SettingTableViewController)
    func controllerDidChangeTemperatureMode(controller: SettingTableViewController)
}

class SettingTableViewController: UITableViewController {

    weak var changeDelegate: SettingViewControllerDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.rowHeight = 44
    }
}

extension SettingTableViewController {
    private enum Section: Int {
        case date
        case temperature
        
        var numberOfRows: Int {
            return 2
        }
        
        static var count: Int {
            return Section.temperature.rawValue + 1
        }
    }
    
    override func numberOfSections(in tableView: UITableView) -> Int {
        return Section.count
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        guard let section = Section(rawValue: section) else {
            fatalError("未知section索引")
        }
        return section.numberOfRows
    }
    
    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if section == 0 {
            return "Date format"
        }
        return "Temperature unit"
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: SettingTableViewCell.reuseIdentifier, for: indexPath) as? SettingTableViewCell else {
            fatalError("未知的tableViewCell")
        }
        guard let section = Section(rawValue: indexPath.section) else {
            fatalError("未知的section")
        }
        switch section {
        case .date:
            cell.label.text = (indexPath.row == 0) ? "Fri, 01 December" : "F, 12/01"
            let timeMode = UserDefaults.dateMode()
            if indexPath.row == timeMode.rawValue {
                cell.accessoryType = .checkmark
            } else {
                cell.accessoryType = .none
            }
        case .temperature:
            cell.label.text = (indexPath.row == 0) ? "Celcius" : "Fahrenheit"
            let temperatureMode = UserDefaults.temperatureMode()
            if indexPath.row == temperatureMode.rawValue {
                cell.accessoryType = .checkmark
            } else {
                cell.accessoryType = .none
            }
        }
        return cell
    }
    
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        guard let section = Section(rawValue: indexPath.section) else {
            fatalError("未知的section索引")
        }
        switch section {
            case .date:
                let dateMode = UserDefaults.dateMode()
                guard indexPath.row != dateMode.rawValue else { return }
                if let newMode = DateMode(rawValue: indexPath.row) {
                    UserDefaults.setDateMode(to: newMode)
                }
                changeDelegate?.controllerDidChangeDateMode(controller: self)
            case .temperature:
                let temperatureMode = UserDefaults.temperatureMode()
                guard indexPath.row != temperatureMode.rawValue else { return }
                if let newMode = TemperatureMode(rawValue: indexPath.row) {
                    UserDefaults.setTemperatureMode(to: newMode)
                }
                changeDelegate?.controllerDidChangeTemperatureMode(controller: self)
        }
        let sections = IndexSet(integer: indexPath.section)
        tableView.reloadSections(sections, with: .none)
    }
}

提供一种思路

代码来自泊学

–EOF–

server {
    listen 80;
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /etc/nginx/ssl/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/unsplash.jingxuetao.com.key;

    location /api {
        rewrite ^.+api/?(.*)$ /$1 break;
        proxy_pass https://api.unsplash.com;
    }

    location /images {
        rewrite ^.+images/?(.*)$ /$1 break;
        proxy_pass https://images.unsplash.com;
    }

}

参考链接

https://www.cnblogs.com/gabrielchen/p/5066120.html
https://www.jianshu.com/p/b34a57129d6c?from=timeline

–EOF–

find . -name "*.gif"|sed 's/.gif//'|xargs -n1 -I {} mv {}.gif {}.png //批量修改文件后缀名
sips -Z 75 *.png //批量修改文件像素
sudo python -m SimpleHTTPServer 80 //开启一个简单的服务器,用于网页访问文件夹内容.

原文链接

转载备忘

自从 Emoji 被推广开来,被越来越多的操作系统支持,变成了一种通用的表情符号,今天看到 Ghost 的官方博客文章中用了 Emoji,我也想试一下,发现自己文章中插入 Emoji 发表后不能显示。😭

Google 了一下,找到了问题,我的 Ghost 数据保存在 MySQL 数据库上,当时安装 MySQL 设置了 utf8 的字符集,需要改成 utf8mb4 才能支持存储 Emoji。

那么如何把当前 MySQL 的编码由 utf8 转换为 utf8mb4 呢?😶

首先,为了保险起见,务必先备份一下原来的数据库。

然后呢,确认一下 MySQL 的版本号,要高于 5.5.3。

第三步,修改 MySQL 的配置文件 my.cnf,加入下面的内容,如果之前有设置 utf8 字符集的内容,需要删除。

下面是我博客的my.cnf内容,系统是CentOS7.2,文件位置/etc/my.cnf

[client]
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

第四步,重启 MySQL 服务,并确认变更

#登录 MySQL(需要 MySQL root 密码)
mysql -uroot -p
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)

第五步,修改数据库和数据表的编码格式。

#选择数据库,database-name 替换为你自己的数据库名
mysql> use database-name
#对于 Ghost 貌似修改这两处就行了
mysql> ALTER DATABASE ghost CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
mysql> ALTER TABLE posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

然后就支持emoji了.🙂🙂

–EOF–

今天折腾Perfect服务端的时候,出现下面错误:

Can’t connect to local MySQL server through socket ‘’ (2)

然后各种Google,各种试错.最后在这篇文章中看到了IP这个字眼,突然灵感来了,直接把locahost改成127.0.0.1,然后成功了~

我了个大草,原来还能这么玩…

至于具体原因可以查看这篇文章Localhost 与127.0.0.1和IP的区别是什么

于2017/9/12,我的博客支持emoji啦,😁😁😝

–EOF–

系统环境:

#nginx -v
nginx version: nginx/1.10.2
#openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
#cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

方式一

Certbot选择自己的操作系统以及服务器软件,按照说明安装即可.

安装方式二

acme.sh有中文文档,按照文档安装即可.

–EOF–

操作系统版本: CentOS7.2

1. 安装Nginx说找不到包

yum remove eprl-release
yum install eprl-release

2. 安装MySQL有问题

CentOS7.2安装的是Mariadb,安装方式如下:
安装命令

yum -y install mariadb mariadb-server
安装完成MariaDB,首先启动MariaDB

systemctl start mariadb
设置开机启动

systemctl enable mariadb
接下来进行MariaDB的相关简单配置

mysql_secure_installation
首先是设置密码,会提示先输入密码

Enter current password for root (enter for none):<–初次运行直接回车

设置密码

Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码

其他配置

Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车

Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,

Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车

Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车

初始化MariaDB完成,接下来测试登录

mysql -uroot -ppassword
完成。

–EOF–

Photo by Brady Bellini on Unsplash

慢慢的你长大了,人们说你理性了,冷漠了,那是因为他们不知道,你对这个世界的情感不是变淡了,而是变深了,深到海面以下五百米深蓝的地方,在海面泛起一两个炫目漂亮的水花,对你已毫无意义。

在微博上看到上面一段话,大脑处于空闲状态,脑洞大开了一下.

上面例子可能是因为 折腾的次数多了,发现折腾并没有什么卵用.然后自然而然的就不折腾了.人也是动物,继承了动物的一些共有属性.→_→我的面向对象思想已经出神入化了.像一条被链子被栓着的狗一样,狗想挣脱链子,但是挣脱了N次,发现并挣脱不了.最后,即使被放开,也不会再想挣脱.

每个人都是一个对象,给每个对象的每个属性设置不同的值,就成了每一个不同的人. 这么说,TM人类就是new出来的.再这么说整个世界,也是被new World()出来的.当然这个new World()需要被一个变量引用一下,可以是全局变量,可以是局部变量.否则分分钟就被销毁了.虚拟机知道自己是虚拟机么?虚拟机肯定认为自己是一台完整的电脑.

人既然是人类的实例对象.那人类肯定可以重载父类的属性跟方法.属性不一样,造就了不同的人的非行为部分.像高,福,帅,矮,挫,穷.
方法不同表现为人的行为不同.这就是有些人不理解另一些人做法的原因.TM方法都不一样,结果怎么会相同.

这是不是就说明了,你以为的不一定是别人以为的.

最后一段是重点,’你以为的不一定是别人以为的’

脑洞结束

–EOF–

好久没更新博客了.

一是没什么东西可以写,看一些大神写的博客那质量,简直没法玩了.

二是还是实在没什么东西可以写.

想的东西有点杂,下面乱写了.

原来编程因为兴趣,而工作了之后才感觉兴趣并没什么卵用,最终还是钱.

几十天之前,前公司刚招了一个前端,结果第二天就走了,是因为学历问题.当技术总监跟boss说那个人走了的时候,boss就”哦”了一句…TM,当时我就笑喷了.这老板真是可以的.你他妈倒是问问什么原因啊!!!就TM’哦’了一句,当员工是什么了.也是比较服气.

因为各种原因,有个人原因,有外部原因.原来还想着公司不辞我,我肯定不会辞职.现在说这些好像是婊子给自己立牌坊.

前公司人事人挺好,发现我的问题,没有跟任何人说.

在前公司因为经验不够,导致项目延期了好长时间.给人一种不靠谱的感觉.继续留在那的话得花好长时间才能让人改变这种印象.算了,也懒得让人改变了.毕竟自己靠不靠谱自己说的算,不是么.

HTML5带的播放器样式太TM难看了,换一个.

现在凌晨3:13,还不打算睡.

难看就难看吧,折腾了几个小时,没弄出来.就这样吧.

现在凌晨3:12,打算整点东西喝.

–EOF–

此人已死.有事烧纸.小事招魂.大事挖坟.

联系方式:43BA5BBCBD7622A060509FB1B1D96663