《走进中医》这本书是一个有十来年中医经验的人写的,虽然我觉得十来年行医经验还是少,而且前半部分有小部分内容以及后半部分一些治疗方法与我所学的有所不同,但是他的核心观点我受益很大。所以读了第一遍之后,打算再读第二遍,摘录下来一些我觉得有用的东西,稍加深记忆。

———————-

最开始举个小例子.

有人发烧去医院检查说得了病毒感冒,要消炎杀病毒。这里稍问一下,如果有人捅了你一刀,你是去疗伤还是去打那个捅你的人?

如果把重点在退烧消炎,那么受伤的原因还在那,病怎么会真的好。

同一拨病毒同一种有毒的空气,有人得病有人没得,原因是为什么,这个东西不是一句所谓免疫力差别就能解释一切。或者某种DNA结构就会得,另一种就不会。(那么所谓的解码DNA不就是另一种算命么……)

恩,免疫力这东西,都说运动健身注意饮食不吸烟喝酒,就会提高免疫力增加寿命。那么那些逆这些而行的人,有些反而很长寿,又是为何。扔给概率论么。人的命用幸存者偏差这种东西可是呵呵了。

实践是检验真理的唯一标准。 不过中医更讲究治未病,不同程度用不同方法,扁鹊见蔡桓公嘛。只是病常有,扁鹊不常有,长叹一声。

———————

老机械师傅可以通过声音、样子就看出来机械问题在哪,那么通过望闻问切也是嘛。 人体是一个动态平衡的系统,通过辨别整体平衡被破坏的环节和程度,去适当的方法,恢复调整平衡。

所谓动态平衡,人都是在一年年的动态的变化,身体状态也是时时变动,平衡态也不同。掉一下书袋  黃帝內經 -> 素問 -> 上古天真論

女子七歲,腎氣盛,齒更髮長;二七而天癸至,任脈通,太衝脈盛,月事以時下,故有子;三七,腎氣平均,故真牙生而長極;四七,筋骨堅,髮長極,身體盛壯;五七,陽明脈衰,面始焦,髮始墮;六七,三陽脈衰於上,面皆焦,髮始白;七七,任脈虛,太衝脈衰少,天癸竭,地道不通,故形壞而無子也。

以上每个阶段都有每个阶段的变化,从七岁到四十九岁不同年龄身体的表现会不一样,每个时候人体的平衡点也会不同。非要用十四岁时候的身体体征去要求四十岁的时候去达到,那么人体其实也就会失衡了。举例而言,一个火炉上的水壶,看着水壶温度高了,非要加凉水把水壶温度恢复到之前,但是那个火炉并没有进行处理,只会温度复升。

在这个变化过程中,可以通过各种化验体检发现人体各种物质的指标变动,但是这个变动就能说明有病么。比如年老时候的白头发,这个可以很明显的证明头发的一些物质含量确实有了变化,但是能说明这个是什么病么,显然不能。所以物质的变动并不能说明疾病的出现。

题外一句,当然年轻时候出现白头发,脱发之类的,就会说身体有些问题亚健康,但是也没什么科学上合理的解释。不过中医理论中还是有着很系统的分析和解决方法。

不过其实化验也用处很大。师傅检查机械的时候,有个机油尺,那确实会省很多观察感受的步骤直接看到问题,但是究竟是什么导致机油少的,这个就是老师傅才知道了……

———–

以上是前两章的一些内容的摘录。

 

发表于fusk | 《走进中医》读后感1已关闭评论

路边的一叶芭蕉,办公室的一张A4,都是炎炎夏日的好伴侣,荫凉处轻轻摇动就带来种种乐趣。只是后者可能越来越不需要了,定时定点定温,毫无松懈的从出风口带来新鲜寒冷的空气。

扇子愈加少见,小时候还会坐在院子过道处纳凉,后来就变成停电时的替代品,随着社会主义建设的蓬勃发展,也就只剩下不交电费时的一点点用处。

扇子带来的风是温的热的一阵阵的,空调带来的是寒的凉的持续的,只是蒸发能够带走热量,而蒸发需要的是高的温度,那些汗液,如果并不能因为有热度蒸发走,反而因为冷的空气而继续留存在皮肤上,那么热量,恐怕就会继续被闷回身体内部吧。这个闷某种程度吉凶参半吧。

“烈日炎炎似火烧,野田禾稻半枯焦。农夫心内如汤煮,公子王孙把扇摇。” 水浒里有这么一句小诗。那些腐朽的独裁阶级就会因为事不关己,心中平静,火反而烧不到人身上。无厌于日是黄帝内经中的话,现在人夏天都那么讨厌太阳,各种隔离,封闭。热情热度都无从获得,怎么会热烈起来。虽然书上说火象星座是喜欢太阳的,不过植物因为有阳光才能成长,人也逃不开如此。就算去吃辣吃热,也不过是激发本身的热量,如果本身就是毫无热度,那么虚耗自身精气也是自然的了……

现代有各种方式方法去测量空气,温度湿度PM2.5 ,或许可以测量扇子扇动怎样的风对人体最舒适,说起来是对人体最舒适,其实不过是神经系统的一种感觉罢了,根本无法测量扇动的风,对每一个脏腑,每一段骨骼,每一寸血脉究竟有什么影响。只是想起来,还是晚间那种蒲扇带来的小风,比空调更容易让人入睡。

天有八風,經有五風,何謂。歧伯對曰:八風發邪,以為經風,觸五藏,邪氣發病。所謂得四時之勝者,春勝長夏,長夏勝冬,冬勝夏,夏勝秋,秋勝春,所謂四時之勝也。東風生於春,病在肝,俞在頸項;南風生於夏,病在心,俞在胸脇;西風生於秋,病在肺,俞在肩背;北風生於冬,病在腎,俞在腰股;中央為土,病在脾;俞在脊。

以上。黃帝內經 -> 素問 -> 金匱真言論

发表于fusk | 扇子已关闭评论

如果不是因为偶然的一次占星,可能我对于这个词的了解还真是过于粗浅。

修仙小说喜欢用道心这个词。在小说中不停的练功,战斗、升级,最需要保证的就是道心的稳固,否则必然堕入魔道。现实中也差不多吧,只是没魔道那么惨,不过迷失而已。

可能幼时一个有点虚无的初心,随着成长也就慢慢消磨殆尽,经历各种事,各种人,人生不如意十有八九,那些八九估计就把那个虚无变得更加模糊。然后就能看到别的地方有一些看似特别光鲜美好的未来等着自己。

人既然生于天地之间,秉五行之造化,如果能够,各随其欲,皆得所愿 。其实这就是圣人教下一直以来的追求。只是人们都求着 务快其心, 什么都要立刻马上满足获得,真是心不安而形常倦。似有所得而实无所得。

如果这时候能回去找找初心,会稍艰。所以,说起来,我这年纪还能初心日固,还是有点奇妙。

那次占星时 他说 其实每个人都有自己的道,然后去追求,不偏离,不忘初心。按照初心,行自己的道,天行健 自强不息的去修行,才会有所得。

大学之前可能就想着做个好人,顶多写点有趣的文章;
大学接触了些佛法,有了一些欢喜的时刻,就觉得普度众生,是一个需要去追求的事情,不一定落实在今生,也可以落实在来生;当时还想着做一些可以让长辈和晚辈一起玩的游戏,来增进家庭感情,可能一个玩着斗地主,一个玩着LOL但是他们却是在一个游戏体系内互有帮助;
之后过两年又想多参与NGO来多少做些有益的事情 ;
接触多了命理,想多学点命理,帮助别人趋吉避凶;
最近发现自己还是需要更落实一些,学些中医,真正的帮到人吧,天天思虑帮万民,不如对身边人屑微有些益处。或许变化不断,不过算是一以贯之,更加切实。

可能太多受过现代教育体系的影响下,觉得中医之类皆为糟粕,顶多如日本那样存药灭医。 不过最近看书才觉得感叹精妙,古人肯把天地运行,人体运行最微妙玄奥的部分居然写下来,甚至让我们能学到,唯有感恩了。

关于这个我自己最近发生的,因为一次夜里受风,头疼欲裂,三四天不见好,去了三甲医院神内的专家号,照了ct一切正常,说只是神经性的过两天就好,最后开了盒中成药(估计他觉得就是安慰剂吧)。 后来找了中医先生吃了两剂药就渐轻,三天痊愈。

关于人体运行,西医还是太过浅薄,知其然不知其所以然,当风起于青萍之末时,根本查无所查。还不如三指来把脉来得快…

只是真心觉得生在这片土地,能接触这些玄妙之法,实在是很棒的事!

发表于fusk | 关于初心已关闭评论

12

123123123

发表在 未分类 | 12已关闭评论


什么是 Markdown

Markdown 是一种方便记忆、书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档:譬如您正在阅读的这份文档。它使用简单的符号标记不同的标题,分割不同的段落,粗体 或者 斜体 某些文字,更棒的是,它还可以

1. 制作一份待办事宜 Todo 列表

  • [ ] 支持以 PDF 格式导出文稿
  • [ ] 改进 Cmd 渲染算法,使用局部渲染技术提高渲染效率
  • [x] 新增 Todo 列表功能
  • [x] 修复 LaTex 公式渲染问题
  • [x] 新增 LaTex 公式编号功能

2. 书写一个质能守恒公式[^LaTeX]

$$E=mc^2$$

3. 高亮一段代码[^code]

<code class="python">@requires_authorization
class SomeClass:
    pass

if __name__ == '__main__':
    # A comment
    print 'hello world'


</code>

31333

1. 制作一份待办事宜 Todo 列表

  • [ ] 支持以 PDF 格式导出文稿
  • [ ] 改进 Cmd 渲染算法,使用局部渲染技术提高渲染效率
  • [x] 新增 Todo 列表功能
  • [x] 修复 LaTex 公式渲染问题
  • [x] 新增 LaTex 公式编号功能

2. 书写一个质能守恒公式[^LaTeX]

$$E=mc^2$$

3. 高亮一段代码[^code]

<code class="python">@requires_authorization
class SomeClass:
pass

if __name__ == '__main__':
# A comment
print 'hello world'
</code>

4. 高效绘制 流程图

<code class="flow">st=&gt;start: Start
op=&gt;operation: Your Operation
cond=&gt;condition: Yes or No?
e=&gt;end

st-&gt;op-&gt;cond
cond(yes)-&gt;e
cond(no)-&gt;op
</code>

 

 

// A sample class
class Human {
    private int age = 0;
    public void birthday() {
        age++;
        print('Happy Birthday!');
    }
}
<code>This is a
piece of code
in a block
</code>

 

  • [code lang=”js”]这里写你的代码[/code]

 

// A sample class
class Human {
    private int age = 0;
    public void birthday() {
        age++;
        print('Happy Birthday!');
    }
}

 

class Human {
    private int age = 0;
    public void birthday() {
        age++;
        print('Happy Birthday!');
    }
}
class Human {
    private int age = 0;
    public void birthday() {
        age++;
        print('Happy Birthday!');
    }
}
发表在 未分类 | 已关闭评论

关于javascript变量的声明提升(hoisting)的笔记

关于javascript的变量声明,之前做的多的是C系列,转换过来比较顺畅。

变量不用声明,用就直接用,还就是全局变量。也没有类型规定,很方便。只是遇到一些麻烦。

比如这个,我第一次看到时,也纠结半天没有答案。

 

 

 var v = "hello";
(function(){
   console.log(v);
   var v = "world";
})();

这个运行结果就是 undefined

显示undefined就说明v这个变量被声明了,但是没有赋值。也就相当于

 var v = "hello";
(function(){
   var v; //declaration hoisting提前声明了
   console.log(v);
   v = "world";
})();

类似的,函数也是这样的。

<code>(</code><code>function</code><code>(){</code>
 fun1();
  function fun1(){
   console.log(123); 
  }
})();

这个显示了123;

等价于

<code>(</code><code>function</code><code class="jscript plain">(){
</code> function fun1(){//提前声明了函数
  console.log(123); 
 }
 fun1();
 function abc(){
  console.log(123); 
 }
})();

 

 


 

 


 

 


 

参考12

发表在 js | 关于javascript变量的声明提升(hoisting)的笔记已关闭评论

requireJS 学习笔记

参考123

一、关于使用requireJS

js文件就几个的时候都还好,但是当程序越来越复杂,js文件也就越来得越多。

   &lt;script src="1.js"&gt;&lt;/script&gt;
  &lt;script src="2.js"&gt;&lt;/script&gt;
  &lt;script src="3.js"&gt;&lt;/script&gt;
  &lt;script src="4.js"&gt;&lt;/script&gt;
  &lt;script src="5.js"&gt;&lt;/script&gt;
  &lt;script src="6.js"&gt;&lt;/script&gt;

这样的时候。主要问题有两个。
第一是文件越多,因为浏览器同时加载文件有限(6个),所以会造成css,图片之类的加载缓慢。浏览器就会停止响应。
第二是依赖关系,因为互相依赖,所以需要确保顺序,当之间关系复杂,就更加难以处理。

requireJS就是为了这个,异步加载,处理依赖关系。

二,下载安装

http://requirejs.org/下载,放到工作目录内js文件夹,创建下面两个文件

index.html:

<span class="dec">&lt;!DOCTYPE html&gt;</span>
<span class="tag">&lt;html&gt;</span>
    <span class="tag">&lt;head&gt;</span>
        <span class="tag">&lt;script</span> <span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span> <span class="atn">src</span><span class="pun">=</span><span class="atv">"js/require.js"</span><span class="tag">&gt;&lt;/script&gt;</span>
        <span class="tag">&lt;script</span> <span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="tag">&gt;</span><span class="pln">
                             require</span><span class="pun">([</span><span class="str">"a"</span><span class="pun">]);</span>
        <span class="tag">&lt;/script&gt;</span>
    <span class="tag">&lt;/head&gt;</span>
    <span class="tag">&lt;body&gt;</span>
      <span class="tag">&lt;span&gt;</span><span class="pln">body</span><span class="tag">&lt;/span&gt;</span>
    <span class="tag">&lt;/body&gt;</span>
<span class="tag">&lt;/html&gt;</span>

a.js:

<span class="pln">define</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(){</span>
    <span class="kwd">function</span><span class="pln"> fun1</span><span class="pun">(){</span><span class="pln">
                 alert</span><span class="pun">(</span><span class="str">"it works"</span><span class="pun">);</span>
    <span class="pun">}</span><span class="pln">

    fun1</span><span class="pun">();</span>
<span class="pun">})</span>

运行看看,弹出来”it works”,第一步完成啦~

二、进一步了解依赖

我们这里把index.html里边的

<span class="pln">  require</span><span class="pun">([</span><span class="str">"a"</span><span class="pun">]);</span>

改成

<span class="kwd">require</span><span class="pun">([</span><span class="str">"js/a"</span><span class="pun">],</span><span class="kwd">function</span><span class="pun">(){</span><span class="pln">
    alert</span><span class="pun">(</span><span class="str">"load finished"</span><span class="pun">);</span>
<span class="pun">})</span>

这里再试试,除了’it works’ 还有’load finished’,这样的顺序出现。

这里可以看到require 里边的中括号实际是一个数组,当你有许多个依赖时,这里就可以当作数组加载依次加载。但是就算只有一个依赖,也需要写成数组。

后边的function就是回调函数,就是当依赖加载结束,执行里边的函数。

比如我现在依赖三个模块jquery、underscore和backbone ,可以这样写:

require(['js/jquery', 'js/funnjs','js/underscore', 'js/backbone'], function ($       , funn,_, Backbone){
  // some code here
});

这里边前边是依赖数组。后边那些’$’ 、’_’其实是指前边依赖加载完毕的返回对象。比如funnjs里有个return a; 那么在下边的函数内就可以用语句funn.a  来使用返回对象。

在这里有一点,就是”js/jquery’是指’js/jquery.js’.这里是把扩展名忽略了。

三、关于加载文件

其实像用’js/jquery’这样很麻烦,可以使用

<span class="kwd">require</span><span class="pun">.</span><span class="pln">config</span><span class="pun">({</span><span class="pln">
    paths </span><span class="pun">:</span> <span class="pun">{</span>
        <span class="str">"a"</span> <span class="pun">:</span> "js/a"   
    <span class="pun">}</span>
<span class="pun">})</span>
<span class="kwd">require</span><span class="pun">(</span><span class="str">"a"</span><span class="pun">],</span><span class="kwd">function</span><span class="pun">(</span><span class="pun">){</span><span class="pln">
    $</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(){</span><span class="pln">
        alert</span><span class="pun">(</span><span class="str">"load finished"</span><span class="pun">);</span>  
    <span class="pun">})</span>
<span class="pun">})</span>

也可以使用远程文件

<span class="kwd">require</span><span class="pun">.</span><span class="pln">config</span><span class="pun">({</span><span class="pln">
    paths </span><span class="pun">:</span> <span class="pun">{</span>
        <span class="str">"jquery"</span> <span class="pun">:</span> <span class="pun">[</span><span class="str">"http://libs.baidu.com/jquery/2.0.3/jquery"</span><span class="pun">],</span>
        <span class="str">"a"</span> <span class="pun">:</span> <span class="str">"js/a"</span>   
    <span class="pun">}</span>
<span class="pun">})</span>
<span class="kwd">require</span><span class="pun">([</span><span class="str">"jquery"</span><span class="pun">,</span><span class="str">"a"</span><span class="pun">],</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$</span><span class="pun">){</span><span class="pln">
    $</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(){</span><span class="pln">
        alert</span><span class="pun">(</span><span class="str">"load finished"</span><span class="pun">);</span>  
    <span class="pun">})</span>
<span class="pun">})</span>

用paths还有一个功能就是配置多个地址,如果一个不能加载,就立刻换下一个。

<span class="kwd">require</span><span class="pun">.</span><span class="pln">config</span><span class="pun">({</span><span class="pln">
    paths </span><span class="pun">:</span> <span class="pun">{</span>
        <span class="str">"jquery"</span> <span class="pun">:</span> <span class="pun">[</span><span class="str">"http://libs.baidu.com/jquery/2.0.3/jquery"</span><span class="pun">,</span> <span class="str">"js/jquery"</span><span class="pun">],</span>
        <span class="str">"a"</span> <span class="pun">:</span> <span class="str">"js/a"</span>   
    <span class="pun">}</span>
<span class="pun">})</span>

四、关于main.js

像这样的配置,如果每个html内都有,无疑是浪费的。所以需要把require.config做成全剧共部分。在js文件夹内创建main.js:

<span class="kwd">require</span><span class="pun">.</span><span class="pln">config</span><span class="pun">({</span><span class="pln">
    paths </span><span class="pun">:</span> <span class="pun">{</span>
        <span class="str">"jquery"</span> <span class="pun">:</span> <span class="pun">[</span><span class="str">"http://libs.baidu.com/jquery/2.0.3/jquery"</span><span class="pun">,</span> <span class="str">"js/jquery"</span><span class="pun">],</span>
        <span class="str">"a"</span> <span class="pun">:</span> <span class="str">"js/a"</span>   
    <span class="pun">}</span>
<span class="pun">})</span>

<span class="tag">&lt;script</span> <span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span> <span class="atn">src</span><span class="pun">=</span><span class="atv">"js/require.js"</span><span class="tag">&gt;&lt;/script&gt;</span>

更换成

<span class="tag">&lt;script</span> <span class="atn">data-main</span><span class="pun">=</span><span class="atv">"js/main"</span> <span class="atn">src</span><span class="pun">=</span><span class="atv">"js/require.js"</span><span class="tag">&gt;&lt;/script&gt;</span>

这里加入了data-main属性。这里指定的js将会在require.js加载完毕运行。每个页面就可以不用写require.config,直接使用全局设定。

五,例子1

说真的我当时看到这些,觉得,这些有啥用啊。。就有了以下的例子

index.html

&lt;!DOCTYPE html&gt;
  &lt;html&gt;
    &lt;head&gt;
       &lt;script data-main="js/main" src="js/require.js"&gt;&lt;/script&gt;
       &lt;script type="text/javascript"&gt;
          require(["js/a.js","js/b.js"],function(){
            funa();
            funb();
          })
       &lt;/script&gt;
   &lt;/head&gt;
   &lt;body&gt;
     &lt;span&gt;body&lt;/span&gt;
   &lt;/body&gt;
&lt;/html&gt;

js/a.js

 function funa(){
    alert("a works");
}

js/b.js

 function funb(){
    alert("b works");
}

以上。

就可以在主函数内调用两个文件中的函数。

另外,RequireJS默认并没有保证一定会在页面加载完毕执行的。如果需要在加载完毕后加载。就需要一个官方模块。在官网下载domReady模块.把这个js放到js文件夹内。

&lt;script&gt; 
    require(["domReady!", "js/a.js", "js/b.js"], function() { 
	    	 funa(); 
	    	 funb(); 
	    }); 
&lt;/script&gt;

这样就能能达到目的了。

六、关于模块化设计

在传统JavaScript中,使用全局变量过于容易。但是有时候却并不需要这样,因为命名空间会过于庞大复杂。所以可以通过 AMD 规范将一个模块内的变量仅自己使用,避免声明了全局变量。使用的时候,比如b依赖a,那么c访问b中的变量,用a.b来实现。

student.js
 define(function(){ 
	 return { 
	    createStudent: function(name, gender){ 
	    	 return { 
	    		 name: name, 
	    		 gender: gender 
	    	 }; 
	    } 
	 }; 
 });
class.js
 define(function() { 
 var allStudents = []; 
        return { 
            classID: "001", 
            department: "computer", 
            addToClass: function(student) { 
            allStudents.push(student); 
            }, 
            getClassSize: function() { 
            return allStudents.length; 
            } 
        }; 
     } 
 );
主程序
require(["js/student", "js/class"], function(student, clz) { 
   clz.addToClass(student.createStudent("Jack", "male")); 
   clz.addToClass(student.createStudent("Rose", "female")); 
   console.log(clz.getClassSize());  // 输出 2 
   console.log(clz.classID) ; //输出001
});

是的,就输出一个2。还有一个班级号。

这里的clz就是指js/class  return的对象组。这个看起来比较简单明了。现在复杂一点。

依赖 student 和 class 模块的 manager 模块,manager.js
 define(["js/student", "js/class"], function(student, clz){ 
  return { 
    addNewStudent: function(name, gender){ 
      clz.addToClass(student.createStudent(name, gender)); 
    }, 
    getMyClassSize: function(){ 
       return clz.getClassSize(); 
    } 
   }; 
 });
新的主程序
 require(["js/manager"], function(manager) { 
    manager.addNewStudent("Jack", "male"); 
    manager.addNewStudent("Rose", "female"); 
    console.log(manager.getMyClassSize());// 输出 2 
 });

一样输出2.

这里就多了这么一句

clz.addToClass(student.createStudent(name, gender));

其实就是用前缀来区分命名空间。

然后。

暂时告一段落。。。

 


 

 

 

 

发表在 前端 | requireJS 学习笔记已关闭评论

reactjs 基础

reactjs这个东西的教程找了一圈都太拗口了!

都不像让人来看的。

尝试边学边挖个坑吧。

首先参考http://www.ruanyifeng.com/   下载这个

搭个服务器环境,然后把这个解压缩进去。先运行demo01/index.html

QQ图片20150604155304

就好啦~~

 

 

 

<code class=" language-javascript"><span class="token operator">&lt;</span><span class="token operator">!</span>DOCTYPE html<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>html<span class="token operator">&gt;</span>
  <span class="token operator">&lt;</span>head<span class="token operator">&gt;</span>
 <strong>   <span class="token operator">&lt;</span>script src<span class="token operator">=</span><span class="token string">"../build/react.js"</span><span class="token operator">&gt;</span><span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span>
    <span class="token operator">&lt;</span>script src<span class="token operator">=</span><span class="token string">"../build/JSXTransformer.js"</span><span class="token operator">&gt;</span><span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span></strong>
  <span class="token operator">&lt;</span><span class="token operator">/</span>head<span class="token operator">&gt;</span>
  <span class="token operator">&lt;</span>body<span class="token operator">&gt;
</span>
    <span style="color: #0000ff;"><span class="token operator">&lt;</span>div id<span class="token operator">=</span><span class="token string">"example"</span><span class="token operator">&gt;</span><span class="token operator">&lt;</span><span class="token operator">/</span>div<span class="token operator">&gt;
</span></span>
    <span style="color: #339966;">&lt;script type="text/jsx"&gt;</span>
<span style="color: #339966;">                  React.render(</span>
<span style="color: #339966;">                         &lt;h1&gt;Hello, world!&lt;/h1&gt;,</span>
<span style="color: #339966;">                             document.getElementById('example')</span>
<span style="color: #339966;">                   );</span>
<span style="color: #339966;">            &lt;/script&gt;</span>
  <span class="token operator">&lt;</span><span class="token operator">/</span>body<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>html<span class="token operator">&gt;</span></code>

这个就是hello world ^

可以看出区分了三部分。

第一部分是加载reactjs环境。两行。

第一行react.js是主环境。
第二行JSXTransformer.js是将jsx转化为js.这个过程,其实应该在发布前就转化好,因为这个转化实在太慢。不过刚开始嘛,才不管呢~

第二部分是,一个普通的div,要是没这个,就会报错啦~很重要的

第三部分就是核心啦

<code class=" language-javascript"><span style="color: #339966;">&lt;script type="text/jsx"&gt;
//------
 &lt;/script&gt;</span></code>

恩,不同于下边的js,使用上边的jsx.

<code class=" language-javascript">&lt;script type="text/javascript"&gt;
//------
 &lt;/script&gt;</code>

然后就是更核心啦

<code class=" language-javascript"><span style="color: #339966;"> React.render(</span>
<span style="color: #339966;">                         &lt;h1&gt;Hello, world!&lt;/h1&gt;,</span>
<span style="color: #339966;">                             document.getElementById('example')</span>
<span style="color: #339966;">                   );</span></code>

这个 React.render是 React 的最基本方法

用来转化模板并操作上边的div。

这个大括号里边用逗号分开两句。

第一句<h1>Hello, world!</h1>

在reactjs里边遇到的大括号就用react定义,遇到尖括号就是html或者被定义的类。

只要定义了我用<abc/>也可以的。

后边的document.getElementById(‘example’)就好理解了,找到这个元素,操作。

——————-

待续

 

 

 

 

 

 

 

发表在 js | 标签为 | reactjs 基础已关闭评论

关于windows 下的grunt

记录一下。

前期安装准备工作

1、nodejs和npm的安装

从以下地址下载安装Windows Installer (.msi)的64位的。

<a href="https://nodejs.org/download/"><code class="sql"> https://nodejs.org/download/</code></a>

相对于老版本的nodejs,这个已经集成了npm。

安装后到命令行使用命令

<code class="sql">/  node -v</code>

就能看到版本号了。

2、安装grunt

还是在命令行输入

npm install -g grunt-cli

3、安装git

http://git-scm.com/download

从这里下载安装。

然后到命令行输入git看看有没有安装成功。

如果不行安装github

https://windows.github.com/

 

然后在开始菜单从github里边找到 git shell.

之后就是开始啦~~~

创建一个工程目录比如project;

命令行在该目录下输入

<span style="font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace;"><span style="font-size: 13px; line-height: 19.5px;">npm init</span></span>

然后会出现一些引导,这些引导你要修改就输入,不修改直接回车就好

QQ图片20150526111053

然后你就会发现在project文件夹里多了一个package.json。

输入命令

<code class="shell">sudo npm <span class="hljs-operator"><span class="hljs-keyword">install</span> grunt <span class="hljs-comment">--save-dev</span></span></code>

就会发现出现一个文件夹node_modules

然后是用git下载grunt的模板来生成Gruntfile.js

<del>git clone git://github.com/gruntjs/grunt-init-gruntfile.git $HOME/.grunt-init/
git clone git://github.com/gruntjs/grunt-init-jquery.git $HOME/.grunt-init/
git clone git://github.com/gruntjs/grunt-init-node.git $HOME/.grunt-init/</del>

这三个分别是默认grunt模板,jquery插件的grunt模板,node包的grunt模板。

然后我下载的是第一个,把它放到project文件夹下的temp文件夹里。

输入

<del>grunt-init temp/</del>

 

 

 

除了这个package.json还需要一个Gruntfile.js 才构成了grunt的基本配置。

 /*global module:false*/
module.exports = function(grunt) {
  //配置grunt
  grunt.initConfig({
     //设定grunt配置文件json位置
     pkg: grunt.file.readJSON('package.json'),
  });
  //设定在该目录执行grunt命令,所执行注册的任务。
  grunt.registerTask('default', []);
};

这里命令行执行grunt,会出现Done.等字样。就说明成功啦。

关于grunt的插件

grunt官方有很多插件,http://www.gruntjs.net/plugins  这个顺序就是受欢迎程度,在前边的肯定没错啦。

现在来设定第一个插件contrib-uglify

这是一个压缩js文件的插件。这个基本上目前前端基本的要求,哪个没有·.min.js文件。

安装它跟安装grunt类似

<code class="shell">npm <span class="hljs-operator"><span class="hljs-keyword">install</span> grunt-contrib-uglify <span class="hljs-comment">--save-dev</span></span></code>

你会发现在package.json里边出现一行”grunt-contrib-uglify”: “^0.9.1″

这里随便建立一个src/a.js文件

 (function(window){
    var Things;
    function dofor(){
       for (var i = 0; i &lt; Things.length; i++) {
          Things[i]=0;
       };
   }
 dofor();
})(window);

目的是压缩他,那么怎么设定,修改·Gruntfile.js,在grunt.initConfig中添加

 uglify: {
   options: {
     banner: '/*! &lt;%= pkg.name %&gt; &lt;%= grunt.template.today("yyyy-mm-dd") %&gt; */\n'
   },
   build: {//压缩所有文件
     files: [{
       expand:true,
       cwd:'src',//js目录下
       src:'**/*.js',//所有js文件
       dest: 'build/js/'
     }]
   },
 }

然后为了让grunt加载插件,在grunt.initConfig语句后添加

 grunt.loadNpmTasks('grunt-contrib-uglify');

 

之后为了让grunt命令能够执行插件将最后一句修改为

 grunt.registerTask('default', ['uglify']);

然后执行grunt

QQ图片20150612160811

 

关于js查错

js文件非常容易错误,那么就要有个差错工具。总去浏览器直接测试效果实在是太慢啦。

所以这里需要contrib-jshint

<code class="shell">npm <span class="hljs-operator"><span class="hljs-keyword">install</span> grunt-contrib-jshint <span class="hljs-comment">--save-dev</span></span></code>

在grunt.initConfig中添加

 jshint: {
   build: ['Gruntfile.js','src/*.js'],
   options:{
    jshintrc:'.jshintrc'
   }  
 }

在grunt.initConfig语句后添加

 grunt.loadNpmTasks('grunt-contrib-jshint');

最后一句修改为

 grunt.registerTask('default', ['jshint','uglify']);

添加一个文件jshint.json,这个是jshint的配置文件,你每次需要检查什么错误,不检查什么,在这里规定。这里是个简单的例子,复杂的可以搜索jshint 配置 这样会有一些更合适生产环境的配置清单。

{
 "boss":false,
 "curly":true
}

然后运行看看,一个个任务依次进行,多听话~

自动化嘛

一遍遍执行grunt,实在称不上懒人程度员。所以这里需要contrib-watch

<code class="shell">npm <span class="hljs-operator"><span class="hljs-keyword">install</span> grunt-contrib-watch <span class="hljs-comment">--save-dev</span></span></code>

在grunt.initConfig中添加

 watch: {
   build: {
     files: ['src/*.js','src/*.css'],
     tasks: ['uglify'],
     options: {spawn:false}
   }
 }

在grunt.initConfig语句后添加

 grunt.loadNpmTasks('grunt-contrib-watch');

最后一句修改为

 grunt.registerTask('default', ['jshint','uglify','watch']);

 

执行一次grunt .出现那行

Waiting…

呀,在看着你,看着你~

 


 

 


 

 

发表在 网站基础 | 关于windows 下的grunt已关闭评论

关于架设git服务器

github实在是被墙的厉害,只好自己搭建。找了一些教程。12

简单说就是

<code class="sql">#  su<span class="operator"><span class="keyword">do</span> apt-<span class="keyword">get</span> update</span></code>
# su<span class="operator"><span class="keyword">do</span> apt-<span class="keyword">get</span> install git</span>

升级更新,安装程序。

<code class="sql"># su<span class="operator"><span class="keyword">do</span> adduser git
# sudo  passwd git
</span></code>

添加用户,密码。

一般还会有个证书,不过我都先省略了。。

<code class="sql"># su<span class="operator"><span class="keyword">do</span> git init --bare project.git</span></code>

一般这行命令是在/git/ 下边执行,就在/git/project.git生成工作目录。或者你有符合自己习惯的存放目录也好。

<code class="sql"> # su<span class="operator"><span class="keyword">do</span> chown -R git:git project.git</span></code>

之后的步骤可选,出于安全,必选

<code class="sql"> # vi /etc/passwd</code>

找到

<code class="ruby"><span class="symbol">git:</span><span class="symbol">x:</span><span class="number">1001</span><span class="symbol">:</span><span class="number">1001</span><span class="symbol">:</span>,,,<span class="symbol">:/home/git</span><span class="symbol">:/bin/bash</span></code>

修改为

<code class="ruby"><span class="symbol">git:</span><span class="symbol">x:</span><span class="number">1001</span><span class="symbol">:</span><span class="number">1001</span><span class="symbol">:</span>,,,<span class="symbol">:/home/git</span><span class="symbol">:/usr/bin/git-shell</span></code>

不过这里的数字不一定是这个,这个无所谓。

之后正常的话就可以用软件或者命令行登录了。

<code class="ruby"><span class="symbol">ssh://git@8.8.8.8:22/git/project.git</span></code>

一般会显示,此为空目录,添加就好。

 

ps:之前常遇到问题fatal: This operation must be run in a work tree 。

参考12

使用

<code>mkdir temp; cd temp
git init
touch .gitignore
git add .gitignore
git commit -m "Initial commit"
git push (url or path of bare repository) master
cd ..; rm -rf temp</code>
发表在 未分类 | 关于架设git服务器已关闭评论