0%

Flash制作动画非常便捷,但是如何能够把用swf文件收集的数据发送給JS处理呢?下面是一个简单的例子:
1、首先在html网页中通过object嵌入swf文件


    
    
     
    
    
    

2、在网页的头部嵌入要调用的函数hello

    <script>
        function hello(v){ 
            alert("hello: "+v);
            document.location.href = '/search';
        } 
        function thisMovie(movieName) { 
            if (navigator.appName.indexOf("Microsoft") != -1) { 
                return window[movieName] 
            } 
            else { 
                return document[movieName] 
            } 
        }
    </script>

3、编辑fla文件,建立一个文本框txt1和一个提交submit按钮

    package {
    import flash.net.*;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.MovieClip;
    import flash.external.ExternalInterface; 
    public class test extends MovieClip {
        public function test(): void {
            submit.addEventListener(MouseEvent.CLICK, postForm);
        }
        private function postForm(evt: MouseEvent): void {
            ExternalInterface.call("hello", txt1.text); 
        }
    }

4、实现的效果如下:
当你点击submit按钮时,swf文件会将txt1.text传递給hello函数,并且通过JS现实对话框“欢迎: 某某” 并且跳转到/search页面。

5、原理解释
fla文件中,导入了flash.external.ExternalInterface类,它是专门负责外部通信的。通过ExternalInterface.call方法,就可以调用object容器外部的函数hello。

6、JS调用AS函数的实现方法。
上面实现了AS调用JS并传递参数,那么反过来,JS是否可以调用AS函数呢?答案是肯定的。

AS类这样写:

    package {
        import flash.net.*;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.display.MovieClip;
        import flash.external.ExternalInterface;

        public class test extends MovieClip {
            public function test(): void {
                submit.addEventListener(MouseEvent.CLICK, postForm);
                ExternalInterface.addCallback("say", say); //regist 
            }

            private function say(txt: String) {
                txt2.text = txt;
            }

            private function postForm(evt: MouseEvent): void {
                //call js function
                ExternalInterface.call("hello", txt1.text);
            }
        }
    }

Html这样写:


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    <html lang="en">
    <head>
        <title>As communicate with JS</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script>
            function hello(v){ 
                alert("hello: "+v);
                //document.location.href = '/search';
            }
            function thisMovie(movieName) { 
                if (navigator.appName.indexOf("Microsoft") != -1) { 
                    return window[movieName] 
                } 
                else { 
                    return document[movieName] 
                } 
            }
            $(document).ready(function(){
                $("#btn1").click(function(){
                    $("#test1").text("Hello world!");
                });
                $("#btn2").click(function(){
                    $("#test2").html("<b>Hello world!</b>");
                });
                $("#btn3").click(function(){
                    //$("#test3").val("Dolly Duck");
                    var txt=$("#test3").val();
                    thisMovie("test").say(txt);
                });
            });
        </script>
    </head>
    <body>
        <object type="application/x-shockwave-flash" data="{% static "flash/test.swf" %}"  name="test" width="550" height="400">
        <param name="allowScriptAccess" value="sameDomain" /> 
        <param name="movie" value="{% static "flash/test.swf" %}" />
        <embed src="{% static "flash/test.swf" %}" name="test" quality="high" allowScriptAccess="always" swLiveConnect="true" type="application/x-shockwave-flash" width="550" height="400"></embed>
        </object>
        <br>
        <p id="test1">This is a paragraph.</p>
        <p id="test2">This is another paragraph.</p>
        <p>Input field: <input type="text" id="test3" value="Mickey Mouse"></p>
        <button id="btn1">Set Text</button>
        <button id="btn2">Set HTML</button>
        <button id="btn3">Set Value</button>
    </body>
    </html>

7、遗留的问题:这样的写法谷歌浏览器没问题,但是火狐浏览器不成功,也就是不能把参数传到swf上。

皮克斯制作的动画比如《玩具总动员》,《汽车总动员》,《头脑特工队》都深受观众喜爱。这次又出了新作《寻梦环游记》不仅获得了很高的票房,而且也得到了观众和影评人的一致好评。皮克斯成功的秘诀是什么呢?公司老总给出的答案是:故事、故事还是故事。

郝广才曾经在得到直播专分享过英雄故事的写作元素。

郝广才说,最动人的故事一定是和英雄有关的。
掌握了英雄故事的结构,就能写好一个动人的故事。
英雄故事的结构就像一个钟表盘上的12个刻度,
分别是得到召唤,请求智者支援,启程迎接挑战,开始面对困难的试炼,然后面临恐惧,遭遇危机,接着得到宝物,解决问题,荣归故里,重获新生,获得领悟,最后舍弃功与名回到现实。

让我们看一看,《寻梦环游记》这部动画的故事情节是否能跟这12个刻度有一定的呼应。

发生:男孩喜欢音乐,梦想向歌王一样歌唱和演奏,但是他却生活在一个极度讨厌音乐的鞋匠世家。他听到镇上有一个才艺秀表演打算参加。【得到召唤】

活动和阻碍:男孩想听、想唱、想演奏,但是都被家人阻挠。他偷偷制造的吉他,结果被意外发现,也被祖母摔个稀巴烂。【面对阻挠】

发展:他一气之下逃离了家庭,准备追寻自己的梦想。为了参加比赛,他需要一把吉他,但是他借不到吉他。一个想法钻进他的脑子里,他想把歌王的吉他借出来演奏。【得到灵感】【启程迎接挑战】

转折:在祭奠歌王的宫殿,他拿到了吉他,但是却因为被诅咒而变成了亡灵。他来到了死人的世界。他遇到了自己家族中先去的亲人,并且见到了他的曾祖母。曾祖母可以通过一个祝福让他回到真实世界,但是却限制他玩音乐。【面对阻挠和危机】

转折:他回到现实世界,结果拿上吉他想去参加比赛,结果违背了条件,又回到了亡灵世界。他终于认识到自己真正的梦想是音乐,为了实现这个梦想,他必须找到并得到曾祖父的祝福,于是就和一个偶然遇到的亡魂开始寻找歌王之旅。曾祖母则开始追踪和保护小男孩。【获得领悟】

转折:找到了歌王之后,他发现歌王实际上并不是他的曾祖父,而是害死自己曾祖父的人。路上偶遇的亡灵才是自己的曾祖父。他的曾祖父实际上是被歌王用毒酒害死的。曾祖父也并没有为了音乐而抛弃家庭,而是深爱着可可,也就是小孩祖母的妈妈。【遭遇危机】

转折:他意识到了家庭的重要性,并愿意向曾祖父那样以家庭为重,甚至放弃音乐。【获得领悟】

转折:经过一番搏斗,歌王被打败了,作品剽窃和杀人的丑事也被知道了。可是曾祖父因为可可马上就忘记他了,而就要消失了。曾祖母給了小男孩祝福,并且没有附加任何条件。【面临危机】

结尾:小男孩会到现实世界,他用吉他演奏了曾祖父的歌曲,可可恢复了记忆,讲述了以往的故事,转变了家人对音乐的看法。一家人又再次相互理解和包容起来,最后在小男孩的歌声和舞蹈里,故事结尾。【回归现实】【重获新生】【获得领悟】

虽然这部动画片不算是典型的战争英雄故事,比如《勇敢的心》,但是小主人公在现实世界和亡灵界追寻梦想、挑战自我、战胜困难、发现自我、获得领悟的历程所展现的,就是他成为自己生活英雄的过程。而这样的生活英雄跟容易与孩子和成人产生共鸣!

AJAX是一个缩写,代表:Asynchronous JavaScript And XML.

AJAX is a developer's dream, because you can:
# Read data from a web server - after the page has loaded
# Update a web page without reloading the page
# Send data to a web server - in the background

今天改写了一个代码实现了聊天的过程中不需要重新加载页面。代码如下:

urls.py

url(r'^api/chat/', post), 

view.py

def post(request, *args, **kwargs):
    """
    Return a response to the statement in the posted data.
    """
    bot = ChatBot("Training Example")
    bot.set_trainer(ListTrainer)
    input_data = json.loads(request.read().decode('utf-8'))
    response = bot.get_response(input_data)
    response_data = response.serialize()
    return JsonResponse(response_data, status=200)

chat.html

<script>
  var chatterbotUrl = '/api/chat/';
  var csrftoken = Cookies.get('csrftoken');
  function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
  }

  $.ajaxSetup({
    beforeSend: function(xhr, settings) {
      if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
        xhr.setRequestHeader("X-CSRFToken", csrftoken);
      }
    }
  });

  var $input = $('#input');
  var $sayButton = $('#sayButton');
  var $answer = $('#answer');

  function submitInput() {
    var inputData = {
      'text': $input.val()
    }
    var $submit = $.ajax({
      type: 'POST',
      url: chatterbotUrl,
      data: JSON.stringify(inputData),
      contentType: 'application/json'
    });

    $submit.done(function(statement) {
        $answer.val(statement.text);
        // Clear the input field
        $input.val('');
        //alert(statement.text)
    });

  $sayButton.click(function() {
    submitInput();
  });

原理是这样的,首先你需要通过urls.py文件指定在请求特定url的时候,触发的函数。这个函数是在view.py中定义的,也就是post函数。post函数需要至少一个参数,也就是request,request必须包含一个text的属性才能被read()出来而不出错。之后,post函数会返回一个JsonResponse,其中机器人的回答可以通过statement.text来获取和使用,见chat.html中的$submit.done函数。

当不知道传递的是何值时,可以通过html 中的alert或者python中的print()来监听调试。

最近接触了不少Java script的代码,但是如何让这些代码运行起来呢?

有两个办法最可行,一个是node,一个是开服务器appche。

对应的可以参考这两个网页:
node.js–>https://nodejs.org
appche–>http://www.jianshu.com/p/d006a34a343f

Node可以直接在本地运行javascript,比如读写文件。
appche直接开服务器来实现数据的储存,可以配合mysql一起使用。

比如Node读文件的代码(demo_readfile.js):

var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
  fs.readFile('demofile1.html', function(err, data) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    res.end();
  });
}).listen(8080);

再比如Node写文件的代码(demo_fs_write.js):

var fs = require('fs');
//create a file named mynewfile3.txt:
fs.writeFile('mynewfile3.txt', 'Hello content!', function (err) {
  if (err) throw err;
  console.log('Saved!');
});

Mac系统自带了Apache,需要设置和启动即可,具体设置可以查考上面简书的文章。

常用端口命令:

httpd -v #查看apache的版本信息
sudo apachectl start
sudo apachectl stop
sudo apachectl restart
sudo apachectl -t #检测配置文件语法是否有错

超级城市是一个大趋势。全球有越来越多的超大城市涌现,而且这些超大城市还会变得越来越大。超级城市是指人口超过1000万的超级大城市,目前全球有40多个,中国有10个左右这样的超级城市:重庆、上海、北京、天津、成都、广州、深圳、哈尔滨、苏州、武汉。

超级城市有什么好的?交通拥挤、空气污染这些大城市病难道还有人去吗?很多人打着这样的旗号,逃离北上广。实际上,目前人口高度聚集还是有非常大的优势,特别是大规模密集协作和生产上。此外,科技可以医治大城市病,并且创造很多新兴产业。

超大城市的优势:
1、密集城市可以提高协作效率。
2、大城市可以催生专门的服务。超级城市会让每个人有发展专长的机会。
3、随着生活的智能化,大城市还提供了大数据。
4、集体创新。

机会属于有思考、有准备的行动者。每个人都应该努力给自己创造机会。树立看到机会勇于行动的决心。提升自己的管理意识、财务意识、产品意识。

虽然科学推动社会发展的力量已经被广泛认可,但是科学家以及他们的生活史常常不为人所知。

比如伽利略有过3个孩子,他为了专心研究,让他的一个朋友娶了跟了自己多年的女人,  
把自己的女儿送到了修道院当修女。为了筹集资金进行天文观测,还许诺用捐助者的  
姓名命名新发现的行星。  

普及科学,其实不仅要普及科学知识,其实还应该增强大众对科学家的理解。在学校里,我们采用的方式通常是科学史的说教。这种方式对有考试要求的学生也许有用,但是对一般大众而言,几乎必然失败。

那么,如何让大众了解科学家以及他们的科学发现呢?科学戏剧提供了一种可选的途径。

科学戏剧作为科学过程的隐喻,可以在一定程度上反映科学家的生活史,尽管戏剧必然会有虚构的成分。但是,即便是这种虚构的成分,仍然有助于公众对科学家有更多的认识和批判。虚构在某种程度上正好梳理了批判的靶子。

那么科学戏剧是如何反应科学家的生活史的呢?对应的关系框架如下:
1、科学家作为角色
性格和特点
主角和配角

2、实验室作为舞台
科学工具、物品作为角色

3、科学概念:源起和最终阶段
争议作为情节驱动力
干扰事件

每个故事的构成要素:情境、开头、意外、结尾。比如下面的一段故事情节:

一天晚上,牛顿躺在苹果树下的睡椅上休息。一颗苹果掉了下来,……
但是月亮却还在移动,没有掉落下来,这激发了牛顿的思考。为什么,苹果会掉下来,
而月亮不会。如果以很高的速度把苹果抛出去,苹果会不会像月亮一样永远不会掉下来呢?  
最终牛顿发现了引力。

关于科学戏剧的思考:
What is the educational value of science theater? Nature of science; the life history of scientists; the process of sciences; what else?

Science theater may not be real, but science theater repopulates sciences.

Mermaid是一个可以把markdown格式代码,渲染成流程图的工具。
git:https://github.com/knsv/mermaid/
在octopress上实现mermaid的方法参考:http://mostlyblather.com/blog/2015/05/23/mermaid-jekyll-octopress/

比如下面的代码:

graph TD
A[Christmas] -->|Get money| B(Go shopping)
B --> C{Let me think}
C -->|One| D[Laptop]
C -->|Two| E[iPhone]
C -->|Three| F[Car]

渲染的结果如下:
mermaid graph

graph TD A[Christmas] -->|Get money| B(Go shopping) B --> C{Let me think} C -->|One| D[Laptop] C -->|Two| E[iPhone] C -->|Three| F[Car]

sublime有一个插件可以在浏览器中预览效果:
From the Command Palette: Mermaid: View In Browser

快捷键:shift+command+p

旁白:有人向往远方,有人向往床上

(大我来到小爱的床前,小爱还在睡觉。)

我:有那么多觉要睡吗?睡那么多,死了之后不怕失眠吗?

爱:谁在唠唠叨叨的呢?把我的美梦都惊扰了!

我:还睡啊!该去上裴老师的STEM课了!

爱:啊今天有课?什么课?什么课?

我:STEM课

爱:弹(tan)幕课有什么好上的?网上不到处都是!

我:姐姐,不是弹(tan)幕,是弹(dan)幕,去去去。 不是弹(tan)幕,也不是弹(dan)幕。是stem,S.T.E.M

爱:嗨,S.T.E.M,我以为是什么呢?那我更要去睡觉了?

我:啊!为什么?

爱:睡觉很重要啊,不是S。T。E。M。吗,第一字母是不是就是S?

我:对呀

爱:S吗,S代表的是SLEEP,当然要睡好了。

我:等下,等下,STEM的S好像是Science,科学吧。

爱:什么SCIENCE,科学能有睡觉重要吗?

我:俄,那T又代表什么?

爱:T都不知道,T代表的是Think啊,思考啊,还真拿我当猪了?只知道睡啊,偶尔思考思考人生,思考思考未来,思考思考如何提高睡眠质量。

我:果然还是只知道睡,哪,哪我问你,E代表什么?

爱:E啊,E就是吃啊,Eat懂不。

我:还真是狗改不了吃屎,除了睡就是吃,三句话不离本行。

爱:怎么说话呢,怎么说化呢,吃可是我们中国的文化精华啊,你不不知道我们中华民族几乎三分之一的时间和智慧都用在吃上了。

我:真的吗?精华也不能乱涂啊,E不是engineering吗!

爱:Engineering是什么鬼?

我:Engineering是工程的意思,浅薄了吧?

爱:不浅薄,工程是吧,工程不就是干活,一边是干活,一边是吃,你选哪一个,傻子都会选。

我:俄……

爱:当然是吃了,笨蛋。

我:天啊,哪,哪,哪M呢?我问你

爱:俄,这个,这个,M就是make啊,你真拿我当猪啊,只知道吃是吧。我还会创作。我可是当今最火的创客,什么黑客、慕课、微课、蜗居客,都统统给我靠边站,我是创客。I am a Maker。I am a Maker。

我:什么Maker,我看你是谣言的Maker。别信她的,同学们,STEM是科学、技术、工程、数学的缩写,不是什么Sleep、Think、Eat、Make的缩写,而且现在STEM已经慢慢变为STEAM了,这个新增加的A就是ART。art,艺术懂不?

爱:什么Art呀,不,不是ART。确实STEM正在变为STEAM,不过这个A不是什么art。

我:那是什么?

爱:是AI懂不,现在最火的,讨论的最热的,各行各业都心惊胆战的

我:什么呀?

爱:AI AI,就是爱呀。瞧你的英文这么溜儿,拼音都没学好。你以为我只知道到吃了睡,睡了吃啊!除了思考、创造,没有别的爱好?告诉你,我的爱好就是爱啊!如果生活没有爱,还有什么可期待?对不起,我要去爱了,拜拜,这才是生活!

我:AI不是artificial intelligence吗?爱,等我一下,爱,你没穿鞋!

科学大本营——第一季

STEM&爱:主演:大我,小爱。 编剧:chunlei

ChatterBot Django是基于Python和Django框架构建的一个聊天程序。

其使用的基本方法可以查看这个文档

根据已有的对话进行训练(其中对话数据储存在chatterbot_corpus文件夹中)
python manage.py train

打开服务器(访问[http://127.0.0.1:8000]浏览)
python manage.py runserver

目录:/webdev/chatterbot alice: http://127.0.0.1:8000/chat/ ctrl + C 退出程序 url.py 可以修改响应

如果修改数据库文件的话,比如删除db.sqlite3文件,就需要运行下面的命令来从新配置框架。
python manage.py migrate

修改settings.py文件。

# ChatterBot settings
CHATTERBOT = {
'name': 'Django ChatterBot Example',
'trainer': 'chatterbot.trainers.ChatterBotCorpusTrainer',
'training_data': [
     'chatterbot.corpus.english.greetings',#set the traing data
     'chatterbot.corpus.custom.myown',
     'chatterbot.corpus.swedish.food',
],
'django_app_name': 'django_chatterbot'
}

>

修改chatterbot_corpus文件夹中训练数据。
训练数据格式如下

categories:
- greetings
conversations:
- - Hello
- Hi
- - Hi
- Hello
- - Greetings!
- Hello
- - Hello
- Greetings!
- - Hi, How is it going?
- Good
- - Hi, How is it going?
- Fine
- - Hi, How is it going?
- Okay

接下来可以做的

可以尝试利用英语8000句来训练。

如何为其添加三元组知识图谱?

可以用她来做什么?练英语;学编程;或者其他。

如何把它迁移到平台上?

回想一下你去过的地方、见过的人、看过的书,大多可能都不记得了,但是有些却印象深刻,想忘也忘不了。
艾琳·汉森的开放式印象主义
画家:艾琳·汉森

什么是印象?

百度词条这样描述:
印象是个体(认知主体)头脑中有关认知客体的形象。个体接触新的社会情境时,总是按照以往经验,将情境中的人或事进行归类,明确它对自己的意义,使自己的行为获得明确定向,这一过程称为印象形成。印象是个体适应环境的一种方式。

印象是如何形成的?
印象形成的机制可能比较复杂,而且形成的路径和模式可能也多种多样。但一般遵循[一致性原则]
,也就是主体对客体的印象应该是一致的,而不是矛盾的。比如你对一个人的印象,要么是积极的,要么是消极的,即便有矛盾的信息,也会以一个方面为主而消减这种矛盾。

印象是主体对客体的观察剪影。在主客体相互接触的过程中,主体通过窗口对客体进行采样,这种采样可以是刻意的,也可以是随机的,然后主体需要对其进行归类,好或者不好,接触或者远离,信任或者怀疑,主体需要选择一个立场,这种立场以及客体的简化信息会储存在脑海里,供主体行动参考。

印象有何意义?
印象对于个体适应环境变化具有重要意义。虽然印象具有偶然性、片面性和静态性,但是它为主体作出适应的行动提供了参照,而且加入主体可以根据与客体互动的新信息对印象作出调整(听人劝),那么也可以避免印象造成的误导。

如何做好印象管理?
如果别人对你有好的印象,那么他们就愿意亲近你、信任你和帮助你,反之则不然。因此,管理自己的印象十分重要,让自己的衣着、言行、品德经得起考验很重要。简而言之,别人对你的印象就是你最好的名片。

如何管理自己的印象呢?当然是从一点一滴,从每个细节做起,而且要有作为、有表现力。张生泉老师主张人要有表现力,这种表现力不是虚伪的演戏和作秀,而是真实的表现和作为。他主张中学生要多学一学戏剧,在虚拟的戏剧中体验体验人生,锻炼这种表现力。

此外也要了解相关的心理效应,如首因效应、近因效应、光环效应、刻板印象(人们对事务的固有看法)。意识到印象形成的关键窗口期以及印象存在的问题,从而能管理好自己在别人心目中的印象,同时也能辩证的看待自己对别人的印象。