2024年英语能力测试小程序 篇1
序:北漂做了几年的程序猿,英语水平极差,所以在程序上没有太高的造诣,但是还是想把自己所能做的的记录下来。
下边来完成一个微信小程序的车辆违章查询,在最后我会放上源码链接,所以内容上就不对代码做太多解释,只说下思想。
1:数据来源,车辆违章查询的数据来源想到的就是三方接口,那么我选择的是以前做公众号开发时候时候的聚合数据(API数据接口_开发者数据定制),注册申请。
进入全国车辆违章查询可以看到三个接口:1:获取支持城市参数接口 2:请求违章查询接口3:接口剩余次数请求。有了这三个接口就可以实现一个简单的车辆违章查询了。
2:微信小程序,有了数据的来源就等于有了灵魂,之后就是怎样利用数据源来实现了,首先就是小程序的学习。安装以及创建项目。查看文档(https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1476197488080)
个人建议先把文档看一遍,这一遍并不是要记住文档,而是要在脑子里对小程序有一个初步的印象,更重要的是建立一个索引目录,之后开发的时候能够根据目录索引到具体位置。
一遍文档看下来,首先想到的是需要哪些知识才能开发
懂一点html,css,js,每个页面包括一个js,ixml,wuss
之前有对react native (react native)了解点,发现在页面与数据交互上有很多的相似,建议有兴趣的可以看了解一下,有助于理解。
API方面因为之前做过公众号开发,所以看了一下应该是wxjs的接口开放。
安装创建工程根据文档来就好了,因为没有内测号就只能创建一个无appid的项目
下载IDE创建项目:MyCar
ui方面需要三个:主页,添加查询车辆信息页,查询页
在app.json中加入三个页面
"pages": [
"pages/home/home",
"pages/addcar/addcar",
"pages/query/query"
]
主页需要展示添加查询车辆列表以及添加车辆
点击添加车辆需转到添加页面
在wxml中添加按钮的组建对应的js中实现对页面的跳转
home.wxml:
<view wx:if="{{surplus >= 0}}">
<button type="default" bindtap="bindtapAdd" hover-class="other-button-hover"> 添加车辆 </button>
</view>
home.js:
bindtapAdd:function(){
wx.navigateTo({
url: '../addcar/addcar'
})
},
在添加页面要做的是将车辆信息缓存的微信的本地,那么就需要使用聚合的接口来获取支持的城市供用户选择,获取聚合的数据后需要做一个二级联动,由于还没有太多时间来研究wxcss所以页面做的比较粗糙。
当用户填好数据后存储到数据缓存,这里涉及到两个知识点一个是请求url一个是数据缓存
请求可查询城市数据
requestCitys:function(){
var page = this;
wx.request({
url: 'http://localhost:3000/wz/citys',
header: {
'Content-Type': 'application/json'
},
success:function(res){
var res = res.data;
page.analysisRes(res);
},
fail:function(res){
page.setData({
toastInfo:util.toErrMsg(0),
toastHidden:false
})
console.log(res);
}
})
}
保存用户数据并且退回到主界面
wx.setStorageSync('cars',cars);
wx.navigateBack();
用户在主界面需要将缓存的数据用列表形式展示并且点击列表后需要使用查询车辆违章接口进行查询
home.js
//加载列表数据
reloadData:function(){
var value = wx.getStorageSync('cars')
if (value) {
var cars = [];
var i = 0;
for(var key in value) {
cars[i]= value[key];
i++;
}
this.setData({
cars:cars
})
}
},
//跳转到查询页面
onclikItem:function(e){
var id = e.target.id;
var carname = this.data.cars[id].name
wx.navigateTo({
url: '../query/query?carname='+carname
})
},
home.wxml:
<scroll-view scroll-x="true">
<viewwx:for="{{cars}}" wx:for-index="idx" wx:for-item="car">
<view id="{{idx}}" bindtap="onclikItem">
<text id="{{idx}}">
{{car.name}}
</text>
<text id="{{idx}}">
{{car.showhphm}}
</text>
</view>
</view>
在查询页面需要调用查询接口
requestQuery:function(car){
var hphm = encodeURI(car.city.abbr+car.hphm)
var page = this;
wx.request({
url: 'http://localhost:3000/wz/query',
method:'POST',
data:{
key:page.data.AppKey,
city:car.city_code,
hphm:hphm,
hpzl:car.hpzl,
engineno:car.engineno,
classno:car.classno
},
header: {
// 'Content-Type': 'application/json'
},
success: function(res) {
var res = res.data;
if(res.resultcode == 200){
console.log(res.result.lists);
page.setData({
lists:res.result.lists
})
}else{
page.setData({
toastInfo:res.reason,
toastHidden:false
})
console.log(res);
}
},
fail:function(res){
page.setData({
toastInfo:util.toErrMsg(0),
toastHidden:false
})
console.log(res);
}
})
}
这样小程序的基本功能就算完成了,这里要说下的是小程序测数据与页面刷新很类似react native ,Page中的data数据改变,wxml中使用数据的的组件就会自动刷新,这个跟以往我做android ios 的略有区别,适应下就好了。
下面说下中转路由,这次选用的是node的express作为web服务器 数据库用嘛mongodb,这个是才接触的所以使用的也比较初级。
Node.js
Express - 基于 Node.js 平台的 web 应用开发框架
建议安装Homebrew这样会比较方便
Homebrew
Homebrew, Mac系统的包管理器,用于安装NodeJS和一些其他必需的工具软件。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
译注:在Max OS X 10.11(El Capitan)版本中,homebrew在安装软件时可能会碰到/usr/local目录不可写的权限问题。可以使用下面的命令修复:
sudo chown -R `whoami` /usr/localbrew install node
$ npm install express --save
创建web服务器MyCarServer,编辑器个人习惯用Sublime Text: The text editor you'll fall in love with
这里需要再下载两个扩展包用来实现post以及mongodb的连接
GitHub - expressjs/body-parser: Node.js body parsing middleware
$ npm install body-parser
GitHub - Automattic/mongoose: MongoDB object modeling designed to work in an asynchronous environment.
$ npm install mongoose
安装mongoldb这个我是看的视频,大家页可以自行百度
http://www.jikexueyuan.com/course/1976_1.html?ss=1
项目中创建models.js来驱动数据库
var config = require('./config.json');
// var uri = 'mongodb://username:password@hostname:post/databasename';
var host = config.host;
var port = config.port;
var dbName = config.dbname;
var uri = 'mongodb://' + host + ':' + port + '/' + dbName
var mongoose = require('mongoose')
console.log('uri:', uri)
mongoose.connect(uri);
var CarStatusScheme = new mongoose.Schema({
cachetime: Number,
resdata: String
})
var CarCitysScheme = new mongoose.Schema({
cachetime: Number,
resdata: String
})
var CarQueryScheme = new mongoose.Schema({
cachetime: Number,
resdata: String,
hphm: String
})
mongoose.model('CarStatus', CarStatusScheme);
mongoose.model('CarCitys', CarCitysScheme);
mongoose.model('CarQuery', CarQueryScheme);
在app.js中
var mongoose = require('mongoose');
require('./models.js');
在创建config.json用来做一些常规配置
{
"dbname": "mycar",
"port": "27017",
"host": "localhost",
"statuscache": 1000,
"cityscache": 1000,
"querycache": 1000,
"debug": true
}
在app.js中使用配置
var config = require('./config.json')
var debug = config.debug
get请求
//接口剩余请求次数查询
// 请求示例:http://v.juhe.cn/wz/status?key=xxxxxxx
// 请求参数说明:
// 名称 类型 必填 说明
// key string 是 应用APPKEY(应用详细页查询)
// dtype string 否 返回数据的格式,xml或json,默认json
// 返回参数说明:
// 名称 类型 说明
// error_code int 返回码
// reason string 返回说明
// data - 返回结果集
// surplus string 剩余次数
app.get('/wz/status', function(req, res) {
if (debug) {
http://console.info('http get /wz/status')
}
CarStatus.find({}, function(err, docs) {
if (err) {
console.error("CarStatus.find err:", err)
} else {
if (docs.length > 0) {
var carStatus = docs[0];
var curtime = Date.now();
var cachetime = carStatus.cachetime;
if (curtime - cachetime < statuscachetime * 1000) {
var resData = carStatus.resdata;
res.json(JSON.parse(resData))
} else {
requestJHStatus(res);
}
} else {
requestJHStatus(res);
}
}
});
});
post 请求
// 接口地址:http://v.juhe.cn/wz/query
// 支持格式:json/xml/jsonp
// 请求方式:post get
// 请求示例:http://v.juhe.cn/wz/query?city=SH&hphm=苏L50A11&engineno=123456&key=key
// 接口备注:因交管局线路迁移,即日起至四月底安徽,山东,杭州等省市偶尔出现临时维护,请关注
// 调用样例及调试工具:API测试工具
// 请求参数说明:
// 名称 类型 必填 说明
// dtype string 是 返回数据格式:json或xml或jsonp,默认json
// callback String 否 返回格式选择jsonp时,必须传递
// key string 是 你申请的key
// city String 是 城市代码 *
// hphm String 是 号牌号码 完整7位 ,需要utf8 urlencode*
// hpzl String 是 号牌类型,默认02,暂只支持小型车
// engineno String 否 发动机号 (根据城市接口中的参数填写)
// classno String 否 车架号 (根据城市接口中的参数填写)
// 返回参数说明:
// 名称 类型 说明
// province String 查询省份代码
// city String 查询城市代码
// hphm String 查询的号牌号码
// lists Array 违章列表
// date String 违章时间
// area String 违章地点
// act String 违章行为
// code String 违章代码(仅供参考,不一定有值)
// fen String 违章扣分(仅供参考,不一定有值)
// money String 违章罚款(仅供参考,不一定有值)
// handled String 是否处理,1处理 0未处理 空未知
app.post('/wz/query', function(req, res) {
if (debug) {
http://console.info('http post /wz/query')
}
console.log(req.headers['content-type'])
http://console.info('/wz/query req.body:', req.body)
// http://console.info('/wz/query req.data:', req)
var carquery = new CarQuery({
hphm: req.body.hphm,
cachetime: Date.now()
})
http://console.info('/wz/query hphm:', carquery.hphm)
CarQuery.find({
'hphm': carquery.hphm
}, function(err, docs) {
if (err) {
console.error("CarQuery.find err:", err)
} else {
if (docs.length > 0) {
var carQuery = docs[0];
var curtime = Date.now();
var cachetime = carQuery.cachetime;
if (curtime - cachetime < querycache * 1000) {
var resData = carQuery.resdata;
res.json(JSON.parse(resData))
} else {
requestJHQuery(req.body, res);
}
} else {
requestJHQuery(req.body, res);
}
}
});
});
post请求需要引入body-parse
var bodyParser = require('body-parser');
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
extended: false
}))
// parse application/json
app.use(bodyParser.json())
这里还有一个未解决的就是小程序中请求中如果设置
header: {
// 'Content-Type': 'application/json'
},
在web服务器中是接收不到body数据的,所以暂时的解决方式是注释 // 'Content-Type': 'application/json'
这样就算完成了基础功能
哎!不会文章表达还是微信(xiongandaqu)沟通吧
2024年英语能力测试小程序 篇2
开篇
相声四门功课,说学逗唱;英语学习四大基础,听说读写。如果说听说读写译是内功,那么书籍、工具、资料就是我们的武器。
工欲善其事必先利其器,富人靠科技穷人靠变异。变异是说我们要改造学习、掌控知识,而科技包括AI、VR和各种app辅助工具。
工具套件地址在留言区,也可进WX群“最右英语学习部落”下载输入输出篇输入阶段——听读
输入效果:视频>语音>文本
视频类首推网易公开课、译学馆和B站的视频节目。
栏目很多,建议根据自己的兴趣选择,个人看TED、Bigthink和Linus Tech比较多。
音频类首推每日英语听力和各种podcast
每日英语听力和喜马拉雅里的口语课程(推荐Monster老师完美口语和赖世雄美语)很棒,特别是连读的方法,以后再遇到连读听力就不怕了。
播客节目可以用stitcher来听(栏目都有,我个人喜欢听偏科技的tech news today、营销的marketing book和管理类HBR的内容,初学者建议听NBC, CBS60分钟, CNN10等新闻类节目)
然后推荐radiofm的欧美电台节目用来磨耳朵,最后还要保持单词摄入量,推荐扇贝单词和默默背单词。
使用要点: 听力不讲究一下全听懂,充足的输入量是最关键的,可以让语感入住到你的潜意识,突然有一天你会发现自己口语6了很多。
阅读部分可以读一些大众或专业媒体
其实我更推荐金融类媒体经济学人、彭博等(此类内容更深刻),书籍类推荐古登堡计划或根据自己的偏好自行选择(初学者建议先读经典书籍,然后再读网文,wattpad上有很多)。
田间小站 www.tianfateng.cn
我更多是用news360 app获取个性化新闻,当然更专业和深度的内容我会用国外的简书—medium。书籍的话我更多读工作会用到的营销专业书籍。输出阶段——说写
输出效果:说=写(同等重要,说更容易提升,写需要更多积累)
说的部分推荐英语流利说和英语魔方秀,前者汇总了各种日常对话场景,可以与AI进行对话,后者是配音app可以锻炼语言模仿能力,让你的语音语调更像歪果仁。
此外,也有人推荐google translate,毕竟谷歌唯一没有被禁的套件,练习对话可还行。
练习要点:语言学习有静默期和瓶颈期,一旦发现自己的学习停滞或输出动力不足,就应该关注于输入阶段,暂且放下输出。循环往复,才能带来螺旋上升。是的,语言学习如逆水行舟,不可能直线上升。
知识拓展——什么是静默期
二语习得专家克拉申提出:第二语言习得者通常会经历一段静默期,在这一时期里,习得者没有第二语言的输出。静默期的长短从几周到一年不等。 关于静默期,你需要知道什么? 1、二语习得的静默期在很多孩子身上都存在。 有的孩子没有静默期,在接受英文输入后,很快就能张口说。但是多数孩子,也包括大人,都会经历一段只有输入、没有输出的过程。 2、静默期的长短和孩子之后的二语发展没有必然的关系。 明白这点也很重要。就好像孩子开口说母语的时间早晚,只要是在正常值范围内,和长大后他们的语言能力并不完全相关,静默期的长短和孩子之后的二语能力也没有必然的联系。并不见得静默期短的孩子语言能力一定强。 3、在静默期里,孩子并不是什么都没有学。 静默期也是语言习得的重要阶段。虽然孩子没有开口,但他们仍然每天都在习得,在听,在积累接受性词汇(receptive vocabulary),也就是大家常说的听力词汇。而且,孩子也在用自己的方式对听到的英语作出回应,可能是点头、微笑、翻书,也可能是皱眉、走开,或者用中文和你交流。 4、不能逼迫在静默期的孩子开口。 如果你的孩子愿意听故事,但就是不愿意开口说或读,那么你要做的就是尊重TA。强迫孩子开口,甚至跟他们生气,只能让孩子心生反感。
写作的话推荐文法纠正神器grammarly
只需粘贴自己的文本,app就可以自动识别和给与修改建议。
2019年3月30日更新学单词神器
Vocabulary Builder,dictionary.com,videoder(油管观看和下载器), Autocap
虽然鄙人没有赶上导图记单词的时代,却也辟了一套通过调用全感官来记忆和使用单词的方法,颇有一些“人—物—场”的意味。进入:Vocabulary Builder背单词界面,此app全英文界面,目标单词下会列出5个选项。
表征:英英释义
背后逻辑:在现有词汇量基础上构建更高词汇量,而非记忆。
进行选择后,不管对错都会出现例句。选对的话该单词再次出现的几率变小,选错的话以后练习还会出现。
如果出现的单词超过了自己的认知范围,也不要急于查询英汉词典,还是推荐用英英词典http://Dicitionary.com二次查询。
我们学习单词和语言的目标是交流,一旦出现汉语环境会破坏我们的英语脑。为什么?如果我们形成英-汉-英的习惯,以后我们再和歪果仁交流的时候,势必会遵循原有习惯(听到英文—理解—思考对答汉语—在心里翻译为英语——说出英语),这就大大加剧了脑力负载,沟通的时候势必停停顿顿、磕磕绊绊。所以,整个英语学习过程都尽量回避汉语的介入。
此方法近乎二语习得的技巧,适用于低龄和有一定基础的同学。零基础的慎用,建议通过系统学习的方式,启用双语环境。
接下来就是使用videoder观看油管视频,关键词示例:establish definition,观看视频的目的是熟悉单词的发音和使用环境。
接下来重点来了,将videoder下载的生肉视频进行语音识别。Autocap目前可以识别5分钟以内的视频,准确率根据片源质量在80-90%左右。
视频加载中...
识别的字幕可以进行字词和风格修改,自己可以对其中的错误进行修正。水平高的同学可以直接进行翻译练习。多动手可以刺激大脑皮层,学习效果大提升。
3月31日更新
今天补充paper部分,作为学生可以享受CNKI的便利,我等毕业族也有自己的生路。毕业后看论文也很有必要,市场具有滞后性,可能几十年前的论文观点在当今时代仍然是先进的代表。另外,满足部分考研组的学术需求。
Paperly的优势可以看期刊论文全文,researcher优势期刊真的有点小全,但免费只能看摘要。
以paperly为例,比如我们搜一个有关translation的论文。噔噔,出现了
选择一篇看看,恩还不错,是关于翻译和改编的
再来看看researcher app,它的关键词检索力很渣,所以我一般按期刊类别来看。
以Marketing的期刊为例,内容真的是非常丰富。选一篇摘要看看,是关于社交媒体营销的。是的,全文需要付费看。单词/信息查询工具篇
2019.4.22更新
一)词典
双语词典,推荐《英汉大词典》(陆谷孙主编,上海译文出版社)、《汉英大词典》(吴光华主编,上海交通大学出版社)
陆老爷子的英汉大词典可以说是翘楚,这一点只有学习翻译的人才知道,而世人只知朗文
单语词典,包括普通和专业词典,如各种各样的汉语词典、英英词典、英语同义词词典等; 英语用法词典,如Collins COBUILD Essential English Dictionary,牛津搭配词典、美国传统词典、Urban Dictionary等。
搭配词典是巩固语法的神器曾被
Amazon.com评为 编辑选择的参考工具,是专业英语工作者必不可少的重要工 流行语、俚语查询
二)网络查词工具——Google
1、利用Google查专业术语和平行文本 关于搜索引擎的更多技法,可以参考李长栓教授的《非文学翻译》,感兴趣的可以去研究研究。一代经典,翻译界的蓝宝书。可以学到很多写作技巧、翻译思想和信息检索技能。
笔者读过《非文学翻译》和《SEO Bible》,可以说搜索引擎用的贼6。其实每个人学一些search engine的知识,可以有效防百毒,也能更加迅速的找到自己想要的内容。
下面我们来看看Google的部分语法:intitle:搜索网页标题中包含有特定字符的网页。例如输入“intitle: cbi”,这样网页标题中带有cbi的网页都会被搜索出来。 inurl:搜索包含有特定字符的URL。例如输入“inurl:cbi”,则可以找到带有cbi字符的URL。 intext:搜索网页正文内容中的指定字符,例如输入“intext:cbi”。这个语法类似我们平时在某些网站中使用的“文章内容搜索”功能。 Filetype:搜索指定类型的文件。例如输入“filetype:cbi”,将返回所有以cbi结尾的文件URL。 Site:找到与指定网站有联系的URL。例如输入“Site:family.chinaok.com”。所有和这个网站有联系的URL都会被显示。 这些就是Google的常用语法,也是Google Hack的必用语法。虽然这只是Google语法中很小的部分,但是合理使用这些语法将产生意想不到的效果。
二)其他查询工具 百科全书类:大英百科全书、维基百科
社群类:Quora(国外的知乎)、able2know
替代搜索引擎:millonshort、searx、Wolfram Alpha、Yandex(战斗民族专用)
2019年5月3日更新英语内功——速读篇
英专学生都知道,阅读分为精读和泛读。精读关注单词、语法、句法等知识点,而泛读关注语篇和大意。
泛读材料可选择各行业前沿新闻,而其中的要诀在于速读,提升速度才能看更多文章、掌握更多信息。
天下武功唯快不破,快而精确更致命科学研究已经证明:人类进行传统阅读时,主要使用左脑的功能;而在采用“速读”方式阅读时,则充分调动了是左右脑的功能作用,各自发挥左右脑的优势共同进行文字信息的形象辨识、意义记忆和理解,所以“速读”又被称之为“全脑速读”(Roab)。
为什么速读?
进行快速阅读和听力,人会不自觉地提高注意力,不仅调动了多巴胺还训练了全脑,学习效果自然事半功倍。把训练放在平时,考试时举重若轻。
考试是个耗费脑力的事情,谁能提升决策效率,减少认知成本,就越能从容应考。不过要记住,考试不是和别人的比赛,而是对自己日常训练成功的验收。.
速读奥义——skim和scan
所谓skim就是略读,忽略语法,直抓重点,审视语篇主旨。关注位置:标题、首位段、首尾句。
所谓scan就是快速巡读,带着问题去阅读。关注点:线索词(5W1H)
此两项训练对于做阅读理解题大有裨益,考试时能够帮你省下很多时间,可以分配到其他体型中。速读神器——Reedy
把自己喜欢的文章发送或粘贴到Reedy里阅读,可以帮你快速如坑。阅读器里边支持不同倍速,可以根据自己的情况渐进提速。当然,更高阶的形态是脱离阅读器,直接扫视文章,达到一目十行之境界。
注意:速读训练需要大脑全核运行,每次训练不超过15分钟为宜,每天可分时段练习3-5次。