欢迎光临俺地博客。

聊城门户网,我故乡的网。

博主资料

个人统计

用户名: Admin
等级: 普通百姓
威望: 9
在线时间: 47 小时
日志总数: 1160
评论数量: 235
访问次数: 2464609
建立时间: 2003-07-20
RSS订阅       手机访问

日 历

2018 - 5
  12345
6789101112
13141516171819
20212223242526
2728293031  
«» 2018 - 5 «»

日志分类

最近访问

好友(0)

首页 前页 后页 尾页
1页,共 0 页

圈子信息

1.聊城门户网网友 (共14个成员)
日志:2 篇
相册:0 个
音乐专辑:2 个
最新: 流行歌曲
2.聊城互联网风云 (共2个成员)
日志:0 篇
相册:0 个
音乐专辑:2 个
最新: 流行歌曲

日志文章列表

2017年10月31日 15:16:50

中国四大名酒、中国十大名酒排名和白酒排名前100名

中国的四大名酒:
    茅台、汾酒、泸州老窖特曲酒和西凤酒

中国的十大名酒:
    剑南春、古井贡、泸洲老窖、贵州茅台、五粮液、汾酒、杜康、董酒、小糊涂仙、蒙古王

一、茅台酒
    茅台酒历史悠久、源远流长。从公元前135年汉武帝“甘美之”的褒奖到1704年后清代大儒郑珍“酒冠黔人国”的赞誉,从1915年“巴拿马万国博览会”金奖到1996年荣获纪念“巴拿马万国博览会”。
    茅台酒系以优质高梁为原料,用小麦制成高温曲,而用曲量多于原料。用曲多,发酵期长,多次发酵,多次取酒等独特工艺,这是茅台酒风格独特、品质优异的重要原因。酿制茅台酒要经过两次加生沙(生粮)、八次发酵、九次蒸馏,生产周期长达八九个月,再陈贮三年以上,勾兑调配,然后再贮存一年,使酒质更加和谐醇香,绵软柔和,方准装瓶出厂,全部生产过程近五年之久。
    茅台酒是风格最完美的酱香型大曲酒之典型,故“酱香型”又称“茅香型”。其酒质晶亮透明,微有黄色,酱香突出,令人陶醉,敞杯不饮,香气扑鼻,开怀畅饮,满口生香,饮后空杯,留香更大,持久不散。口味幽雅细腻,酒体丰满醇厚,回味悠长,茅香不绝。茅台酒液纯净透明、醇馥幽郁的特点,是由酱香、窖底香、醇甜三大特殊风味融合而成,现已知香气组成成分多达300余种。酒度53度。陈毅有诗:“金陵重逢饮茅台,万里长征洗脚来。深谢诗章传韵事,雪压江南饮一杯。”
二、五粮液
    天下三千年,五粮成玉液。五粮液酒是浓香型大曲酒的典型代表,它集天、地、人之灵气,采用传统工艺,精选优质高梁、糯米、大米、小麦和玉米五种粮食酿制而成。具有“香气悠久、味醇厚、入口甘美、入喉净爽、各味谐调、恰到好处”的独特风格,是当今酒类产品中出类拔萃的精品。
    五粮液酒历次蝉联“国家名酒”金奖,九一年被评为中国“十大驰名商标”;继1915年获巴拿马奖八十年之后,1995年又获巴拿马国际贸易博览会酒类唯一金奖。至此,五粮液酒共获国际金奖三十二枚。
三、西凤酒
    西凤酒产于陕西省凤翔县柳林镇西凤酒厂。西凤酒属其它香型(凤型)。曾四次被评为国家名酒。
四、双沟大曲
    产于江苏省泗洪县双沟镇。1984年的第四次全国评酒会后,该酒以“色清透明,香气浓郁,风味协调,尾净余长”的浓香型典型风格连续两次被评为国家名酒。
五、洋河大曲
    洋河大曲是江苏省泗阳县的洋河酒厂所产,曾被列为中国的八大名酒之一,至今已有三百多年的历史。 “甜、绵、软、净、香”是洋河大曲的特色。现洋河大曲的主要品种有洋河大曲(55度)、低度洋河大曲(38度)、洋河敦煌大曲和洋河敦煌普曲四个品种。
六、古井贡酒
    该酒产于安徽省亳县古井酒厂。魏王曹操在东汉末年曾向汉献帝上表献过该县已故县令家传的“九酿春酒法”。据当地史志记载,该地酿酒取用的水,来自南北朝时遗存的一口古井,明代万历年间,当地的美酒又曾贡献皇帝,因而就有了“古井贡酒”一美称。古井贡酒属于浓香型白酒,具有“色清如水晶,香纯如幽兰,入口甘美醇和,回味经久不息”的特点。
七、剑南春
    产于四川省绵竹县。其前身当推唐代名酒剑南烧春。唐宪宗后期李肇在《唐国史补》中,就将剑南之烧春列入当时天下的十三种名酒之中。现今酒厂建于1951年4月。剑南春酒问世后,质量不断提高,1979年第三次全国评酒会上,首次被评为国家名酒。
八、泸州老窖特曲酒
    泸州老窖特曲于1952年被国家确定为浓香型白酒的典型代表。泸州老窖窖池于1996年被国务院确定为我国白酒行业唯一的全国重点保护文物,誉为"国宝窖池"。泸州老窖国宝酒是经国宝窖池精心酿制而成,是当今最好的浓香型白酒
九、汾酒
    1915年荣获巴拿马万国博览会甲等金质大奖章,连续五届被评为国家名酒。是我国清香型白酒的典型代表,以其清香、纯正的独特风格著称于世。其酒典型风格是入口绵、落口甜、饮后余香,适量饮用能驱风寒、消积滞、促进血液循环。酒度38度、48度、53度。注册商标:杏花村、古井亭、长城、汾字牌。
十、董酒
    董酒产于贵州省遵义市董酒厂,1929年至1930年由程氏酿酒作坊酿出董公寺窖酒,1942年定名为“董酒”。1957年建立遵义董酒厂,1963年第一被评为国家名酒,1979年后都被评为国家名酒,董酒的香型既不同于浓香型,也不同于酱香型,而属于其它香型。该酒的生产方法独特,将大曲酒和小曲酒的生产工艺融合在一起。
    文革前后的中国八大名酒中并没有五粮液。当时的八大名酒是:茅台、西凤、汾酒、双沟、竹叶青、洋河、濉溪、古井。这些都是我国一直在延续生产的名酒。
而现今市场上名酒迭出,数不胜数。五粮液是明末清初宜宾县的各家酒坊根据古酒的酿造方法,用五种粮食为主要原料酿制,到1928年才定下基本的配方。当时此酒被称为“杂粮酒”。1929年,制定此酒的配方人邓子均在一次聚会上用“杂粮酒”宴请众人,深得众人赞赏,前清举人杨惠泉提议将此酒称做“五粮液”,此后,五粮液便流传全国,声名远播。但一直到1985年以前,五粮液的产量很少,所以在国内的名声不及上面提到的“八大名酒”,如今在国内名气很大的泸州老窖、剑南春等酒,基本上也是近20年来才重又出名的。

中华美酒100名品排名金榜
    现在国内被称为“名酒”的酒很多,但并没有一个权威的排名,也没有几大名酒之说。至于五粮液现在可以排名第几,那是仁者见仁,智者见智的事。
    我是多年的好酒者,按我的看法,前几名可以这样:茅台、泸州老窖、五粮液、古井贡... 至于糊涂仙、酒鬼酒之类的新酒,绝不能算名酒,这种酒多数只是在四川等地采购原酒,回自己厂再自行勾兑后销往市场的。你喝多了就会明白啦。
    茅台国酒,五粮华冠——此评价比较贴切。过去茅台称“国酒”,其实是自封的、自吹的,没有任何政府或者权威机构给它这一称誉,而中华美酒100名品排行榜,是真正由国际专家组织做的正式评价,从这一榜四字锦言“茅台国酒”算起,贵州茅台酒才正式算有了“国酒”美誉。
    《中华美酒100名品排名金榜》调查评价结果:(发布时间:2004年3月20日。排名不分先后)
1、茅台国酒——茅台酒,中国贵州茅台酒厂有限责任公司
2、五粮华冠——五粮液酒,五粮液集团有限公司
3、李渡古灶——李渡酒,江西李渡酒业有限公司
4、杏花汾香——杏花村汾酒,山西汾酒股份有限公司
5、泸州老窖——泸州老窖,泸州老窖集团有限责任公司
6、西凤朝阳——西凤酒,陕西省凤翔县西凤酒厂
7、剑南春浓——剑南春酒,四川剑南春集团有限责任公司
8、董酒典藏——董酒,贵州遵义振业董酒(集团)有限公司
9、古井岁贡——古井贡酒,安徽古井贡酒股份有限公司
10、古越龙山——古越龙山牌绍兴酒,浙江古越龙山绍兴酒股份有限公司
11、张裕望重——雷司令干白,烟台张裕集团有限公司
12、龙岩沉缸——龙岩沉缸酒,福建省龙岩沉缸酿酒有限公司
13、青岛名啤——青岛啤酒,青岛啤酒股份有限公司
14、生力誉港——生力啤酒,香港生力啤酒有限公司
15、金星海量——河南金星啤酒集团有限公司
16、新天秀庄——新天葡萄酒,新天国际葡萄酒业有限公司
17、香格里拉——香格里拉藏秘青稞干酒,云南香格里拉酒业股份有限公司
18、沱牌绵长——沱牌曲酒,中国四川沱牌集团有限公司
19、洋河品位——洋河大曲,江苏洋河酒业股份有限公司沭阳分公司
20、双沟醉猿——双沟大曲,中国江苏双沟酒业集团有限公司
21、事事全兴——全兴大曲,四川成都全兴集团有限公司
22、埔里熟黄——埔里绍兴酒,台湾埔里酒厂
23、二锅老烧——二锅头酒,北京红星股份有限公司
24、衡水白干——衡水老白干,中国?河北?衡水老白干酿酒集团
25、文君当炉——文君酒,四川文君酒有限公司
26、武陵老酱——武陵酒,湖南省常德市武陵酒业有限公司
27、湘泉如珠——湘泉酒,湖南湘泉集团公司
28、酒鬼奇款——酒鬼酒,湖南酒鬼酒股份有限公司
29、伊犁开怀——伊犁酒,新疆伊犁酒厂
30、伊川杜康——杜康酒,河南伊川县杜康酒厂
31、贵州清醇——贵州醇,贵州醇酒厂
32、台湾家酿——台湾家酿果酒,中国台湾民间传统工艺
33、燕京一品——燕京啤酒,燕京啤酒股份有限公司
34、哈啤流觞——哈尔滨啤酒,哈尔滨啤酒集团公司
35、二郎古蔺——郎酒,四川郎酒集团有限责任公司
36、三花清爽——三花酒,桂林酿酒总厂
37、黄金六福——金六福酒,金六福酒业有限公司
38、双蒸九江——九江双蒸米酒,广东省九江酒厂有限公司
39、习酒蕴奇——习酒,茅台集团习酒公司
40、青酒芬芳——青酒,贵州青酒集团有限责任公司
41、红白长城——长城干红、干白酒,中国长城葡萄酒有限公司
42、皖酒称王——皖酒王酒,安徽皖酒集团
43、华灯京醇——华灯牌北京醇,北京市牛栏山酒厂
44、火红云南——云南红葡萄酒,云南红酒业公司
45、河套王风——河套王酒,内蒙古河套酒业集团股份有限公司
46、四特琼浆——四特酒,江西樟树四特集团
47、竹叶青青——竹叶青,山西汾酒股份有限公司
48、稻花飞扬 ——稻花香酒,湖北三峡稻花酒厂
49、惠水黑糯——惠水黑糯米酒,贵州惠水酒厂
50、宝丰祖传——宝丰酒,河南宝丰酒业有限公司
51、桂林桂花——桂林牌桂花酒,广西桂林酿酒总厂
52、黄鹤楼上——黄鹤楼酒,湖北省武汉市武汉酒厂
53、鸭溪美人——鸭溪窖酒,贵州鸭溪酒业有限公司
54、赖茅烧坊——赖永初酒,贵州赖永初酒业有限公司
55、口子开坛——口子酒,安徽口子酒业股份有限公司
56、天一有方——天一酒,四川省崇州市天一酒业有限责任公司
57、景芝思味——景芝酒,安丘市景芝酒业股份有限公
58、醉在景阳——景阳岗酒,山东聊城景阳岗酒业有限公司
59、劲牌有劲——劲酒,湖北劲牌集团有限公司
60、安酒无量——安酒,贵州安顺安酒厂
61、糊涂小仙——小糊涂仙,仁怀市茅台镇云峰酒业有限责任公司
62、回沙成双——金沙回沙酒, 贵州金沙窖酒厂
63、珍酒珍奇——珍酒,贵州遵义珍酒厂
64、平坝味昶——平坝窖酒,贵州平安酒业集团贵州省平坝酒厂
65、青稞互助——互助青稞酒,青海青稞酒业(集团)
66、德山热肠——德山大曲酒,湘泉集团德山大曲酒业公司
67、长寿长乐——长寿长乐酒,贵州长寿长乐集团
68、土家土方——土家酒,湘西土家人集团公司
69、廿五格格——道光廿五格格酒,辽宁道光廿五集团满族酿酒有限责任公司
70、津酒上档——津牌津酒,天津津酒集团有限公司
71、宋河皇封——宋河粮液,河南宋河酒厂
72、乾隆当欢——乾隆酒,山东昌邑乾隆杯酒业有限责任公司
73、张弓射雕——张弓酒,河南省张弓酒厂
74、兰陵醉乡——兰陵酒,山东兰陵美酒股份有限公司
75、赊店经典——赊店老酒,河南赊店集团有限公司
76、孔府家传——孔府家酒,孔府家集团有限公司
77、隆中对话——隆中对酒,成都隆中对酒业有限公司
78、水井净甘——水井坊酒,成都水井坊有限公司
79、宁城窖久——宁城老窖,内蒙古宁城老窖股份有限公司
80、北大仓满——北大仓酒,北大仓酒是黑龙江北大仓集团有限公司
81、黄金种子——金种子酒,安徽金种子集团有限公司
82、双轮快畅——双轮酒,安徽双轮集团
83、天造汤沟——汤沟特曲,江苏汤沟酒业有限公司
84、地设坊子——坊子白酒,山东坊子酒厂
85、白云浩瀚——白云边就,湖北白云边酒厂
86、玉冰豉烧——豉味玉冰烧米酒,佛山石湾酒厂
87、刘伶朦胧——刘伶醉酒,徐水酒厂
88、八仙倜傥——八仙酒,醉八仙酒,安徽黄山酒业有限责任公司
89、扳倒老井——扳倒井酒,山东扳倒井股份有限公司
90、黔春高盏——黔春酒,贵阳酒厂
91、枝江润舌——枝江酒业,湖北枝江酒业股份有限公司
92、石花滋嗓——石花酒,湖北石花酒厂
93、王朝葡萄——王朝葡萄酒,天津市中法合资王朝葡萄酿酒有限公司
94、通化红妆——通化葡萄酒,通化葡萄酒股份有限公司
95、西夏霸业——西夏王葡萄酒,宁夏西夏王葡萄酒业有限公司
96、金贵至尚——金贵特曲,山东省金贵集团
97、美味龙滨——龙滨酒,哈尔滨龙滨酒厂
98、鲜纯钱江——钱江啤酒,浙江钱江啤酒(集团)公司
97、雪芹风韵——曹雪芹酒,河北唐山市曹雪芹酒(集团)公司
98、白沙细玩——白沙液酒,长沙白沙液酒厂
99、仰韶神醴——仰韶九酒,河南仰韶集团
100、太白仙邦——太白酒,陕西省太白酒厂

类别: 无分类 |  评论(0) |  浏览(136) |  收藏
2016年05月22日 23:41:42

星宿派的公关为什么搞不好

来自:http://#.cn/dpool/blog/s/blog_6b8f1cc00102wmx6.html?vt=4&from=timeline&isappinstalled=0

星宿派的公关为什么搞不好
原创 2016-05-22 六神磊磊 六神磊磊读金庸
文/六神磊磊
    一
    在金庸的江湖里,宣传工作,或者说公关工作,是一切工作的生命线。
    有的公司就一直不太重视宣传,比如少林公司,他们的工作模式完全是被动式的,出大事了,酿成舆情了,众光头才出来危机公关一下,平时完全缺位。
    少林派的管理团队里,一个分管宣传的都没有。《天龙八部》里,“玄”字辈的高僧一大堆,说起来都是高管,有一个抓宣传的吗?没有!《倚天屠龙》里四大神僧,有一个抓宣传的吗?也没有。
    这个门派在机构设置上也比较缺位,一贯地重业务、轻宣传。你看达摩堂是管业务的(就是打架),罗汉堂也是管业务的,藏经阁也是管业务的,唯一有点宣传职能的是知客寮——特么都把公关部和接待办并到一起去办公了,公关工作能不弱化吗。
    所以少林派的宣传工作才总是那么被动。举个典型的例子——有一次,少林方丈被殷素素给阴了,当着群豪的面,殷素素假装把屠龙刀的秘密告诉了方丈空闻大师,实际上半个字都没说,逗老和尚玩。
    不明真相的江湖群豪们被蒙蔽了,多年来一直跑到少林派群访集访,打砸抢闹,暴力索刀,酿成多起流血冲突。可是少林派呢?这个谣言始终辟不下来,“空闻发誓赌咒,说道实在不知”“不论空闻如何解说,旁人总是不信”。
    堂堂一个大单位,辟谣居然要靠一把手出来“赌咒发誓”,而且大家还不信,少林派的公关能力也真是差得可以。
    二
    那么,在金庸的江湖里,最重视公关的公司是哪一个呢?毫无疑问是星宿派。
星宿派以宣传为立派之本,一把手亲自抓宣传,群弟子人人搞宣传,遇到任何工作,都是宣传工作先行。
    比如和丐帮的大决战:
    “众人颂声大作: ‘师父功力,震烁古今!这些叫化儿和咱们作对,那真乃荧火虫与日月争光!’ ‘螳臂挡车,自不量力,可笑啊可笑!’ ‘师父你老人家谈笑之间,便将一干幺魔小丑置于死地,真是闻所未闻……’”
    比如和少林寺的大决战:
    “呼喝之声,随风飘下山来: ‘星宿老仙今日亲自督战,自然百战百胜!’ ‘你们几个幺魔小丑,竟敢顽抗老仙,当真大胆之极!’ ‘星宿老仙邕临少室山,小指头儿一点,少林寺立即塌倒……’”
    它还非常注重对员工公关素养的培训。据金庸说,新入星宿派的门人,未学本领,先学谄谀师父之术,一到开战,就可以千余人颂声盈 耳,一片歌功颂德,掀起压倒性的强大舆论气势。
    除此之外,星宿公司还很重视宣传公关工作的创新和转型,善用新技术、新渠道、新方法,把锣鼓丝竹、箫笛唢呐、歌曲杂技、小品相声都变成了宣传的武器,十分丰富多彩:
    “千余人依声高唱,更有人取出锣鼓箫笛,或敲或吹,好不热闹。”
    按道理说,公关抓得这么好,这家公司的公众形象应该很好,人贱人爱了?可惜完全不是这样。星宿派越宣传越臭,连续荣膺“江湖最臭门派奖”,比不搞宣传的少林派还臭一百倍。
    这是为什么?
    三
    这就要求我们回到一个本质问题:公关,或者说宣传的根本目的是什么?
    是说服。归根结底,是要影响别人、改变别人、最后说服别人,让大家认同星宿老仙是个好人,星宿公司是个好公司。
    可是星宿公司的员工,他们拼命搞公关的目的是什么?是说服吗?明显不是,而是自证——证明自己很忠心。
    在这家大公司里,形成了这样一种氛围:谁不搞宣传,谁会显得落后、迟钝、掉队。搞宣传不积极,就是对企业不忠心。
    如果一不小心在宣传上落后了,会怎么样呢?结果可能很不好,比如:
    “有三个胆子特别小的……想起自己没喝采,太也落后,忙跟着叫好,但那三个 ‘好’ 字总是迟了片刻,显得不够整齐。”
    于是,“众同门射来的眼光中充满责备之意”,那三个人“登时羞愧无地,惊惧不已。”
    你看,给师父叫好稍微迟了一点,同门就会对你充满责备之意。还好这只是同门,如果是“师父射来的目光充满责备之意”,那你就麻烦了。
    在这样的环境下,员工们的宣传必然不是做给受众看的,而是做给师父和同门看的。他们的锣鼓丝竹、唢呐箫笛不是演奏给受众听的,而是给师父和同门听的。
    他们宣传的目的,是为了证明自己在宣传;他们创新的目的,是为了证明自己在创新。一切只为了一点:表明自己忠诚、听话、没有变色。
    四
    这样一来,公关的效果就被忽略了——只要师父、师兄听见就好,至于江湖人士信不信,宣传效果好不好,谁关心啊。
    而且这还会产生形成一种效应:越是夸张的宣传,就越能引起师父的注意和青睐;越是极端的文案,就越能证明自己的忠心,越不会被怀疑变心、变色。
    于是各种极端的说法就不断抛出来,因为越极端越安全啊。你说师父武功西域第一,我就说他天下第一,其他的弟子就干脆说他太阳系第一、宇宙第一、宇宙大爆炸前都是第一。
    所以到后来,门派的宣传口径就变成了“日月无星宿老仙之明,天地无星宿老仙之大,自盘古氏开天辟地以来,更无第二人能有星宿老仙的威德。周公、孔子、佛祖、老君,以及玉皇大帝、十殿阎王,无不甘拜下风。”
    你看书上,有人说:星宿老仙放了屁,做弟子的应该连声赞叹,大声呼吸。
    这种说法本来已经很极端了、很忠心了,但马上有其它弟子严肃指出:这话不对,还不够正确。更正确的版本是:师父放了屁,做弟子的应该大声吸、小声呼,否则你是嫌师父的屁不够香吗?
    这时候,假如有一个清醒老实的人出来说:我觉得师父的武功以后不宜宣传说“宇宙第一”,这样效果不太好,太耸人听闻,还要是要客观一点,说“太阳系第一”就可以了。
    那他肯定会被群起围攻:你什么玩意,你什么居心,你什么后台,谁给你了这样污蔑师父的底气!
    因为他们都懂:围攻,是比宣传更好的证明自己的机会。
    所以,当有爱讲实话的二货冒出来的时候,千万不要错过围攻的时机哦!

类别: 无分类 |  评论(0) |  浏览(435) |  收藏
2016年05月08日 22:30:13

PHP下Unix时间戳与日期互转(解决1970/1901年前及2038年后问题)

PHP下Unix时间戳与日期互转(解决1970/1901年前及2038年后问题)

这个问题主要在32位的系统下出现,64位的不存在这样的问题。
php 5.2+提供了DateTime类来处理这样的问题,参考方案如下(请注意时区的处理):

//1、Unix时间戳转日期
function unixtime_to_date($unixtime, $timezone = 'PRC') {
    $datetime = new DateTime("@$unixtime"); //DateTime类的bug,加入@可以将Unix时间戳作为参数传入
    $datetime->setTimezone(new DateTimeZone($timezone));
    return $datetime->format("Y-m-d H:i:s");
}

//2、日期转Unix时间戳
function date_to_unixtime($date, $timezone = 'PRC') {
    $datetime= new DateTime($date, new DateTimeZone($timezone));
    return $datetime->format('U');
}

echo date_to_unixtime("1900-1-31 00:00:00"); //输出-2206425952
echo '<br>';
echo unixtime_to_date(date_to_unixtime("1900-1-31 00:00:00")); //输出1900-01-31 00:00:00

类别: 无分类 |  评论(0) |  浏览(382) |  收藏
2016年02月21日 12:10:45

一个词就暴露了广电服务上的劣势-马继华

http://majihua.baijia.baidu.com/article/11550

    很多广电公司也开始和互联网公司合作,电视台与互联网视频公司合作,有线网络公司与智能电视厂商合作,但这些合作的基础执行都需要服务理念上的革新与进步,否则,硬件提升了,软件跟不上,网络提升了,服务跟不上,一切美好蓝图都是泡影。


    三网融合被政府推行了几年都没有实质进展,但在国家宽带战略的侧面冲击下,三网融合将变相实现,在这个过程中,广电行业如何转型适应客户需求成为了关系整个行业命运的大问题。

  广电其实有自己的优势,千家万户都已经有广电有线的进线,等于是有阵地的优势,可这种优势在一点一滴的耗尽。前几天,因事回乡,亲戚说今年广电有线电视到期就不再续费了,转而买个电视盒子,要知道,这只是在并不十分发达的小县城啊。

    广电的上层应该已经意识到了危机,不光是网络也包括内容,广电系统都受到了来自互联网的冲击,一批一批的媒体人在辞职下海入网,更多的网络节目逆袭电视台,而在网络上,宽带的发展已经大大优先于广播电视网络。

    在基层呢?恐怕很多广电的基层并没有把现实的威胁当回事,一些地方的广电营业厅还是衙门作风,甚至还是很多地方上有点门路的人们安排亲朋好友子女的避风港,但这样的港湾还能坚持多久呢?



    上个月,路过一个地方的广电营业厅,就进去看看,看到柜台上摆着高清机顶盒,就顺便问了问能不能换,结果,服务员爱搭不理的说,现在不能换,新到的机顶盒太少,只能先满足新装用户。我问什么时候可以换,服务员说,月底吧。然后就不再理我了。

    从这里就可以看出营业厅服务人员的意识问题,一个用户主动上门去询问要更换机顶盒,是多么珍贵的资源,应该主动热情的给予介绍,或者进行耐心的解释说明,即便当时确实没有足够的资源满足用户,也应该询问用户的装机情况和住址信息,进行信息记录和登记,在开放换盒的第一时间通知用户。

    当然,在这方面,北京的歌华做的要好一些,高清不加价,机顶盒免费换,至今没有换的还一直在短信提醒。其他的广电网络公司也值得向其学习。

    本月初,再次到这家营业厅,这次可以更换了,但要求客户必须把老的机顶盒取来,并且,因为客户送来的机顶盒是没有带包装盒的,结果,服务员也把好好的新的高清机顶盒的包装盒取下扔掉,把裸机让客户拿走,真不知道那服务员为何要“以牙还牙”的扔掉盒子,那个扔掉的盒子有什么用?扔掉那个盒子,等于是扔掉了客户的心?

    当时,还看到另外一个客户在询问自家有线电视续费的问题,查询了之后,服务员对客户说,你家电视现在是罚停状态。“罚停”,看来广电的有线公司还真是把自己当成了衙门?

    如今,很多广电公司也开始和互联网公司合作,电视台与互联网视频公司合作,有线网络公司与智能电视厂商合作,但这些合作的基础执行都需要服务理念上的革新与进步,否则,硬件提升了,软件跟不上,网络提升了,服务跟不上,一切美好蓝图都是泡影。

类别: 无分类 |  评论(0) |  浏览(396) |  收藏
2016年02月21日 10:59:46

Visio的使用技巧

1、Visio画图时,两根直线交叉时,总是默认会出现一个跨线的标志,很不和谐,去除方法:选中线条,然后菜单的格式->行为->连接线->跨线->添加->从不,即可。

2、增加连接点。在连接线的按钮旁边有下拉按钮,选择那个叉叉符号,就是连接点的命令了,选中需要增加的框图,按住ctrl+左键,就可以增加连接点了。

3、连接线与对象的吸附。为了方便后期的修改调整,连接线一定要与它连接的对象吸附在一起,否则后期调整时你就等着哭去吧!吸附操作很简单,只需要用鼠标左键拖动连接线至要吸附的对象,看到有个呈辐射状的红点轻轻一闪,就表明连接线与对象成功吸附在一起了,再拖动对象试一下,连接线是不是与对象一起移动了?

4、连接线上文字的添加。很简单!对着线条单击鼠标左键就可以添加文字了。

5、调整画布大小。按住 Ctrl,然后鼠标放在画布边缘,拖动即可。

6、如何让你用visio画得更专业

(1) 如何解决Visio图形粘贴到word中虚线变实线的问题

    症状:复制Visio中的图形,粘贴到Microsoft Office文档(如:doc、ppt)中,图形中的虚线显示成了实线。

    原因:Visio呈现超长线条和非常细线为实线,以减小增强图元文件(EMF)的嵌入对象。这样做,Visio避免在其他程序文档中嵌入对象时文件大小有所增加,还有助于避免打印机缓冲区溢出。

    解决方案:单击图形,进入编辑状态,选中需要修改的虚线线条,单击右键快捷菜单“格式-线条”,将粗细适当加粗,确定保存即可。如果还出现上述症状,说明线条还不够粗,还需要在适当加粗。

    另:在 Visio 里只要虚线框的大小超过一个界限,拷贝之后就会变成实线框。修改注册表:

【运行 regedit 】- > 【 HKEY_CURRENT_USER 】- > 【 Software 】- > 【 Microsoft 】- > 【 Office 】- > 【 11.0 】( office2007 是 12.0 )- > 【 VISIO 】- > 【 Application 】,选择【新建】- > 【 Dword 值】,名称为 MetafileDashLineAsSolid ,取值为 0 。
(2) 如何在Visio中给手画图形填充颜色

    症状:在Visio中画好想要的图形后,结果发现无法填充指定的颜色。

    原因:所画的图形为非封闭整体图形,Visio中默认封闭整体图形才能填充颜色。

    解决方案:保证所画的图形为封闭整体图形。可以这样验证,点击图形中的每一个元素(如:边、角),如果点击后是整个图形进入编辑状态,说明是整体的,然后放大目测是否封闭,其实这样检查是在无法填充时才需要的。如何保证画的图形为封闭整体图形呢,可以选择绘图中的直线后,一笔画成所需图形,一笔是说,画完一条边后单击鼠标左键,且鼠标不离开转折点,继续画下一条边,直至与起始点重合。

(3) 如何将Visio模板中的图形旋转所需要的角度

    症状: 用模板中给定的基本图形元素组合成所需图形时,无法按照所需角度组合

    原因:Viso中默认的基本图形的旋转角度是向顺时针(或逆时针)方向90度。

    解决方案:选择想要旋转的基本图形,右击选择视图->大小和位置窗口,然后在该窗口中调整角度,角度方向是逆时针为正。另外,还可以通过镜像对称翻折进行图形组合或复制

类别: 无分类 |  评论(0) |  浏览(428) |  收藏
2016年02月21日 10:58:44

Office Visio Viewer 2007 无法在IE里面使用Visio Viewer

故障描述

用户电脑上已安装Office Visio Viewer 2007,但点击vsd文件试图浏览却无法调用IE;或者IE可以被调用,但弹出文件下载框,无法正常查看。

原因

用户电脑上存在老版本的Visio,导致注册表里面vsd的关联键值错误。

解决方案

1.运行regedit启动注册表,备份后并删除[HKEY_CLASSES_ROOT.vsd]和[HKEY_CLASSES_ROOTVSD_Auto_File]。


2.从一台能正常浏览vsd文件的电脑上导出[HKEY_CLASSES_ROOT.vsd]键值并导入到问题电脑中。
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT.vsd]
@="VisioViewer.Viewer"
"Content Type"="application/vnd.ms-visio.viewer"

[HKEY_CLASSES_ROOT.vsdshellex]

[HKEY_CLASSES_ROOT.vsdshellex{8895b1c6-b41f-4c1c-a562-0d564250836f}]
@="{21E17C2F-AD3A-4b89-841F-09CFE02D16B7}"


3.重新加载explorer.exe进程或者重启电脑。

类别: 无分类 |  评论(0) |  浏览(461) |  收藏
2016年02月21日 10:56:59

ie8打不开vsd文件 红叉 Visio viewer 不能从IE打开vsd文件的解决方法

故障现象:
    在装有visio viewer2003的XP系统中双击.vsd文件,跳出IE,选允许Active运行,显示一个红叉叉,不能打开。

原因:
微软的KB973525引起

解决方案:(两者任选其一)   

方案1.
保留Visio Viewer 2003卸载系统补丁KB973525   


方案2.
卸载Visio Viewer 2003改装Visio Viewer 2007并安装以下两个系统补丁:
Microsoft Office Visio Viewer Service Pack 2 Setup (KB953335)   
Security Update for Microsoft Office Visio Viewer 2007 (KB973709)

类别: 无分类 |  评论(0) |  浏览(587) |  收藏
2016年01月24日 23:18:37

微软关闭Silverlight官网,该技术逐渐被边缘化

http://www.iteye.com/news/26713
2012-12-07 16:58 by 副主编 wangguo

微软今天关闭了Silverlight.net网站,现在访问该网站,会被转到MSDN的一个Silverlight专题页面。

在新的页面中,你仍然可以找到一些Silverlight相关的内容,但不是全部。如果你之前已经收 藏了一些Silverlight.net域下的网页,现在可能已经失效了。

此外,Silverlight博客近一段时间发布的也都是一些与Silverlight无关的文章。

这些现象预示着Silverlight已经逐渐被边缘化,另一侧面也反映了微软内部团队之间的斗争。

“微软放弃Silverlight”的传闻早在几年前就闹得沸沸扬扬,争论主要围绕Silverlight和HTML5。HTML5强大的功能,令人们看不到Silverlight的发展前景,人们一直在问微软Silverlight研发团队一个问题:如今浏览器已经支持HTML5 <video>标签,在这样的环境下,Silverlight将扮演何种角色。

当时微软官方认为Silverlight和HTML 5会同时存在,理由是HTML5还没有发展到足够强大,Silverlight的媒体功能远超出HTML 5所能提供的功能,因此会把Silverlight作为移动、Web和PC跨平台解决方案加以支持。但目前来看,微软极力在其IE浏览器中完善对HTML5的支持,已经逐渐将Silverlight边缘化。

在微软的移动领域布局中,Silverlight功不可没,它曾是WP7的主要开发技术之一。但是现在微软力推WP8,该系统和WP7拥有完全不同的核心,微软更倾向于开发者使用HTML5开发跨平台应用。

在WP8中,仍可以运行基于Silverlight的应用,但是你不能进一步开发,也不能开始构建一个新的Silverlight应用。

在Silverlight 5发布时,就有媒体预测,这将是Silverlight的最后一个版本。但是,Silverlight主要绑定在Windows桌面和IE,只要Windows一直保持操作系统的霸主地位,Silverlight仍然会存在相当长的一段时间。

类别: 无分类 |  评论(0) |  浏览(435) |  收藏
2016年01月24日 23:08:37

10元可以喝几瓶

0元:5瓶
5个瓶盖5个空瓶换:3瓶
喝完后,剩
4个瓶盖4个空瓶换:3瓶
喝完后,剩
3个瓶盖,3个空瓶换:1瓶,
剩4个瓶盖,2个空瓶:2瓶
喝完剩2个瓶盖,2个空瓶,换:1瓶
喝完剩3个瓶盖,1个空瓶,借一个瓶盖,换:1瓶
喝完,剩2个空瓶,1个瓶盖,还了瓶盖,换1瓶。
一共喝了17瓶

类别: 无分类 |  评论(1) |  浏览(939) |  收藏
2016年01月24日 20:38:05

一条命令设置文件夹755,网页文件644权限

    虽然我们在VPS上搭建网站比网站比较自由,但是空间的安全设置都需要我们自己来做。一旦网站空间或者网页的不安全,可能会通过提权的方式影响其他的网站。今天上午在遇到一个问题,由于转移出来的网站文件都是777权限,然后搬迁至主机中导致403错误提示,这是需要我们对所有的文件夹设置755,所有的网页文件设置644才可以解决。

    很多人会发现,如果手工设置会非常的麻烦,因为每个文件夹下会有文件夹,也有文件。有没有一个命令可以直接设置呢?

SSH命令方法1

find . -exec sh -c "if [[ -d "{}" ]]; then chmod 755 "{}"; else chmod 644 "{}"; fi " \;


SSH命令方法2

find ./ -type d -print|xargs chmod 755;
find ./ -type f -print |xargs chmod 644
    通过以上的任意一个方法,都可以解决设置文件夹755,网页文件644权限。

http://www.laozuo.org/1129.html

类别: 无分类 |  评论(0) |  浏览(453) |  收藏
2016年01月24日 18:53:26

一台服务器拥有1个独立IP,怎么做到开VPS并且给VPS分配端口?

先安装hyper-v。
再安装vmware player,安装过程提示什么的话随便选不选都无所谓,系统将多出两个虚拟网卡:
VMware Network Adapter VMnet1 这个是host only
VMware Network Adapter VMnet8 这个是NAT网络

VMnet8是俺们要用到的。

打开 Hyper-V 管理器—–虚拟交换机管理器—–外部,创建虚拟交换机—名称随便(VMNAT我叫这个)—–外部网络选择”VMware Virtual Ethernet Adapter for VMnet8″—确定。
小鸡网卡选择刚才VMNAT.

对,你没看错,只要这么简单的操作,小鸡就能dhcp分到IP并且上网了。

其他的配置(比如IP段范围,端口映射)只需找到C:\ProgramData\VMware\vmnetnat.conf

[incomingtcp] 这个下面写映射tcp端口
[incomingudp] 这个下面写映射udp端口

have fun~~~~~~~~~

来自:http://www.hostloc.com/thread-304214-2-1.html

类别: 无分类 |  评论(0) |  浏览(619) |  收藏
2015年12月27日 22:21:21

redis作为mysql的缓存服务器(读写分离)

一、redis简介
Redis是一个key-value存储系统。和Memcached类似,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++(hiredis),C#,PHP,JavaScript,Perl,Object-C,Python,Ruby等客户端,使用很方便。

二、架构图

wKioL1UaFsii5Z8qAADOf7iND80904.jpg (25.99 KB, 下载次数: 1)
下载附件  保存到相册
2015-4-1 08:52 上传


大致结构就是读写分离,将mysql中的数据通过触发器同步到redis中


三、安装LNMP环境(这里为了省事,就是用yum来安装)

1、修改yum源
[iyunv@redis ~]# vim /etc/yum.repos.d/epel.repo    #添加这个文件
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
failovermethod=priority
enabled=1
gpgcheck=0

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1



2、yum安装

[iyunv@redis ~]# yum -y install nginx php php-fpm php-cli php-common php-gd php-mbstring php-mysql php-pdo php-devel php-xmlrpc php-xml php-bcmath php-dba php-enchant mysql mysql-server


3、简单配置一下nginx

[iyunv@redis ~]# vim /etc/nginx/nginx.conf
server {
        listen      80;
        #定义使用www.xx.com访问
        server_name  www.xx.com;

        #设定本虚拟主机的访问日志
        access_log  /logs/www.xx.com.access.log  main;

        #默认请求
        location / {
          root  /www/;      #定义服务器的默认网站根目录位置
          index index.php index.html index.htm;  #定义首页索引文件的名称
        }
        location ~ \.php$ {
        root /www/;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
        include fastcgi_params;
        }
    }





4、启动服务

[iyunv@redis ~]# sed -i 's/apache/nginx/g' /etc/php-fpm.d/www.conf
[iyunv@redis ~]# /etc/init.d/php-fpm start
正在启动 php-fpm:                                        [确定]

[iyunv@redis ~]# /etc/init.d/mysqld start
正在启动 mysqld:                                          [确定]

[iyunv@redis ~]# mkdir /{logs,www}
[iyunv@redis ~]# chown -R nginx:nginx /{logs,www}
[iyunv@redis ~]# /etc/init.d/nginx start
正在启动 nginx:                                          [确定]

[iyunv@redis www]# service iptables stop
iptables: Flushing firewall rules:                        [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                              [  OK  ]

[iyunv@redis redis]# netstat -tnlp      #查看监听
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address              Foreign Address            State      PID/Program name 
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN      2101/nginx                 
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                  LISTEN      7544/php-fpm       
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                  LISTEN      1871/mysqld

5、给mysql授权
[iyunv@redis ~]# mysql
mysql> grant all privileges on *.* to root@localhost identified by '123456';

mysql> flush privileges;
6、测试
[iyunv@redis ~]# vim /www/index.php
<?php
    phpinfo();
?>




然后访问页面看到php的相关信息,基础环境就算搭建完成了。

四、安装redis

1、安装redis
[iyunv@redis ~]# wget -c -t 0 http://download.redis.io/releases/redis-2.8.19.tar.gz
 
[iyunv@redis ~]# mkdir /usr/local/redis

[iyunv@redis ~]# tar xvf redis-2.8.19.tar.gz
#安装很简单、直接make就可以了
[iyunv@redis ~]# cd redis-2.8.19
[iyunv@redis redis-2.8.19]# make

#编译完成后,将src中的可执行文件拷贝到刚刚创建的目录中
[iyunv@redis src]# cp redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server /usr/local/redis/
[iyunv@redis redis-2.8.19]# cp redis.conf sentinel.conf /usr/local/redis/




Redis-benchmark      压力测试工具
Redis-check-aof      检查redis持久化命令文件的完整性
Redis-check-dump    检查redis持久化数据文件的完整性
Redis-cli            redis在linux上的客户端
Redis-sentinel      redis-sentinel是集群管理工具,主要负责主从切换。
Redis-server        Redis服务器的daemon启动程序

2、安装php的redis扩展
[iyunv@redis ~]# wget -c -t 0 https://github.com/owlient/phpredis/archive/master.zip
[iyunv@redis ~]# unzip master.zip

[iyunv@redis ~]# cd phpredis-master/
[iyunv@redis phpredis-master]# phpize
[iyunv@redis phpredis-master]# ./configure --with-php-config=/usr/bin/php-config
[iyunv@redis phpredis-master]# make && make install

#修改php的配置文件,如果没有“extension=redis.so”,就加上这一行
[iyunv@redis ~]# vim /etc/php.ini
extension=redis.so

[iyunv@redis ~]# /etc/init.d/php-fpm restart
停止 php-fpm:                                            [确定]
正在启动 php-fpm:                                        [确定]





3、是否安装成功

还是访问phpinfo的那个界面


wKioL1UaEDeBJuP3AABbp2hjrt4347.jpg (14.83 KB, 下载次数: 0)
下载附件  保存到相册
2015-4-1 08:52 上传


看到这个就是安装完成了。

五、读写分离
这里只是简单的做了一下读,没有写操作的相关代码,过一会测试,直接到数据库里执行update来模拟写操作。
1、在mysql中插入一些测试数据

[iyunv@redis ~]# mysql -u root -p123456
mysql> create database mytest;
mysql> CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
mysql> INSERT INTO `test` VALUES (1,'sven'),(2,'jim'),(3,'zhu'),(4,'wang'),(5,'ftd'),(6,'test'),(7,'test01'),(8,'test02'),(9,'test03');
mysql> select * from mytest.test;
+----+--------+
| id | name  |
+----+--------+
|  1 | sven  |
|  2 | jim    |
|  3 | zhu    |
|  4 | wang  |
|  5 | ftd    |
|  6 | test  |
|  7 | test01 |
|  8 | test02 |
|  9 | test03 |
+----+--------+





2、编写php的测试代码
<?php
        $redis = new Redis();
        $redis->connect('127.0.0.1',6379) or die ("could net connect redis server");
        $query = "select * from test limit 8";
        //为了简单一点,这里就读取了8条数据
        for ($key = 1; $key < 9; $key++)
        {
                if (!$redis->get($key))
                {
                        $connect = mysql_connect('127.0.0.1','root','123456');
                        mysql_select_db(mytest);
                        $result = mysql_query($query);
                        //如果没有找到$key,就将该查询sql的结果缓存到redis
                        while ($row = mysql_fetch_assoc($result))
                        {
                                $redis->set($row['id'],$row['name']);
                        }
                        $myserver = 'mysql';
                        break;
                }
                else
                {
                        $myserver = "redis";
                        $data[$key] = $redis->get($key);
                }
        }

        echo $myserver;
        echo "<br>";
        for ($key = 1; $key < 9; $key++)
        {
                echo "number is <b><font color=#FF0000>$key</font></b>";

                echo "<br>";

                echo "name is <b><font color=#FF0000>$data[$key]</font></b>";

                echo "<br>";
        }
?>




第一次访问,redis中没有对应的KEY时

wKiom1UaIrjC3shWAAD2e_5hT48678.jpg (30.3 KB, 下载次数: 0)
下载附件  保存到相册
2015-4-1 08:52 上传


再次访问,此时redis中已有相关数据

wKiom1UaIuTxTtn2AAEcXGxJop8634.jpg (33.93 KB, 下载次数: 0)
下载附件  保存到相册
2015-4-1 08:52 上传


到这里,我们已经实现了redis作为mysql的缓存服务器,但是如果更新了mysql,redis中仍然会有对应的KEY,数据就不会更新,此时就会出现mysql和redis数据不一致的情况。所以接下来就要通过mysql触发器将改变的数据同步到redis中。

六、通过gearman实现同步

1、介绍

Gearman是一个支持分布式的任务分发框架:
  Gearman Job Server:Gearman核心程序,需要编译安装并以守护进程形式运行在后台。
  Gearman Client:可以理解为任务的请求者。
  Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker接收到Gearman Client传递的任务内容后,会按顺序处理。

大致流程:

下面要编写的mysql触发器,就相当于Gearman的客户端。修改表,插入表就相当于直接下发任务。然后通过lib_mysqludf_json UDF库函数将关系数据映射为JSON格式,然后在通过gearman-mysql-udf插件将任务加入到Gearman的任务队列中,最后通过redis_worker.php,也就是Gearman的worker端来完成redis数据库的更新。

2、安装启动

[iyunv@redis ~]# yum -y install gearmand libgearman-devel
[iyunv@redis ~]# /etc/init.d/gearmand start
正在启动 gearmand:                                        [确定]
[iyunv@redis ~]# /etc/init.d/gearmand status
gearmand (pid  7702) 正在运行...





3、安装php的gearman扩展

[iyunv@redis ~]# wget -c -t 0 https://pecl.php.net/get/gearman-1.1.1.tgz
 
[iyunv@redis ~]# tar xvf gearman-1.1.1.tgz
[iyunv@redis ~]# cd gearman-1.1.1
[iyunv@redis gearman-1.1.1]# phpize
[iyunv@redis gearman-1.1.1]# ./configure --with-php-config=/usr/bin/php-config
[iyunv@redis gearman-1.1.1]# make
[iyunv@redis gearman-1.1.1]# make install

#如果php的配置文件中没有extension = gearman.so,就加上此行
[iyunv@redis ~]# vim /etc/php.ini
extension = gearman.so
[iyunv@redis ~]# /etc/init.d/php-fpm restart
停止 php-fpm:                                            [确定]
正在启动 php-fpm:                                        [确定]





wKiom1UaJ1HheqvfAAC0WqZjDCQ519.jpg (26.99 KB, 下载次数: 0)
下载附件  保存到相册
2015-4-1 08:52 上传


这样就是安装成功了

4、安装lib_mysqludf_json
lib_mysqludf_json UDF库函数将关系数据映射为JSON格式。通常,数据库中的数据映射为JSON格式,是通过程序来转换的。
[iyunv@redis ~]# wget -c -t 0 https://github.com/mysqludf/lib_mysqludf_json/archive/master.zip
[iyunv@redis ~]# unzip master.zip
[iyunv@redis ~]# cd lib_mysqludf_json-master/
[iyunv@redis lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
lib_mysqludf_json.c:40:23: 错误:my_global.h:没有那个文件或目录
lib_mysqludf_json.c:41:20: 错误:my_sys.h:没有那个文件或目录
lib_mysqludf_json.c:43:19: 错误:mysql.h:没有那个文件或目录
lib_mysqludf_json.c:44:21: 错误:m_ctype.h:没有那个文件或目录
lib_mysqludf_json.c:45:22: 错误:m_string.h:没有那个文件或目录

#这里编译报错是因为没有安装mysql的开发包,如果是源码安装的mysql,需要在/etc/ld.so.conf.d/
#目录下新建一个文件告诉系统mysql的头文件在哪里
[iyunv@redis lib_mysqludf_json-master]# yum -y install mysql-devel
[iyunv@redis lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c

mysql> show global variables like 'plugin_dir';
+---------------+-------------------------+
| Variable_name | Value                  |
+---------------+-------------------------+
| plugin_dir    | /usr/lib64/mysql/plugin |
+---------------+-------------------------+

#将模块拷贝到插件目录下
[iyunv@redis lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/

#注册UDF函数
mysql> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';

5、安装gearman-mysql-udf
这个插件是用来管理调用 Gearman 的分布式的队列。
[iyunv@redis ~]# wget -c -t 0 https://launchpad.net/gearman-my ... ysql-udf-0.6.tar.gz
[iyunv@redis ~]# tar xvf gearman-mysql-udf-0.6.tar.gz

[iyunv@redis ~]# cd gearman-mysql-udf-0.6
[iyunv@redis gearman-mysql-udf-0.6]# ./configure --with-mysql=/usr/bin/mysql_config --libdir=/usr/lib64/mysql/plugin/
[iyunv@redis gearman-mysql-udf-0.6]# make
[iyunv@redis gearman-mysql-udf-0.6]# make install

#注册UDF函数
mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';

#查看函数
mysql> select * from mysql.func;
+--------------------+-----+-------------------------+----------+
| name              | ret | dl                      | type    |
+--------------------+-----+-------------------------+----------+
| json_object        |  0 | lib_mysqludf_json.so    | function |
| gman_do_background |  0 | libgearman_mysql_udf.so | function |
| gman_servers_set  |  0 | libgearman_mysql_udf.so | function |
+--------------------+-----+-------------------------+----------+

#指定gearman的服务信息
mysql> SELECT gman_servers_set('127.0.0.1:4730');





6、编写mysql触发器(根据实际情况编写)

DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
    SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
  END$$
DELIMITER ;





7、编写gearman的worker端

[iyunv@redis ~]# vim /www/redis_worker.php
<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

while($worker->work());
function syncToRedis($job)
{
        global $redis;
        $workString = $job->workload();
        $work = json_decode($workString);
        if(!isset($work->id)){
                return false;
        }
        $redis->set($work->id, $work->name);
}
?>

#后台运行
[iyunv@redis www]# nohup php redis_worker.php &




"$redis->set($work->id, $work->name);"这条语句就是将id作KEY和name作VALUE分开存储,需要和前面写的php测试代码的存取一致。

8、更新mysql中的数据
mysql> set @RECV = 1;
mysql> select @RECV;
+------+
| @RECV|
+------+
|    1 |
+------+
mysql> update test set name = 'ssss' where id = 1;
mysql> select @RECV;
+------+
| @RECV|
+------+
| NULL |
+------+




从返回值可以看到,触发器是触发成功的(这里的@RECV是上面mysql TIGGER的返回值)。我们在redis中查看数据:
[iyunv@redis redis]# ./redis-cli
127.0.0.1:6379> get 1
"sven"




这里的数据居然没有变化,这是我们就要排错了。
[iyunv@redis ~]# vim /var/log/audit/audit.log
type=AVC msg=audit(1427807674.425:107): avc:  denied  { name_connect } for  pid=12453 comm="mysqld" dest=4730 scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:o
bject_r:port_t:s0 tclass=tcp_socket
#看到这样一条日志,就知道是selinux阻止了同步

#现在将selinux的模式调成Permissive
[iyunv@redis ~]# getenforce
Enforcing
[iyunv@redis ~]# setenforce 0
[iyunv@redis ~]# getenforce
Permissive




设置完成以后,再次执行update,进入redis进行查看

127.0.0.1:6379> get 1
"ssss"




刷新一下刚刚的php界面


wKiom1UaVVfTHNxBAAEJ_PKtNDU910.jpg (31.75 KB, 下载次数: 0)
下载附件  保存到相册
2015-4-1 08:52 上传


到这里就基本算是大功告成了,只要application将数据写到mysql中,mysql触发器检测到更新,就会通过Gearman将数据同步到redis中。然后读取的话,就直接从redis中进行读取。当然这只是个实验环境,实际上还有很多细节要调整。

参考文章:http://avnpc.com/pages/mysql-replication-to-redis-by-gearman

类别: 无分类 |  评论(0) |  浏览(780) |  收藏
2015年12月27日 22:18:05

通过Gearman实现MySQL到Redis的数据复制

http://avnpc.com/pages/mysql-replication-to-redis-by-gearman

日志未经声明,均为AlloVince原创。版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可。
对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器。

但是往往我们又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。

所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache。而这种需求目前还没有看到有特别成熟的解决方案或工具,因此本文将尝试采用Gearman+PHP+MySQL UDF的组合异步实现MySQL到Redis的数据复制。

MySQL到Redis数据复制方案
无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。

那么理论上我们也可以用同样方式,分析MySQL的binlog文件并将数据插入Redis。但是这需要对binlog文件以及MySQL有非常深入的理解,同时由于binlog存在Statement/Row/Mixedlevel多种形式,分析binlog实现同步的工作量是非常大的。

因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQL UDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP Gearman Worker,将数据同步到Redis。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易操作。

Gearman的安装与使用
Gearman是一个支持分布式的任务分发框架。设计简洁,获得了非常广泛的支持。一个典型的Gearman应用包括以下这些部分:



Gearman Job Server:Gearman核心程序,需要编译安装并以守护进程形式运行在后台
Gearman Client:可以理解为任务的收件员,比如我要在后台执行一个发送邮件的任务,可以在程序中调用一个Gearman Client并传入邮件的信息,然后就可以将执行结果立即展示给用户,而任务本身会慢慢在后台运行。
Gearman Worker:任务的真正执行者,一般需要自己编写具体逻辑并通过守护进程方式运行,Gearman Worker接收到Gearman Client传递的任务内容后,会按顺序处理。
以前曾经介绍过类似的后台任务处理项目Resque。两者的设计其实非常接近,简单可以类比为:

Gearman Job Server:对应Resque的Redis部分
Gearman Client:对应Resque的Queue操作
Gearman Worker:对应Resque的Worker和Job
这里之所以选择Gearman而不是Resque是因为Gearman提供了比较好用的MySQL UDF,工作量更小。

安装Gearman及PHP Gearman扩展
以下均以Ubuntu12.04为例。

apt-get install gearman gearman-server libgearman-dev
检查Gearman的运行状况:

/etc/init.d/gearman-job-server status
* gearmand is running
说明Gearman已经安装成功。

PHP的Gearman扩展可以通过pecl直接安装

pecl install gearman
echo "extension=gearman.so" > /etc/php5/conf.d/gearman.ini
service php5-fpm restart
但是实测发现ubuntu默认安装的gearman版本过低,直接运行pecl install gearman会报错

configure: error: libgearman version 1.1.0 or later required

因此Gearman + PHP扩展建议通过编译方式安装,这里为了简单说明,选择安装旧版本扩展:

pecl install gearman-1.0.3
Gearman + PHP实例
为了更容易理解后文Gearman的运行流程,这里不妨从一个最简单的Gearman实例来说明,比如我们要进行一个文件处理的操作,首先编写一个Gearman Client并命名为client.php:

<?php
$client = new GearmanClient();
$client->addServer();
$client->doBackground('writeLog', 'Log content');
echo '文件已经在后台操作';
运行这个文件,相当于模拟用户请求一个Web页面后,将处理结束的信息返回用户:

php client.php
查看一下Gearman的状况:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730
可以看到输出为

writeLog        1      0      0
.
说明我们已经在Gearman中建立了一个名为writeLog的任务,并且有1个任务在队列等待中。

而上面的4列分别代表当前的Gearman的运行状态:

1.任务名称
2.在等待队列中的任务
3.正在运行的任务
4.正在运行的Worker进程
可以使用watch进行实时监控:

watch -n 1 "(echo status; sleep 0.1) | nc 127.0.0.1 4730"
然后我们需要编写一个Gearman Worker命名为worker.php:

<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('writeLog', 'writeLog');
while($worker->work());

function writeLog($job)
{
        $log = $job->workload();
        file_put_contents(__DIR__ . '/gearman.log', $log . "\n", FILE_APPEND | LOCK_EX);
}
Worker使用一个while死循环实现守护进程,运行

php worker.php
可以看到Gearman状态变为:

writeLog        0      0      1
同时查看同目录下gearman.log,内容应为从Client传入的值Log content。

通过MySQL UDF + Trigger同步数据到Gearman
MySQL要实现与外部程序互通的最好方式还是通过MySQL UDF(MySQL user defined functions)来实现。为了让MySQL能将数据传入Gearman,这里使用了lib_mysqludf_json和gearman-mysql-udf的组合。

安装lib_mysqludf_json
使用lib_mysqludf_json的原因是因为Gearman只接受字符串作为入口参数,可以通过lib_mysqludf_json将MySQL中的数据编码为JSON字符串

apt-get install libmysqlclient-dev
wget https://github.com/mysqludf/lib_mysqludf_json/archive/master.zip
unzip master.zip
cd lib_mysqludf_json-master/
rm lib_mysqludf_json.so
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
可以看到重新编译生成了 lib_mysqludf_json.so 文件,此时需要查看MySQL的插件安装路径:

mysql -u root -pPASSWORD --execute="show variables like '%plugin%';"
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| plugin_dir    | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
然后将 lib_mysqludf_json.so 文件复制到对应位置:

cp lib_mysqludf_json.so /usr/lib/mysql/plugin/
最后登入MySQL运行语句注册UDF函数:

CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
安装gearman-mysql-udf
方法几乎一样:

apt-get install libgearman-dev
wget https://launchpad.net/gearman-mysql-udf/trunk/0.6/+download/gearman-mysql-udf-0.6.tar.gz
tar -xzf gearman-mysql-udf-0.6.tar.gz
cd gearman-mysql-udf-0.6
./configure --with-mysql=/usr/bin/mysql_config --libdir=/usr/lib/mysql/plugin/
make && make install
登入MySQL运行语句注册UDF函数:

CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
最后指定Gearman服务器的信息:

SELECT gman_servers_set('127.0.0.1:4730');
通过MySQL触发器实现数据同步
最终同步哪些数据,同步的条件,还是需要根据实际情况决定,比如我希望将数据表data的数据在每次更新时同步,那么编写Trigger如下:

DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON data
  FOR EACH ROW BEGIN
    SET @ret=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.volume as `volume`));
  END$$
DELIMITER ;
尝试在数据库中更新一条数据查看Gearman是否生效。

Gearman PHP Worker将MySQL数据异步复制到Redis
Redis作为时下当热的NoSQL缓存解决方案无需过多介绍,其安装及使用也非常简单:

apt-get install redis-server
pecl install redis
echo "extension=redis.so" > /etc/php5/conf.d/redis.ini
然后编写一个Gearman Worker:redis_worker.php

#!/usr/bin/env php
<?
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

while($worker->work());
function syncToRedis($job)
{
        global $redis;
        $workString = $job->workload();
        $work = json_decode($workString);
        if(!isset($work->id)){
                return false;
        }
        $redis->set($work->id, $workString);
}
最后需要将Worker在后台运行:

nohup php redis_worker.php &
通过这种方式将MySQL数据复制到Redis,经测试单Worker基本可以瞬时完成。

注意点
在实际操作中发现,Gearman UDF在每次MySQL服务重启后会丢失已经设置的服务器信息。因为时间有限没有深入的调查原因,而用了曲线救国的解决方法,让MySQL在每次服务启动时自动运行一次设置语句:

vi /var/lib/mysql/init_file.sql
加入

SELECT gman_servers_set('127.0.0.1:4730');
然后在/etc/mysql/my.cnf的[mysqld]小节下加入

init-file=/var/lib/mysql/init_file.sql
然后重启服务。

参考
MySQL replication to Redis cache server via Ruby, Gearman, triggers, and MySQL UDF (Ubuntu version)
http://ericlondon.com/posts/254-mysql-replication-to-redis-cache-server-via-ruby-gearman-triggers-and-mysql-udf-ubuntu-version
管理Gearman http://huoding.com/2012/10/30/196

类别: 无分类 |  评论(0) |  浏览(304) |  收藏
2015年12月27日 21:54:19

管理Gearman[转]

http://huoding.com/2012/10/30/196

通常,Gearman被用来分发任务,以便实现非堵塞。下面捋捋如何管理Gearman。


说明:请自行安装好Gearman和PHP PECL Gearman。

准备
我们先来创建一个Worker,实现一个简单的显示功能:

<?php

$worker= new GearmanWorker();

$worker->addServer('127.0.0.1', '4730');

$worker->addFunction('echo', 'my_echo_function');

while ($worker->work());

function my_echo_function($job) {
    return $job->workload();
}

?>然后我们运行它:

shell> php /path/to/worker/file可能你已经注意到,代码里有一个死循环,是不是需要Sleep一下?让我们监测看看:

shell> strace -r php /path/to/worker/file
0.000099 poll([{fd=3, events=POLLIN}], 1, 10000) = 0 (Timeout)
10.006522 write(3, "\0REQ\0\0\0\t\0\0\0\0", 12) = 12可见PHP PECL Gearman内部已经做了休息十秒的设置,我们就不用杞人忧天了。

接下来我们以Shell为Client来调用一下:

shell> gearman -f echo "hello, world."到这里,准备工作基本就齐活儿了,相信大家已经对Gearman有了一个初步的认识。

管理
出于效率的考虑,我们往往会启动很多个Worker,但具体应该启动多少个呢?十个还是一百个?少了不够,多了浪费,到底应该如何度量呢?

其实Gearman本身已经提供了相应的命令供我们查看状态:

shell> (echo status; sleep 0.1) | nc 127.0.0.1 4730命令的结果会分为四列,它们的含义从左到右依次是:

1.Function name: A string denoting the name of the function of the job
2.Number in queue: A positive integer indicating the total number of jobs for this function in the queue. This includes currently running ones as well (next column)
3.Number of jobs running: A positive integer showing how many jobs of this function are currently running
4.Number of capable workers: A positive integer denoting the maximum possible count of workers that could be doing this job. Though they may not all be working on it due to other tasks holding them busy.
从这些信息可以推断出:如果系统比较繁忙的话,Number of jobs running的数值会接近Number of capable workers;Number in queue可能会大于Number of capable workers。此时我们应该增加Worker的数量,反之则应该考虑减少Worker的数量。

另外,推荐大家结合使用watch命令来监控Gearman的状态,这样更直观一些:

shell> watch -n 1 "(echo status; sleep 0.1) | nc 127.0.0.1 4730"实际应用中,还有很多特殊情况需要考虑,比如说:程序代码更新后,如何避免手动重启Worker?还需要注意的是Worker长时间运行,一旦意外中断或者内存泄漏怎么办?通常这类进程控制问题用Supervisor都可以轻松搞定,有兴趣的读者自己看看吧。此外网络上还有一些不错的工具可以玩玩,比如:GearmanManager,Gearman-Monitor。

类别: 无分类 |  评论(0) |  浏览(400) |  收藏
2015年12月27日 21:17:58

linux的nohup命令的用法

在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台: /usr/local/mysql/bin/mysqld_safe –user=mysql &。可是有很多程序并不想mysqld一样,这样我们就需要nohup命令,怎样使用nohup命令呢?这里讲解nohup命令的一些用法。

nohup /root/start.sh &

在shell中回车后提示:

[~]$ appending output to nohup.out

原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。

咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。

在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。

这个细节有人和我一样没注意到,所以在这儿记录一下了。

附:nohup命令参考

nohup 命令

用途:不挂断地运行命令。

语法:nohup Command [ Arg … ] [ & ]

描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

退出状态:该命令返回下列出口值:

126 可以查找但不能调用 Command 参数指定的命令。

127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

nohup命令及其输出文件

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

该命令的一般形式为:nohup command &

使用nohup命令提交作业

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

nohup command > myout.file 2>&1 &

在上面的例子中,输出被重定向到myout.file文件中。

使用 jobs 查看任务。

使用 fg %n 关闭。

另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。

Work for fun,Live for love!

http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051136.html

类别: 无分类 |  评论(0) |  浏览(415) |  收藏
2015年12月24日 20:55:01

利用nginx搭建http和rtmp协议的流媒体服务器

一、准备工作

1、安装依赖包:
yum install gcc glibc glibc-devel libtool make openssl-devel-0.9.8e pkgconfig lib-devel mhash.x86_64 pcre-8.30 nasm gettext-devel gettext-devel perl-Digest-SHA1.x86_64

2、安装git工具:
cd /server/software/lmt/
wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz
tar zxf git-latest.tar.gz
cd git-2013-10-30
autoconf
./configure
make && make install

-----------------------------------------------
解决运行git --version报错git: error while loading shared libraries: libiconv.so.2
echo /usr/local/lib >> /etc/ld.so.conf
ldconfig
-----------------------------------------------
git --version
输出一下信息:
git version 1.8.1.GIT
cd ..

3、安装ffmpeg及其依赖包:
++++++++Yasm+++++++++++
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar zxf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure
make && make install
cd ..

++++++++x264+++++++++++
git clone git://git.videolan.org/x264(本次获取后打包为x264.tar.gz)
cd x264
./configure --enable-shared
make && make install
cd ..

++++++++LAME+++++++++++
#wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar zxf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --enable-nasm
make && make install
cd ..

++++++++libogg+++++++++++
#wget http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
tar zxf libogg-1.3.0.tar.gz
cd libogg-1.3.0
./configure
make && make install
cd ..

++++++++libvorbis+++++++++++
#wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
tar zxf libvorbis-1.3.3.tar.gz
cd libvorbis-1.3.3
./configure
make && make install
cd ..

++++++++libvpx+++++++++++
git clone http://git.chromium.org/webm/libvpx.git (本次获取后打包为libvpx-v1.2.0.tar.gz) 其它获取方式#wget http://webm.googlecode.com/files/libvpx-v1.1.0.tar.bz2
cd libvpx
./configure --enable-shared
make && make install
cd ..


++++++++FAAD2+++++++++++
#wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
tar zxf faad2-2.7.tar.gz
cd faad2-2.7
./configure
make && make install
cd ..

++++++++FAAC+++++++++++
#wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz
tar zxf faac-1.28.tar.gz
cd faac-1.28
./configure
make && make install
cd ..

++++++++Xvid+++++++++++
#wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
tar zxf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic
./configure
make && make install
cd ..
cd ..
cd ..

++++++++++++libaacplus+++++++++++++
#wget http://217.20.164.161/~tipok/aacplus/libaacplus-2.0.2.tar.gz(本次安装后make clean重新打包 ffmpeg-2.1.tar.gz)
tar zxf libaacplus-2.0.2.tar.gz
cd libaacplus-2.0.2
./autogen.sh
./configure
make && make install

#安装后检查是否有库文件:
ls /usr/local/lib
libaacplus.so
libaacplus.so.2

cd ..

++++++++Ffmpeg+++++++++++
git clone git://source.ffmpeg.org/ffmpeg(本次获取后打包为ffmpeg-2.1.tar.gz) 其它获取方式wget http://ffmpeg.org/releases/ffmpeg-2.1.tar.gz
cd ffmpeg
./configure --prefix=/opt/ffmpeg/ --enable-version3 --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libvorbis --enable-libx264 --enable-libxvid --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads --enable-libaacplus
make && make install
cd ..

#以上所有安装后修改/etc/ld.so.conf库配置文件如下:
vim /etc/ld.so.conf
#添加以下内容:
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/ffmpeg/lib

添加以上内容后运行命令:
ldconfig

注意!如果以上相关包有新加或是重新安装,需要重新执行:
ldconfig #使其新加的库文件加载。

ffmpeg -i


安装
Nginx,php,mysql等模块

配置防火墙
#----HTTP---
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 81 -j ACCEPT
#----Rtmp--
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1935 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.20.0/255.255.255.0 -j ACCEPT

** 创建链接文件
ln -s /targetPath newLinkPath

** 防火墙设置
vi /etc/sysconfig/iptables



二、安装Nginx

# 到http://www.wdlinux.cn/lanmp/下载lanmp开源一键安装包(已安装略过).按说明进行安装
cd /server/software
mkdir lanmp
cd lanmp
wget http://dl.wdlinux.cn:5180/lanmp_laster.tar.gz
tar zxvf lanmp_laster.tar.gz
sh install.sh
# 根据相应选项进行相应安装

# wdlinux默认安装在/www下,公司目录默认在/server下,保证一致性,添加链接文件
cd /server/
ln -s /www/wdlinux/nginx-1.2.9 nginx
ln -s /www/wdlinux/mysql-5.1.69 mysql
ln -s /www/wdlinux/nginx_php php
ln -s /www/wdlinux/pureftpd-1.0.36 pureftpd

# 用wdlinux自带的站点管理工具新建两个站点,域名分别为enc.testvideo.com和live.testvideo.com
# 参见www.wdlinux.cn相关页面说明

# 192.168.20.17为新建的流媒体服务器的IP,浏览器所在计算机hosts文件及流媒体服务器都添加ip-域名映射
vi /etc/hosts

192.168.20.17 enc.testvideo.com
192.168.20.17 live.testvideo.com


# 将程序添加到其它目录可运行
cd
vi .bash_profile
#将/opt/ffmpeg/bin:/server/nginx/sbin:/server/mysql/bin:/server/php/sbin加到PATH后面保存
PATH=PATH: HOME/bin:/opt/ffmpeg/bin:/server/nginx/sbin:/server/mysql/bin:/server/php/sbin
source .bash_profile


# 验证站点是否能正常访问



三、安装Nginx相关模块

mkdir /server/nginx_mod

#++++++++安装nginx h264模块++++++++
cd /server/nginx_mod
wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
tar -zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
mv -r nginx_mod_h264_streaming-2.2.7 nginx_mod_h264_streaming

#++++++++安装nginx rtmp模块++++++++
cd /server/nginx_mod
git clone git://github.com/arut/nginx-rtmp-module.git
mv -r nginx-rtmp-module nginx_mod_rtmp

#++++++++安装nginx pcre模块++++++++
cd /server/nginx_mod
wget http://nchc.dl.sourceforge.net/project/pcre/pcre/8.30/pcre-8.30.tar.gz
tar -zxvf pcre-8.30.tar.gz
mv -r pcre-8.30 nginx_mod_pcre


#++++++++在已安装的nginx基础上添加h264,rtmp模块++++++++
cd /server/nginx/sbin
./nginx -V #查看已安装nginx的配置参数

# 输出结果:
# nginx version: nginx/1.2.9
# built by gcc 4.1.2 20080704 (Red Hat 4.1.2-54)
# TLS SNI support disabled
# configure arguments: --user=www --group=www --prefix=/www/wdlinux/nginx-1.2.9 --with-http_stub_status_module --with-http_ssl_module

# 进到nginx源码目录 wdlinux的nginx源码目录(或者自定义的原nginx源码目录)
cd /server/software/lanmp/lanmp/nginx-1.2.9


# 配置添加新模块
./configure --user=www --group=www --prefix=/www/wdlinux/nginx-1.2.9 \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-cc-opt=-I/opt/ffmpeg/include \
--with-ld-opt='-L/opt/ffmpeg/lib -Wl,-rpath=/opt/ffmpeg/lib' \
--add-module=/server/nginx_mod/nginx_mod_h264_streaming/ \
--add-module=/server/nginx_mod/nginx_mod_rtmp/ \
--with-pcre=/server/nginx_mod/nginx_mod_pcre


# 重新编译

#以上下下来的nginx_mod_h264_streaming-2.2.7.tar.gz编译时会出错:ngx_http_streaming_module.c:158: 错误:‘ngx_http_request_t’ 没有名为 ‘zero_in_uri’ 的成员
#需要注释掉
vi /server/nginx_mod/nginx_mod_h264_streaming//src/ngx_http_streaming_module.c
#需要注释掉 第158行:
/*
if (r->zero_in_uri)
{
return NGX_DECLINED;
}
*/
make #不要make install,否则覆盖安装

# 已运行nginx,需先停止
killall -9 nginx

# 用新程序覆盖旧程序
cp /www/wdlinux/nginx-1.2.9/sbin/nginx /www/wdlinux/nginx-1.2.9/sbin/nginx.bak
cp /server/software/lanmp/lanmp/nginx-1.2.9/objs/nginx /www/wdlinux/nginx-1.2.9/sbin/nginx

# 测试配置,看nginx是否运行正常
/www/wdlinux/nginx-1.2.9/sbin/nginx -t -c /www/wdlinux/nginx-1.2.9/conf/nginx.conf


# 配置 nginx.conf
cd /www/wdlinux/nginx-1.2.9/
vi nginx.conf

# 修改每个进程打开的最大文件数(linux系统设置需支持,修改/etc/security/limits.conf文件)
events {
use epoll;
worker_connections 65535;
}

# 修改http中参数设置
http {
include mime.types;
default_type application/octet-stream;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
limit_conn_zone $binary_remote_addr zone=one:256k;
limit_conn_log_level notice;

keepalive_timeout 6000;

# .....
}

# 添加rtmp模块参数
rtmp {
server {
listen 1935;
application vod {
#Directory of flv files
play /server/serverweb/live/public_html/live;
}
}
}

# 保存nginx.conf文件

# 新建及配置虚拟站点文件
cd /www/wdlinux/nginx-1.2.9/vhost
#cp default.conf live.testvideo.com.conf (之前有建站点live.testvideo.com,则不需复制配置)
vi live.testvideo.com.conf

# 配置如下

server {
listen 80;
server_name live.testvideo.com;
root /server/serverweb/live/public_html;
index index.php;
error_page 400 /errpage/400.html;
error_page 403 /errpage/403.html;
error_page 404 /errpage/404.html;
error_page 405 /errpage/405.html;
location ~ \.phpfastcgi p ass127.0.0.1:9000;fastcgi i ndexindex.php;includefcgi.conf;location \.mp4  {
mp4;
}

access_log /server/serverlog/live.testvideo.com_access.log wwwlogs;
error_log /server/serverlog/live.testvideo.com_error.log;
}


# 测试配置,看nginx是否运行正常
/www/wdlinux/nginx-1.2.9/sbin/nginx -t -c /www/wdlinux/nginx-1.2.9/conf/nginx.conf


#++++++++ 播放测试站点 ++++++++
# 上传一个.mp4文件放到live目录
cd /server/serverweb/live/public_html/live


# 下载开源播放器jwplayer
cd /server/software/
mkdir jwplayer
cd jwplayer
wget https://account.jwplayer.com/static/download/jwplayer-6.7.zip # 如果不能下载,则需要到官网http://www.jwplayer.com注册然后下载
unzip jwplayer-6.7.zip

# 复制播放器代码到站点文件夹,根据官方文档新建html文件播放页(省略)。
cp -r jwplayer /server/serverweb/live/public_html/

cd /server/serverweb/live/public_html
vi player.html

#复制以下内容到player.html中保存
cd /server/serverweb/live/public_html
vi player.html

#复制以下内容到player.html中保存
<html>
<head>
<title>播放测试</title>
<script type="text/javascript" src="/jwplayer/jwplayer.js"></script>
<script type="text/javascript">jwplayer.key="MGAzpXRYxGnaVXhH8jSdKXzDe7ucAAvZGWggIA==";</script>
</head>
<body>
<div id="testPlayer">Loading the player...</div>
<script type="text/javascript">
jwplayer("testPlayer").setup({
file: "/live/test.mp4",
image: "/live/test.png",
title: 'test',
width: '100%',
aspectratio: '16:9',
fallback: 'false',
primary: 'flash'
});
</script>
</body>
</html>

五、http及rtmp流媒体测试

# 浏览器中测试能否播放http流媒体
http://live.testvideo.com/player.html

# 测试Rtmp点播vod
rtmp://live.testvideo.com:1935/vod/test.mp4

# 测试Rtmp直播live
rtmp://live.testvideo.com:1935/live/h_room_60025

# 测试Rtmp转码

#* 从本地文件转
ffmpeg -i /server/serverweb/live/public_html/live/test.mp4 -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -f flv rtmp://live.testvideo.cn:1935/live/h1_room_60025

#* 从视频流转
ffmpeg -i rtmp://live.testvideo.cn:1935/live/h_room_60025 -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -f flv rtmp://live.testvideo.cn:1935/live/h2_room_60025


# 查找转码进程
ps -ef|grep 'room_60025'*

# 杀掉转码进程
ps -ef|grep 'room_60025'* | grep -v grep|awk '{print $2}' | xargs -i kill -9 {}

类别: 无分类 |  评论(0) |  浏览(389) |  收藏
2015年10月25日 20:20:37

如何从技术牛人升阶为管理牛人

编者按:本文来自聚会玩创始人、前百度工程师李攀的投稿。他的个人博客请点此http://lipan.me/。

所有互联网公司,包括创业公司,都有不少技术牛人,这些技术牛人的技术栈深度广度已经达到一定程度,在他们的世界里,没有实现不了的需求,也没有解决不了的问题。

但是,我们却很少看到在技术和管理两方面都很出众的人才。

直接点,技术牛人如何培养自己的管理能力,蜕变为合格的技术管理呢?

也许大家会说这是一个伪命题,因为大部分技术牛人根本不屑去做管理,他们认为管理那些琐事浪费时间而没有意义,管理职位是一个无法体现他们价值的职位,他们只想在技术上钻得更深更广。

实际上,技术管理并不是一个独立的职位,技术管理融入在技术研发的每一个阶段,例如,任何团队协作都涉及到任务分工,任何技术团队都涉及到代码规范、合并和管理,这些点滴,都需要有由技术人员而不是项目经理来管理。所以,即时不愿意做管理的技术人员,发展到一定阶段,多多少少都会涉及到管理的相关内容。

一个技术人员的职业发展过程大致是这样的:

实习期
还在学校学习,之前从未涉及过真实工程或项目,实习期间通过阅读项目代码,修复 bug 等开始积累经验,每天都会觉得自己收获很大,时间不够;

应届毕业
经验不多,参考项目其他模块代码后,能独立完成小功能需求,能胜任小模块开发,也能维护项目代;

工作 2-5年
能胜任任何功能模块开发,并开始做模块设计和系统设计,设计的东西自己能用,做得好也许还能给别人;

工作 5年 以上
负责整个项目的架构设计,实现项目的基础和核心模块。

前三个阶段的思维方式都是考虑自己怎么做,怎么实现功能,怎么完成任务。到第四个阶段,就会开始涉及到管理相关的工作,因为,首先,你的东西再也不是你一个人用的,你需要跟别人讲解和沟通;其次,你的架构和核心模块出来以后,你需要把剩下的任务合理分配给合适的成员来开发。

-----------

我认为,从技术岗位转型为管理岗位,更多的不是能力的变化,而是思维方式和心态的改变。技术管理者是管理者的一类,管理者三大核心职责如下:

确立团队目标

不论项目大小,一定要有目标,有目标才能让所有人明确方向,知道每天工作的意义在哪儿,工作是不是朝着团队的目标在一步步靠近。 纯技术人员的执行者思维应该切换为宏观思维,因为现在个人的成功已经不叫成功,团队成功才是成功,如何让团队产出高的绩效才是你应该思考的问题。

离达成这个目标我们还缺哪些资源

这点主要涉及到统筹规划能力。在项目初期,你就需要非常清楚明确地知道目前团队的能力以及你能调配的资源,这样才能保证后期不会因为资源不足导致目标无法达成。

我们如何朝着目标迈进

这一点穿插在整个过程中,是最重要,也是我这两年在聚会玩的团队管理中看到和亲身体会最深的,它囊括了技术管理的方方面面。

----------

如果某件事一个人做需要 m 个工时来完成,那么 n(n>1)个人来做,理论所需工时是 m/n,但是实际的时间一定比这个多,结果是(m/n)*α(α>1),α就是协作成本。技术管理者要做的,就是尽量降低协作成本,包括以下方面:

任务分配
之前你一个人能把事情做得很好,现在怎么保证团队一群人把它做好?任务分配包括如何把任务合理地分配给适合的人,能达到最好的结果,即人的价值得以体现,产出质量也高。这就要求管理者对任务的了解要全面深入,对团队每个人的能力了解也要准确。

全局观
技术人员工作时都需要专注,反过来,作为技术管理人员,要防止过度专注。多去了解项目各方面的进展和存在的问题, 对项目和团队的任何细节了如指掌,出现任何大大小小的问题都能迅速定位和分析解决,不会因为专注于技术细节而失去对全局控制。

沟通能力
以前每天和机器沟通,现在切换为和人沟通。以前的桀骜不驯和不屑是因为技术能力强,现在应该切换为更耐心,更注意语气和用词的沟通。另外,更多的去主动发现问题,然后通过沟通技巧来解决问题。

协调调度能力
项目过程中一定会遇到一些无法预期的技术问题导致项目被 block,如果问题已经持续未被解决,这时需要及时调度有能力的人来参与解决,防止项目一直处于不确定状态。当多个功能或者项目并行进行时,由于人力资源有限,可能需要不断地根据项目进展来动态调整各项目优先级来保证整体的进度。优先级调度和调整是一个很复杂的过程,但记住一点,我们永远只做优先级最高的事情,最高优先级事情完成以后,优先级第二的事情自然会升级为优先级最高的事情,在这个升级的过程中,我们也许还需要和产品等相关部门进行一次优先级动态调整或者评估。这也涉及到项目管理的负反馈,让每一个阶段的结果反馈给新的阶段,保证最后的结果更接近我们的目标。

时间管理能力
时间管理是每个团队都头疼的事情,直接体现在项目进度上。时间管理看起来很难,实际很简单。每个任务拆分一定要足够细可量化,2 天以上的任务都是不合理的。而且过程中需要严格控制好每一个量化好的时间节点或里程碑,保证每个节点的质量和时间点无误是保证最终结果的最好方式,出现任何一处 delay 都需要强制想办法及时补救,避免积少成多,这样才能防止项目最后出现不可能预期的延期。

放权和培养
亲自去解决具体的技术问题,做代码审核看代码哪些地方存在不规范,和测试人员讨论具体的测试用例是否合理,这些工作现在需要做,但是,它们已经不再是你关注的重点,你应该更多的放权让其他人去做,在这个过程中一定不需事事亲为,在这基础上,你应该更加注重对成员的培养,培养他们的学习能力,思考能力和解决问题的能力(这三个能力是我对技术人员的基本要求),让成员快速进步和成长,独当一面。

倾听
不管以前技术多牛,多恃才放旷和桀骜不驯,作为管理者,需要背负团队的使命和绩效,所以应该在任何时候主动听取团队核心成员的意见,做一个好的倾听者。倾听一定要做到多维度听取,然后再分析和做决定。

能做到并实践好上面这些点,恭喜你已经蜕变成为了一个优秀的技术管理人员。

来自:http://36kr.com/p/5037687.html

类别: 无分类 |  评论(0) |  浏览(279) |  收藏
2015年09月20日 15:51:33

lcx.exe 端口转发工具

lcx.exe -slave 本机公网ip 51 目标本地ip 3389(将目标ip的3389端口转发到本机的51端口)
lcx.exe -listen 51 880(监听本机的51端口,将目标主机转发过来的3389端口开放在本机的880端口)
然后用mstsc连接本机880端口登陆(127.0.0.1:880)

以前拿内网机器的时候 可以这么干


不能玩3389 用teamviewer吧

类别: 无分类 |  评论(0) |  浏览(505) |  收藏
2015年09月20日 12:01:55

为什么IE11和IE10的仿真文档模式没有IE6?

先看一下历史:

IE 从 8.0 开始支持 `X-UA-Compatible` 元标记(允许网页作者指定 IE 用哪个内核来渲染页面),并在其内置的开发工具中提供名为“文档模式”的内核切换调试方式。从 IE8 开始,上述两种方式(元标记、开发工具)就都没提供 IE6 模式。

接下来,我们进一步分析一下为什么唯独没有 IE6 模式:

IE5 本质上就是“怪癖模式 (Quirks Mode)”。IE 浏览器基于“向后兼容”的目的,必须要包含此内核,以便“正确”渲染早期网页。(随便说一句,事实上非 IE 浏览器也都是自带 Quirks Mode 渲染模式的。这里不展开,有兴趣可以自行查询“DTD”、“Quirks Mode”、“浏览器渲染模式”等关键词。)因此,对 IE 浏览器的开发工具来说,提供 IE5 模式没有任何成本;而且在渲染早期网页时,必然就会进入此内核,开发工具不得不包含它。
IE7 本质上是 IE6.1(至少我是这样认为的)。相比 IE6 而言,IE7 没有提供巨大的实质上的内核功能升级,更多地是在打补丁、修 bug。可以这样说,IE6 和 IE7 这两个版本的内核是严重同质化的;另一方面 IE6 的用户量本身也在自然萎缩。因此当 IE8 推出时,它的元标记和开发工具就放弃了 IE6 模式。
微软从 IE8 开始拼命追赶其它符合 W3C 标准的浏览器,IE8 之后每个版本的内核之间都存在巨大差异;而且从 IE8 开始,IE 几乎以每年一个版本的速度在发布,几世同堂的状况会长期存在。这样看来,在最新 IE 版本的开发工具中就不得不包含每个过往版本的内核了。



engine = null;
if (window.navigator.appName == "Microsoft Internet Explorer")
{
  // This is an IE browser. What mode is the engine in?
  if (document.documentMode) // IE8 or later
      engine = document.documentMode;
  else // IE 5-7
  {
      engine = 5; // Assume quirks mode unless proven otherwise
      if (document.compatMode)
      {
        if (document.compatMode == "CSS1Compat")
            engine = 7; // standards mode
      }
      // There is no test for IE6 standards mode because that mode 
      // was replaced by IE7 standards mode; there is no emulation.
  }
  // the engine variable now contains the document compatibility mode.
}

类别: 无分类 |  评论(0) |  浏览(571) |  收藏
2015年09月13日 11:23:05

明明是IE8 提示版本低 提示是IE6 淘宝提示:您当前使用的浏览器可能存在安全隐患,暂时无法访问已买到的宝

注意本文系统是Windows XP , IE8浏览器,Internet Explorer 8.0.6001.18702

淘宝提示:您当前使用的浏览器可能存在安全隐患,暂时无法访问已买到的宝贝



原因是User-Agent中有MSIE 6.0字样。需要在注册表中修改掉或者删除。

方法如下:(有时文字不完全一样的)

开始 - 运行 - 输入regedit 回车打开 注册表编辑器。
查找:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent\Post Platform
删除下面的所有键值,一般是只有一个 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

查找:
HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Internet Settings
找到键值 User Agent 把里面的 MSIE 6.0 字样改为 MSIE 8.0

查找:
HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Internet Settings
注意这里的“S-1-5-20”在你的机器上可能会不一样。
找到:键值 User Agent 把里面的 MSIE 6.0 字样改为 MSIE 8.0

类别: 无分类 |  评论(0) |  浏览(9006) |  收藏
« 1 2345» Pages: ( 1/61 total )