月盾的博客

webuploader模态框按钮不起作用或每次打开都会变大

月盾

在bootstra模态框中放置webuploader上传控件,每次打开模态框按钮都会成倍放大,原因是每次打开模态框都会进行一次初始化,在原来按钮的基础上又加了一层样式,那么初始化一次应该可以吧。

https://hopefully-img.yuedun.wang/anniubianda.png

修改后的确不会再放大了,可以又有新问题出现了,就是不能点击上传文件了。

上传实例初始化一次,先然按钮正常显示, var uploader = WebUploader.create({}), 再通过uploader提供的API重新添加一个按钮uploader.addButton({}),这样类似于将前一个按钮覆盖了。

vue.js开发gulp监听文件变化自动编译

月盾

直接看代码:

var gulp = require('gulp')
var webpack = require("gulp-webpack");
var webpackConfig = require("./webpack.config.js");
// gulp.task("webpack", function(callback) {
//   var myConfig = Object.create(webpackConfig);
//   webpack(myConfig, function(err, stats) {
//           console.log(">>>>>err:"+JSON.stringify(err))
//           console.log(">>>>>stats:"+stats)
//         if(err) throw new Error("webpack", err);
//         callback();
//     });
// });

/**
 * 编译时有错误提示
 */
gulp.task("webpack", function(){
    return gulp.src("./app.js")
    .pipe(webpack(Object.create(webpackConfig)))
    .pipe(gulp.dest("./dist/"))
});

gulp.watch('./views/*', ['webpack']);

webpack.config.js配置

var webpack = require("webpack");
module.exports = {
    entry: //"./app.js",
        {
            app:"./app.js"
            // vendor: ["./javascripts/test"]
        },
    output: {
        path: __dirname + "/dist/",
        filename: "bundle.js"
    },
    module: {
        loaders: [
            {
                test: /\.scss$/,
                loaders: ['style', 'css', 'sass']
            },
            //{ test: /\.css$/, loader: "style!css" },
            { test: /\.vue$/, loader: 'vue-loader'},
            { test: /\.(jpg|png|gif)$/, loader: "file-loader?name=images/[hash].[ext]"}
        ]
    },
    // devtool: '#source-map',
    // plugins:[
    //     new webpack.optimize.CommonsChunkPlugin({
    //         name: "vendor",//和上面配置的入口对应
    //         filename: "common.js"//导出的文件的名称
    //     })
    // ]
};

不得不承认自己还是有很多不知道的配置,刚发表完本文就得知一种更高效的方式:直接用webpack自带的监听参数:>webpack -w即可实现,并且编译速度更快,从几秒降到了毫秒。

vue.js在chrome浏览器下输入汉字会带出拼音

月盾

本想写篇vue.js的教程的,但牵扯的知识点比较多,最近又没时间,就记录下过程中遇到问题吧。开发过程中用的360极速浏览器,也没什么问题,但是其他人测试的时候用的是chrome浏览器,输入汉字的时候会连拼音也带进去,比如输入的是“你好”,结果却成了“nihao你好”。

按理说360极速浏览器也用的是chrome内核,不应该出现这两种不同的情况,这个问题先不追究了。还是说说为什么vue.js的输入框会出现拼音的问题。我本以为是浏览器的差异造成这种现象,但是也不是所有输入框都会出现,那一定是程序的问题。

这是一种双向数据绑定常见写法,但是由于我的理解不够透彻,写成了这样:

我的理解是更新的时候要先显示数据,所以就在input里加了value来初始化数据,也是因为加了这个value导致输入汉字出现拼音,也与浏览器有点关系,就是输入的时候chrome浏览器会把输入的汉字拼音拼写也放进输入框,那么数据模型就接收了输入,敲击空格键的时候又输进了汉字,所以就都带进来了。但其实只需要v-model就能实现数据的接收和输出。

sequelizejs删除对象属性

月盾

js中有个delete操作符可以删除对象的属性,比如下面代码:

//objtest对象有个prop属性

var objtest = {

  prop: 'delete me'

};

//或者这么声明的对象

var objtest = new Array();

objtest['prop'] = 'delete me';

//删除属性'prop':

delete objtest.prop;

//或者

delete objtest['prop'];

//还可以删除任意变量

var numb = 17;

delete numb;

但是在nodejs项目中使用了sequelizejs来读取数据,如果也有想删除的属性,直接使用delete是删不掉的,比如有这样的数据结构:

var user = {
	name: '鸣人',
	age: 16,
	gender: '男',
	friends: [{
		name: '小樱',
		age: 16,
		gender: '女',
		friends: [{
			name: '井野',
			age: 16,
			gender: '女'
		}]
	},
	{
		name: '佐助',
		age: 16,
		gender: '男'
	}]
}

鸣人有小樱和佐助两个朋友,小樱有井野一个朋友,小樱的朋友也可以当做鸣人的朋友,现在想把井野也提出来并列到鸣人的朋友列表里,这样做很容易,但是既然提出来了就不需要小樱的朋友列表了,应该删掉。但是用delete user.friends[0].friends这样的方法是删不掉的。可能的是sequelize对象的属性是放在dataValues对象下面的,不能直接删除。

据我debug观察,虽然有直接属性,但是sequelize提供了getDataValue方法来获取属性值,获取到的值应该是dataValues下面的。所以,就算即使用delete删掉了直接属性还是能获取到。

但是还是有办法的,可以这样删除

user.getDataValue('friends')[0].setDataValue('friends', undefined)

就是将属性设置为undefined,查询的时候就没有小樱的friends了。

Go语言学习笔记

月盾

近些年出现不少新的开发语言,比如:

Rust是Mozilla开发的注重安全、性能和并发性的编程语言。

Go语言是谷歌2009发布的第二款开源编程语言。专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

D语言最初由Digital Mars公司就职的Walter Bright于2001年发布,意图改进C++语言。目前最新D语言被简称为D2。最主要的D语言的实现是DMD。

Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型的实时应用。

等等……

对于这些新语言,总有不少槽点被开发者吐槽。很多人都会进行对比,褒贬。但是我还是首先选择了Nodejs,简单快速上手,目前完全用于生产环境,它的快速开发让我很满意。ES6标准的定稿更让我肯定nodejs将会有更好的发展。

最近又学习了go语言,在学一门语言前总会迟疑值不值得学习,然后看到网上各种讨论。但我觉得还是值得学习,且不说性能有没有C++好,光凭开发效率就值得我学了,现代计算机性能都有很大的提升,如果不是开发底层系统,而是开发软件服务端系统那么它的有点足够了。

原生http请求获取参数

  • 获取URL参数

  • url:localhost:8081/?startDate=2017-11-22 var query = req.URL.Query() Println(query["startDate"])

  • go返回json数据

type ResObj struct {
  Code int
  Data map[string]string 
}
//或
//type ResObj struct {
//  Code int `json:"code"`
//  Data map[string]string `json:"data"`
//}
//首先要保证ResObj的属性首字母大写,否则访问不到,其次`json:"code"`不是必须,只不过加了什么样返回的json就是什么样
//{"Code":0,"Data":{"a":"aaaaaa"}}和{"code":0,"data":{"a":"aaaaaa"}}这样的区别
func helloHandler(res http.ResponseWriter, req *http.Request) {
  m := make(map[string]string)
  m["a"] = "aaaaaa"
  ress := &ResObj{
    Code: 0,
    Data: m}
  byt, _ := json.Marshal(ress)
  var resb ResObj
  json.Unmarshal(byt, &resb)
  fmt.Println(resb)
  res.Write(byt)
  //为什么Write参数要是byte数组?就不能像Nodejs直接是个对象。其实这是偏于底层了,Nodejs最后返回的也是byte,请看下文
}

nodejs的write函数:

response.write(chunk[, encoding][, callback])

Added in: v0.1.29

js prototype的理解【转】

月盾

prototype属性可算是JavaScript与其他面向对象语言的一大不同之处。 prototype就是“一个给类的对象添加方法的方法”,使用prototype属性,可以给类动态地添加方法,以便在JavaScript中实现“ 继承”的效果。

具体来说,prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,当你用prototype编写一个类后,如果new一个新的对象,浏览器会自动把prototype中 的内容替你附加在对象上。这样,通过利用prototype就可以在JavaScript中实现成员函数的定义,甚至是“继承”的效果。

对于javascript本身而言是基于对象的,任何元素都可以看成对象。然而类型和对象是不同的,而我们所讲的prototype属性即是基于类型的一 种属性。对于prototype的基本使用就如对象的创建及属性赋值一样的简单。直接通过赋值操作即可完成属性的创建。


/**
 * 
关于prototype,
理解这个很有必要

可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。

JS中允许的类型有Array,
Boolean,
Date,
Enumerator,
Error,
Function,
Number,
Object,
RegExp,
String

以后这样分,没有实例化的类称为类型,实例化的类称为对象实例简称实例

 */
Object.prototype.name = "zhangsan";

Object.prototype.nihao = function () {

    alert("i can method name is " + this.name);

}

var obj = new Object();

obj.nihao();

alert(obj.name);



// 在实例上不能使用prototype,否则会发生编译错误

obj.prototype.sex = "男"; //error,无法给一个实例prototype
var o = {

    name: "zhangsan"

}

o.prototype.age = 30; //error,无法给一个实例prototype
//可以为类型定义“静态”的属性和方法,直接在类型上调用即可
alert(Object.name);

Object.nihao();

//实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。
Object.class = "三年二班"; //类静态属性
var ob = new Object();

alert(ob.class); //error 实例不能调用类型的静态属性和方法
//可以在外部使用prototype为自定义的类型添加属性和方法。
function Mytest() {

    this.name = "zhangsan";

    this.age = 20;

}

Mytest.prototype.hello = function () {

    alert(this.name);

}

var m = new Mytest();

m.hello();

//在外部不能通过prototype改变自定义类型的属性或方法。
//该例子可以看到:调用的属性和方法仍是最初定义的结果。
Mytest.prototype.name = "lisi";

var mm = new Mytest();

alert(mm.name);

//可以在对象实例上改变或增加属性。(这个是肯定的)
//也可以在对象上改变或增加方法。(和普遍的面向对象的概念不同)
mm.name2 = "lisi";

mm.hello = function () {

    alert(this.name2);

}

//mm.hello();
//继承,这个例子说明了一个类型如何从另一个类型继承。
function Mytest2() { }

Mytest2.prototype = new Mytest;

var m2 = new Mytest2();

alert(m2.name);

//这个例子说明了子类如何重写父类的属性或方法。
Mytest2.prototype.name = "wangwu";

Mytest2.prototype.hello = function () {

    alert('i can mytest2 extend Mytest save method hello');

}

var m3 = new Mytest2();

m3.hello();

//子类中的name属性值不会被父类覆盖
function Mytest3() {

    this.name = "子类中的name属性值不会被父类覆盖";

    this.age = 20;

}

Mytest3.prototype = new Mytest();

var m4 = new Mytest3();

alert(m4.name);

    Object.prototype.name = "zhangsan";

    Object.prototype.nihao = function(){

        alert("i can method name is "+this.name);

    }

    var obj = new Object();

    obj.nihao();

    alert(obj.name);



    / / 在实例上不能使用prototype否则会发生编译错误

obj.prototype.sex = "男"; //error,无法给一个实例prototype
var o = {

    name: "zhangsan"

}

o.prototype.age = 30; //error,无法给一个实例prototype
//可以为类型定义“静态”的属性和方法,直接在类型上调用即可
alert(Object.name);

Object.nihao();

//实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。
Object.class = "三年二班"; //类静态属性
var ob = new Object();

alert(ob.class); //error 实例不能调用类型的静态属性和方法
//可以在外部使用prototype为自定义的类型添加属性和方法。
function Mytest() {

    this.name = "zhangsan";

    this.age = 20;

}

Mytest.prototype.hello = function() {

    alert(this.name);

}

var m = new Mytest();

m.hello();

//在外部不能通过prototype改变自定义类型的属性或方法。
//该例子可以看到:调用的属性和方法仍是最初定义的结果。
Mytest.prototype.name = "lisi";

var mm = new Mytest();

alert(mm.name);

//可以在对象实例上改变或增加属性。(这个是肯定的)
//也可以在对象上改变或增加方法。(和普遍的面向对象的概念不同)
mm.name2 = "lisi";

mm.hello = function() {

    alert(this.name2);

}

//mm.hello();
//继承,这个例子说明了一个类型如何从另一个类型继承。
function Mytest2() {}

Mytest2.prototype = new Mytest;

var m2 = new Mytest2();

alert(m2.name);

//这个例子说明了子类如何重写父类的属性或方法。
Mytest2.prototype.name = "wangwu";

Mytest2.prototype.hello = function() {

    alert('i can mytest2 extend Mytest save method hello');

}

var m3 = new Mytest2();

m3.hello();

//子类中的name属性值不会被父类覆盖
function Mytest3() {

    this.name = "子类中的name属性值不会被父类覆盖";

    this.age = 20;

}

Mytest3.prototype = new Mytest();

var m4 = new Mytest3();

alert(m4.name);

来源:http://my.oschina.net/tongjh/blog/265209

代码是否应该重构

月盾

关于代码重构是否必须,在网上也是找了很多资料。很多人持不同态度,至少给我的感觉是对半分的态度。有人说应该重构,可以是项目更加健壮,代码读起来更加顺畅,性能提升,大工程更易维护,可扩展性强等等好处。但有人持反对态度,认为代码千万不要重写,其中原因也可以理解,比如:重构代码需要耗费大量时间,在项目周期紧张的情况下更加不可能了,只要可运行就行。很多时候写代码容易,但是读代码难,这是很多人有的感觉,尤其是没有文档,注释的代码更是看了伤眼伤神。而且重构可能带来新的问题,遗留项目更是没人敢碰。

那到底该不该重构呢?或许我也不能说出绝对的理由,不过我有自己的理由,首先我对代码有洁癖,见不得乱糟糟的代码,不过我更多的情况是在写的时候会做代码审查,看看能不能够用更简单的方式实现,对于多次重复出现的代码会考虑封装一下以便共用。至于已经上线很久以后发现的烂代码还是谨慎重构,太复杂的就不要动了。

有一种比较频繁出现的情况是,有很多时候会写之前写过的代码,某个类似的功能,这个时候是坚决会对以前的代码重构简化,我讨厌写重复的东西。往往能将以前的代码缩减不少使之更精简明了。

对于重构的意义除了上面提到的,个人认为还有一个好处——虽然一次不能写出最好的代码,但是只要有重构的意识,至少是能写出比上次更好的代码,也算是经验总结,要不然怎么会出现那么多设计模式。

js控制优酷视频播放暂停

月盾

js控制优酷视频播放暂停

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">  
        <title>js控制优酷视频播放</title>  
        <script src="http://player.youku.com/jsapi"></script>  
        <script>  
            player = new YKU.Player("youkuplayer",{  
                styleid: "0",  
                client_id: "d8781b239fdad45b",  
                vid: "XMjg1MTcyNDQ0",  
                autoplay: false,  
                show_related: true,  
                events:{  
                    onPlayEnd: function(){ /*your code*/ },  
                    onPlayStart: function(){ /*your code*/ },  
                    onPlayerReady: function(){ /*your code*/ }  
                }  
            });  
            function playVideo(){  
                try{  
                    player.playVideo();  
                } catch(err){  
                    alert("*"+err);  
                }  
  
            }  
            function pauseVideo(){  
                player.pauseVideo();  
  
            }  
            function seekTo(s){  
                player.seekTo(s);  
            }  
            function currentTime(){  
                return player.currentTime();  
            }  
        </script>  
    </head>  
    <body>  
        <div id="youkuplayer" style="width:100%;height:400px;"></div>  
        <br />  
        <input type="button" onclick="playVideo();" value="播放" style="height:30px;width:50px;">  
        <input type="button" onclick="pauseVideo();" value="暂停" style="height:30px;width:50px;">  
    </body>  
</html>

做菜技巧-很重要又很容易被忽视的做菜技巧

月盾

烹饪可以看一个人的性格,慢性的人喜欢慢炖,性急的人喜欢爆炒,心细的人爱做复杂精致的菜,但不管什么样的性格,烹饪都需要保持一个好心情才会做的好吃。

0、放盐的多少关系着一道菜的生死,最关键的放在最前边讲

1、鱼煎过后再煮才会变白汤,而且要双面煎(某电影有提)

2、炖骨头汤时冷水下锅小火炖6小时变白,重复加水时万不可加冷水,只要一直保持加热水汤可以一直是乳白色(当然骨头没有营养了记得换掉)加一滴醋会瞬间变清汤

3、任何肉类在遇热后在遇冷怎么煮都不会烂,所以做红烧肉一类的菜在烹饪过程中万不可加冷水(另补充补救的办法,利用高压锅的超高内温可以再次溶解肉类,有同学说有地方喜欢吃弹的可以用冷水处理)

4、99%的菜都在临近出锅前才可以加盐、醋这两种调味品,过早的投入不仅影响口感,还会使菜变得难看

5、灵活的运用酱油,分清酱油的种类,分别的作用,最简单的是生抽调味,老抽上色

6、炒鸡蛋记得用筷子炒,炒的时候慢慢的将鸡蛋滑散,你会发现因为受热均匀鸡蛋变得更蓬松更大了

7、学会焯菜,在菜变色的同时捞出,有些需要口感清脆的菜还要立刻过凉水

8、炒菜要遵循一个道理,最难熟的先下锅,可以生吃的最后放

9、永远不要忘记葱姜蒜,他们很重要

10、糖有时候是为了甜,有时候是为了更突出咸或者辣,同理盐有时候是为了咸,有时候是为了更突出甜(全靠这个多年来耻笑表哥的料理能力)

11、肉类遇到酸会变嫩,很多菜吃起来并没有酸味,可是却有一丝丝说不清的醋香,其实那是在出锅前加了一瓶盖起锅醋,起锅醋适用于绝大多数肉类炒菜

12、可以去腥的东西有很多,味精,鸡精,白糖,料酒,柠檬皮都可以用来去腥

13、记得酸是甜的老婆,辣是甜的二奶,酸是辣的姐姐,咸是辣的闺蜜,甜是苦的哥们。他们是黄金搭档(这是母上的经验之谈,适用于绝大多数料理)

14、炸肉类火不要大,否则面衣糊了肉没熟,快熟的时候火不能小,不然油都被吸到食物里,这也就是复炸的用意。(母上万岁)

15、学会油泼,最简单的练习水煮肉片

16、记住你吃过的每一道菜,有些蔬菜的经典搭配是全球通用的,比如茄子配蒜,洋葱配肉

17、蒸米饭加点油会让米颗粒分明,加百合会让米饭变甜,加啤酒会让米饭变香,用高压锅蒸米饭更香,隔水蒸米饭更筋道,淘米水是最好的天然餐洗 净,糊锅了插几根葱,有的时候可以挽救米饭(家父是料理界的格格巫,经他手的食材都会变成碳,没有碳化的部分还不熟,我就天然的领悟了这个能力了)

18、想要鸡蛋嫩,打鸡蛋的时候加水(小学看小当家学到的)

19、切肉要逆纹路纵向切,不然咬不动煮不熟(肉丝顺纹路切,不然会断,速成鸡肉一类较嫩的肉类需要顺纹切不然会散,速成猪肉的肉质较鸡肉更老比 牛肉更嫩要斜切,土猪肉则纵切,整块的猪肉又需要逆纹切,总之需要自己理解肉类的紧实度选择切的方向,谢提醒)切蘑菇要顺纹路不然吃起来太糯,切笋要避开 纹路斜切不然切不动也咬不动

20、整块的肉料理需要断筋,用刀背给予一定力道,不需要太大力,重复在肉面敲打3分钟

21、辣味不是只有辣椒,还有黑白胡椒,姜,蒜。同理甜味不只有糖,还有蜂蜜,果糖,各种饮料等。酸味不是只有醋,还有柠檬,山楂等

22、蜂蜜也可以用作嫩肉(食戟之灵)

23、一定要试菜,由于很多菜重要的调味都在最后步骤,试菜可以很大程度上解决味道不够的问题,所以最后的关键调味料宁缺毋滥!调味结束后不要忙着关火,试过之后没问题在出锅,俗话说饿死的厨子三百斤,就是说的试菜

24、热锅凉油是为了给高蛋白食物一个缓冲,不至于外面熟了里面不熟,还有个好处是蒸腾锅内多余水分,不至于遇油飞溅,多用于滑炒,上浆的肉片什么的。热锅热油,锁水,用于爆炒

调料:

1、鱼香味(sorry,各严格的原产地同学表示我这个鱼香太水了,我就删掉了,正经八百的鱼香据说非常稀有,几近失传,我此生可能无缘吃到,本着不会不写的心态我就不加了)

2、红烧就是老抽上色+生抽调味+糖

3、宫爆味就是生抽+水淀粉(或豆瓣酱,也有凝固的作用)+干辣椒+糖+醋+葱白

4、勾芡就是淀粉+各种液体预热凝固(糖醋里脊,糖醋鲤鱼也是)

5、韩国味就是韩国大酱+韩国辣酱

6、照烧汁就是蜂蜜+日本酱油

7、老干妈豆豉可以直接用做调料,比如回锅肉,蛋炒饭

8、关东煮汤料,日本酱油,苹果,海带,水果萝卜,炖4个小时(有先后顺序)

9、白灼就是蚝油+糖+盐+葱蒜

10、火锅蘸料:①花生酱+芝麻酱+盐或者生抽+巧克力+水调成糊状菜肉蘸料(这就是店里的秘制酱料,某前男友教的)。②海鲜汁+凉拌酱油+蚝油+醋+糖+香油+香菜碎调成肉类蘸料(火锅店吃还是在家吃都很方便,另一个前男友教的)

11、蛋黄酱就是原味沙拉+鸡蛋黄搅拌均匀

饺子馅:

**1、红肉类:**各种红肉馅+各种配菜+十三香或者五香面少许(去腥)+白糖少许或者耗油(去腥,耗油本身有 甜味取其一)+姜汁(去腥,超市有卖)+料酒(去腥)+香油(母上会在添加花生油用作调味)+盐+鸡精+生鸡蛋+花椒油(去腥,是有多腥!)(羊肉属于味 道较重的肉类可以用胡萝卜大葱来遮掩一点点味道,另有的地方肉馅会加酱油)

**2、白肉类:**鸡肉或者鱼肉+猪肉或者牛肉+各种去腥少量版+鸡精+韭菜或者胡萝卜(别的配菜没试验过,因为韭菜跟胡萝卜属于重口味蔬菜,可以中和不和谐的味道)

**3、素馅类:**各种蔬菜馅(各种含水量大的蔬菜都需要在剁好馅后撒盐静置一段时间过滤掉多余水分,此步骤为杀水)+香油+盐+炒鸡蛋+木耳碎(可以不加)+鸡精

**常备的调料:**盐,糖,米醋,豆瓣酱,郫县豆瓣,老干妈豆豉,料酒,鸡精,白胡椒粉,黑胡椒粉,花椒,葱姜蒜,干辣椒,香油,蚝油

**可选调料:**番茄酱,白醋,各种混合酱油,黑白芝麻,干木耳,干香菇,干银耳,枸杞,沙拉酱,蛋黄酱,千岛酱,金枪鱼罐头,花生酱,芝麻酱,豆豉鲮鱼,午餐肉,方火腿,各种罐头,咖喱,姜汁,蒜汁,花椒油,米酒

**炖料类:**桂皮,八角,肉桂,香叶,山楂干,柠檬,十三香(柠檬籽与香叶有苦味,放的时候记得去籽,少量)

根据上文的理论进行的一些简单的料理实践,通过一点点更改原有做法,从而突出个人特色,但又不会变成黑暗料理的方法,要知道我那些年做过多少黑暗料理才总结出来!

番茄炒蛋:(由于番茄是酸的,可以跟刚才提到酸配甜或者酸配辣可以混搭一下,那么做法就变成)鸡蛋加水打 散,下油锅(油温要高一点)用筷子炒到凝固盛出待用,下番茄炒到出汁,喜欢汁多就多炖一会,加入白糖,加入炒好的鸡蛋翻炒均匀,出锅前加入盐,蒜片,待闻 到蒜香的时候即可关火盛盘,这样的番茄炒蛋酸甜适口,鸡蛋蓬松滑嫩,又有一丝微微的蒜辣混杂着蒜香,最适合下饭。

水煮肉片:(这道菜有个简单的逻辑,肉要碗里熟)

1、里脊肉或者牛肉切薄片(有朋友表示新手难切,加入方法,将肉在速冻层冻半小时再切肉会定型),加入鸡蛋,淀粉,盐,料酒腌制2小时

2、可以选用各种带叶菜,我喜欢油菜或者圆白菜,生菜撕成块状大小随意,加水,盐煮菜5分钟后连汤带菜一起盛出。

3、热油把肉炒到变色断生铺在菜上,撒上盐,辣椒粉,葱碎(新手请加入超市花椒粉,或者花椒在微波炉叮一分钟用蒜窝捣碎铺上)

4、重新热油放入花椒,干辣椒煸糊(有朋友表示蹦糊有苦味,糊不是真的让他变成碳,红色脆硬或者红黄相间即可,上一部加了花椒粉的就不需要花椒了),趁着油温最高的时候浇在肉跟料上即可。

高油温与菜的热度会将肉煮熟。由于用料随意这基本上算是入门级的肉类料理,对于刚学做菜的人来说,这算是拿的出手的大菜了。

洋葱炒肉:(会用到上面我们说到“起锅醋”这个东西)

1、随意猪或者牛肉切丝用生姜,料酒,盐腌,淀粉制十分钟;

2、锅中倒油,烧热,放入腌好的肉丝,迅速拨开,炒到肉丝变色;

3、加入洗好、切好的洋葱,放入适量的酱油,和盐;

4、加入味精,倒入一瓶盖米醋,翻炒5秒出锅装盘。

全靠那一瓶盖醋,从不吃洋葱的傲娇表弟把盘子都舔了。

回锅肉:(好开心,辣的哎)

TortoiseGit提交到远程仓库时git did not exit cleanly (exit code 128)

月盾

虽然出现git did not exit cleanly (exit code 128)的情况各有不同,不过其中一种是提交时的读写权限有问题,如果本地代码连接的是SSH仓库,那么可能是服务端没有配置SSH Key。github有两个地方配置sshkey,有一个是全局的,另一个是针对单个仓库的,如果给某个仓库配置了Deploy keys(其实和SSHkey一样),提交另一个代码时就会出现git did not exit cleanly。对于我这种不熟练的人来说就想着再添加一个Deploy keys,但是又提示Key already in use,这时就要看看是不是其他仓库单独配置了ssh key。如果仓库太多具体哪个配置了也不太清楚,有个简单快读的办法是在命令行执行 ssh -T -ai .\id_rsa git@github.com,会告诉你哪个仓库在使用本地的id_rsa内容。删掉Deploy keys,配置为全局SSH Keys就行了