essencemike / imike-blog Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
开始我非常反感代码生成器,认为他是没有作用的,浪费时间,浪费精力,生成的代码还是要修改,不能直接使用。后来我发现因为每个人都有自己的编码习惯,想要让所有的鞋的代码都是一个风格是一件非常困难的事情,后期的维护非常麻烦,但有了代码生成器就不一样了,很多共性的代码可以用代码生成器来完成,保证一模一样。后期维护非常简单。
吉日大神总结的代码生成器的好处:
如果手写代码是小米加步枪,代码生成器就是飞机加坦克,当然小米加步枪也有战胜后者的时候,打游击战前者优点更多,但是打打仗、正面交锋还是后者更强一些,不承认不行啊。当然也不能过于夸大他们的功能,要用后者的长处,少用后者的短处。
做前端的这些年,前端越来越庞大,所以前端出现了很多脚手架,其实我觉得脚手架就是代码生成器,他将一些共同的地方封装起来,这样可以快速生成。代码生成器有利有弊,虽然代码生成器可以使代码质量很高,风格高度统一,但是这些都是共同的部分,业务逻辑代码还是需要不同的人来开发的,这时候代码风格还是难以保持统一。
但是后来想想程序员都擅长偷懒,你写好模子之后,都会照着你的模子继续开发,这样代码风格可以变相的统一。现在的前端我觉得已经越来越离不开脚手架了,代码生成器的优势还是很明显的。
看到这篇文章的时候我感触良多,做前端3年以来,见证了前端的发展,从jsp慢慢发展到拥有了自己的技术栈,angular,react,vue的框架的出现,webpack,gulp等构建工具,node服务器等等前端发展越来越完善。
但开始的时候前端一度是不被重视的,“前端有什么可做的,不就是写写html,css,js吗?”。就像吉日写到:
我不知道见过多少个程序员,写程序乱不说,页面排版也很乱,美化就更不用提了,但是借口很好: “功能对了不就可以了?还搞那么认真干啥?”,你给我100万,我给你一个茅草屋,不就是为了睡觉吗?功能难道不对?你愿意给我钱吗?
而且吉日大神还写到这就像有2个少女一样,一个少女长得很漂亮,但是没有内涵修养。一个长得不是很好看,但是很有内涵修养。要是你是男的,你会选哪个?其实真的是这样前台页面设计不好的话,后台在稳定在强壮也没有用,人家根本看不到,第一眼的感觉不好,项目就很难谈成。
现在是大数据时代,html5,css3,svg都大放异彩,前台页面也越来越华丽,各种动画,各种绚丽的特效。现在的主要的方向是大数据的可视化,如何利用svg,canvas等做出方便的可视化页面。
现在也有很多库来实现,包括d3,echarts等都可以很好的实现,包括3D效果等等,前端的效果要求越来越绚丽。再加上webGL,前端做游戏也不是梦想了。
前端越来越重要,吉日大神写到:“程序是技术,设计是艺术。技术可以批量生产,艺术无法批量制造啊。在没有搞科技的开发里,还是艺术更值钱一些。有艺术细胞,还会一点儿技术,那才是人才!”。
看来我也要培养一下艺术细胞了...哈哈。
为什么要创业?
正确的答案是: 我已经发现了一个确定可以赚到钱的项目!
我的答案是: 经验丰富、技术强、积累了5年的成熟的开发框架、项目开发周期短。
我那时就有比较成熟的 B/S 和 C/S 的开发框架,而且是兼容的,有稳定的权限系统,只开发业务模块就可以了,开发效率高,别人为此投入了上百万的学费,我现在是成本低、风险低、有竞争力,自己干劲也足。
后来想想,我这是瞎扯淡,必败无疑。
关于为什么创业,技术扎实,积累丰富只能作为你的基础,或者说你的工具,而不是理由,当让你可以当成是你创业的动力。更重要的是你发现了一个实现自我的机会。
我是个有经营头脑的人吗?
正确的答案是:经营头脑不等于管理头脑,也不等于执行头脑,没有经营头脑的人,不适合独立创业!
我的答案是:天天想技术,走火入魔,根本没把管理当回事情,甚至觉得管理是多余的,浪费时间,浪费钱财,
我这TMD是哪儿到哪儿啊。
这就是为什么现在创业的都需要好合伙人,多数都是联合创业。技术大牛好找,懂业务、有经营头脑、会管理、又很信任的人很难找。
如何判断一个项目是好项目?
我的答案是:刚创业,有项目就可以,先解决生存问题,在解决稳定发展,什么项目都做,因为觉得有把握,以前也几乎没失败过。
这是吉日没有讲到怎么判断一个项目是好项目,因为要先解决温饱...,个人觉得项目没有好坏,要看你对公司的定位是什么。是想专注某一个方向慢慢发展、慢慢积累,还是想快速积累资金。其实对于现在的创业来说这个问题变得很简单了,就是你如何定位自己的公司,找准方向,因为现在的风投相对于以前还是好很多,你可以得到一笔不错的启动资金。
财务预算与控制
我的答案是:交给合伙人全权负责。又不是我老婆,也不是我家人,我怎么这么糊涂呢?
钱的问题还是要控制在自己或者家人手中,大家都懂的...
只追一只兔子,一定把它追到手!
我的答案是:各行各业的开发项目都做,培训也做,两条腿走路,我连内部小饭馆也开了呀。
其实这就是公司要对自己有个定位,什么都做就很难在某个方向有所突破,有所积累。
如何与人合伙
创业的人,超过半数选择合伙,而合伙人就像现在的婚姻一样,破裂的多,完美的少,也许不到七年就痒了吧?
我的答案是:虽然跨越了两个年头,但是只有半年左右就闹分家了。
在这个风投的时代感觉破裂的更多...
把自己摆正位置
我的答案是:我到底应该重点抓哪个方向?次要的可以放一放,事必躬亲是不行的。
这就是管理艺术,一个人的精力毕竟是有限的,如何能利用好身边的人创造出无限的价值才是正确的。或者说将自己放到更需要的地方去以达到自我价值最大的发挥。
创业改变不了一个失败的打工者
我的答案是:还是一直打工比较好,这个还是有点儿信心的。
我觉得创业还是可以改变一些东西的,至少你可以从你工作的地方学到很多,学到你失败的原因。
对行业的认识程度,上游下游的掌控
我的答案是:先杀出第一步。不迈出第一步,永远没有第二步。啥叫上有下游,根本没有放在心上,干了2年,绝大部分利润全部被中间人拿走了,都是在给别人拼命干活。
从我创业开始就分出去3家小公司,哇靠,这个门槛也太低了,从我这里就分出3~4个公司来啊,虽然创业是给自己创业,钱都被别人赚了,这还不如打工呢,打工最起码还轻松愉快,每个月按时发工资。
就我个人看来盲目的迈出第一步是很不明智的,你会在忙碌的工作中逐渐失去方向(因为你本来就没有方向),当然有的人会说你不去尝试,只是在不停的计划,那么理想、梦想就会变成空想。所以如何把握这个度,什么时候迈出第一步是很重要的。
害人之心不可有,防人之心不可无
虽然领着老虎打猎能抓到鹿,领着猫打猎只能抓到老鼠,但是老虎也会随时吃掉你。还有自己创业计划等,不应该轻易地给别人讲,给别人推演,自己的公司也不要让局外人过多接触。
这个没有什么好说的,就是标题:害人之心不可有,防人之心不可无。
靠人的买卖是最不可靠的
相信机器的可以说不是傻瓜,相信人的绝对是傻瓜。人不是机器,人有脑子,有**,是最难管的,而且人是不断变化思维、变化想法的。做外包,为啥不给自己做?我看你这么干有前途,我为啥不可以做?我又不是比你傻呀,我为啥给你干活?
我感触最深的并不是这些,而是代码生成器(后面会将详细),开始我非常反感代码生成器,认为他是没有作用的,浪费时间,浪费精力,生成的代码还是要修改,不能直接使用。后来我发现因为每个人都有自己的编码习惯,想要让所有的鞋的代码都是一个风格是一件非常困难的事情,后期的维护非常麻烦,但有了代码生成器就不一样了,很多共性的代码可以用代码生成器来完成,保证一模一样。后期维护非常简单。所以能用机器来完成的就不要用人去完成。
偶然必然的概率关系
这么多年了,还真没亲眼见过谁搞IT软件,发达成功了。所有的公司都是赔钱搞IT软件,不管规模大小,日子都比较艰难,现在回想起来,还真不如到澳门赌一下来的爽快,最起码有10%的成功率,又不累,也不浪费时间,还更刺激一些。
我无害人之心,希望像创业或者将要创业的朋友,多想想,多思考,然后在创业,经商不只是编写程序,编写程序只是经商的很小的一部分而已。我们只是工人,不要一时头脑发热,冲动是魔鬼,烧钱也别烧家里的钱,烧自己的钱,最好烧别人的钱。为社会做出点儿贡献,多创作几个就业机会,解决一下就业难的问题。
现在的风投就是这种模式,创业在烧投资人的钱。现在是互联网时代,搞IT成功的还是有很多的,APP大行其道。但是一味的烧别人的钱,自己找不到赢利点,必然也是会失败的。毕竟投资人也不是傻子,这就是为什么现在是互联网的寒潮,投资人都很谨慎。因为好多人都是盲目创业。
目前正在看吉日的《程序员你伤不起》这本书,虽然是以前的书,但是你们讲的一些东西还是能给我们很多启发,我也会陆续的更新自己的感悟,希望可以帮到大家。同时也强烈推荐大家去看看这本书。
吉日大神说:“天下的乌鸦是一般黑的。没有理想的公司,只有个人去适应公司。理想的工作环境只在天堂里有,想干啥就干啥,薪水多多的,压力小小的。”
而现实的公司是这样的:
自己工作这3年也带过了2个公司,以前的公司大家都还比较踏踏实实,但是太满足于现状了,从老板到员工都不想着改变自己,是自己更好,总觉得现在已经可以了。现在这个公司,有一个很好的架构师,他是一个技术狂,他的评判标准就是你要不断的变化。不断的玩技术,这样的人他的评价很高,就是吉日大神所说的,大家都在玩技术,谁来做项目呢,做项目的没有功劳吗?
其实我觉得工作的氛围是非常重要的,团队里面的人要踏踏实实的,但是要有很强的学习氛围,不满足于现状,同时有不会过度的、一味的玩技术。其实这就是**人一直讲究的中庸之道。中庸不是平庸,他是一种态度,既不过分激进,也不过分平庸。团队稳定,公司才能长久发展。
- svg attributes:
['clip-path', 'color-profile', 'src', 'cursor', 'fill', 'filter', 'marker', 'marker-start', 'marker-mid', 'marker-end', 'mask', 'stroke’]
- check attribute value for url(...) using regex
在SVG中使用上面的属性的时候,要检查是否使用的 url
来引入的,如果使用了url
来引入的话,就需要注意html的head中是否使用了base标签
如果使用了base标签的话,url的引入机制就会发生变化,导致引入不进来。请看下面的例子:
<svg style="width: 100%;height:100%;" class="svgGraph" xmlns="http://www.w3.org/2000/svg" ">
<g id="rootGroup" transform="translate(175, 175)">
<path class="link" fill="#eb4f38" d="M0,124C654,124 654,124 1308,124"></path>
<g class="node" id="e5b306f27b614ee58e5df8282091a52c" transform="translate(0,124)">
<circle class="node-dot" r="35" stroke="#FB5F6D" stroke-width="4"></circle>
<text x="20" dy=".35em" text-anchor="end">FLUME</text>
</g>
<g class="node" id="d22c856d5efe40d2b4ddedfdd72b1894" transform="translate(1308,124)">
<circle class="node-dot" r="35" stroke="#46cdc7" stroke-width="4"></circle>
<text x="20" dy=".35em" text-anchor="end">KAFKA</text>
</g>
</g>
<defs>
<filter id="f1" filterUnits="userSpaceOnUse">
<feColorMatrix result="matrixOut" in="SourceGraphic" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"></feColorMatrix>
<feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10"></feGaussianBlur>
<feBlend in="SourceGraphic" in2="blurOut" mode="normal"></feBlend>
</filter>
</defs>
<g class="menu">
<circle id="out-circle" class="ring" cx="175" cy="299" r="115" fill="rgba(0, 0, 0, .3)"></circle>
<circle id="in-circle" class="ring" cx="175" cy="299" r="90" fill="white"></circle>
<circle class="ring-button" r="35" cx="175" cy="299" stroke="white" stroke-width="2" filter="url(#f1)" fill="white" transform="translate(0,99)"></circle>
...
</g>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#e5b306f27b614ee58e5df8282091a52c" x="175" y="175"></use>
</svg>
上面是没有使用base标签的时候,filter: url(#f1)
是可以显示出来的,当使用了base之后:
<html>
<head>
<base href="/">
</head>
<body>
<svg style="width: 100%;height:100%;" class="svgGraph" xmlns="http://www.w3.org/2000/svg" ">
<g id="rootGroup" transform="translate(175, 175)">
<path class="link" fill="#eb4f38" d="M0,124C654,124 654,124 1308,124"></path>
<g class="node" id="e5b306f27b614ee58e5df8282091a52c" transform="translate(0,124)">
<circle class="node-dot" r="35" stroke="#FB5F6D" stroke-width="4"></circle>
<text x="20" dy=".35em" text-anchor="end">FLUME</text>
</g>
<g class="node" id="d22c856d5efe40d2b4ddedfdd72b1894" transform="translate(1308,124)">
<circle class="node-dot" r="35" stroke="#46cdc7" stroke-width="4"></circle>
<text x="20" dy=".35em" text-anchor="end">KAFKA</text>
</g>
</g>
<defs>
<filter id="f1" filterUnits="userSpaceOnUse">
<feColorMatrix result="matrixOut" in="SourceGraphic" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.5 0"></feColorMatrix>
<feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10"></feGaussianBlur>
<feBlend in="SourceGraphic" in2="blurOut" mode="normal"></feBlend>
</filter>
</defs>
<g class="menu">
<circle id="out-circle" class="ring" cx="175" cy="299" r="115" fill="rgba(0, 0, 0, .3)"></circle>
<circle id="in-circle" class="ring" cx="175" cy="299" r="90" fill="white"></circle>
<circle class="ring-button" r="35" cx="175" cy="299" stroke="white" stroke-width="2" filter="url(#f1)" fill="white" transform="translate(0,99)"></circle>
...
</g>
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#e5b306f27b614ee58e5df8282091a52c" x="175" y="175"></use>
</svg>
...
这是如果 filter: url(#f1)
就显示不出来了。
如果前端主流框架Angular 1.3之后的版本都支持html5Mode模式,这时候就需要设置base属性。包括如果使用nginx反向代理之后也需要设置base属性
只需要将location.href添加到url中即可
<base href="http://someone.com">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://someone.com#e5b306f27b614ee58e5df8282091a52c" x="175" y="175"></use>
如果使用框架,并且use等标签是js动态生成的,那么:
var useEle = document.getElementById('use');
// 或者使用jq, 这是使用jq
var useEle = $('#use');
useEle.attr('xlink:href', window.location.href + d.id)
// .attr('fill-opacity', 0)
.attr('x', 175)
.attr('y', 175);
我经常会收到一些简历,附件的名字一般是“简历.doc”NND,我不知道发这个简历的人有没有想过,当我接收到几十个叫这个名字的文件时,真想当场就把这个邮件删除了。每个简历都需要仔细保存到另外的位置,怕把别人的覆盖了,再打开简历,看名字,再另外命名,然后又存到本次招聘的人员列表里。其次是经常在简历里看到错别字,哎,请你把简历仔细写好,检查一下错别字;还有,没有电话号码、邮件联系方式的,排版也很乱的。别人看中你了,你也得留下联系方式让人好联系你吧。
若不是我工作负责一些,绝对当场就删除你的邮件了,理由很简单:一个不会换位思考的问题的人,也绝对不会写出啥好的程序来。
写好简历确实是一个大问题,刚毕业的时候也犯过这样的错误,那时候啥也不知道,写的简历很糟糕,也很长时间找不到工作,其实现在想想发现真的想吉日所说的一样,负责招聘的人每天要收到非常多的简历,如果全是这样的,对他的工作量是一个很大的提高,他心情自然不会很好,你让他心情不好,他自然不会给你好好办事。很容易就会删掉你的简历。这为我们提了一个警钟,以后面试,简历一定要写好。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.