手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2024年11月的文章

为什么正月里不能理发?

好不容易理个头吧。人说,正月里不能理发,是因为正月里理发会死舅舅。于是乎我google了一下。

两种解释,不知道孰对孰错:


1.正月里剃头---"思旧"
2.正月里剃头---"思舅"

第一种解释

旧时民俗禁忌甚多,“正月里不许剃头”即为一例。夏历第一个月里,任凭男孩毛发疯长,却丝毫不能侵犯,否则对舅舅不利。“正月里剃头,死舅舅。”多吓人的一份责任,舅舅的安危全系于外甥的头顶之物。直至夏历二月初二,男孩才有了剃头的自由。

外甥的头发因何与舅舅的性命有了瓜葛?实在费思索。社会学家考证人类是从母权社会一步一个跟头斗才到父权社会的。在女人说了算的母系氏族社会,娘家人的重要代表——舅舅,自然不可小觑。

民国二十四年版的《掖县志》卷二《风俗》揭出了习俗的谜底:“闻诸乡老谈前清下剃发之诏于顺治四年正月实行,明朝体制一变,民间以剃发之故思及旧君,故曰‘思旧’。相沿既久,遂误作‘死舅’。”正月不剃头,原是“思旧”。正月为一年之始,有如一日之晨。正月一个月不剃头,以缅怀传统。乡老将“剃发令”的时间记错了,不是顺治四年正月,是顺治二年六月。那时候摄政王多尔衮就下令在北京的前门、地安门、东西四牌楼等主要的路口设立席棚,免费给来往的行人剃头。“剃发令”规定官军民一律剃发,迟疑者按逆贼论,斩!朝廷以死要挟汉人归依满人的发式,使汉人惊恐万状。但这惊恐瞬间化作满腔怒火,他们宁死也不剃发,甚至高呼:“宁为束发鬼,不作剃头人。”但是,脖子毕竟硬不过钢刀,汉人为了项上头颅被迫剃发。然而反抗并没有停止,正月不剃头即是一种反抗形式。1644年至1650年(顺治元年~七年)间,意大利人卫匡国写下《鞑靼战纪》,记录了中国南方军民为保卫头发而战的情况:士兵和老百姓都拿起了武器,为保卫他们的头发拼死斗争,比为皇帝和国家战斗得更英勇,不但把鞑靼人赶出了他们的城市,还把他们打到钱塘江,杀死了很多鞑靼人。实际上,如果他们追赶过去,也许会收复省城和其他城镇,但他们没有继续发展胜利,只满足于保住了自己的头发。为剃头不惜掉头,这是意大利人很难理解的。

汉族男儿自古就蓄发,“身体发肤,受之父母”,不敢损伤、妄动。剃头简直就是剔命。“去发”的髡刑不在五刑之内,但也是一种刑罚。三国曹操割发代首就是明证。此习自隋、唐以后已废止:未成丁的孩童,头发覆颈披肩;成年后,总发为髻。那时候,清朝为了统一全国的服饰,强迫汉人学满人的样子,剃头留辫子。满族人原是狩猎部族,为了实用方便,从额角两端引一直线,直线外的头发全部剃去,仅留颅顶发编成辫子。习俗有极强的传承性,也会因时因地而变。满族入主中原后,大量接纳汉族士大夫参加政权,内阁大学士、六部尚书等高官显位,都是满汉各半。在这“满与汉,共天下”的局面下,满汉民族矛盾逐渐减弱,日久天长,汉人也奉“满清”为正统了,剃发渐成习惯。这样,正月不剃头以“思旧”就失去了赖以存在的文化心理基础,由谐音讹传为“死舅”。为了反抗满族的统治,汉人就编造出正月剃头死舅的说法。正月一个月不剃头,意味着一年没有剃头,以此来缅怀祖宗,缅怀传统。而舅舅在中国人的传统中,是公正的象征,一般家庭分家都是由舅舅主持公道。

江苏淮阴等地民俗说这个传说始于秦始皇赢政,为避讳,民间就把每年的第一个月改称为正月,也形成了不“剃头”的习俗,否则就有血光之灾。而四川建始县人说,正月不剃头,否则叫“正无发(法)”。

居住在东北的满族人正月也不剃头,大都等二月二这天剃头,其名曰“剃龙头”。年年剃龙头,长大成人定会龙腾虎跃、金榜题名有出息,他们“妈妈例儿”(也写作“妈妈论儿”,即日常生活中的迷信禁忌和迷信言论)也认为“正月里剃头妨害舅舅”。可见这是人类古俗的孑遗,不过在民族矛盾加剧时却赋予了新的内容,以旧俗假托故国之思罢了。


第二种解释

“正月里剃头死舅舅的说法想必知道吧?”老板娘问。

在河北石家庄地区,正月不能理发的风俗影响很大,人们普遍是在腊月理一次发,然后等到二月二“龙抬头”才会再进理发店。我回答道:“一种迷信说法罢了。”

“可就是这种说法不仅影响了我们理发行业的经营,也给人们对美的追求添置了障碍”,老板娘接着说,“我做过一个调查,大部分年轻人并不在乎迷信说法,只是怕长辈指责不孝和大不敬罢了。”“你有什么好的办法吗?”我问。

“只要了解这说法的来龙去脉,一切都会迎刃而解”,老板娘接着说,“当初学徒时,就这个问题请教师傅,师傅讲了这样一个故事——相传很久以前,有一个贫穷的理发匠很爱自己的舅舅。然而到了正月,理发匠却为没有钱给舅舅买一件像样的礼品而发愁。串亲的日子到了,理发匠灵机一动,挑着剃头挑子来到舅舅家,精心为舅舅剃头刮脸。等到舅舅出现在酒席前时,亲朋们无不夸赞理发匠手艺高超,说舅舅看上去年轻精神了许多。舅舅很高兴,说这是送给他最好的过年礼物,还约定每年正月给他来理发,看看手艺是否有新的长进。多年后,舅舅去世了。每到正月,理发匠对着剃头挑子泪如雨下,他为不能再向舅舅尽孝而伤心……”

听到这儿,我突然明白了老板娘的意思:“你是说,故事原本讲的是正月剃头思舅舅。”

“没错”,老板娘说,“不知何时以讹传讹,‘思’变成了‘死’,一字之差,害苦了多少人呀!”
----------
事实上,从健康意义上来看,也有“生而勿杀”的说法。《黄帝内经》中的“四气调神大论”中的“春三月”中就有一段话说:“被发缓形,以使志生,生而勿杀,予而勿夺,赏而勿罚,此春气之应,养生之道也;逆之则伤肝,夏为实寒变,奉长者少。” 具体到理发上就是,春天的这三个月,应该让头发自由生长,而不该剪断;应该让头发松散地披在肩上,而不该扎得太紧。违反这个规则,就会伤到肺。但倘若整个春三月都不理发的话,人们实在受不了长发的困扰,于是就有聪明人开始只在正月里不理发……
既然正月里不理发,那就只好在春节前理一次发了。而从实践来看,乡亲们在春节前理一次发还是很有好处的。一来,在新年来临之际,给自己一个新的形象,很有纪念意义;二来呢,过节见的亲戚朋友多,把自己的头发好好折腾一下,也是对大众眼球负责的表现。哈哈!久而久之,成为习俗,实在是先人的一种聪明体现啊!

--------

真TMD纠结,这年头,连理个发都这么迷信,以后还能干嘛 。
所以,我不管三七二十一,还是理发了。。。
一下子帅了不少,年轻了不少。那是相当的靓仔了

备份一个video的JS

备份一个JS,不是为了代码很优秀,而是。。。想直接用里面的事件,就当成参考了:

JavaScript代码
  1. var media_events=new Array();  
  2. // was extracted from the spec in November 2011  
  3. media_events["loadstart"]=0;  
  4. media_events["progress"]=0;  
  5. media_events["suspend"]=0;  
  6. media_events["abort"]=0;  
  7. media_events["error"]=0;  
  8. media_events["emptied"]=0;  
  9. media_events["stalled"]=0;  
  10. media_events["loadedmetadata"]=0;  
  11. media_events["loadeddata"]=0;  
  12. media_events["canplay"]=0;  
  13. media_events["canplaythrough"]=0;  
  14. media_events["playing"]=0;  
  15. media_events["waiting"]=0;  
  16. media_events["seeking"]=0;  
  17. media_events["seeked"]=0;  
  18. media_events["ended"]=0;  
  19. media_events["durationchange"]=0;  
  20. media_events["timeupdate"]=0;  
  21. media_events["play"]=0;  
  22. media_events["pause"]=0;  
  23. media_events["ratechange"]=0;  
  24. media_events["volumechange"]=0;  
  25. var media_controller_events=new Array();  
  26. // was extracted from the spec in November 2011  
  27. media_controller_events["emptied"]=0;  
  28. media_controller_events["loadedmetadata"]=0;  
  29. media_controller_events["loadeddata"]=0;  
  30. media_controller_events["canplay"]=0;  
  31. media_controller_events["canplaythrough"]=0;  
  32. media_controller_events["playing"]=0;  
  33. media_controller_events["ended"]=0;  
  34. media_controller_events["waiting"]=0;  
  35. media_controller_events["durationchange"]=0;  
  36. media_controller_events["timeupdate"]=0;  
  37. media_controller_events["play"]=0;  
  38. media_controller_events["pause"]=0;  
  39. media_controller_events["ratechange"]=0;  
  40. media_controller_events["volumechange"]=0;  
  41. // was extracted from the spec in November 2011  
  42. var media_properties=[ "error","src","currentSrc","crossOrigin","networkState","preload","buffered","readyState","seeking","currentTime","initialTime","duration","startOffsetTime","paused","defaultPlaybackRate","playbackRate","played","seekable","ended","autoplay","loop","mediaGroup","controller","controls","volume","muted","defaultMuted","audioTracks","videoTracks","textTracks","width","height","videoWidth","videoHeight","poster" ];  
  43. var media_properties_elts=null;  
  44. var webm=null;  
  45. function init(){  
  46.     document._video=document.getElementById("video");  
  47.     webm=document.getElementById("webm");  
  48.     init_events();  
  49.     init_properties();  
  50.     init_mediatypes();  
  51.     // properties are updated even if no event was triggered  
  52.     setInterval(update_properties,500);  
  53. }  
  54. document.addEventListener("DOMContentLoaded",init,false);  
  55. function init_events(){  
  56.     for(key in media_events){  
  57.         document._video.addEventListener(key,capture,false);  
  58.     }  
  59.     var tbody=document.getElementById("events");  
  60.     var i=1;  
  61.     var tr=null;  
  62.     for(key in media_events){  
  63.         if(tr==null) tr=document.createElement("tr");  
  64.         var th=document.createElement("th");  
  65.         th.textContent=key;  
  66.         var td=document.createElement("td");  
  67.         td.setAttribute("id","e_"+key);  
  68.         td.innerHTML="0";  
  69.         td.className="false";  
  70.         tr.appendChild(th);  
  71.         tr.appendChild(td);  
  72.         if((i++%5)==0){  
  73.             tbody.appendChild(tr);  
  74.             tr=null;  
  75.         }  
  76.     }  
  77.     if(tr!=null) tbody.appendChild(tr);  
  78. }  
  79. function init_properties(){  
  80.     var tbody=document.getElementById("properties");  
  81.     var i=0;  
  82.     var tr=null;  
  83.     media_properties_elts=new Array(media_properties.length);  
  84.     do{  
  85.         if(tr==null) tr=document.createElement("tr");  
  86.         var th=document.createElement("th");  
  87.         th.textContent=media_properties[i];  
  88.         var td=document.createElement("td");  
  89.         td.setAttribute("id","p_"+media_properties[i]);  
  90.         var r=eval("document._video."+media_properties[i]);  
  91.         td.innerHTML=r;  
  92.         if(typeof(r)!="undefined"){  
  93.             td.className="true";  
  94.         }else{  
  95.             td.className="false";  
  96.         }  
  97.         tr.appendChild(th);  
  98.         tr.appendChild(td);  
  99.         media_properties_elts[i]=td;  
  100.         if((++i%3)==0){  
  101.             tbody.appendChild(tr);  
  102.             tr=null;  
  103.         }  
  104.     }while(i<media_properties.length);  
  105.     if(tr!=null) tbody.appendChild(tr);  
  106. }  
  107. function init_mediatypes(){  
  108.     var tbody=document.getElementById("m_video");  
  109.     var i=0;  
  110.     var tr=document.createElement("tr");  
  111.     var videoTypes=[ "video/ogg","video/mp4","video/webm" ];  
  112.     i=0;  
  113.     tr=document.createElement("tr");  
  114.     do{  
  115.         var td=document.createElement("th");  
  116.         td.innerHTML=videoTypes[i];  
  117.         tr.appendChild(td);  
  118.     }while(++i<videoTypes.length);  
  119.     tbody.appendChild(tr);  
  120.     i=0;  
  121.     tr=document.createElement("tr");  
  122.     if(!!document._video.canPlayType){  
  123.         do{  
  124.             var td=document.createElement("td");  
  125.             var support=document._video.canPlayType(videoTypes[i]);  
  126.             td.innerHTML='"'+support+'"';  
  127.             if(support==="maybe"){  
  128.                 td.className="true";  
  129.             }else if(support===""){  
  130.                 td.className="false";  
  131.             }  
  132.             tr.appendChild(td);  
  133.         }while(++i<videoTypes.length);  
  134.         tbody.appendChild(tr);  
  135.     }  
  136. }  
  137. function capture(event){  
  138.     media_events[event.type]=media_events[event.type]+1;  
  139.     for(key in media_events){  
  140.         var e=document.getElementById("e_"+key);  
  141.         if(e){  
  142.             e.innerHTML=media_events[key];  
  143.             if(media_events[key]>0) e.className="true";  
  144.         }  
  145.     }  
  146.     update_properties();  
  147. }  
  148. function update_properties(){  
  149.     var i=0;  
  150.     for(key in media_properties){  
  151.         var val=eval("document._video."+media_properties[key]);  
  152.         /* 
  153.          if (typeof val === "TimesRanges") { 
  154.          val = val.length + " TimeRanges"; 
  155.          } 
  156.          */  
  157.         media_properties_elts[i++].innerHTML=val;  
  158.     }  
  159.     if(!!document._video.audioTracks){  
  160.         var td=document.getElementById("m_audiotracks");  
  161.         td.innerHTML=document._video.audioTracks.length;  
  162.         td.className="true";  
  163.     }  
  164.     if(!!document._video.videoTracks){  
  165.         var td=document.getElementById("m_videotracks");  
  166.         td.innerHTML=document._video.videoTracks.length;  
  167.         td.className="true";  
  168.     }  
  169.     if(!!document._video.textTracks){  
  170.         var td=document.getElementById("m_texttracks");  
  171.         td.innerHTML=document._video.textTracks.length;  
  172.         td.className="true";  
  173.     }  
  174. }  
  175. var videos=new Array();  
  176. videos[0]=[  
  177.     "http://media.w3.org/2010/05/sintel/poster.png","http://media.w3.org/2010/05/sintel/trailer.mp4","http://media.w3.org/2010/05/sintel/trailer.ogv","http://media.w3.org/2010/05/sintel/trailer.webm"  
  178. ];  
  179. videos[1]=[  
  180.     "http://media.w3.org/2010/05/bunny/poster.png","http://media.w3.org/2010/05/bunny/trailer.mp4","http://media.w3.org/2010/05/bunny/trailer.ogv"  
  181. ];  
  182. videos[2]=[  
  183.     "http://media.w3.org/2010/05/bunny/poster.png","http://media.w3.org/2010/05/bunny/movie.mp4","http://media.w3.org/2010/05/bunny/movie.ogv"  
  184. ];  
  185. videos[3]=[  
  186.     "http://media.w3.org/2010/05/video/poster.png","http://media.w3.org/2010/05/video/movie_300.mp4","http://media.w3.org/2010/05/video/movie_300.ogv","http://media.w3.org/2010/05/video/movie_300.webm"  
  187. ];  
  188. function switchVideo(n){  
  189.     if(n>=videos.length) n=0;  
  190.     var mp4=document.getElementById("mp4");  
  191.     var ogv=document.getElementById("ogv");  
  192.     var parent=ogv.parentNode;  
  193.     document._video.setAttribute("poster",videos[n][0]);  
  194.     mp4.setAttribute("src",videos[n][1]);  
  195.     ogv.setAttribute("src",videos[n][2]);  
  196.     if(videos[n][3]){  
  197.         if(webm.parentNode==null){  
  198.             parent.insertBefore(webm,ogv);  
  199.         }  
  200.         webm.setAttribute("src",videos[n][3]);  
  201.     }else{  
  202.         if(webm.parentNode!=null){  
  203.             parent.removeChild(webm);  
  204.         }  
  205.     }  
  206.     document._video.load();  
  207. }  

这一段JS是从http://www.w3.org/2010/05/video/mediaevents.html拷贝而来,具体的演示就在这个页面了。我是想知道video标签中的一些事件。controller_event几乎用不到。
中文说明这里有:http://directguo.com/blog/index.php/2010/07/html5-audio-video-tag/

XML/HTML代码
  1. //错误状态  
  2.    Media.error; //null:正常  
  3.    Media.error.code; //1.用户终止 2.网络错误 3.解码错误 4.URL无效  
  4.   
  5. //网络状态  
  6.    Media.currentSrc; //返回当前资源的URL  
  7.    Media.src = value; //返回或设置当前资源的URL  
  8.    Media.canPlayType(type); //是否能播放某种格式的资源  
  9.    Media.networkState; //0.此元素未初始化  1.正常但没有使用网络  2.正在下载数据  3.没有找到资源  
  10.    Media.load(); //重新加载src指定的资源  
  11.    Media.buffered; //返回已缓冲区域,TimeRanges  
  12.    Media.preload; //none:不预载 metadata:预载资源信息 auto:  
  13.   
  14. //准备状态  
  15.    Media.readyState;    //1:HAVE_NOTHING 2:HAVE_METADATA 3.HAVE_CURRENT_DATA 4.HAVE_FUTURE_DATA 5.HAVE_ENOUGH_DATA  
  16.    Media.seeking; //是否正在seeking  
  17.   
  18. //回放状态  
  19.    Media.currentTime = value; //当前播放的位置,赋值可改变位置  
  20.    Media.startTime; //一般为0,如果为流媒体或者不从0开始的资源,则不为0  
  21.    Media.duration; //当前资源长度 流返回无限  
  22.    Media.paused; //是否暂停  
  23.    Media.defaultPlaybackRate = value;//默认的回放速度,可以设置  
  24.    Media.playbackRate = value;//当前播放速度,设置后马上改变  
  25.    Media.played; //返回已经播放的区域,TimeRanges,关于此对象见下文  
  26.    Media.seekable; //返回可以seek的区域 TimeRanges  
  27.    Media.ended; //是否结束  
  28. Media.autoPlay; //是否自动播放  
  29. Media.loop; //是否循环播放  
  30.    Media.play();    //播放  
  31.    Media.pause();   //暂停  
  32.   
  33. //控制  
  34. Media.controls;//是否有默认控制条  
  35.    Media.volume = value; //音量  
  36.    Media.muted = value; //静音  
  37.   
  38.    //TimeRanges(区域)对象  
  39. TimeRanges.length; //区域段数  
  40. TimeRanges.start(index) //第index段区域的开始位置  
  41. TimeRanges.end(index) //第index段区域的结束位置  

借鉴一下。

Tags: html5, video, audio

TIPS:关掉本站所有显示微博的插件

不好意思,关闭本站所有显示微博的插件。
其实,这也无可奈何,当然,大家也都明白,等到实名制之后,象我们这些不实名的,几乎也不能够发表微博了,这个时候如果你让关注我,或者看我的微博,您觉得还有意义吗?
与其浪费大家的资源,不如我早日关闭,当然如果您认为自己是一个潜水员,自然可以继续。
我的微博地址是:
http://weibo.com/neatstudio
http://t.qq.com/goukixiao
----------------------------------
3-16开始倒记时,当打假打完后就该打人了。您懂的

情人节快乐

众所周知的日子,也是传说中杜蕾斯姐姐和杰士帮哥哥伤亡率最高的日子。
微博上各种各样的段子也是非常的有意思,我在这里就不再一一贴了,反正再过几天这些活跃人士也会变成无语人士的。何必呢。HOHO
情人节的由来我也不贴了,这玩意大家都知道,我就不装了。装了也没意思。反正今天就是那样了。
今天的花,死了不少。
从明天起,小姑娘又少了不少。
MD,我这是不是在嫉妒?青春不在啊。。。。。
今天下午,恭喜各个旅馆生意兴隆,各大超市销量超好

Tags: 情人节

yii 镜像

Yii Framework有的时候会很容易就被墙。所以,自己给他做了一个反向代理 .
每个月5G流量。访问地址为: http://yii.neatcn.com(跳转)

这样的功能,当然不是我做的。我没有那么多的精力来做这个,我是用了一个现成的网站(Speedy Mirror)处理的。

很方便,这里有一篇中文教程:http://www.ml934.com/archives/204.html

我们知道Speedy Mirror是 一家免费CDN加速服务网站,服务器节点分布在英美,感觉用它给国内的网站做加速意义不大。所以这里只谈用SpeedMirror为GAE做“反向代 理”,准确的说就是做了一个“镜像网站”。我们知道由于GAE被墙,appspot.com是不能在国内访问的,这就导致以GAE做为平台的各种应用无法 正常使用和访问,比如在GAE上搭建的博客,相册,网盘等等。这里我们就正好可以利用其CDN的特性,为你的GAE 站点做个镜像,当我们访问xxxx.appspot.com的时候,就会从Speedy Mirror的服务器上获取缓存内容。Speedy Mirror支持https访问,使用简单,注册后只需填写你要推送的网址,完成设置立刻生效。

先添加一个你喜欢的名称,再填写你要推送的网址,点击Detect and save确定就可以了。然后就会给你一个xxxx.speedymirror.com二级域名(下图,可点击放大查看)

Speedy Mirror默认的缓存更新是7天,你要是更新频繁,你就点击xxxx.speedymirror.com把缓存更新改为1即可。点击Add new mirror,再新添加一个镜像就可以了哦,怎么样?够简单吧,那就时间起来吧,呵呵。

PS:GAE虽然可以通过APPs企业套件绑定域名的方法实现墙内访问,但对于新手来说,步骤繁琐,且反向代理也不好找,远不如 Speedy Mirror简单。唯一的缺憾就是speedymirror.com这个域名太不好记了,简直有点坑爹。老外的东西,没办法了,就凑活着用 吧!

----------

原文中没有说明,其实现在可以cname指向到你申请的那个二级域名的页面的。所以我才变成了yii.neatcn.com

 

Tags: yii