在太平洋中游泳的水母, 格雷罗, 墨西哥 (© Christian Vizl/TANDEM Stills + Motion)

Welcom to 评论 - lizhenqiu blog!

    #2338

    作者:广西南宁市
    其实,我有一个建议,也打算这么实施。定一个职位目标,比如中高级开发工程师、产品经理、项目经理、架构师。然后,梳理这些职位所需要的专业技能,比如后端技能、前端技能、任务安排调度技能。画一个知识体系图,逐步实现一下
    文章:真好,我也想码一辈子的代码  发表时间:2016-08-16, 17:58:03  
    展开↯

    #2339

    作者:广西南宁市
    七年失败的程序之路
    七年,七年,七年。从09年7月毕业至今(2016年7月)整整七年,在我的逻辑里,7年时间足以让一个初出茅庐的应届毕业生,打怪升级为一个高级程序员、高级项目经理(如果创业的恐怕也拉到风投了吧)。这也是我当时的景愿,可现实总是那么的残酷,它告诉我没有什么是理所应当,这七年我走了一条弯的不能再弯的路,各种不如意接踵而至,最终的结果是我成了一个算不上哪门子精通,哪门子熟练的,普通的程序员。我并不抱怨各种客观遭遇,我认为一定是我在一些思维方式、习惯、技巧、方法方面出了问题,才导致落到今天这个境地。古人云,可怜之人,必有可恨之处。
    今天想把七年的经历说一下,一是为自己理清思绪重新上路,二是为各位朋友做一个反面案例,做一个警示,三是看看有没有过来人指点一二。下面入正题。
    第一段,企业建站,在职1.5年。Asp语言估计现在毕业的朋友听都没听说过吧,我当时也不了解。其实我大学的专业是J2SE、J2ME、J2EE,也就是如今大热门JAVA专业。但在当时09年初那会儿刚刚金融危机后,经济萧条外包行业有点萎缩,我在人才市场蹲点一个月,一直就找不到工作(可能跟非重点院校、大专文凭有关吧),家里经济条件不好,这样干耗着也不是事,所以最后有一家做ASP建站的公司要我,虽然不是本专业但是没办法也就从了。那时候市场不景气,所以建站已经很廉价了,最低的时候1200元包建站、包域名、包维护。入职头半年还在从JSP到ASP的切换中,我是想把工作做好的,当时埋头苦干很快也就上手了。但是每天的增删改查做了一年之后,真的有点受不了,感觉太low,太没成就感,关键工资还相当低(有6个点的网站提成,但是一个月也没几个单所以。。。) 所以鼓起勇气写了人生第一张辞职申请。当然也就第一次遇到老板挽留,咱这人坏就坏在脸皮薄心肠软,老板找我谈了两次,于是我同意再干一段时间。其实留下来也是有一些内心想法的,觉得已经1年没碰JAVA了,有点陌生,加上之前找不到工作的心理阴影,所以没怎么敢再往JAVA方向走(当时.Net名声还是更大些吧,工资高一些吧),而做了一年ASP,对ASP的处境也有点了解了,觉得Asp.Net才是发展趋势,所以留下来也是想用时间自学ASP.NET然后再去找一份好些的工作。哦对了,忘了对公司的结构介绍一下,人不多10人不到,2个开发,1个美工,其他就不说了。所以自学真的就只能自学了,拖控件交付了一个网站,很心虚,很怕维护。。。就这样半年后带着半桶水的Asp.Net水平,再一次提出辞职,这次真走了。
    第二段,内部系统开发维护,在职3.5年。半桶水的.Net技术,可想而知得吃多少闭门羹了。我当时自己的分析是,毕竟用ASP开发是没问题了,就是.net差一些需要继续提升,那么对口的企业就应该是含有ASP业务,同时又有.Net需求可以供我后期发展,关键一定要有团队配合,我不想自己闭门造车了。按着这个标准,没多久就让我找到了,这个公司内部旧系统维护用的是ASP,同时新上线的CRM是需要用.Net开发的,内部还有几个开发人员,并有外包团队跟进CRM,我一看一切都符合我的想法,开开心心就接受了。只是后来事情的发展并不如我所预料。在我入职的半年内,旧的开发人员逐步流失,最后竟只剩我一个开发人员及两个硬件工程师。接下来又由于公司与外包公司闹矛盾导致验收久拖不决,不久外包团队也整体撤走了,留下了一个半生不熟的CRM系统。在开过几次会后,公司领导不希望再投入大笔资金去请外包团队了,功能从简只做核心需求,希望我能把CRM盘活起来,也许是太想做出成绩的缘故吧,最后我真的答应了。所以大概有一年半的时间,我就跟这个系统耗上了,我原以为公司后续还会再招人来帮帮我,如果招到高手还能带带我,等呀等呀望穿秋水,结果你懂的,真的是我一个人从头干到尾直到我离职。
    前期参加了无数个会议获取开发需求,当然这些会议不是专门为我开的,因为公司准备转型各个流程都在变。接下来我利用大学学到的有限的软件工程知识进行概要设计,参照百度模板写了好几个很粗糙很稚嫩的文档。其实领导并没有要求写,但是我当时希望自己能做好一点,还想着以后接手我工作的人会顺利些。再接着轮到绞尽脑汁用半桶水的.Net技术进行开发工作,那时候还不知道JQuery这玩意这么好用,我一直用着纯Javascript,后来在参考那个外包团队的代码时发现的JQuery,如获至宝。这个MSCRM是微软的平台,项目其实是在上面做二次开发,功能接口倒是齐全,就是中文资料很少,所以至少有3个月时间是边看它的英文文档边开发的(我觉得我后来看英文文档的功底都是在那建立起来的)。 别以为开发完了就万事大吉了,没那么容易,还得搞项目实施和用户培训,很多销售人员都不愿意把客户信息录入系统、很多大龄销售人员不会用电脑,所以得听着无数人把他们的怒火砸在我身上,咱还得耐心跟他们讲解,有时候晚上很晚了还要电话远程教他们怎么用(他们白天都要跑客户,晚上才会回家录数据)。由于项目不止涉及到销售部门,这是一个财务部、采购部、商务部、销售部、生产部联动的系统,我还得组织各个部门的操作专员开会,判断哪个环节有问题,哪个环节要改进。这里还得念一下老东家的好,领导层对我的工作还是很支持的,都很好的约束了自己的部下,所以各个部门都比较配合我,任我瞎折腾,再多的抱怨也只是抱怨,过后还是会老老实实的在系统录数据。朋友说怎么看都像是项目经理干的事,那时候的我哪里知道项目经理该干嘛,只是项目经理至少有小弟可以指挥吧,我自己就是最小的小弟,没人可供差遣。
    就这样时间一晃三年半过去了,我开始着急了,我的最初设想是来提升.Net技术的,我是来寻找团队,结果团队一直没有,然后各方面的杂事干了一堆,.Net技术只提升一点点。我在最后那段时间很崩溃,两份工作的时间1.5+3.5=5年,天啊,一个毕业5年的技术人员,还是初级程序员。其实本来早该走了,但我当时觉得项目还没有完全收尾,如果我走了,唯一一个知道来龙去脉的人走了,这个项目就Game Over了,不管是公司之前的投入,还是之前自己的努力,都会付诸东流。说得好听点这叫主人翁精神,有责任心,说得不好听的,这就二啊以为世界没了自己就转不下去。这里面还有一个因素,当时公司好多同龄的小年轻,大家玩得很好,所以也是有点不舍。后话是,我离职半年后有老同事说,接手的几个程序员都不愿意干那些累活,慢慢的那个系统就真的废了。
    第三段,CRM系统开发,在职一天。其实算不上一段,也就上了一天班,但是却是烙在我心头永恒的伤疤。半个月前,一个叫某某CRM软件公司(挺出名的行业软件公司)的主管面试我,过程就不说了反正面试时我对自己的描述并不含任何吹牛成分一五一十的说情况,他当时觉得可以,定的半个月后过来上班,offer也正式发了。结果第一天上班,他出了一个题目,说是考察一下代码风格,我其实没太看懂题意,所以也写的不是很好(由于之前的养成的CtrlC+CtrlV的坏习惯,他们公司是盲敲的不让上外网,我肯定没有随身带开发案例嘛,这也算一个因素吧),然后还是那个主管不由分说的把我赶走了。。。我推掉了其他offer来了,却是这样的下场,但是当时又无奈又羞愧,处于崩溃边缘,拿着入职体检默默的走了。后来朋友说他们这涉嫌违约,可以要求补偿的。这天刚好是2014年的愚人节,嗯真巧,大家快乐就好。
    第四段,OA系统开发。这算是一个小小的转折点吧,我终于找到了一家真正的专职的有团队的开发公司。我以为我会呆很久,结果意外总是如影随形。虽然时间很短,仅仅是一年时间,我却成长的很快,从初级程序员升级为中级程序员,毕业5年了终于可以专心的写代码,不用操心杂事。在这段时间里其实很累,晚上有时候加班到一两点,早上6点依然要起来继续干活,为的就是抓紧完成项目收到回款,虽然累但是大家还是激情满满。一年后,公司由于经营不善情况急转直下,出现了很严重的资金链问题,项目团队越来越懒散,已经超过我能承受的范围。这一次我不再拖泥带水,果断的辞职不接受任何往挽留,寻找生命中的下一站。
    第五段,高端商品在线订购系统,在职1年。这也是我现在正在就职的公司,刚刚干满一年。这一年我倒是接触到了不少新框架、新平台,但是却开心不起来。感觉这一年提升不是很明显,虽然项目在不停的变,但是做的东西没什么深度,在可以预见的明年中感觉也不会有太大变化。这让我很焦虑,主要是这么三个焦虑:
    一、新技术焦虑。我们做的是高端商品订购,价格很贵,流量不会很高,所以根本不用去考虑什么高并发访问,分布式这回事,功能做出来逻辑通了,业务通了基本就不会有问题了,相当于说高并发、分布式这一块基本没有实践机会,但是如果我想再往上走,这些就很重要了(我自己认为的)。朋友说既然想搞这些那就去一些大公司,我又何曾不想,只是陷入一个死循环中——没机会提升这些技术,大公司不收;大公司不收,还是没机会提升这些技术。实话说很多时候我都不敢上CSDN,一看首页总是有那么多新框架,新技术出来,看完就感觉这辈子也追不上了,要被遗弃了。开始怀疑还有必要往这个方向走下去吗。
    二、面对肤浅的焦虑。说一个很基础的东西,面向对象开发,对现在的我们来说,只是拿着面向对象的语言,来开发面向过程的功能罢了,底层结构是基本定好的,所有的项目基本不用改,工期在也不允许改,因为重新搞一个底层架构耗时太多,没有必要。所以我们的工作模式也就是“取数据-加工-输出”,这跟设计模式没有半毛钱关系,这样再做一年我还是廉价的代码搬运工。
    三、标准化的开发流程。我其实也不清楚什么是“标准化”,也不知道怎么标准化,但是我觉得一定有一套规则需要对开发过程进行约束,现在虽然我们表面上有一个团队,但是其实说不上什么配合,每个人用着自己的风格写着可读性、复用性很差的代码,文档是个什么东西,没听过。用一句流行的话调侃,程序员最怕两件事,一是要自己写开发文档,二是别人没有写开发文档。(当然这个问题在大大小小的企业存在着,只是程度问题)。我跟项目经理提过要往这方面改进,经理同意了,但是大家都不知道怎么做,而且有些措施很占用时间和精力,推了一段就推不下去了。
    这三个焦虑其实困扰我很久了,一直在想破局的办法,只是一直找不到切入点。我现在还不知道这个会不会引起我的再一次离职,一方面我感觉在当前环境中无法自我破局,所以想换个环境看看会不会好转;另一方面,到了快奔三的年龄换工作的成本有点高,关键用当前实力换来的工作还不一定能解决我上面的问题。
    工作7年的童鞋你们是不是很厉害了,但是我感觉我就只有2年的工龄,差距好大好失败。
    其实,我知道上面的问题很多技术人员或多或少都会遇到,只是这些问题全部出现又刚好跟我的浮躁心理、奔三前一无所成的焦虑搅合在一起,突然间不知道怎么解决。面对这种情况也不知道去问哪谁,好几个夜晚难以入眠。我自己本来是有一个中期目标的——架构师。但是感觉当前的知识量太少,有一种深深的挫败感,啥事也不想做了。所以放荡堕落了一月余,上班迟到、做事不用心、拖拖拉拉。
    有时候这些经历确实也不好意思说出口,真的今天自揭伤口,需要一些勇气,但我感觉只有直面过去,才能走好后面的路。这个月开始放荡够了,还是要找回那个积极向上的我。当然光靠调整状态、励志并不会有太大收效,前面说过我觉得应该是思维方式、习惯、方法上面出了问题,接下来我将会在这些方向去做一些改变。
    就说到这里吧,这是我来博客园的第一篇文章,以后我也会时不时的在上面发布一些半桶水的技术文章,不要见怪,水平这种东西没法作假。我只想逐步的提升。
    欢迎看完来喷,更欢迎有建设性的意见。

    /*************************************/
    /***作者:DisSun原创*********************/
    /***时间:2016.08.06********************/
    /***注释:祭奠逝去的青春,博客园开篇之作******/
    /*************************************/
    文章:真好,我也想码一辈子的代码  发表时间:2016-08-16, 17:56:25  
    展开↯

    #2340

    作者:广西南宁市
    人生不是眼前的苟且,还有诗和远方的田野。
    文章:我身边有个这样的人  发表时间:2016-08-16, 17:47:38  
    展开↯

    #2341

    作者:广西南宁市
    谢谢指点。
    之前听说貌似AppStore在严查动态加载外部代码的行为?所以当初没有采用ulua的解决方案,都是先C#热更新顶住Android版,然后出iOS稳定版 ^ ^
    文章:游戏热更新杂谈  发表时间:2016-08-16, 17:46:50  
    展开↯

    #2342

    作者:广西南宁市
    还有一种办法,就是在U3D上面实现一个IL解释器,类似于mono一样的,这样就可以在iOS上面动态的加载assembly了。
    文章:游戏热更新杂谈  发表时间:2016-08-16, 17:45:18  
    展开↯

    #2343

    作者:广西南宁市
    文章:我看过一个故事  发表时间:2016-08-16, 17:14:45  
    展开↯

    #2344

    作者:广西南宁市
    今天开发公司项目的时候发现thinkphp的水印功能不支持png图片的原始透明,虽然支持png的透明度度处理但是去在图片原本的透明部分填充了白色,真的是令人蛋疼。 于是果断处理,发现thinkphp使用的是imagecopymerge函数,虽然imagecopymerge支持图片的透明处理但是却不保留png的原始透明度。于是果断改为先用imagecopy进行png图片拷贝然后用imagecopymerge,进行处理的方法,效果果然有效。
    修改方法很简单,在image类里面添加一个imagecopymerge_alpha方法,随便找个位置加上下面的代码就可以了。
    static function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ $opacity=$pct; // getting the watermark width $w = imagesx($src_im); // getting the watermark height $h = imagesy($src_im); // creating a cut resource $cut = imagecreatetruecolor($src_w, $src_h); // copying that section of the background to the cut imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); // inverting the opacity //$opacity = 100 - $opacity; // placing the watermark now imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity); }
    Run code
    Cut to clipboard

      第二步用imagecopymerge_alpha替换原来的imagecopymerge处理,大约83行将
      //生成混合图像 imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'], $wInfo['height'], $alpha);
      Run code
      Cut to clipboard

        替换为
        //生成混合图像 self::imagecopymerge_alpha($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'], $wInfo['height'], $alpha);
        Run code
        Cut to clipboard

          ok搞定,如果看不懂,或者觉得自己修改麻烦,那就直接复制下面的代码,替换Image.class.php内的所有代码
          <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2009 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st <liu21st@gmail.com> // +---------------------------------------------------------------------- /** * 图像操作类库 * @category ORG * @package ORG * @subpackage Util * @author liu21st <liu21st@gmail.com> * @Modify shooke QQ82523829 */ class Image { /** * 取得图像信息 * @static * @access public * @param string $image 图像文件名 * @return mixed */ static function getImageInfo($img) { $imageInfo = getimagesize($img); if ($imageInfo !== false) { $imageType = strtolower(substr(image_type_to_extension($imageInfo[2]), 1)); $imageSize = filesize($img); $info = array( "width" => $imageInfo[0], "height" => $imageInfo[1], "type" => $imageType, "size" => $imageSize, "mime" => $imageInfo['mime'] ); return $info; } else { return false; } } /** * 为图片添加水印 * @static public * @param string $source 原文件名 * @param string $water 水印图片 * @param string $$savename 添加水印后的图片名 * @param string $alpha 水印的透明度 * @return void */ static public function water($source, $water, $savename=null, $alpha=80) { //检查文件是否存在 if (!file_exists($source) || !file_exists($water)) return false; //图片信息 $sInfo = self::getImageInfo($source); $wInfo = self::getImageInfo($water); //如果图片小于水印图片,不生成图片 if ($sInfo["width"] < $wInfo["width"] || $sInfo['height'] < $wInfo['height']) return false; //建立图像 $sCreateFun = "imagecreatefrom" . $sInfo['type']; $sImage = $sCreateFun($source); $wCreateFun = "imagecreatefrom" . $wInfo['type']; $wImage = $wCreateFun($water); //设定图像的混色模式 imagealphablending($wImage, true); //图像位置,默认为右下角右对齐 $posY = $sInfo["height"] - $wInfo["height"]; $posX = $sInfo["width"] - $wInfo["width"]; //生成混合图像 self::imagecopymerge_alpha($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'], $wInfo['height'], $alpha); //输出图像 $ImageFun = 'Image' . $sInfo['type']; //如果没有给出保存文件名,默认为原图像名 if (!$savename) { $savename = $source; @unlink($source); } //保存图像 $ImageFun($sImage, $savename); imagedestroy($sImage); } function showImg($imgFile, $text='', $x='10', $y='10', $alpha='50') { //获取图像文件信息 //2007/6/26 增加图片水印输出,$text为图片的完整路径即可 $info = Image::getImageInfo($imgFile); if ($info !== false) { $createFun = str_replace('/', 'createfrom', $info['mime']); $im = $createFun($imgFile); if ($im) { $ImageFun = str_replace('/', '', $info['mime']); //水印开始 if (!empty($text)) { $tc = imagecolorallocate($im, 0, 0, 0); if (is_file($text) && file_exists($text)) {//判断$text是否是图片路径 // 取得水印信息 $textInfo = Image::getImageInfo($text); $createFun2 = str_replace('/', 'createfrom', $textInfo['mime']); $waterMark = $createFun2($text); //$waterMark=imagecolorallocatealpha($text,255,255,0,50); $imgW = $info["width"]; $imgH = $info["width"] * $textInfo["height"] / $textInfo["width"]; //$y = ($info["height"]-$textInfo["height"])/2; //设置水印的显示位置和透明度支持各种图片格式 imagecopymerge($im, $waterMark, $x, $y, 0, 0, $textInfo['width'], $textInfo['height'], $alpha); } else { imagestring($im, 80, $x, $y, $text, $tc); } //ImageDestroy($tc); } //水印结束 if ($info['type'] == 'png' || $info['type'] == 'gif') { imagealphablending($im, FALSE); //取消默认的混色模式 imagesavealpha($im, TRUE); //设定保存完整的 alpha 通道信息 } Header("Content-type: " . $info['mime']); $ImageFun($im); @ImageDestroy($im); return; } //保存图像 $ImageFun($sImage, $savename); imagedestroy($sImage); //获取或者创建图像文件失败则生成空白PNG图片 $im = imagecreatetruecolor(80, 30); $bgc = imagecolorallocate($im, 255, 255, 255); $tc = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 150, 30, $bgc); imagestring($im, 4, 5, 5, "no pic", $tc); Image::output($im); return; } } /** * 生成缩略图 * @static * @access public * @param string $image 原图 * @param string $type 图像格式 * @param string $thumbname 缩略图文件名 * @param string $maxWidth 宽度 * @param string $maxHeight 高度 * @param string $position 缩略图保存目录 * @param boolean $interlace 启用隔行扫描 * @return void */ static function thumb($image, $thumbname, $type='', $maxWidth=200, $maxHeight=50, $interlace=true) { // 获取原图信息 $info = Image::getImageInfo($image); if ($info !== false) { $srcWidth = $info['width']; $srcHeight = $info['height']; $type = empty($type) ? $info['type'] : $type; $type = strtolower($type); $interlace = $interlace ? 1 : 0; unset($info); $scale = min($maxWidth / $srcWidth, $maxHeight / $srcHeight); // 计算缩放比例 if ($scale >= 1) { // 超过原图大小不再缩略 $width = $srcWidth; $height = $srcHeight; } else { // 缩略图尺寸 $width = (int) ($srcWidth * $scale); $height = (int) ($srcHeight * $scale); } // 载入原图 $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type); if(!function_exists($createFun)) { return false; } $srcImg = $createFun($image); //创建缩略图 if ($type != 'gif' && function_exists('imagecreatetruecolor')) $thumbImg = imagecreatetruecolor($width, $height); else $thumbImg = imagecreate($width, $height); //png和gif的透明处理 by luofei614 if('png'==$type){ imagealphablending($thumbImg, false);//取消默认的混色模式(为解决阴影为绿色的问题) imagesavealpha($thumbImg,true);//设定保存完整的 alpha 通道信息(为解决阴影为绿色的问题) }elseif('gif'==$type){ $trnprt_indx = imagecolortransparent($srcImg); if ($trnprt_indx >= 0) { //its transparent $trnprt_color = imagecolorsforindex($srcImg , $trnprt_indx); $trnprt_indx = imagecolorallocate($thumbImg, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']); imagefill($thumbImg, 0, 0, $trnprt_indx); imagecolortransparent($thumbImg, $trnprt_indx); } } // 复制图片 if (function_exists("ImageCopyResampled")) imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); else imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $width, $height, $srcWidth, $srcHeight); // 对jpeg图形设置隔行扫描 if ('jpg' == $type || 'jpeg' == $type) imageinterlace($thumbImg, $interlace); // 生成图片 $imageFun = 'image' . ($type == 'jpg' ? 'jpeg' : $type); $imageFun($thumbImg, $thumbname); imagedestroy($thumbImg); imagedestroy($srcImg); return $thumbname; } return false; } /** * 根据给定的字符串生成图像 * @static * @access public * @param string $string 字符串 * @param string $size 图像大小 width,height 或者 array(width,height) * @param string $font 字体信息 fontface,fontsize 或者 array(fontface,fontsize) * @param string $type 图像格式 默认PNG * @param integer $disturb 是否干扰 1 点干扰 2 线干扰 3 复合干扰 0 无干扰 * @param bool $border 是否加边框 array(color) * @return string */ static function buildString($string, $rgb=array(), $filename='', $type='png', $disturb=1, $border=true) { if (is_string($size)) $size = explode(',', $size); $width = $size[0]; $height = $size[1]; if (is_string($font)) $font = explode(',', $font); $fontface = $font[0]; $fontsize = $font[1]; $length = strlen($string); $width = ($length * 9 + 10) > $width ? $length * 9 + 10 : $width; $height = 22; if ($type != 'gif' && function_exists('imagecreatetruecolor')) { $im = @imagecreatetruecolor($width, $height); } else { $im = @imagecreate($width, $height); } if (empty($rgb)) { $color = imagecolorallocate($im, 102, 104, 104); } else { $color = imagecolorallocate($im, $rgb[0], $rgb[1], $rgb[2]); } $backColor = imagecolorallocate($im, 255, 255, 255); //背景色(随机) $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 $pointColor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //点颜色 @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor); @imagerectangle($im, 0, 0, $width - 1, $height - 1, $borderColor); @imagestring($im, 5, 5, 3, $string, $color); if (!empty($disturb)) { // 添加干扰 if ($disturb = 1 || $disturb = 3) { for ($i = 0; $i < 25; $i++) { imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $pointColor); } } elseif ($disturb = 2 || $disturb = 3) { for ($i = 0; $i < 10; $i++) { imagearc($im, mt_rand(-10, $width), mt_rand(-10, $height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $pointColor); } } } Image::output($im, $type, $filename); } /** * 生成图像验证码 * @static * @access public * @param string $length 位数 * @param string $mode 类型 * @param string $type 图像格式 * @param string $width 宽度 * @param string $height 高度 * @return string */ static function buildImageVerify($length=4, $mode=1, $type='png', $width=48, $height=22, $verifyName='verify') { import('ORG.Util.String'); $randval = String::randString($length, $mode); session($verifyName, md5($randval)); $width = ($length * 10 + 10) > $width ? $length * 10 + 10 : $width; if ($type != 'gif' && function_exists('imagecreatetruecolor')) { $im = imagecreatetruecolor($width, $height); } else { $im = imagecreate($width, $height); } $r = Array(225, 255, 255, 223); $g = Array(225, 236, 237, 255); $b = Array(225, 236, 166, 125); $key = mt_rand(0, 3); $backColor = imagecolorallocate($im, $r[$key], $g[$key], $b[$key]); //背景色(随机) $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor); imagerectangle($im, 0, 0, $width - 1, $height - 1, $borderColor); $stringColor = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120)); // 干扰 for ($i = 0; $i < 10; $i++) { imagearc($im, mt_rand(-10, $width), mt_rand(-10, $height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $stringColor); } for ($i = 0; $i < 25; $i++) { imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $stringColor); } for ($i = 0; $i < $length; $i++) { imagestring($im, 5, $i * 10 + 5, mt_rand(1, 8), $randval{$i}, $stringColor); } Image::output($im, $type); } // 中文验证码 static function GBVerify($length=4, $type='png', $width=180, $height=50, $fontface='simhei.ttf', $verifyName='verify') { import('ORG.Util.String'); $code = String::randString($length, 4); $width = ($length * 45) > $width ? $length * 45 : $width; session($verifyName, md5($code)); $im = imagecreatetruecolor($width, $height); $borderColor = imagecolorallocate($im, 100, 100, 100); //边框色 $bkcolor = imagecolorallocate($im, 250, 250, 250); imagefill($im, 0, 0, $bkcolor); @imagerectangle($im, 0, 0, $width - 1, $height - 1, $borderColor); // 干扰 for ($i = 0; $i < 15; $i++) { $fontcolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagearc($im, mt_rand(-10, $width), mt_rand(-10, $height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $fontcolor); } for ($i = 0; $i < 255; $i++) { $fontcolor = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $fontcolor); } if (!is_file($fontface)) { $fontface = dirname(__FILE__) . "/" . $fontface; } for ($i = 0; $i < $length; $i++) { $fontcolor = imagecolorallocate($im, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120)); //这样保证随机出来的颜色较深。 $codex = String::msubstr($code, $i, 1); imagettftext($im, mt_rand(16, 20), mt_rand(-60, 60), 40 * $i + 20, mt_rand(30, 35), $fontcolor, $fontface, $codex); } Image::output($im, $type); } /** * 把图像转换成字符显示 * @static * @access public * @param string $image 要显示的图像 * @param string $type 图像类型,默认自动获取 * @return string */ static function showASCIIImg($image, $string='', $type='') { $info = Image::getImageInfo($image); if ($info !== false) { $type = empty($type) ? $info['type'] : $type; unset($info); // 载入原图 $createFun = 'ImageCreateFrom' . ($type == 'jpg' ? 'jpeg' : $type); $im = $createFun($image); $dx = imagesx($im); $dy = imagesy($im); $i = 0; $out = '<span style="padding:0px;margin:0;line-height:100%;font-size:1px;">'; set_time_limit(0); for ($y = 0; $y < $dy; $y++) { for ($x = 0; $x < $dx; $x++) { $col = imagecolorat($im, $x, $y); $rgb = imagecolorsforindex($im, $col); $str = empty($string) ? '*' : $string[$i++]; $out .= sprintf('<span style="margin:0px;color:#%02x%02x%02x">' . $str . '</span>', $rgb['red'], $rgb['green'], $rgb['blue']); } $out .= "<br>\n"; } $out .= '</span>'; imagedestroy($im); return $out; } return false; } /** * 生成UPC-A条形码 * @static * @param string $type 图像格式 * @param string $type 图像格式 * @param string $lw 单元宽度 * @param string $hi 条码高度 * @return string */ static function UPCA($code, $type='png', $lw=2, $hi=100) { static $Lencode = array('0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011'); static $Rencode = array('1110010', '1100110', '1101100', '1000010', '1011100', '1001110', '1010000', '1000100', '1001000', '1110100'); $ends = '101'; $center = '01010'; /* UPC-A Must be 11 digits, we compute the checksum. */ if (strlen($code) != 11) { die("UPC-A Must be 11 digits."); } /* Compute the EAN-13 Checksum digit */ $ncode = '0' . $code; $even = 0; $odd = 0; for ($x = 0; $x < 12; $x++) { if ($x % 2) { $odd += $ncode[$x]; } else { $even += $ncode[$x]; } } $code.= ( 10 - (($odd * 3 + $even) % 10)) % 10; /* Create the bar encoding using a binary string */ $bars = $ends; $bars.=$Lencode[$code[0]]; for ($x = 1; $x < 6; $x++) { $bars.=$Lencode[$code[$x]]; } $bars.=$center; for ($x = 6; $x < 12; $x++) { $bars.=$Rencode[$code[$x]]; } $bars.=$ends; /* Generate the Barcode Image */ if ($type != 'gif' && function_exists('imagecreatetruecolor')) { $im = imagecreatetruecolor($lw * 95 + 30, $hi + 30); } else { $im = imagecreate($lw * 95 + 30, $hi + 30); } $fg = ImageColorAllocate($im, 0, 0, 0); $bg = ImageColorAllocate($im, 255, 255, 255); ImageFilledRectangle($im, 0, 0, $lw * 95 + 30, $hi + 30, $bg); $shift = 10; for ($x = 0; $x < strlen($bars); $x++) { if (($x < 10) || ($x >= 45 && $x < 50) || ($x >= 85)) { $sh = 10; } else { $sh = 0; } if ($bars[$x] == '1') { $color = $fg; } else { $color = $bg; } ImageFilledRectangle($im, ($x * $lw) + 15, 5, ($x + 1) * $lw + 14, $hi + 5 + $sh, $color); } /* Add the Human Readable Label */ ImageString($im, 4, 5, $hi - 5, $code[0], $fg); for ($x = 0; $x < 5; $x++) { ImageString($im, 5, $lw * (13 + $x * 6) + 15, $hi + 5, $code[$x + 1], $fg); ImageString($im, 5, $lw * (53 + $x * 6) + 15, $hi + 5, $code[$x + 6], $fg); } ImageString($im, 4, $lw * 95 + 17, $hi - 5, $code[11], $fg); /* Output the Header and Content. */ Image::output($im, $type); } static function output($im, $type='png', $filename='') { header("Content-type: image/" . $type); $ImageFun = 'image' . $type; if (empty($filename)) { $ImageFun($im); } else { $ImageFun($im, $filename); } imagedestroy($im); } static function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ $opacity=$pct; // getting the watermark width $w = imagesx($src_im); // getting the watermark height $h = imagesy($src_im); // creating a cut resource $cut = imagecreatetruecolor($src_w, $src_h); // copying that section of the background to the cut imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); // inverting the opacity //$opacity = 100 - $opacity; // placing the watermark now imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity); } }
          Run code
          Cut to clipboard
            文章:解决thinkphp图片上传生成缩略图背景为黑色的问题  发表时间:2016-08-16, 16:53:17  
            展开↯

            #2345

            作者:广西南宁市
            文章:我身边有个这样的人  发表时间:2016-08-16, 10:07:41  
            展开↯

            #2346

            作者:广西南宁市
            那些瞎编的著名鸡汤

            温水煮青蛙
            青蛙又不是傻逼。
            你听过的版本
            记得在做生物实验时,把一只青蛙放进装有沸水的杯子时,青蛙马上跳出来,但把一只青蛙放在另一个温水的杯子中,并慢慢加热至沸腾,青蛙刚开始时会很舒适地在杯中游来游去,到它发现太热时,已失去力量跳不出来了。大环境的改变能决定你的成功与失败,但大环境的改变有时是看不到的,我们必须时时注意,正所谓“生于忧患,死于安乐!太舒适的环境往往蕴含着危险。习惯的生活方式,也许对你最具威胁。觉察到趋势的小改变,就必须“停下来”,从不同角度来思考。
            事实是这样的
            青蛙又不是傻逼,怎么会活活被煮死?不过还真有人做煮青蛙的残忍实验,做这个实验的是美国动物学教授霍奇森。青蛙属于两栖类是冷血动物,体温会随着环境的温度进行调整。霍奇森研究的就是两栖类可以耐受的最高温度是多少……你看,科学家总是会给一些奇葩的实验找点很科学的借口。霍奇森选定的加热速率是大概是每分钟1.1摄氏度。他发现到了一定温度以后,青蛙会开始躁动不安,试图逃离这个环境,如果容器允许,青蛙还是会义不容辞地跳出来。所以,温水煮青蛙的故事根本就是蒙人的。《后会无期》你也看过了,什么是现实?

            鸵鸟心态
            你当它是母鸡啊?
            你听过的版本
            当大漠中的鸵鸟遇到危险时,它总会把头埋在沙堆里,以为自己看不见就安全了……于是,鸵鸟心态产生了。这个看似消极的词语,却被很多人不自觉地运用在婚姻关系中,以此求得稳定美满的生活。正所谓:婚前睁着眼睛找对象,婚后闭着眼睛过日子。鸵鸟的策略就是妥协,通过妥协而得到利益最大化的选择。非原则性的问题,采取鸵鸟策略有助于关系和谐,但在原则性的问题上,采取鸵鸟策略必须三思后行。
            事实是这样的
            这是视觉上的误差而已,鸵鸟体型巨大,但脑袋非常小。如果你从远处看见它们在地上啄食,它们的脑袋看起来就好像埋进了地里似的,不过它们绝不会这么做,除非它们活腻了……但是它们确实会在土里挖洞,给自己的蛋做个窝,偶尔探头瞅两眼窝里的蛋。而真正遇到危险时,鸵鸟的第一反应是以70公里的时速跑路,如果逃不了,战上三百个回合也无妨。别小看它的战斗力,发飙的鸵鸟可以弄死一只成年雄狮。

            鱼的记忆只有7秒
            不可以侮辱鱼的智商!
            你听过的版本
            早在很久以前,就听说过一个故事:鱼的记忆只有7秒,7秒之后它就不会记得曾经的事情了,所有的一切又都会变成崭新的开始。所以,在那一方小小的鱼缸里面,它永远都会兴致勃勃,永远都不会觉得无聊。有时候,我多么希望自己就是那只鱼,能够在七秒后遗忘所有。但有时,将一切都遗忘,显的是那么的可怕毕竟身边还有许多美好的人和事物,值得去珍惜。
            事实是这样的
            事实上,如果把“鱼的记忆有7秒”当成一个科学的结论,疑问就来了。记忆能力可以被精确到秒吗?如果鱼的平均记忆有7秒,那么一些笨鱼的记忆岂不是只有两三秒?当这些笨鱼咬了一口食物以后,会不会瞬间忘记嘴里含着的东西是什么?幸运的是,这种状况并不存在。几乎所有关于鱼类记忆的研究都表明,鱼的记忆远不止7秒。早在上世纪60年代,当化学开始介入神经生物学的时候,就已经有人研究金鱼的记忆能力了。1965年,美国密歇根大学的研究人员用金鱼做了一个实验。他们把金鱼放在一个很长的鱼缸里,然后在鱼缸的一端射出一道亮光,20秒后,再在鱼缸射出亮光的一端释放电击。很快,金鱼就对电击形成了记忆,当它们看到光的时候,不等电击释放到水里就会迅速游到鱼缸的另一头,以躲避电击。设计实验的科学家们发现,只要进行合理的训练,这些金鱼可以在至少1个月的时间里一直记住躲避电击的技巧。

            老鹰的重生
            饿150天?老鹰又不冬眠。
            你听过的版本
            据说在鸟类世界中鹰的寿命最长,可以活到70岁。然而,并不是任何一只鹰都能活这么长时间。原来,鹰要想活到70岁,必须在它40岁时完成一次蜕变。因为当鹰活到40岁的时候,一切功能都已退化,迟钝的爪子已经抓不住猎物,过长的喙也啄不住食物,笨拙的翅膀更难以载动自己沉重的身体。在这个时刻,鹰的选择只有两种:要么等死,要么重生。如果选择重生,它要飞到人迹罕至的山顶,用喙猛力击打岩石,直到脱落,等到新的喙长出来,再用它把爪上的指甲一根根拔出来,等新的指甲长出来后,再把身体上的羽毛一根根拔掉;这一残忍的重生过程历时150天,只要熬过150天,获得新生的鹰又可以再活三十年,重新称霸蓝天了。
            事实是这样的
            鹰科里有60多种鸟,平均寿命只有30年,只有美洲鹫或神鹰科鸟类可以活到六七十岁。但不管怎么样,更换喙、爪和羽毛都是完全不可能的。喙是头骨的一部分,如果敲掉,就相当于砸掉人类的上下颌,连骨头带肉,血光四飞……脑浆子不流出来就不错了,还涅什么槃。何况这5个月,爪子、嘴和羽毛都不能用,如何进食?早就饿死啦!鹰类最长寿命有记录的是一只安第斯神鹰,人工饲养了73年。

            老鼠制服大象
            螳臂挡车喏?
            你听过的版本
            大象是陆地上最庞大的动物,它不害怕任何猛禽巨兽,唯独害怕弱小的老鼠,因为老鼠能在短时间内钻到大象耳朵和鼻子里,从内部化解敌人。大象虽庞大面对自己的敌人都是以身体的庞大而取胜,但在老鼠身上就失效很多。当两个极端的东西放一块时,就会出现势均力敌的现象。最终谁会取胜,得看智慧。
            事实是这样的
            智慧买个表!完全没有这回事。无论是圈养的还是野生的大象,对老鼠都没有半点惧怕的意思。除了人之外,健康的成年大象面临的敌人很少,他们只会对不熟悉的情景和声音感到害怕。在罗马时期大象曾被送上战场,它们因惧怕猪的嚎叫声而逃走,这才产生了关于大象害怕老鼠的传说。在动物园里,老鼠是大象的好室友,不过大象根本不搭理它们。如果真有哪只缺心眼的老鼠胆敢钻到大象的鼻孔里,一个喷嚏就能送它见上帝。
            谁动了我的奶酪

            老鼠爱大米
            你听过的版本
            两只小老鼠生活在迷宫里,奶酪是它们的最爱,赖以生存并追寻的东西。它们同时发现了一个奶酪仓库,并过上了幸福的生活。突然有一天,奶酪不见了。这突如其来的变故使它们心态暴露无遗。其中一只小老鼠随变化而动,立即开始寻找新奶酪,而它很快就找到了。另一只小老鼠则始终固守在已消逝的美好幻觉中,抱怨不休,始终走不出对过去美好生活的幻想。人生苦短,会遇到很多变故,我们必须明白什么,应该珍惜什么。以从容豁达的态度面对纷繁复杂的生活现实,学会为得到去感恩,为失去去感谢。
            事实是这样的
            很奇怪,其实很正能量的一个故事,为什么要拿奶酪说事呢。老鼠这种啮齿动物其实更喜欢富含糖的食物,如巧克力。老鼠的天然食物主要由谷物和水果组成,这两种都富含糖类。而奶酪是一种在它们的自然环境中所没有的食物,所以,它们根本就不喜欢奶酪,不会对奶酪产生任何反应。

            神秘的墓地
            又不是马航的飞机
            你听过的版本
            如果你忘了自己从哪里来,至少得知道自己要往哪里去,大象就是这样。当大象感到自己时日不多的时候,会在本能的指引下脱离群体,来到一个神秘的地方,孤独地等待死亡降临。这个地点很神圣又很隐秘,大象自己能找而人类却怎么也找不到,这就是大象墓地,墓地里埋藏了千百年来的大象骨骸。
            事实是这样的
            大象体型巨大,需要摄取大量能量来撑起巨大身躯的正常运作,但是它们又天生运行着一套效率低下的消化系统,食品中60%的营养都只是在肠胃打了个转就被排出了体外。于是乎,大象一天的大多数时间都是在吃东西,一只成年象每天要吃掉上百斤的植物,也因此他们特别容易受到食物短缺的影响。一旦食物匮乏,它们会退到永久水源附近,然后饥饿的大象因营养不良导致低血糖,继而诱发酮症(酮症表现为嗜睡)。大象开始困倦、昏迷,不再有力量离开水源探寻新路。终于有一天,它们站不起来了,先后静静地离开这个世界。所以,水源附近才成为大象尸骨聚集的地方……最扯的是现在GPS这么发达,有什么东西是大象能找到人类却找不到的?

            完美的珍珠
            渔夫一定是个处女座
            你听过的版本
            渔夫从海里捞到一颗大珍珠,他欣喜若狂。可拿到手一看,发现了珍珠上有一个小黑点。渔夫觉得很不舒服,他想,如能去掉小黑点,珍珠将变得完美无缺。于是渔夫便开始用小刀刮掉黑点,可剥掉一层黑点仍在,再剥一层,黑点还在,剥到最后,黑点没了,珍珠也不复存在。在这个世界上,一味追求完美的人往往更容易陷入痛苦的深渊而不可自拔。其实世界并不完美,人生是不可能没有遗憾的。生命可贵之处不在于事事处处完美,而在于看到自己的不足之后能坦然面对。
            事实是这样的
            编故事的人,你确定这颗不是黑珍珠?!珍珠产于珠母贝类软体动物的体内,是由于内分泌作用而生成的,是由大量微小的文石晶体集合而成的。所以,天然珍珠质不可能这么精确地形成多层黑点,渔夫捞到的必然是假货,尽情地刮吧!

            斑羚飞渡
            达尔文不答应
            你听过的版本
            七八十头斑羚被猎人逼到峡谷的悬崖边,单只的斑羚能力不足以跳过峡谷到达对岸,斑羚们为了种族的生存,选择了牺牲一半,保存另一半的方法。在头羊一只老雄羚的带领下,一只斑羚先跳起,在跳跃到高点的时候,另一只起跳,踩着前一只斑羚的背,以此为跳板,到达对岸。
            事实是这样的
            这个著名的段落来自作家沈石溪的成名作《斑羚飞渡》,文中的斑羚学名灰斑羚。解了斑羚的日常习性你就会明白,现实中灰斑羚包括其他几种斑羚都不可能存在《斑羚飞渡》中所描述的七八十头的群体,更没有头羊这一说。而且对于这些日常根本没有组织没有纪律的动物,你能指望他们在穷途末路时相互关照么?另外,进化的主导力量不是群体选择而是个体选择。“飞渡”虽然有利于群体的永久延续,但并不可能进化出来,它违反现代进化生物学的基本原理。信语文老师还是自然老师?!
            愤怒杀死小白鼠
            比起愤怒,愚蠢更具杀伤力。
            你听过的版本
            心理学家实验发现,人愤怒郁闷时所呼出的气体,可以凝结成紫色的液体,而这种液体能让小白鼠中毒。这个故事告诉我们,健康和心情也是息息相关的。“境缘无好丑,好丑在于心。”人们对幸福的感受,其实与外界关系不大。调节自身心态,才能最大限度地享有安乐幸福。
            事实是这样的
            哈哈哈哈哈,这条要把我笑哭了好嘛?!小白鼠可不是战5渣!气体是在低温高压下才能液化,而人呼出的气体绝大部分是氮气,常压下,氮气的液化温度是零下196摄氏度,是无色液体而非紫色。这种低温,小白鼠会立刻冻成冰棍死掉,和愤怒、郁闷什么的没有半毛钱关系。
            文章:我身边有个这样的人  发表时间:2016-08-16, 10:05:41  
            展开↯

            #2347

            作者:广西南宁市
            大骂马蓉的一般是男人,说宝宝做的过分的一般都是女生,评论个人色彩是很正常的,世上哪有客观的现实,想想宇宙的起源,基本上驳斥了所有的哲学一样
            文章:我看过一个故事  发表时间:2016-08-15, 15:54:40  
            展开↯

            #2348

            作者:广西南宁市
            打开支付宝,弹出提示:你的财富超过了附近0.01%的人,从此再也不用支付宝
            文章:我身边有个这样的人  发表时间:2016-08-13, 14:22:45  
            展开↯

            #2349

            作者:广西南宁市
            什么叫体制内媒体,偏激一点它就是一个带有明显的政治立场和色彩的产物。在媒体渠道贫乏的过去,因为体制作用导致社会资源和资本倾斜他可以一家独大。但现在社会资本和部分的资源再分配,在温室里长大的他就慢慢的变得迟暮了。人往高处走,水往低处流,人才也一样。
            文章:说真的,吃谁的饭,给谁说话,才是生活的日常  发表时间:2016-08-12, 14:39:15  
            展开↯

            #2350

            作者:广西南宁市
            另外,说一句,记者的职业荣誉,说真的还是被记者群体中的少数(多数)人被败掉的。
            有偿新闻、有偿不闻、各种软文、造谣生事、无中生有、趁火打劫。大家都见多了。
            说真的,媒体人,一半是天使、一半是魔鬼。
            有天使吗?有
            有魔鬼吗?也有。
            媒体的声誉是被外界妖魔化的吗? 我不这样认为,我认为还是被媒体自己败坏掉的。
            文章:说真的,吃谁的饭,给谁说话,才是生活的日常  发表时间:2016-08-12, 14:38:56  
            展开↯

            #2351

            作者:广西南宁市
            做个一个今年从中字头媒体出来的体制内媒体人,有几句话不吐不快。
            一、体制内平台价值越来越低 这个确实是现实。 这要从几方面来看

            传统媒体的黄金30年是媒体自身努力的结果吗? 实际上并不是,一方面是赶上了国家从封闭走向开放的大时代,对信息的需求如饥似渴。 一方面是传统媒体代表的是中共几十年积累下的威信。
            媒体一方面贩卖信息,一方面贩卖威信(想想各类软文),甚至还有政府让渡的“监督权”,请注意媒体的“监督权”并不是没有代价与生俱来的。
            以上几方面促成了媒体的黄金30年。但是现在,一方面互联网导致的信息爆炸,传统媒体不能垄断信息传播,控制社会议题。一方面,中共的威信被他们自己以及部分媒体折现的差不多了。更糟糕的是政府对“监督权”也有自己的想法。 so 传统媒体不过是在回归历史的常态。

            二、那么什么是历史的常态
            传统媒体在历史上只有两个选择,要么被权力包养比如体制内的媒体,要么被资本包养参考马云和赵薇,或美国媒体。 所谓的独立媒体实际上只是个幌子。 比如人日这样的也可以一边发社论一边发牛皮癣的软文。
            毛泽东在文艺座谈会上说的,文艺为谁服务是个根本问题,实际上看古今中外,莫不如此。 以为媒体人有所谓的荣耀、不过是一时的风光。
            现在,双向选择来了。 对媒体来说,吃谁的饭给谁说话才是常态,so 马云最近收购那么多媒体真的是要弘扬媒体精神? navie。
            说到双向选择,对政府来说,传统媒体受众下降,我还不愿意包养你。君不见,广电强行要求入股各大视频网站,就是这条道路的体现。 养狗我也要养能咬人的。

            三、人才和薪酬
            说实话,没人care 什么人才和薪酬,主管部门会care你一个主编走不走?爱走不走。薪酬?去互联网?好啊,有本事的赶紧。 (实际上没本事,出不去的才是常态)

            四、转型和持股
            这事,对双方实际上都精神分裂。 完全是脑洞做法。
            打破大锅饭、员工持股。好啊,行政订阅取消,政府支持取消,连两会的采访证都没有,没有政府资源,市场媒体混的多惨,大家都看得到。到时候别说高薪了,房租是不是付的起都那说。还得天天去舔广告客户。
            另外,员工持股,主编说了算在报道倾向上听谁的?听党的?听客户的?
            别和我说什么理中客。都他妈扯淡,玩文字的在报道里面塞私货才是常态。硬骨头没见几个,看见狗骨头就上去的多了去了。

            五、未来
            实际上,没什么未来,看美国这次大选,媒体报道的倾向性,各种政治正确。大家看这次美国人是不是会吧川普推上去吧。
            自媒体其实也很难形成合力,还是被狗浪、腾讯给控制了。给你屏蔽就屏蔽。连团中央,军报、都照样删除。问你怕不怕。

            说真的,吃谁的饭,给谁说话,才是生活的日常
            文章:说真的,吃谁的饭,给谁说话,才是生活的日常  发表时间:2016-08-12, 14:37:37  
            展开↯

            #2352

            作者:广西南宁市
            如果你承认“统治”,就没有真正意义上的“民主”,就这么简单。
            文章:中国宗教就是一部献媚权贵的历史  发表时间:2016-08-12, 11:40:46  
            展开↯

            #2353

            作者:广西南宁市
            让我们正当黑发的时候,许下一个白发的愿望.
            文章:我看过一个故事  发表时间:2016-08-12, 11:36:11  
            展开↯

            #2354

            作者:广西南宁市
            浏览器的缓存机制

            以下都是在chrome下测试的,不同的浏览器可能有一些差异,所以不能依靠浏览器默认的规则来控制缓存,开发时一般会在服务器端做缓存策略的配置。(如给静态资源名称加MD5戳,让浏览器对静态资源进行缓存,但对各页面url的请求不进行缓存。当静态资源有更改时,MD5值也会更改,页面上引用静态资源的url也会更改,从而使浏览器根据新的url发起请求来获取更新后的静态资源)

            前提条件:此url路径您已经使用浏览器最近访问过,并没有超过缓存的时间,比如您在前1分钟刚刚访问过此url路径。

            F5、history.go(0)、location.reload()、location.reload(true) (对于所有资源,都会发送请求至服务器,对于有缓存并且还可用的请求返回304,没有缓存或者缓存已不可用的请求会重新下载数据)
            无法跳过浏览器缓存,所有HTTP请求的请求头中通常包含了If-Modified-Since 或 If-None-Match字段,或者两者兼有.如果服务器认为被请求的文件没有发生变化,则返回304响应,浏览器直接从本地缓存中获取数据,否则服务器将传输最新的数据给浏览器,并且浏览器会更新缓存。
            注意点:上述情况只适用于第一次请求时响应头中携带Last-Modified或者ETag字段的请求(如果响应头中包含了这些字段,浏览器会缓存文件,否则不会缓存,因为此时缓存文件没有任何意义,没有信息传给服务器进行比较),如果第一次请求时响应头中没有携带这些字段,那么再次发起该请求时,请求头里不会携带If-Modified-Since 或 If-None-Match字段,会从服务器重新获取数据。



            CTRL+F5 (强制刷新,所有的请求都会重新下载数据)
            所有请求头中没有上面的那两个头,却有Pragma: no-cache 或 Cache-Control: no-cache 字段,或者两者兼有.服务器看到no-cache这样的值就会把最新的数据传输过去。如果响应头中了携带Last-Modified或者ETag字段,浏览器就会缓存对应的数据。

            地址栏回车 (有缓存(不管缓存是否还可用)的直接从缓存获取数据(地址栏url不管有没有对应的缓存,都会发送请求至服务器,只是缓存还可用时返回304,否则重新下载数据),不发送请求,没有缓存的从服务器下载数据)
            地址栏url对应的请求跟history.go(0)、F5等 效果一样,如果第一次请求该url时响应头中携带Last-Modified或者ETag字段,那么该次回车时发起的请求会携带If-Modified-Since 或 If-None-Match字段,或者两者兼有,否则不会携带If-Modified-Since 或 If-None-Match字段;对于其他的请求,如果浏览器有对应的缓存(即有缓存且没过期),就直接从缓存里获取数据,根本不会发送请求到服务器,否则(这种情况基本就是第一次请求时响应头中没有携带Last-Modified或者ETag字段的请求或者缓存过期的请求)就发送请求到服务器,重新下载数据。

            a标签、location.href、location.replace跳转 (有缓存(不管缓存是否还可用)的直接从缓存获取数据,不发送请求,没有缓存的从服务器下载数据)
            对于所有的请求,如果浏览器有对应的缓存,就直接从缓存里获取数据,不会发送请求到服务器,否则就发送请求到服务器,重新下载数据。

            浏览器前进后退按钮、history.go、history.forward、history.go(history.go(0)除外)
            所有数据都直接从缓存里获取,但js会重新执行。如果该页面是用ajax获取数据的,那么不管前进或者后退到该页面时,都会重新ajax请求数据。
            文章:常用html、demo代码  发表时间:2016-08-12, 10:42:43  
            展开↯

            #2355

            作者:广西南宁市
            伪元素上踩得坑
            今天在写css3 中过渡transition效果时候,让伪元素出现hover效果,结果怎么也不成功,最后终于发现 元素的hover是写在伪元素之前的!!!div:hover::before 而不是 div::before:hover!!! 受教了。
            文章:常用html、demo代码  发表时间:2016-08-12, 10:38:08  
            展开↯

            #2356

            作者:广西南宁市
            CSS之伪元素 :first-line 用来选择第一行内容 :first-letter 用来选择文本第一个字母或文本 ::before 插入额外内容的头部 ::after 插入额外内容的尾部 ::selection 用来匹配突出显示的文本
            Run code
            Cut to clipboard
              文章:常用html、demo代码  发表时间:2016-08-12, 10:37:22  
              展开↯
              你好,残忍屏蔽广告

              确定要清除编辑框内容吗?

              该删除操作将不可恢复。

              删除 取消

              激活Windows

              转到"设置"以激活Windows。