The Witcher 3 next generation edition

巫师三对完全没有接触过这个系列的人来说,是难以上手的,并不是说游戏的流程和玩法,而是对世界观的陌生所导致的。 也就是所谓的入戏困难,无法尽快带入到剧情里面。 经过了威伦和诺维格瑞的情节之后,剧情会明显加快,群岛、凯尔莫罕之战的剧情都非常紧凑。当然,大决战更是一气呵成。 石之心的剧情,总体偏阴暗,但是婚礼的情节无比美好。 血与酒中,风光美好的陶森特让人想常驻在这里,当然最后的结局也可以选择真的常驻。 巫师三的支线的水准是超过绝大多数游戏的,很少有让人玩的厌烦的,其他的很多游戏支线会让人厌烦,说的就是你,阿育。

二月 10, 2023

use acme.sh to generate pan-domain ssl

download acme.sh curl https://get.acme.sh | sh goto acme.sh directory cd ~/.acme.sh add issued domain ./acme.sh --issue --dns -d "*.domain" --yes-I-know-dns-manual-mode-enough-go-ahead-please add txt dns record then renew ./acme.sh --issue --dns -d "*.domain" --yes-I-know-dns-manual-mode-enough-go-ahead-please --renew config nginx ssl_certificate /path/*.domain/fullchain.cer; ssl_certificate_key /path/*.domain/*.domain.key;

十一月 9, 2018

使用Route macro来定义Route的新方法

使用 Laravel 在做后台表单操作时,通常会增加一个批量删除的功能 起初是在 route 里定义一个新的 delete Route::delete('prefix/destroy-selection', 'CurrentController@destroySelection); 之后再定义 apiResource Route::apiResource('prefix', 'CurrentController'); 这样写十分啰嗦且冗长,Laravel 的强大之处就是它提供了 Macro 来扩展功能 在 AppServiceProvider 的 boot 方法里加入 Route::macro('full',function ($prefix, $controller){ Route::delete($prefix.'/destroy-selection', $controller.'@destroySelection')->name($prefix.'destroy-selection'); Route::apiResource($prefix, $controller); }); 之后在 route 里就可以直接使用 full 来定义了 Route::full('prefix', 'CurrentController');

十一月 6, 2018

如何在 Vue Spa 中使用微信jssdk分享接口

在Vue Spa项目中,使用了 History 模式,要使用分享接口,只能在第一次访问的时候,就加载jssdk配置,通过Vue router进入其他页面之后再做加载,虽然在调试模式下依然会显示配置正确,但是分享接口是无效的,那么怎么办呢?直接在App.vue下就做jssdk config 实现步骤 编写后端接口 使用了 overture/wechat public function jssdk(Request $request) { $this->jssdk->setUrl($request->input('url')); return $this->jssdk->buildConfig([ 'onMenuShareAppMessage', 'onMenuShareWechat', 'onMenuShareTimeline', 'getLocation' ], false); } 在App.vue中注入配置 引入wexin-js-sdk const wx = require('weixin-js-sdk') 方法 async getJssdk () { const { data } = await this.$axios.post('/api/wechat-work/jssdk', { url: window.location.href }) wx.config(data) } 在分享页面中编写分享方法 引入wexin-js-sdk const wx = require('weixin-js-sdk') 在__mounted__里写入分享方法 wx.ready(() => { const self = this wx.onMenuShareTimeline({ title: self.shareTitle, link: window.location.href, imgUrl: self.logoPath, success: function () { self.forward('onMenuShareTimeline') self.$toast.success('分享成功') }, cancel: function () { self.$toast.fail('取消分享') } }) }) 最后在__destroyed__里重写分享方法,以终止分享接口 ...

十月 9, 2018

image-webpack-loader resolve jpg file wrong in ubuntu server

In my production Ubuntu server which version is 16.04.3 LTS,after push my code to it,I run yarn prod but it show me a error notice ERROR in ./resources/assets/js/mobile/pages/Home/images/banner-oath.jpg Module build failed: Error: write EPIPE at _errnoException (util.js:992:11) at WriteWrap.afterWrite [as oncomplete] (net.js:864:14) after search by google,this link solve my problem install libpng16-dev in server sudo apt-get install libpng16-dev then, it is all fine.

八月 2, 2018

laravel echo server 结合 jwt 授权

首先,因为重写了 axios 的拦截器,为了确保 socket 消息头的引入,在 axios 拦截器中中加入 if(window.Echo) { let socketId = window.Echo.socketId() if (socketId) { request.headers.common['X-Socket-Id'] = socketId } } 然后,修改BroadcastServiceprovider,修改认证路由为api模组 Broadcast::routes(["prefix" => "api", "middleware" => "api"]); 最后,在 laravel-echo-server.json 中确保认证路由的正确 { "authHost": "http://dev.test", "authEndpoint": "/api/broadcasting/auth" } 同时,在 Laravel Echo中加入token认证 import Cookies from 'js-cookie' let token = Cookies.get('token') window.Echo = new Echo({ broadcaster: 'socket.io', host: process.env.MIX_ECHO_SERVER, auth: { headers: { 'Authorization': 'Bearer ' + token } } }) 好了,我们现在可以愉快的使用 laravel 发送广播了,私有频道在 routes/channels.php 中编写认证权限 在前端使用 Laravel Echo 监听私有频道时,只有通过 laravel echo server 认证的私有频道才会建立监听,并收听到广播

五月 17, 2018

使用Sortable.js和Vue.Draggable的一些坑

Sortable.js 是拖拽列表最著名的库,而 Vue.Draggable 是其在 Vue 中的封装,在 vue 中引入十分的方便。 但是我在项目中的需求是左侧列表初始时是空的,从右侧列表拖动到左侧生成,这就造成了一个问题,左侧因为没有dom节点而拖不过来,这时就需要在左侧的 draggable 组件添加一个 min-height 的 css 属性。 另一个问题是,在使用 clone 模式时,因为 js 对象都是指向同一个指针的,再从右侧拖动到左侧的节点,当修改其属性时,把所有拖拽过来的相同节点也都修改了。 我的解决方法是,把右侧改为 pull 模式,同时使用 vue 的 watch,当右侧的列表发生变化时重新生成,这样就和初始化的对象完全脱离了。

五月 17, 2018

在vue中使用viewerjs

在 vue中使用viewerjs 必须执行 viewer.update const viewer = new Viewer(this.$refs.image) this.$nextTick().then(() => { viewer.update() }) viewer.view(0) 当然最后别忘了引入css @import "~viewerjs/dist/viewer.css";

四月 22, 2018

Laravel Elixir使用webpack打包只引入moment.js的中文语言包

方法是使用webpack内置的ContextReplacementPlugin插件 修改_gulpfile.js_ 先引入webpack const webpack = require('webpack') 增加自定义webpack配置 elixir(mix => { Elixir.webpack.mergeConfig({ plugins: [ new webpack.ContextReplacementPlugin(/moment[\\/]locale$/, /^\.\/(zh-cn)$/) ] }); 之后运行 gulp 会发现打包之后的js会明显变小

二月 8, 2018

Laravel 执行定时任务时的url域名

在laravel开发时,我最常用的url函数是route,因为根据route函数生成的url如果命名路由写错了那么直接会报错,这样有问题能早发现。 在生成定时任务的时候,在console里,我也写了route,但是推送到用户的地址却是localhost,这可太奇怪了,于是翻了laravel的源代码 laravel/framework/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php public function bootstrap(Application $app) { $url = $app->make('config')->get('app.url', 'http://localhost'); $app->instance('request', Request::create($url, 'GET', [], [], [], $_SERVER)); } 原来是因为走定时器任务时是在命令行里执行的,laravel无法根据用户的输入而得到域名,那么就必须读取配置文件了 当然在 .env里定义是最佳实践了

一月 30, 2018