3 days ago

JavaEE 文档

https://docs.oracle.com/en/java/javase/11/docs/api/index.html

JavaSE 文档

https://docs.oracle.com/en/java/javase/11/docs/api/index.html

Java 后端处理含有 json 的 POST 请求

POST json 数据:

{username: "admin", password: "admin"}

包:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.* ;
import org.json.JSONObject;

方法一:

@RequestMapping(path="/login", method=RequestMethod.POST)
@ResponseBody
public String getJsonPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  BufferedReader br = request.getReader();
  StringBuffer sb = new StringBuffer("");
  String temp;
  while ((temp = br.readLine()) != null) sb.append(temp);
  br.close();

  String params = sb.toString();
  JSONObject jsonObj = new JSONObject(params);
  String username = jsonObj.getString("username");
  String password = jsonObj.getString("password");
  System.out.println(username);
  System.out.println(password);

  return "{\"result\":\"success\"}" //返回json {result:"success"}
}

方法二:

@RequestMapping(path="/login", method=RequestMethod.POST)
public void getJsonPost(@RequestBody String jsonData) {
  JSONObject jsonObject = new JSONObject(jsonData);
  String username= jsonObject.getString("username");
  String password= jsonObject.getString("password");
  System.out.println(username);
  System.out.println(password);
}

 
8 days ago

查看通过apt安装的包的位置

  dpkg -L

新建用户

  useradd -m -d /home/newusername/ -s /bin/bash -G sudo newusername
  chown newusername:newusername -R /home/newusername/ # 不做这一步,newusername在home中创建文件需要root权限,容易导致一些安装脚本 Prmission Denied 错误

设置新用户环境变量

  cd /home/newusername/
  touch .bashrc # 创建.bashrc 环境变量配置在该文件中
  chown newusername:newusername .bashrc
  sudo vi /etc/profile
  在末尾处加上 source /home/newusername/.bashrc 退出vi
  source /home/newusername/.bashrc

Ubuntu 上安装 JDK8

1、更新 repository:
  sudo add-apt-repository ppa:openjdk-r/ppa # only Ubuntu 17.4 and earlier
  sudo apt update

2、使用 apt 安装 openjdk-8:
  sudo apt install openjdk-8-jdk

3、配置环境变量 JAVA_HOME 和 PATH 至 .bashrc 中,将 $JAVA_HOME/bin 加入 PATH
  JAVA_HOME 为 JDK 安装目录,执行 dpkg -Lopenjdk-8-jdk 查看安装路径
  export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  export PATH=$PATH:$JAVA_HOME/bin
  执行 source ~/.bashrc 使之立即生效

4、检查是否配置成功:
  java -version

添加velocity依赖后,maven报错

[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] 'dependencies.dependency.version' for org.springframework.boot:spring-boot-starter-velocity:jar is missing. @ line 33, column 15

  原因:没有配置version标签,在https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-velocity/1.1.3.RELEASE找到了正确的配置声明

 
10 days ago

今天开始做PAT。
PAT有乙级,甲级和顶级。
先从乙级开始,一天至少做6题。

小套路:

1、把字符数组中的每个元素初始化为'\0':char str[100] = "";

2、char型数字转为int型数字:

char five = '5';
int num = five - '0'; // num 的值为 5

坑:

1、C语言没有整除,只有取余:“%”。

2、字符数组末尾需多留出一位'\0'的空间

char pinyin[10][4] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};

printf("%s", pinyin[0]); // 输出"lingyi"

字符数组的读取遇到'\0'停止。"ling"4个字母刚好占满4个坑,由于没有读到'\0',继续往下一地址读取内容,在读取完"yi"后遇到了'\0',遂停止,故输出"lingyi"。

3、判断字符是否为空,不可将字符与""比较,应与"\0"比较

4、观察要仔细,找规律,抽象出限制条件。(乙级1003)

 
11 days ago

今天非常烦躁,脑子很乱。
  
出门吹吹冷风,让自己冷静下来。
  
掐指一算:

  距离蚂蚁金服内推还有大概191天。

  距离下一次PAT报名截止日期还有47天。
  
时间紧迫。
  
喝碗鸡汤冷静下来继续干活吧。
  
  
  
善友教授说:

把眼前的事情做到极致,

下一步的美好自然就会呈现。

  
这句话我是这么理解的,想要达成一个目标,能做的有三件事:
  
  1、正确的战略方向
  2、高效的战术
  3、坚持不断地执行战术(即使这个过程令人糟心)
  
尽了人事,剩下的就听天命了。
  
就算最终结果和目标有偏差,做好这三件事情,结果也一定差不到哪儿去。
  
不要天天患得患失,浮躁得不行。

工作的时候会遇到很多困难,碰到这些难以解决的问题会很烦躁。

没事,产生了这样的情绪,说明你正在走出舒适圈,成长就是这样痛苦的过程,这是好事儿,just enjoy。
  
总结:
  
focus on 一丝不苟地执行既定战术

focus on 深入地思考战略方向
  
关心好这两件事就好了,其他的别多想,想了也没用。
  
  

 
17 days ago

原文:The Key To Accelerating Your Coding Skills

皓叔在《程序员练级攻略(2018)》里提到了这篇文章,虽能看懂英文,但没有使用英语思考的能力,导致总是前看后忘,遂翻译之,便于加深理解。(在翻译的过程当中果然发现了一些阅读时没注意的小细节,有些英文表述无法从字面上理解,花了很多时间思考,的确加深了对文章的理解)

快速提升编程能力的关键

作者:KEN MAZAIKA

在学习编程的过程中,会有这样一个时刻,你发现一切都变得不一样了。在Firehose,我们将这个时刻称之为拐点。跨越了拐点之后,程序员们会发现他们的工作方式彻底改变了。越过拐点是一个程序员变得能够独立解决问题、无需遵照傻瓜式教程的过程,这个过程可能是令人难受的,但是一旦成功越过拐点,你的能力将会突飞猛进。

Firehose的使命不只是教你用Ruby做Web开发,我们的核心使命是帮助同学们快速地冲过拐点,让他们获得自主解决问题的能力。我们相信,独立解决问题的能力是无价的。这样的教学方法,比起简单地教大家技术性的内容,会让同学们在未来的职业道路上能够走地更远。

跟着教程学习的阶段(认真写代码的话 3-8周)

刚接触编程之时,对许多技术性知识你一无所知,比如:在 Ruby 中写个循环体,如何使用 Ruby On Rails 从数据库提取内容等。

成为一个独立的程序员的第一步,是试着完成一些明确步骤的任务。当你能够搞定这些任务时,你就会了解这些任务由哪些部分组成,这些部分是如何组织在一起的。随着时间的推移,你会发现一些套路,最终,那些最初看起来陌生又令人困惑的东西将会成为你的本能。

对于初学者来说,最重要的是重视细节

当你在看文档或跟着教程学习时,多关注细节非常重要。即使是细微的拼写错误也会导致程序报错。对于初学者来说,看到报错信息是一件令人抓狂的事,但学会从报错中获取信息是学习编程的最重要的一步。处理报错能让你学会最重要的技能之一:注重细节

调试报错信息非常重要。事实上,报错只是这个游戏中的一部分而已:无论是菜鸟还是大佬,都会遇到报错。菜鸟和大佬唯一的区别在于,大佬处理报错的经验更丰富,修复错误的速度就更快,原因在于:

  1、随着时间的推移,你会学会如何通过报错信息,快速找到导致问题的细节在哪。你第一次遇上报错,可能需要花上一段时间去搞懂它到底是什么意思。但是当你见过成百上千个报错之后(你的确会见到那么多),你就有能力去定位问题出在哪,然后修复它。
  2、你要能够从你解决的每一个报错中学到东西。不要处理完报错就觉得大功告成了,你要理解你的代码到底为什么会报错。要从你遇到的每一个报错中学到东西,这样你下次再碰到同样的问题,你就能更快地解决。
  3、最初,你可能一遇到报错就去找人帮忙,随着时间的推移,你会学会在找人帮忙前反复检查你的代码,看看是否能找到什么玄机,然后先去问问Google。

在跟着教程学习的阶段,你会跟着教程的指示做每一步。刚开始,你会发现跟着教程做下来就已经够有挑战的了,还经常遇到许多报错。随着时间的推移,你开始有能力自己调试错误,更加关注小细节,更快地取得进展。当你渡过了跟着教程学习的阶段,你要提醒你自己,你有能力以更快的节奏写代码了。

在这个时候,有些人开始感到自信,于是准备放弃教程,自己探索、创造、深入。另一些学生会去看更多的教程,试图获取更多的技术性知识,让自己完全理解所有的东西。但是很遗憾,教程只能带你走到这了,从教程中你得不到真正的自信。真正的自信来自于,你挣扎着去解决一个你完全不知道如何解决的问题,然后通过你自己的努力,最终搞定它。

编程的小秘密

你永远也不可能完全掌握能解决一切问题的一切知识。在编程的旅途中,你很可能希望自己在某个时刻能够最终学完一切你需要学的东西,然后一路开挂打怪升级。这个时刻永远不会到来。

编程是一个活到老学到老的过程,经验丰富的程序员希望找到那些亟待解决的问题的解决方案,因为这给了他们学更多东西的机会。如果你在等待着某一天,你能够最终掌握一切有关编程的知识,那我必须告诉你:你等待的那一天永远都不会到来。这并不是一件坏事。

当你遇到如下三种情况,意味着你将要进入编程之旅的下一个阶段了:

  1、你已经遇到过了足够多的报错信息,已经没有什么报错信息能够让你觉得惊奇了。你已经知道这些报错信息是什么意思,大概是哪出了问题。
  2、你已经能够很熟练地用Google找到解决方案了。当你想要给你的程序添加一些新功能或遇到了解决不了的报错时,你知道该如何在Google搜索关键词来找到你所需要的信息。
  3、你能够参考你之前在其他地方写过的代码,并根据其范式编写新的代码,而不是总是想要找傻瓜式教程。

拐点到来(心态好的话 2-4周)

拐点阶段是学习编程中最令人苦恼的阶段之一,但这是最重要的阶段。这个时期你开始舍弃教程,自己解决一个没人帮你提出过解决方案的问题。

有时候,你会觉得还没有准备好应对这个阶段,总想着回去做那些有确切的步骤和结果的工作。但你千万不要被这种心态捆住了手脚,你会有这种想法是因为:在拐点阶段,你的编程速度会比之前慢10-20倍。

你可能会质疑自己到底有没有能力成为一名程序员。在这个阶段,不安和迷茫会笼罩着你。

尽管你发现学习新东西和写代码的速度变慢了,但事实上,你正在学习的是成长路上最重要的东西。当你对技术新知识了解得很充分时,你学习到的都将是关于如何学习的“学习方法论”(procedural knowledge)。

“学习方法论”关乎你的自学能力。当你想要实现某些从未做过的新的功能,你应该去 Google 搜索什么关键词呢?此时,你想要完成的很多事情会让你感到处于一片茫茫黑暗之中。学会依靠自己的智慧照亮黑暗十分关键,因为你没有(也不可能)掌握所有的知识。所以你需要能够通过自学解决手上的难题。

大多数人没有意识到的是:如果你想学好编程,你不仅需要学习技术性知识,还需要学习关于如何学习的“学习方法论”。

往后余生,每一天都要走出舒适圈

一些软件工程师一旦找到立足之处,就待在他们的舒适圈中。这种类型的程序员被称为运维程序员——不是你应该努力成为的类型。相反,你每天都应该去努力挑战你的边界。程序员辞职最普遍的理由是“我解决了所有的有趣的问题,这对我来说不再是一项有挑战性的工作了”

你应该寻找超出你能力范围的难题去解决,而不是让你的编程项目保持在你的舒适圈之内。这是提升和扩展能力的不二法门。

一位已跨过了拐点的Firehose学生曾说:“我仍然感觉自己身处恐惧圈之中!但是我知道现在身处的恐惧圈终将变成我的舒适圈。”(I still feel like I’m in the deep end! I’m just getting more comfortable knowing that’s where I’ve got to be!)

在Web开发中会有两个拐点一并到来

拐点1:Web开发拐点是当你有能力构建出你想要的数据库驱动应用程序之时。这意味着你有能力做一个有许多页面的、能够从一个简单的数据库存取信息的Web应用程序。Web开发者称之为“精通 CRUD(增删改查)”。在这个阶段,你应该也有能力根据文档调用GitHub上的第三方库(例如:ruby gem)。

拐点2:算法和数据结构拐点是一个不太能够体现出来的拐点,但事实上,这个拐点才是更重要的。一些攻克了这个拐点的人,往往也精通了他们使用的编程语言,甚至精通了编程的底层原理,对于如何解决复杂的编程问题有着深入的认识。

跨域了算法与数据结构拐点的人能够:

  1、编写排序算法
  2、实现和反转链表
  3、理解并编写利用堆栈,队列和树的程序
  4、使用递归或迭代方案编写计算机程序

简单来说,一旦你跨过了这个拐点,你将掌握数据操作并将了解代码决策的性能影响。传统计算机科学学位特别专注于使学生跨过算法与数据结构拐点。但许多大学往往用一些业界已经不使用的语言来教授这门课,比如:Scheme, Racket 或 LISP。

在绝大多数技术性面试中,面试官为了轻松起见会默认你跨过了Web开发拐点,而将问题集中于评估你算法与数据结构的水平。这些问题通常集中在上面提到的那几点:排序算法,反转链表和使用堆栈、队列和树。

一旦开发者跨过了这Web开发拐点和算法与数据结构拐点,就拿到了编程王国的金钥匙

这些开发者将能够解决Web开发和算法与数据结构交叉的挑战——在高级Web应用程序中构建复杂算法。这是专业Web开发者日常工作的核心。

拐点带来的改变

拐点带来的最大的改变是什么?这个答案你第一次听,可能觉得有些违反直觉。

在学习编程时,技术性知识在宏观层面上将不值一提

是的,我不是在开玩笑——技术性知识真的完全不重要了。一旦你跨过了拐点,你只需要花一到两周甚至几天时间去学习,就能流畅地使用那些技术性知识。

最根本的东西是:

  1、扎实地掌握Web开发框架
  2、能使用任何编程语言编写复杂的代码

招聘经理想要那些有着扎实地Web开发能力和精通算法的开发者

我在PayPal工作的时候,我们团队招了一位没有任何Rails经验的Rails高级开发工程师,他以前主要写Python,LISP和Perl。短短几天之内,他已经能够带给我们很大的震撼了。几周之内,他就在团队中发挥了重大的影响。他一跃成为了团队的技术领袖,把他招进团队也成了我作过的最正确的决定之一。

不要盲目追最新的技术栈。许多人会说一些“最近AngularJS 很火”,“JavaScript 正在成长期”或是“现在最流行的是……”之类的话。我对这些话的回应是:“所以呢?”你在学习编程的时候,唯一的目标应该是找到拐点,并越过它。你只要这么做了,学习最新的最流行的东西绝不会是一件难事。

让自己变得可靠能够在没有系统性指导的情况下学会一项新的编程技能,意味着你不再需要等别人来帮助你学习。这意味着你大部分的学习内容都可以通过Google和阅读相关材料来搞定。

当然,这并不是说你能瞬间学会所有的知识,只是现在这些知识对你来说已经是很容易就能学会的了,所以从本质上说你可以毫无障碍地学习。

在跨越拐点的阶段,你将练就的技能

作为一名软件开发者,最好的参考资料就是你以前写的类似的代码。你只要完全理解了你当时写的那些代码,就不需要去记住所有细节。所以你在写一个新功能时应该首先问问你自己:“我以前写过类似的东西吗?”如果写过,去看看以前的代码,把每一行代码在你脑中跑一遍。向你自己讲解一遍这段代码在做什么,问问你自己“我现在能用这同样的方法解决问题吗?”

看视频是学习技术细节最烂的方式,因为这种视频通常很长。比方讲,你想调用Google Maps API。只要你做过一次类似的操作,你只需要花一分钟不到,打开GitHub,把代码复制粘贴到新项目中。如果去看视频,看一遍下来要花10-30分钟。

能让你快速跨越拐点的一些策略

因为跨过拐点是学习编程中最重要的部分,你应该让自己尽可能顺利地完成这个过程。这意味着你要在跟着教程学习的阶段就有所准备,并在这个阶段保持正确的心态。

在跟着教程学习、看系统性的学习材料的时候,时不时地停下来,给自己提出一些有挑战性的问题。

  1、对于教程的每一课,你都要 尝试做一些超出教程范围的事情 。如果你正在学习的教程提供了“挑战”模块或“自学”模块,那么你一定要完成这些模块的所有内容。解决没有给出指导的难题,会让你获得脱离教程解决问题的重要经验。
  2、尝试着更少地依赖教程。在Firehose,我们通常会带领学生学会如何调用某个gems或者根据提供的文档完成一些任务。许多学生会通过看文档学习,把看教程作为备用手段,而不只是简单地被那些为初学者设计的教程中的指示一步步推着走。你要注意,文档是写给跨过拐点的开发者看的。你要逐渐适应读GitHub上的文档,这会在没有教程可用时助你一臂之力。
  3、专注于一些开发过程中必不可少的操作,重复地练习和使用它们。尽早学会那些常规操作,比如:从头开始编写一个程序,将新的应用程序部署到GitHub或Heroku上,数据库迁移等等。

跨越拐点是一件很有挑战的事,这里有一些可以帮到你的小建议:

  1、要充分认识到这将是个艰难的过程,让自己放轻松。此外,你给自己设定的预期要现实。你不要把想象中的超人般的学习速度和你现实中蜗牛般的学习速度作对比,你要知道,在这个阶段,你的确在学习,而且能学到很多东西,你在学习的是一套能够鼓励解决新问题的全新的技能。
  2、如果你不太有自信能够跨越拐点,要知道这种感觉是非常正常的,继续前进就好了。如果不自信的感觉依然困扰着你,试着和那些已经跨越了拐点的人聊聊。他们会告诉你,你目前处于什么阶段,并向你保证你所经历的困扰只是暂时的。请继续努力,但是也不要过度劳累了。游戏到了这个阶段,你每天可能最多只能高效率地工作6个小时。在疲惫不堪的状态下工作只会花费你更长的时间去跨越拐点。

在这个阶段,获得自信最好的方式是去解决目前遭遇的困难。在这个过程中,你的情绪可能会开始坐过山车。刚开始解决问题,你会感到热血沸腾,但在同一个问题上挣扎了超过15个小时之后,你的情绪就会跌落到冰点。

你对解决一个问题会花费你5分钟还是5个小时完全没有概念,这会让你十分苦恼。但是每当你成功解决了某个困难或实现了某个新功能时,你就能够享受如潮水般涌来的自信感。在没有任何帮助的情况下解决了一些难题之后,你将会沉迷于在舒适圈外探索的感觉。

你怎么才能知道你有没有越过拐点

跨越拐点的最后一个阶段,是接受。接受软件开发是一项需要不断学习的工作。接受你成功学到任何事物时快感仅仅意味着你需要开始思考解决其他更难对付的问题。

你经历过跨越拐点的过程了吗?把这篇文章分享给你的朋友和他们讨论一下吧,你会惊讶于有多少人最终达到并跨越了这一时刻。

 
19 days ago

Objective :

今天入门了 Docker容器

创建并运行一个容器并打开bash,名字叫docker1,使用Ubuntu系统,并将容器的80端口映射至宿主机的随机端口
docker run -p 80 --name=docker1 ubuntu /bin/bash

查看运行中的容器
doker ps

查看所有容器
docker ps -a

停止某个容器(正常结束)
docker stop 容器名/容器ID

停止某个容器(强制结束)
docker kill 容器名/容器ID

重启已停止的容器
docker start 容器名/容器ID

使容器在后台运行(守护式容器)
通过 Ctrl+p / Ctrl+Q 退出容器的bash

在守护式容器中启动新进程
docker exec [-d][-i][-t] 容器名/容器ID 新进程命令及参数
-d 保持后台运行 -i 保持STDIN打开 -t 打开该容器的终端

开启守护式容器的终端
docker exec -i -t 容器名/容器ID /bin/bash

修改端口映射(MAC OS)
参考:https://stackoverflow.com/questions/38532483/where-is-var-lib-docker-on-mac-os-x
1、进入linuxkit
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
2、进入存放该容器的目录
cd /var/lib/docker/containers/容器ID
3、修改 hostconfig.json 中的 PortBindings

"PortBindings":{
    "80/tcp":[
        {
            "HostIp":"0.0.0.0",
            "HostPort":"5555"
        }
    ]
}

4、重启docker

Reflective :

看 Bilibili 视频学习 docker
【公开课】Docker入坑教程【33集】

光看视频觉得挺无聊,于是就去下了一个玩玩,跟着视频做一些操作,兴趣就提起来了。

第一个坑:
使用Ubuntu镜像apt-get无法安装nginx,百般搜索无果后,果断使用centos,yum安装的很顺畅。

第二个坑:
想更改端口映射,Google一下,修改 /var/lib/docker/containers/容器ID 中的配置文件就行了,简单!(轻松~)
结果我发现mac的 /var/lib/ 中根本没有 docker 文件夹!(震惊!)
我又是一番百般Google,中文关键词、英文关键词、中英结合都试过了,怎么都找不到正确的解决方案。(绝望TAT)
没有放弃,继续换着法子想不同的关键词Google。(坚持)
终于功夫不负有心人,找到了前面贴着的那个 Stack Overflow 的帖子。(惊喜!)
按帖子中的方案找到了存放容器的文件夹,问题迎刃而解!(超爽!超开心!)

遇到问题时压抑得越久,解决的那一刹那就觉开心!(股市是不是也可以这么类比,半死不活得越久,牛市的爆发就越猛烈)

看了许多计算机行业的文章,觉得很焦虑、急躁,具体为什么,下面写。

Interpretive :

解决问题的速度还不够快,解决一个改端口的小问题花了一个晚上,在公司这样肯定不行,完不成任务,跟不上节奏。
要加快解决问题的速度,构建能快速解决问题的思维模型,找到一些快速解决技术问题的小套路。

思维模式
  解决问题的过程中,有多重可能的解决方案。
  一旦能够确定排除某个可能的解决方案之后,就立即果断放弃该思路,寻找其他解决方案,切忌恋恋不舍纠结于已被排除方案。

小套路
  如果直接在 Stack Overflow 中检索解决方案是否会更快找到想要的答案?

看了许多计算机行业的文章,大概得出了几个结论
  1、年轻就是竞争力:相同能力,25岁一定比30岁有优势 => 成长必须快 => 工作必须个人目标导向
  2、如果到了30岁,还做着年轻人入行两三年就能胜任的工作,随时都有失业的风险。=> 必须早日明确并建立自己的核心竞争力

Decisional :

1、加快解决问题的速度
  本质是:1.构建能快速解决问题的思维模型
      2.找到一些快速解决技术问题的小套路

2、明确目标
  建立自己的职业规划。
  找工作,做工作,必须以在规划的道路上快速前进为导向。
  在工作中逐渐明确需要建立的核心竞争力是什么:什么是年轻人做不了、大多数人做不了,而我能做的工作。
  多看招聘,定期去面试一些职位。

今天的学习状态不错,继续保持。另外,每天的任务清单 和 拆解大任务明确小目标的时间节点 也要重新开始做起来,做一个明白人,不要被笼罩在“好像还有事情没做,但我想不起来”的阴霾里。

做法是:
1. 在开始一天的活动之前,花费15至30分钟仔细制定当天的时间预算,制作出任务列表
2. 挣扎着,强迫自己理智地在众多任务中进行取舍(判断依据:这项任务的完成是否确实对目标达成有益)
3. 写下每项任务的验收标准(kill 完美主义)

 
over 1 year ago

疑问

app/views/groups/index.html.erb
<td>
  <% if current_user && current_user == group.user %>
    <%= link_to("Edit", edit_group_path(group), class: "btn btn-sm btn-default")%>
    <%= link_to("Delete", group_path(group),    class: "btn btn-sm btn-default",
    method: :delete, data: { confirm: "Are you sure?" } )%>
  <% end %>
</td>

其中用到的都是不加 @ 的 group, group.user

app/views/groups/show.html.erb
<div class="group">
  <% if current_user && current_user == @group.user %>
      <%= link_to("Edit", edit_group_path(@group), class: "btn btn-primary pull-right")%>
  <% end %>
</div>

其中用到的都是加 @ 的 @group, @group.user

 
almost 2 years ago

ORID

Objective

今天又把 rails101 完成了一遍

完成了 8-3 附加题

Reflective

最近的情绪都不太正能量,但是的确真实,真正的生活怎么可能是一辈子都跟打了鸡血般正能量。

今天的低点是 琢磨了好久 附加题的第一步总是报错,有挫败感。

今天的高峰是 看到 8-3 附加题 第一步的页面成功显示出来 有一种终于看到希望的感觉,感觉一下子兴奋起来。

Interpretive

学会了看 “rake routes" 指令下的 “Prefix Verb” 和 “URI Pattern”

今天一个重要的领悟是知道了 View 中按钮的实作要去对应的 “Prefix Verb” 对应的 Controller 中去 def

今天完成的这遍 rails101 我注重了完成每一小节后的提取练习,尝试在每一小节结束后复述出来主要的内容和代码,学习效果提升了超多

Decisional

完成了 8-3 附加题是今天的工作的里程碑,对CRUD的理解又加深了一些,给自己增加了信心。

打算再来几遍 Rails101 夯实这个基础之后再去做招聘网站,以防 Rails101 不够熟练导致的坑。

 
almost 2 years ago

今天参加了静安队线下 Meetup,满满的收获。

搞懂了<% ... %> <%= ... %> @ 的意思,有些小细节自己 Google 可能要老半天才能弄懂,还会把脑子搞得一团糟,但是在 Meetup 请教学长,学长就会用很易于理解的语言来解释,一下子就能理解,节省了很多时间。

在分享中得到了一个学习知识的小套路,学习新知识的时候要注意和既有知识之间的关联,去了解知识的源头,并且去思考如何去利用这个知识。如此,对知识的理解会加深,也不容易忘记。

学到了 git stash 这个安全的删除分支的方法。

今天和好几位已经工作多年的同学聊了很多,从他们的视角来看问题给了我很多的启发,也可以让我在做决定的时候想的更全面。

总之,Meetup 收获颇丰,很开心。

 
almost 2 years ago

今天利用了很多琐碎的时间编程,后果就是,一页教程做下来已经忘了这一页是在做什么了。

学校的课排的太满了,工科学校还必须参加每天三个半小时的金工实习,能利用的时间太少了,几乎都用来编程了。

想要学的东西太多,但是精力有限,必须作出取舍。

还没入门就想要精通,这是个大坑。初学应当冲进度,快速上手,然后不断的去实践,在实践中慢慢精通。

> 怕什么真理无穷,进一寸有一寸的欢喜。 ————胡适

ORID

Objective

完成了 Rails101 的 6、7、8 小节。

Reflective

在 Heroku 上找到了最开始最简单的第一个Rails程式,在这个基础上不知不觉地就已经修改到现在有各种丰富功能的程度,心理上感觉蛮开心的但是也蛮怕的,因为我没有办法完整地回忆出一步步是怎么走过来的。

太晚了,没有精力去解那一道没有解答的题了,明天完成。

Interpretive

总结出了规律,做各项功能都是:1、建立model 2、建立view(xxx.html.erb) 3、Controller实作

Decisional

完成那道没有解答的题目。

明天完成第9节,准备开始第二遍。

决定暂时搁置智能车项目,在暑假集中时间攻克,同一时间学很多不同的东西,注意力分散了,啥都学不好。这几个月主攻全栈营和数学建模。