公开课锦集

  • Vue.js实现Web微信
  • 从零开始做一个命令行聊天机器人
  • 手把手教你实现 Vue
  • MongoDB 101, 手把手教你入门NoSQL数据库

Vue.js实现Web微信

(公开课已经结束, 可在 https://jirengu.com/app/album/90 观看直播)

今天,Hope老师就带大家使用Vue.js实现一个在 web 运行的微信!

老师介绍

HOPE:5年H5开发经验,擅长webApp,混合开发,项目管理。目前任职于某大数据公司,负责前端平台架构和混合开发。

课程主题

《 前端实战:Vue.js实现微信界面 》

内容大纲

  1. 熟悉Vuejs的基本语法
  2. 掌握手机下的网页开发调试方法
  3. 认识Vuejs手机UI组件库Mint-ui
  4. 认识和使用iconfont矢量图标
  5. 使用Mint-ui完成微信主界面

预习资料和源码

直播时间

2017年8月6日(周日)晚上8点

免费报名参加

关注“饥人谷前端”微信公众号,回复“vue”,获取免费参加公开课直播名额哦~

从零开始做一个命令行聊天机器人

(已结束,在 https://jirengu.com/app/album/88 观看录屏)

在饥人谷的24h自习室QQ群里,大家总是喜欢在学习之余调戏QQ小冰,小冰每次都能跟大家聊得很嗨,还能唱歌,玩猜字游戏等等。
这么聪明伶俐,随叫随到的萌妹子QQ小冰其实是图灵的聊天机器人。

图灵机器人是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台、机器人OS和场景方案。通过图灵机器人,开发者和厂商能够以高效的方式创建专属的聊天机器人、客服机器人、领域对话问答机器人、儿童/服务机器人等。

本期饥人谷公开课,Michael老师将带大家来完成一个命令行聊天机器人,一起来打造一个属于自己的机器人吧!

老师介绍

Michael:多年海外留学经验,本科和硕士分别毕业于英国诺丁汉大学和牛津大学,毕业后就职于亚马逊伦敦研发中心,目前已回国,就职于网易。

课程主题

《 前端实战:从零开始做一个命令行聊天机器人》

内容大纲

  • 一窥网络请求(request)

  • 怎么使用第3方api

  • 使用node官方模块进行命令行交互

  • 结合图灵api造一个可玩的机器人

  • 开源成果, npm上发布机器人

源码地址

https://github.com/n0ruSh/turing-robot

直播时

2017年7月29日(周六)晚上8点

免费报名参加

关注“饥人谷前端”微信公众号,回复“机器人”,获取免费参加公开课直播名额哦~

手把手教你实现 Vue

(公开课已结束, 可在 https://jirengu.com/app/album/86 观看录屏回放)

Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供驱动。

如果你想了解学习Vue.js这个前端框架,一定不要错过本次公开课咯~

讲师

Tony,毕业于武汉大学,曾任职于南方电网,自由创业者,现为珠海某科技科技公司前端leader, 擅长前端常见 MVVM 框架(Vue)、前端工程化(npm、webpack 2、babel)、前端常见工具(RAP、Mockjs)、CSS预处理器(SASS、PostCSS)等。

本次公开课分两次进行:

一、《Vue.js前端框架开发初体验》

录屏回放https://jirengu.com/app/album/86

todomvc之添加和删除,涉及知识点:

  • Vue示例
  • 模板语法
  • 条件渲染
  • 列表渲染
  • 事件处理器
  • 表单控件
    前置内容 :chrome插件vue devtools、git、node
二、《前端进阶实战:实现一个vue解析dom模板》

录屏回放: 视频

涉及知识点:

  • 解析数据
  • 数据和事件与dom的绑定

直播时间:2017-07-23(周日)晚上20:00

免费参与:微信关注“饥人谷前端”公众号,回复“解析”即可免费报名参与本次公开课哦~

MongoDB 101, 手把手教你入门NoSQL数据库

(课程已结束, 视频地址:https://jirengu.com/app/album/84 )

MongoDB,humongous(巨大的) DB,世界上最大(?),最流行的NoSQL数据库之一。

被广泛应用于海量存储的分布式系统之中,以其灵活的文档存储方式和高效的读写征服了一大批码农。

连隔壁老王家都在用,要是2017年你还没听过或者没用过MongoDB,可就不应该啦!

本期公开课,让我们跟杨恪老师一起来学习MongoDB吧!

讲师

杨恪毕业于南京大学,全栈(溢出)工程师,曾受邀到复旦大学做过移动开发后端服务设计的分享,现任某百万用户APP后端负责人。

通过本次课程,你将会学到:

  • MongoDB的八卦
  • MongoDB的基础技巧比如CRUD操作
  • MongoDB的进阶技巧比如聚合(aggregation)
  • MongoDB深入原理的性能指南
  • MongoDB的分布式系统搭建
  • MongoDB从删库到跑路的最短路径Dijkstra算法

直播时间

2017-07-13(周四)晚上20:00~22:00

免费参与

微信关注“饥人谷”公众号,回复“数据库”即可报名免费参加

饥人谷新班预告

饥人谷Node.JS全栈班7月开班,由杨恪老师带班,课程大纲http://blog.jirengu.com/?p=540

课程咨询:

青青:2054185664

墨凌:3175576796

夏夏:1678333634

微信小程序开发:各地实时天气预报

(直播已结束, 代码地址: https://github.com/jirengu/weixin-weather )

微信小程序于2017年1月9日凌晨上线,于是掀起一股小程序热潮。

其原因在于App开发和推广成本居高不下,前者支出在于人力,后者则是近年来流量费用的水涨船高,微信“小程序”有望降低两项门槛。

微信小程序作为轻型应用,它的特点是小而快,微信小程序目的主要还是解决小应用的问题,重点在于灵活、快捷、用完即走。

另一方面,微信“小程序”的确有望为一些高频应用提供新的选择。

本期公开课,若愚老师带你实现一个天气预报小程序~

讲师

若愚,北航计算机硕士,曾任职于百度LBS搜索研发部、阿里巴巴B2B技术部,开发过百度地图、阿里巴巴中文站等产品,擅长CSS3、HTML5、nodejs。

直播时间

2017-07-12(周三)晚上20:00

免费参与

微信关注“饥人谷”公众号,回复“小程序”即可免费报名参加本次公开课哦~

饥人谷新班预告

饥人谷前端直播14班7月中旬开班,由若愚老师带班,开班前预报名有100元优惠哦~课程大纲和班级介绍:http://blog.jirengu.com/?p=574

课程咨询QQ:

班主任-青青:2054185664

班主任-墨凌:3175576796

班主任-夏夏:1678333634

手把手教你实现Node.js Express框架

(课程已结束, 在 https://jirengu.com/app/album/83 观看直播录屏)

刚接触 js 的同学在学到 ajax 的时候经常会懵掉,归根结底就是对所谓的“后台”、“服务器”这些概念没有任何概念。课程中我讲过 Express 做后台,甚至写了个简单易用的 mock 工具 server-mock 来方便同学模拟数据,但经常会出现类似下面的对话:

同学:“你推荐的框架和工具我用了,用的也很爽,可是框架工具的外衣下到底发生了什么?除了 mock 数据,我还想做 HTTP 的缓存控制的测试、想做白屏和 FOUC的效果重现测试、想做静态资源加载顺序的测试、想做跨域的测试… ,如果我不明白里面后台到底发生了什么还不如叫我去死…”

我:”多用多练,学到后面你自然就懂了,不甘心你可以先看看 Express 的源码”

同学:“我用都还没用熟练… 杀了我吧…”

如果想追根溯源,看源码真的是唯一途径,无奈源码实在是太枯燥,为了功能的完善流行的框架引入太多和主线流程不先关的东西。即使偶尔能找到一些不错的源码解析的文章,也是又臭又硬,完全不适合缺少经验的初学者。所以之前答应同学近期安排一次好懂有用的直播公开课,专门讲解服务器和后端框架,尽量让不管是前端小白还是前端老鸟都有收获。

直播内容

本次直播课涉及的内容如下:

  • step0. 我们先使用 Nodejs 的入门知识搭建一个服务器
  • step1. 对搭建的服务器功能进行扩展,使之成为一个能用的静态服务器
  • step2. 继续扩展,让我们的静态服务器能解析路由,把服务器变成一个支持静态目录和动态路由的“网站”
  • step3. 模拟 Node.js 的后端框架 Express的使用方法,实现一个包含静态目录设置、中间件处理、路由匹配的迷你 Express 框架
  • step4. 完善这个框架

适合的对象

不需要你有万行代码的编写经验、不需要你精通/掌握/熟悉 Node.js,你只需要

  • 有一些 js 使用经验,有一点 nodejs的使用经验,即可理解1、2、3对应的内容。
  • 如果你有一点后端基础,有一点Express 框架的使用经验,那么你就能理解4、5对应的内容。

我能学到什么

  • 你会对服务器、对后端框架有一个清晰的认识
  • 平时搭个静态服务器或者 Mock 数据不再需要使用别人的东西
  • 会对 HTTP 有更深入的认识
  • 中间件、异步有一定认识
  • 装 13利器,以后简历里可以写自己不使用任何第三方模块,实现一个类 Express 的后端框架

课程安排

直播时间: 本周三(7月5日)晚上8点30

**参与方式:加 QQ 群:617043164 ,入群申请:饥人谷Node框架。

也可以在微信搜索小程序『饥人谷』,上课的时候如果不方便看电脑可在手机微信小程序上观看直播

关于我

我是若愚,曾经在百度、阿里巴巴做前端开发,后创业加入饥人谷做前端老师。亲手培养了近300名同学

一些同学去了Facebook、大众点评、美团、头条、金山、百度、阿里(外包)、华为(外包)
一些同学在小公司当技术 leader
一些同学去国外做菠菜网站拿着让人”震惊”的待遇
一些同学自己做外包当老板收入甚至远超老师
当然还有一些同学,令人悲伤的中途退课转了行

他们来自五湖四海各行各业,海龟、名校高材生、火车司机、航海员、旅游软件销售、全职妈妈、装配厂工人、方便面制造师、中科院研究所员工、美工、产品、后端、机械/化工/传媒/英语/新闻从业者….,但最终殊(误)途(入)同(歧)归(途)

直播剧透

以下是公开课课堂上涉及的代码,有兴趣参加公开课的同学可以提前阅读、理解、复制、允许代码,Github 的链接直播课堂上放出。课堂上会进行一步步讲解,任何疑问都可在直播课和老师直接互动。

step0: 创建一个服务器

index.js

var http = require('http')

var server = http.createServer(function(request, response){
  //response.setHeader('Content-Type', 'text/html')
  //response.setHeader('X-Powered-By',  'Jirengu')
  response.end('hello world')
})

console.log('open http://localhost:8080')
server.listen(8080)
step1:搭建静态服务器
var http = require('http')
var path = require('path')
var fs = require('fs')
var url = require('url')

function staticRoot(staticPath, req, res){

  var pathObj = url.parse(req.url, true)
  var filePath = path.resolve(staticPath, pathObj.pathname.substr(1))
  var fileContent = fs.readFileSync(filePath,'binary')

  res.writeHead(200, 'Ok')
  res.write(fileContent, 'binary')
  res.end()
}

var server = http.createServer(function(req, res){
  staticRoot(path.resolve(__dirname, 'static'), req, res)
})

server.listen(8080)
console.log('visit http://localhost:8080' )


step2: 解析路由

var http = require('http') var path = require('path') var fs = require('fs') var url = require('url') var routes = { '/a': function(req, res){ res.end('match /a, query is:' + JSON.stringify(req.query)) }, '/b': function(req, res){ res.end('match /b') }, '/a/c.js': function(req, res){ res.end('match /a/c.js') }, '/search': function(req, res){ res.end('username='+req.body.username+',password='+req.body.password) } } var server = http.createServer(function(req, res){ routePath(req, res) }) server.listen(8080) console.log('visit http://localhost:8080' ) function routePath(req, res){ var pathObj = url.parse(req.url, true) var handleFn = routes[pathObj.pathname] if(handleFn){ req.query = pathObj.query var body = '' req.on('data', function(chunk){ body += chunk }).on('end', function(){ req.body = parseBody(body) handleFn(req, res) }) }else { staticRoot(path.resolve(__dirname, 'static'), req, res) } } function staticRoot(staticPath, req, res){ var pathObj = url.parse(req.url, true) var filePath = path.resolve(staticPath, pathObj.pathname.substr(1)) fs.readFile(filePath,'binary', function(err, content){ if(err){ res.writeHead('404', 'haha Not Found') return res.end() } res.writeHead(200, 'Ok') res.write(content, 'binary') res.end() }) } function parseBody(body){ var obj = {} body.split('&').forEach(function(str){ obj[str.split('=')[0]] = str.split('=')[1] }) return obj }
step3:Express 雏形

文件目录结构

bin
  - www
lib
  - express.js
app.js

可通过 node bin/www 命令启动服务器

bin/www

var app = require('../app')
var http = require('http')

http.createServer(app).listen(8080)
console.log('open http://localhost:8080')

app.js


var express = require('./lib/express') var path = require('path') var app = express() app.use(function(req, res, next) { console.log('middleware 1') next() }) app.use(function(req, res, next) { console.log('middleware 12') next() }) app.use('/hello', function(req, res){ console.log('/hello..') res.send('hello world') }) app.use('/getWeather', function(req, res){ res.send({url:'/getWeather', city: req.query.city}) }) app.use(function(req, res){ res.send(404, 'haha Not Found') }) module.exports = app

lib/express.js

var url = require('url')


function express() {

  var tasks = []

  var app = function(req, res){
    makeQuery(req)
    makeResponse(res)
        //post 的解析未实现

    var i = 0

    function next() {
      var task = tasks[i++]
      if(!task) {
        return
      }

      //如果是普通的中间件 或者 是路由中间件  
      if(task.routePath === null || url.parse(req.url, true).pathname === task.routePath){
        task.middleWare(req, res, next)
      }else{
        //如果说路由未匹配上的中间件,直接下一个
        next()
      }
    }

    next()
  }

  app.use = function(routePath, middleWare){
    if(typeof routePath === 'function') {
      middleWare = routePath
      routePath = null
    }

    tasks.push({
      routePath: routePath,
      middleWare: middleWare
    })
  }


  return app

}

express.static = function(path){

  return function(req, res){
            //未实现
  }
}

module.exports = express

function makeQuery(req){
  var pathObj = url.parse(req.url, true)
  req.query = pathObj.query
}

function makeResponse(res){
  res.send = function(toSend){
    if(typeof toSend === 'string'){
      res.end(toSend)
    }
    if(typeof toSend === 'object'){
      res.end(JSON.stringify(toSend))
    }
    if(typeof toSend === 'number'){
      res.writeHead(toSend, arguments[1])
      res.end()
    }
  }
}


step4: 框架完善

文件目录结构

bin
  - www
lib
  - express.js
  - body-parser.js
app.js

可通过 node bin/www 命令启动服务器

bin/www

var app = require('../app')
var http = require('http')

http.createServer(app).listen(8080)
console.log('open http://localhost:8080')

app.js


var express = require('./lib/express') var path = require('path') var bodyParser = require('./lib/body-parser') var app = express() //新增 bodyParser 中间件 app.use(bodyParser) //新增 express.static 方法设置静态目录 app.use(express.static(path.join(__dirname, 'static'))) app.use(function(req, res, next) { console.log('middleware 1') next() }) app.use(function(req, res, next) { console.log('middleware 12') next() }) app.use('/hello', function(req, res){ console.log('/hello..') res.send('hello world') }) app.use('/getWeather', function(req, res){ res.send({url:'/getWeather', city: req.query.city}) }) app.use('/search', function(req, res){ res.send(req.body) }) app.use(function(req, res){ res.send(404, 'haha Not Found') }) module.exports = app

lib/express.js

var url = require('url')
var fs = require('fs')
var path = require('path')


function express() {

  var tasks = []

  var app = function(req, res){

    makeQuery(req)
    makeResponse(res)
    console.log(tasks)

    var i = 0

    function next() {
      var task = tasks[i++]
      if(!task) {
        return
      }
      if(task.routePath === null || url.parse(req.url, true).pathname === task.routePath){
        task.middleWare(req, res, next)
      }else{
        next()
      }
    }

    next()
  }

  app.use = function(routePath, middleWare){
    if(typeof routePath === 'function') {
      middleWare = routePath
      routePath = null
    }

    tasks.push({
      routePath: routePath,
      middleWare: middleWare
    })
  }


  return app

}

express.static = function(staticPath){

  return function(req, res, next){
    var pathObj = url.parse(req.url, true)
    var filePath = path.resolve(staticPath, pathObj.pathname.substr(1))
    console.log(filePath)
    fs.readFile(filePath,'binary', function(err, content){
      if(err){
        next()
      }else {
        res.writeHead(200, 'Ok')
        res.write(content, 'binary')
        res.end()         
      }
    })
  }
}

module.exports = express


function makeQuery(req){
  var pathObj = url.parse(req.url, true)
  req.query = pathObj.query
}

function makeResponse(res){
  res.send = function(toSend){
    if(typeof toSend === 'string'){
      res.end(toSend)
    }
    if(typeof toSend === 'object'){
      res.end(JSON.stringify(toSend))
    }
    if(typeof toSend === 'number'){
      res.writeHead(toSend, arguments[1])
      res.end()
    }
  }
}

lib/body-parser.js


function bodyParser(req, res, next){ var body = '' req.on('data', function(chunk){ body += chunk }).on('end', function(){ req.body = parseBody(body) next() }) } function parseBody(body){ var obj = {} body.split('&').forEach(function(str){ obj[str.split('=')[0]] = str.split('=')[1] }) return obj } module.exports = bodyParser

81 thoughts on “公开课锦集”

  1. hey there and thank you for your information – I’ve definitely picked up anything new from right here. I did however expertise several technical points using this site, as I experienced to reload the website lots of times previous to I could get it to load properly. I had been wondering if your web hosting is OK? Not that I am complaining, but sluggish loading instances times will sometimes affect your placement in google and could damage your high quality score if advertising and marketing with Adwords. Anyway I’m adding this RSS to my e-mail and could look out for a lot more of your respective exciting content. Ensure that you update this again very soon.|

  2. This design is spectacular! You obviously know how to keep a reader entertained. Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Fantastic job. I really enjoyed what you had to say, and more than that, how you presented it. Too cool!|

  3. Today, I went to the beachfront with my kids. I found a sea shell and gave it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She placed the shell to her ear and screamed. There was a hermit crab inside and it pinched her ear. She never wants to go back! LoL I know this is entirely off topic but I had to tell someone!|

  4. Nice blog here! Also your site loads up very fast! What web host are you using? Can I get your affiliate link to your host? I wish my site loaded up as quickly as yours lol|

  5. Thanks a lot for sharing this with all people you actually understand what you are talking about! Bookmarked. Please additionally consult with my website =). We may have a hyperlink change agreement among us|

  6. Do you have a spam problem on this site; I also am a blogger, and I was wanting to know your situation; many of us have developed some nice methods and we are looking to swap techniques with other folks, be sure to shoot me an email if interested.|

  7. I believe this is one of the such a lot important info for me. And i’m glad reading your article. But should observation on some basic things, The website taste is great, the articles is in reality nice : D. Good activity, cheers|

  8. Its like you read my mind! You seem to grasp a lot approximately this, like you wrote the ebook in it or something. I feel that you could do with a few p.c. to pressure the message home a little bit, but instead of that, that is great blog. A fantastic read. I’ll definitely be back.|

  9. May I simply just say what a relief to discover a person that actually knows what they are discussing online. You definitely understand how to bring a problem to light and make it important. More and more people ought to look at this and understand this side of your story. I was surprised you are not more popular since you surely have the gift.|

  10. It’s in point of fact a nice and useful piece of information. I am glad that you shared this helpful information with us. Please stay us up to date like this. Thanks for sharing.|

  11. Hello There. I found your weblog using msn. That is a really well written article. I’ll make sure to bookmark it and come back to learn more of your useful information. Thanks for the post. I’ll definitely comeback.|

  12. I do consider all of the ideas you have introduced to your post. They are very convincing and will certainly work. Nonetheless, the posts are very quick for starters. Could you please lengthen them a little from subsequent time? Thanks for the post.|

  13. Tremendous issues here. I am very satisfied to look your article. Thank you so much and I am looking forward to contact you. Will you kindly drop me a e-mail?|

  14. With havin so much written content do you ever run into any problems of plagorism or copyright infringement? My website has a lot of completely unique content I’ve either authored myself or outsourced but it appears a lot of it is popping it up all over the internet without my agreement. Do you know any ways to help reduce content from being stolen? I’d truly appreciate it.|

  15. Hi! I could have sworn I’ve visited your blog before but after browsing through a few of the posts I realized it’s new to me. Anyways, I’m certainly pleased I found it and I’ll be book-marking it and checking back regularly!|

  16. I know this if off topic but I’m looking into starting my own weblog and was wondering what all is required to get setup? I’m assuming having a blog like yours would cost a pretty penny? I’m not very web smart so I’m not 100 sure. Any recommendations or advice would be greatly appreciated. Appreciate it|

  17. My relatives all the time say that I am killing my time here at web, except I know I am getting experience every day by reading such good articles or reviews.|

  18. It is perfect time to make some plans for the future and it is time to be happy. I have read this post and if I could I wish to suggest you few interesting things or advice. Perhaps you can write next articles referring to this article. I wish to read more things about it!|

  19. Hello there! I could have sworn I’ve visited this site before but after going through a few of the articles I realized it’s new to me. Nonetheless, I’m definitely happy I stumbled upon it and I’ll be book-marking it and checking back often!|

  20. My spouse and I stumbled over here coming from a different web page and thought I may as well check things out. I like what I see so now i’m following you. Look forward to finding out about your web page repeatedly.|

  21. Howdy! I just want to give you a big thumbs up for your great info you have here on this post. I’ll be returning to your website for more soon.|

  22. You actually make it appear so easy along with your presentation but I in finding this matter to be really something which I believe I’d never understand. It sort of feels too complicated and extremely wide for me. I’m taking a look ahead in your subsequent publish, I’ll attempt to get the hold of it!|

  23. I every time used to study post in news papers but now as I am a user of internet thus from now I am using net for content, thanks to web.|

  24. Hey! I know this is kinda off topic however I’d figured I’d ask. Would you be interested in trading links or maybe guest writing a blog article or vice-versa? My blog addresses a lot of the same subjects as yours and I feel we could greatly benefit from each other. If you happen to be interested feel free to shoot me an e-mail. I look forward to hearing from you! Superb blog by the way!|

  25. I don’t even know how I ended up here, but I thought this post was great. I don’t know who you are but certainly you are going to a famous blogger if you aren’t already 😉 Cheers!

  26. Great weblog right here! Additionally your web site a lot up fast! What host are you the usage of? Can I get your associate link in your host? I desire my site loaded up as fast as yours lol

  27. Hey are using WordPress for your site platform? I’m new to the blog world but I’m trying to get started and create my own. Do you require any coding expertise to make your own blog? Any help would be greatly appreciated!

  28. Wow, marvelous weblog layout! How lengthy have you been blogging for? you made blogging glance easy. The overall look of your website is fantastic, as well as the content!

  29. Excellent blog here! Also your site loads up very fast! What web host are you using? Can I get your affiliate link to your host? I wish my site loaded up as fast as yours lol

  30. Hi to all, how is everything, I think every one is
    getting more from this site, and your views are nice designed for new viewers.

  31. obviously like your web site but you need to test the spelling on quite a few of your posts.
    Several of them are rife with spelling issues and I to find it very troublesome to inform the truth nevertheless I will definitely come again again.

  32. Excellent blog here! Also your site loads up very fast! What web host are you using? Can I get your affiliate link to your host? I wish my site loaded up as fast as yours lol

  33. I think the admin of this web page is actually working hard in support of his web site, for the reason that
    here every material is quality based data.

  34. It’s going to be end of mine day, but before finish I am reading this great article to improve my knowledge.

  35. Hello! I know this is kind of off topic but I was wondering which blog platform are you using for this website? I’m getting fed up of WordPress because I’ve had problems with hackers and I’m looking at alternatives for another platform. I would be great if you could point me in the direction of a good platform.|

  36. Hey just wanted to give you a quick heads up and let you know a few of the pictures aren’t loading correctly. I’m not sure why but I think its a linking issue. I’ve tried it in two different internet browsers and both show the same outcome.|

  37. Please let me know if you’re looking for a writer for your site.

    You have some really good articles and I feel I would be a good
    asset. If you ever want to take some of the load off, I’d really like to
    write some material for your blog in exchange for a link back to mine.
    Please blast me an email if interested. Thanks!

  38. Fascinating blog! Is your theme custom made or did you download
    it from somewhere? A design like yours with a few simple
    tweeks would really make my blog stand out. Please let me know where you got your design. Thanks

发表评论

电子邮件地址不会被公开。