• 开源镜像
  • 开源沙龙
  • 媛宝
  • 猿帅
  • 注册
  • 登录
  • 息壤开源生活方式平台
  • 加入我们

开源日报

  • 开源日报第886期:《心理咨询语料库 efaqa-corpus-zh》

    5 9 月, 2020
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《心理咨询语料库 efaqa-corpus-zh》
    今日推荐英文原文:《To Anyone Feeling Stuck Right Now》

    今日推荐开源项目:《心理咨询语料库 efaqa-corpus-zh》传送门:项目链接
    推荐理由:该项目为心理咨询问答语料库,是为应用人工智能技术于心理咨询领域制作的语料。不过仔细想想,电脑能真正解决人的心理问题吗?
    今日推荐英文原文:《To Anyone Feeling Stuck Right Now》作者:Shao Zhou
    原文链接:https://medium.com/age-of-awareness/to-anyone-feeling-stuck-right-now-6764619cd3ec
    推荐理由:在人生规划这样的大课题上,斯坦福大学的 Odyssey Plan 或许能给我们一些思考。

    To Anyone Feeling Stuck Right Now

    Find your way with Stanford’s Odyssey Plan

    Life feels pretty upside down right now. The pandemic has taught us how quickly things can change. It seems foolish to make any meaningful future plans. In May, I graduated with my MBA from NYU Stern School of Business …online. Since then, I’ve felt stuck and guilty about this period of un-productivity. It’s a “lost time”. But self-care is not laziness. And there is certainly much more abundance that is left to be lived.

    One key characteristic that has helped me in these harrowing times is that I am a genuine optimistic. I can always find reasons to be cheerful. This is illustrated in my role as a product manager and the practice of design thinking. We never know exactly where we’re going in strategy or how to get there in execution, but we have a vision. A north star. We are hopeful.

    Our first ideas are usually not the best. They typically reflect the obvious instead of the best elements to a complete solution. By leveraging the famous 5 steps of design thinking or agile design: empathize, define the problem, ideate, prototype, iterate¹, we can generate many potential paths to solving a customer’s problem. We choose one that seems like a good opportunity, test it out in the market, and fine-tune or pivot the idea along the way.
    Instead of thinking we only have one life ahead of us, consider we have the potential of exploring multiple lives.
    Life is “not over” because the first plan we set out for 2020 hasn’t gone our way. In search of sparking new creativity in my life, I learned about Odyssey Plans developed by Stanford University professors Bill Burnett and Dave Evans that applies design thinking for business into our lives². The mission of their popular class is not about helping you figure out “what you want to be when you grow up”, but on “what you want to grow into next”. By reframing the problem, it reduces our anxiety about needing to figure out our passions right away, and that only one path after graduation leads to a lifetime of happiness and success.

    Odyssey planning is a framework to help us identify and test out not only different career possibilities, but all other aspects of life: relationships, hobbies, finances, etc.

    Spend 5 minutes each to jot down “back of a napkin” style 3 Odyssey plans on how your life would look like in 5 years if:


    1. You continue down the path you are going down right now unaltered 2. You make a different decision to the path — like a plan B 3. You could not fail and money did not matter In the process of doing so, we exercise divergent thinking and are no longer bound by tunnel vision. We acknowledge there are, in fact, multiple lives that we find fulfilling. Pay attention to similar themes on what gives you energy and non-negotiables that suck you dry. Gauge your resource, excitement, confidence and coherence levels. Odyssey planning is a method to see your life with refreshed eyes, put yourself back on track, and build the way forward slowly by figuring out the next logical step to completing your goals.
    We are still on for “Plan A” — it’s just a different tweak!
    While my plan to become a part-time pilates instructor this year has been foiled, my Odyssey plans revealed a common desire to help others in the evolution of their journey to live happier and healthier lives. I believe in the importance of storytelling. The stories we tell help to heal others, and help to heal ourselves. I am building my bliss by creating content around health, wellness and lifestyle design. I am finding joy in intention meets serendipity.


    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第885期:《如何测试:howtheytest》

    4 9 月, 2020
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《如何测试:howtheytest》
    今日推荐英文原文:《Apple and Google expand coronavirus exposure notifications, simplify app requirements》

    今日推荐开源项目:《如何测试:howtheytest》传送门:项目链接
    推荐理由:本仓库提供的资源都是可以在公开场合下获取的. 本仓库收录了一些非常优秀的公司如何测试他们的产品, 确保他们的产品有良好的质量从而最后推出他们的产品的方法和过程, 我们可以从中借鉴一些好用的实践方法和工具, 从而提升自己.
    今日推荐英文原文:《Apple and Google expand coronavirus exposure notifications, simplify app requirements》作者:Ian Sherr, Richard Nieva
    原文链接:https://www.cnet.com/news/apple-and-google-expand-coronavirus-exposure-notifications-ditch-app-requirements/
    推荐理由:苹果和谷歌希望医疗机构能增加新的冠状病毒病情通知系统,而无需人们下载相关的应用程序, 来更好地帮助人们相互跟踪和提醒有关冠状病毒感染的信息.

    Apple and Google expand coronavirus exposure notifications, simplify app requirements

    Apple and Google want to make it easier for health agencies to join its coronavirus exposure notification system, creating a new option that will allow them to help people track and alert one another about coronavirus infections without having to build an app.

    The new option, called exposure notifications express, will allow people to join Apple’s and Google’s coronavirus notifications without needing to download an app from their local health department. This, the two companies said, will help spread adoption without putting pressure on health officials, some of whom have told the tech companies they don’t have the resources to build an app.

    “We are making it easier and faster for them to use the Exposure Notifications System without the need for them to build and maintain an app,” Apple and Google said in a statement. The companies said they’ll continue to support public health authorities that have built their own apps, as in Canada, but are building this new system to help authorities that aren’t able to build them. “Exposure Notifications Express provides another option for public health authorities to supplement their existing contact tracing operations with technology without compromising on the project’s core tenets of user privacy and security.”

    The move marks a shift for Apple and Google, which began working on the joint coronavirus effort in the spring, around when the coronavirus’ spread became more clear. As of the start of September, more than 25 million people have been infected around the world and more than 851,000 people have died, according to data collected by Johns Hopkins University. And while the’ spread has continued, Apple and Google’s project has struggled to gain wide adoption.

    Apple and Google, in earlier iterations of their coronavirus system, relied on local health departments to build apps that plugged into the companies’ communication and security systems. The tech giants said they’d help authorities build apps, but largely put the onus on them to make the system work. As a result, only about 20 countries and regions have launched so far, including just six of the 50 states in the US. Further, only about half of US states and territories are exploring Apple and Google’s system.

    By switching to the new system, also called EN Express by the companies, Apple and Google expect the dramatically simplified approach will draw in more health departments that may have decided against working with the companies because of the resources they’d need to commit toward building and maintaining an app.

    To get the exposure notifications, people who use iPhones will be prompted that the feature is available and be able to turn it on in their settings.

    For Android phones, Google will auto-generate an app for users to download, so public health authorities won’t have to build or maintain the apps themselves. While this requires an extra step of Android users, a Google spokesman said the company believes it’s the best way to get the tools on as many different types of Android hardware as possible.

    New approach

    Apple and Google’s new approach allows health authorities to submit a “configuration file,” which will dictate how potential exposure notifications will be triggered, what steps they’ll advise people to follow afterward, and information on any other contact tracing efforts that may exist in their area. This, Apple and Google say, is much easier than building an app, while still ensuring people’s privacy and security.

    “Public health agencies are carrying an extraordinary load in managing the novel coronavirus response,” said Scott J. Becker, head of the Association of Public Health Laboratories, in a statement provided by the companies. “The easier we make it for state and territorial public health agencies to develop and deploy, the sooner we can expand COVID-19 exposure notification in our communities and help end the pandemic.”

    Apple and Google say they’ll make the new system available for iPhones and iPads with the iOS 13.7 software update Tuesday and for devices running Android 6.0 or higher with an update later this month.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第884期:《世界知识网 learn-anything》

    3 9 月, 2020
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《世界知识网 learn-anything》
    今日推荐英文原文:《Engage Your Development Team》

    今日推荐开源项目:《世界知识网 learn-anything》传送门:项目链接
    推荐理由:这是一个类似于知识网图的开源项目,其最终目的是将各种知识主题联系起来,使得基于已有知识的学习能够更容易找到方向,对未知领域的学习也能从中获取相关资源。当然了,现在的知识主题数量多如繁星,所以项目也欢迎协作者为项目出力或是投资。
    今日推荐英文原文:《Engage Your Development Team》作者:Christian Muehle
    原文链接:https://medium.com/better-programming/engage-your-development-team-e2bcb27d5632
    推荐理由:介绍了在团队工作中能提高效率的关键点

    Engage Your Development Team

    How to get your team to stick together

    Let me start this post with a short German saying about teams:
    TEAM — Toll, ein anderer machts!
    If you translate it to English, it would come out as: “TEAM — great, somebody else will do it!” Obviously this is the anti-pattern of a team; every development team following this will fail over time.

    I work as a team leader for an international team, so remote working/home office was nothing new to us. Of course, due to the current situation, this has increased and now we are a 100% remote working team all over Europe. One of the most important points for the team is to stick together and ensure we follow our short and long term goals.

    Key points

    From my experience, the following three points are key to a successful development team:

    Responsibility

    If you feel responsible for something, whether it’s a part of your project or tooling around the company, you will treat it differently compared to something from somebody that you have to do now because “it’s your job.” Of course, handing over responsibility comes with a level of trust; nothing that can be granted on day one, but over time it should be clear who in your team can take a specific role that fits the skill set of that person.

    Communication

    From my point of view, it’s very important to be clear, honest, and direct inside the team between each member, and also encourage the team to do the same to other departments. Communication is a skill that has to be learned over time, there are ways to help introverted people to feel more secure and coach people to get used to it.

    Creativity

    Offering the possibility to suggest a solution instead of presenting the way to accomplish a goal or providing the freedom of choosing a technology to finish a task helps to onboard a new person but also keeps existing teammates motivated to get involved and learn new skills.

    You might have already thought to yourself that the above points are interconnected and are not single points to address — you are right! If you clearly communicate what you expect and what are the goals, team members will be able to focus and take over responsibilities because they understand what should be done. If people take over responsibilities, they will think about a task more detailed, using their creativity to come up with solutions and present it to the team or other stakeholders.

    What Worked For Us

    I will provide one example per key point. Like I already mentioned, you can’t isolate each key area completely, but I will try to provide examples focusing more on one side to get you started.

    Communication

    For this one I will come up with two examples, I’m sure at least one will work in more or less any project. For over two years, we have hosted a development blog. The blog is only available inside our company (to everybody) but you could also go with an online version. Every month, we post at least one status update; everybody is free to hand in sections for this update or publish articles in between. You achieve multiple goals in one go:
    • Inter-department communication — everybody has a source of news and is more aware of upcoming challenges and developers learn to express technical topics in a more general way.
    • Developers engage with your project, and they will write their article about their part of the project — increasing the feeling of responsibility.
    • Feedback based on a blog post might raise ideas that didn’t pop up so far — people start looking at a project from a different angle that could spark some creativity in your team.
    My second example would be related to software releases or new features. How about producing a short video (we have a max length of three minutes) to provide some insides to everybody interested? The big advantage of a pre-recorded video is that you can re-try it as often as you want, no stage fright, and all the time in the world to get used to it. This helps people to get comfortable talking about your project and will help them to understand that they are capable of doing this (they developed it, so they are one of the best resources regarding detailed knowledge and insides you might have).

    Responsibility

    This one might be a bit tricky and will require some more time, but for us, the following idea worked out well:

    Host a development project with a limited time frame (for us, one workweek, aka five days). Everybody can suggest a project around the company or a technology that could be beneficial in the future. Each suggestion gets pitched to the team to recruit other team members to join the project. You will notice that people work differently inside their project, and a team-leading role (inside this project) could support further personal development.

    Besides this project approach, you might spot fields that fit the character of a developer (like UI/UX focus, backend, database architecture, etc.) and sit down and discuss if she/he would like to focus more on this sector and review tasks/work inside this topic.

    Creativity

    Helping to spark some creativity can be challenging. Let’s be honest: we are all a bit lazy from time to time. Let me explain my point:

    If you are facing an issue and come to me for a solution (and we assume I’m aware of a possible solution) it’s not always the best idea to present it to you directly.
    “Change is the end result of all true learning.” — Leo Buscaglia
    So am I saying to suggest less/nothing to spare creativity? Yes and no. It depends on the specific case and person, but sometimes it’s more productive to coach and provide ideas instead of finished solutions. This is especially important for new developers; they need to learn, and if they accomplish something on their own, it’s something more valuable as a provided solution from somebody else. The process of actually finding the answer opens different paths to explore— possibly leading to a solution that is even better as a known answer.

    Summary

    It’s part of your job as a team leader to keep your team working together to achieve more than a single person could. On the other hand, you have to keep in mind that your team is built out of individuals, and each person has to be taken care of and guided to fit into the bigger picture. There are several ways to move along, and the ones shown here are working for us; nevertheless, this list is by far not complete. I would be more than happy to receive some insights and ideas from other teams to try out because right now, this is more important than ever.

    Thanks for reading!
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第883期:《可视化调试 vscode-debug-visualizer》

    2 9 月, 2020
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《可视化调试 vscode-debug-visualizer》
    今日推荐英文原文:《A Brief History of the Curly Brace in Programming》

    今日推荐开源项目:《可视化调试 vscode-debug-visualizer》传送门:项目链接
    推荐理由:这个项目是一个可以将调试过程可视化的 VSCode 插件,虽然 demo 里的特效着实有些花里胡哨,但是实用性依然非常突出,不需要整天在控制台上打印数据就能很好的把握当前数据的情况;目前对 JS 一族提供了完全支持,而 Go,Python 等语言也提供了基本支持,在使用前最好扫一眼自己使用语言的支持情况。
    今日推荐英文原文:《A Brief History of the Curly Brace in Programming》作者:Michael McMillan
    原文链接:https://medium.com/better-programming/a-brief-history-of-the-curly-brace-in-programming-5b3eacdc3f7a
    推荐理由:现在天天用到的花括号为什么当初会被引入呢

    A Brief History of the Curly Brace in Programming

    We use them every day but where did the curly brace in our code come from?

    When did the curly brace, that familiar symbol that marks the beginning and the end of a block of code, become part of programming? Perhaps more importantly, when did code blocks become part of program structure?

    In this article, I’ll answer these questions.

    First, An Example of a Non-block Language

    All programmers familiar with C-style programming syntax are familiar with programming blocks. All of the major programming constructs in C, C++, Java, JavaScript, and other languages are block-structured. In other words, the bodies of these constructs are placed within blocks, which are delimited with open and closing curly braces.

    It could be argued that this is not strictly true, since if statements and loops, to mention just two programming constructs, can be formed without blocks if their bodies are just one statement long. However, over the past several years, programming style experts have recommended that all construct bodies be placed in a block (see Douglas Cockroft’s “JavaScript: The Good Parts” for a particularly convincing argument for placing all if and loop bodies in blocks).

    However, the first high-level programming languages did not have blocks.

    I will demonstrate this using the FORTRAN language circa the late 1950s. Donald Knuth, in his excellent review article of early high-level programming languages, “The Early Development of Programming Languages,” reprinted in his book “Selected Papers on Computer Languages”, compares the features of several early programming languages. He does this by demonstrating how a certain computer program is implemented in the different languages. This program, which implements an algorithm called the TPK algorithm, looks like this in modern JavaScript:
    function f(t) {
      return Math.sqrt(Math.abs(t) + 5 * Math.pow(t, 3));
    }
    let arr = [];
    let y;
    for (let i = 0; i < 11; i++) {
      putstr("Enter a number: ");
      arr[i] = parseFloat(readline());
    }
    for (let i = 10; i >= 0; i--) {
      y = f(arr[i])
      if (y > 400) {
        print(y,"is too large.");
      }
      else {
        print(i,y)
      }
    }
    
    Don’t worry about what the program does. The important point is that this program exercises all of the features that Knuth thought were important to test in a modern programming language.

    As I mentioned, Knuth compared several programming languages with this algorithm. One of the last languages he looked at is now often considered the first real high-level programming language. Here’s how the TPK program looks in Fortran, as written by Knuth:
    C   THE TPK ALGORITHM, FORTRAN STYLE
        FUNF(T) = SQRTF(ABSF(T))+5.0*T**3
        DIMENSION A(11)
    1   FORMAT(6F12.4)
        READ 1, A
        DO 10 J = 1, 11
        I = 11 – J
        Y = FUNF(A(I+1))
        IF (400.0-Y) 4, 8, 8
    4   PRINT 5, I
    5   FORMAT(I10, 10H TOO LARGE)
        GO TO 10
    8   PRINT 9, I, Y
    9   FORMAT(I10, F12.7)
    10  CONTINUE
        STOP 52525
    
    I won’t go into the details of the Fortran syntax, but you can clearly see that the language does not contain blocks. The function is defined on one line, not as a block of code. The DO loop uses a line label to control the loop. High-level languages at this time did not have a concept of grouping compound statements into blocks and these languages still relied on gotos to control program flow.

    This code was written by Knuth using the 1957 version of Fortran. Between 1957 and 1960 a new language was developed, ALGOL, that remedied many of the defects of languages such as Fortran and the other high-level languages of the time.

    Blocks in Algol

    The Algol programming language was first described in 1958, though the most popular version of the language is Algol 60. One of the features of Algol is the ability to group statements into compound statements, known as blocks. Every Algol program was considered a block, since a program usually contains one or more statements (hence compound statements). The developers of Algol recognized that many programming scenarios, such as conditionals and loops, require statements to be considered as a unit.

    Algol marked the start and end of a block with the keywords begin and end. A block could be nested inside another block, with the outer block being considered the dominant block and the inner block being considered the subordinate block. For example, here is an Algol program that nests blocks:
    begin real a;
         a := 1;
         begin real a;
              a := 2;
              print(a)
         end;
         print(a)
    end
    
    The numbers 2 and 1, in that order, are printed.

    Here is an example of how a block is used in an if statement in Algol:
    if x > -1 then
         begin
              if x ≠ 0 then
              x := 1/x
         end;
    
    And here is an example of a for loop block in Algol:
    begin
         real a0, a1, a2, a3, z, p;
         integer n, i;
         read(a0, a1, a2, a3);
         read(n)
         for i := 1 step 1 until n do
              begin
                   read(z);
                   p := ((a3 × z + a2) × z + a1) × z + a0
                   print(p)
              end i
    end
    
    Now let’s look at the TPK program in Algol, to see how block structure helps that program, compared to the Fortran version:
    TPK begin integer i, real y; real a[0:10];
         real procedure f(t); real  t; value t;
         f := sqrt(abs(t)) + 5 × t ↑ 3;
         for i := 0 step 1 until 10 do read(a[i]);
         for i := 10 step -1 until 0 do
              begin y := f(a[i]);
                   if y > 400 then write(I, 'TOO LARGE')
                   else write(i, y);
              end
    end TPK
    
    You should be able to tell that the block structure of the Algol version makes it much more like the code you and I are used to reading today.

    Moving on to BCPL

    The next change in the syntax of block-structured languages came with the BCPL language developed by Martin Richards at the University of Cambridge around 1967. In between the initial development of Algol in 1960 and 1967, compiler and system developers had been looking for ways to develop systems applications (such as operating systems) using languages other than machine and assembly languages. I am highlighting BCPL because C was developed as a refinement and improvement of BCPL, via an intermediate language developed by Ken Thompson called B.

    Richards developed BCPL as a systems development language that was as efficient as assembly language but with syntax at a higher level to make coding easier and more efficient. This meant that many features of high-level languages such as Algol needed to be included in a language such as BCPL, but in a more efficient way.

    One way to achieve this efficiency was to simplify the designation of a block of code from words (begin and end) to symbols. For compound statements and blocks, Richards chose the symbols $( for opening and )$ for closing. These symbols are called section brackets.

    In BCPL, if $( and )$ are used with a construct such as an if statement or a loop, then they’re delimiting a compound statement. If the $( includes some declarations, then they’re delimiting a block.

    For example, here’s how an if statement with compound statements is written in BCPL:
    IF A < B
         $( LET T = A
              A := B; B := T
         $)
    
    Here’s an example of a BCPL block:
    GET "LIBHDR"
    LET START() BE
         $( LET A, B, C, SUM = 1, 2, 3, 0
              SUM := A + B + C
              WRITES("Sum is ")
              WRITEN(SUM)
         $)
    
    Here the opening section bracket is opening a block because a declaration immediately follows the bracket.

    $( and $) Become { and } in C

    Around 1968 or 1969, Ken Thompson and Dennis Ritchie at Bell Labs began experimenting with developing an operating system using a systems programming language. Thompson actually began this exploration by trying to use Fortran but quickly dropped it when he realized it wasn’t possible. He decided that he needed to modify BCPL to make a systems programming language more to his liking, and so developed B.

    B, while closer to the systems development language Thompson and Ritchie wanted, still did not meet their needs completely, so Ritchie set out to develop yet another language, called NB, for New B. NB did not live very long and was eventually replaced by a completely new language, which they naturally called C. If you are interested in how C was developed from BCPL, B, and NB, I encourage you to read Dennis Ritchie’s History of the C Language.

    One of the many things that Thompson fixed in B that carried over into NB and then C was abbreviated operators. These were necessary for the expanded language to fit into the memory limitations of the computers of the day. For example, Thompson created the compound assignment operators (+= for example) and the increment (++) and decrement ( — ) operators as ways to make the language more efficient. This move for efficiency lead to other operators from BCPL to be simplified — for example, $( and $) were replaced by { and }.

    Where We are Today

    The curly brace has been embraced as the primary symbol for blocks in many programming languages, especially those languages that most closely follow C-style, including C++, Java, C#, and JavaScript.

    More interestingly, newer languages have adopted the use of curly braces, including Go and Rust. Go, in fact, requires curly braces for every conditional or looping construct, following the lead of programming experts who state that even when the language doesn’t require them, programmers should use curly braces for every construct that can use them.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
←上一页
1 … 37 38 39 40 41 … 262
下一页→

Proudly powered by WordPress