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

开源日报

  • 开源日报第440期:《有鬼(gui) youtube-dl-gui》

    29 5 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《有鬼(gui) youtube-dl-gui》
    今日推荐英文原文:《How to write better bug reports》

    今日推荐开源项目:《有鬼(gui) youtube-dl-gui》传送门:GitHub链接
    推荐理由:有想要下载 YTB 上视频的朋友应该或多或少听说过 youtube-dl 这个项目:一行命令就能帮你下载 YTB 视频。而这个项目则是给它加上了一个图形界面,对于不习惯命令行的人来说更友好些,在不记得命令的时候调整设置也更为简单,适合作为工具推荐给身边的朋友。
    今日推荐英文原文:《How to write better bug reports》作者:Cristina M.
    原文链接:https://medium.com/@cristina.mtys/how-to-write-better-bug-reports-b03eeb4726ed
    推荐理由:在一个人编程的时候可能不需要 Bug 报告,但是这种写报告分析 Bug 的思想也能帮你理清解决它的思路

    How to write better bug reports

    Probably you encountered bug reports that are as long as this article or so short that you cannot even reproduce it. No matter if you are a developer, a quality assurance or a manager, a good written bug report can save you ton of time.

    Photo by Glenn Carstens-Peters on Unsplash

    We all need to understand that a bug report has to be as short as possible, and written with simple and concise words. That is all, nobody needs an essay.

    I am a QA and sometimes I get reports from the clients or developers that are not explicit at all:
    • Bug description: Setting is saved only after reset.
    What setting? Should I reset the application, the device? Well..please, tell me, how exactly can I reproduce that?

    OR the classic
    • Bug description: Application does no work.
    What did you do that it stopped working? Works perfectly fine for me..

    OR

    Sometimes I get a very very long report. No spaces or punctuation, only text. Long phrases that make me forget what was it all about? Am I reading a novel? Oh wait, it is a bug which needs to be reproduced and converted to a easy to understand format.

    Why should I waste time and try to add an easy to read format?

    Because if I assign the issue to a developer, he’ll be bored and stop reading after the second row. As a result I’ll get the bug back in QA saying that it is solved.
    • What ? So fast?
    Yeah, probably he’ll say that the bug cannot be reproduced (of course, he didn’t tried, and I’m not even blaming him for that), or he’ll fix another issue found when trying to reproduce the critical one that we got from clients (of course, he’ll not let me know that he fixed a totally different issue, so he can get rid of the complicated one).

    The only scope of a bug report is to be easy to understand, so the developer is able to reproduce it.

    The report should contain the following information:
    • Title: it should be short and explicit, most of the time is a summary of Actual Result

    • Steps to reproduce: a list with numbers or bullet points with the exact actions needed to be executed in order to catch the bug

    • Actual result: describe exactly what is happening after doing the steps

    • Expected result: explain what it should happen after doing the steps

    • Severity: can be Low, Medium, Major or Critical and refers to the impact of the bug

    • Notes: I’ll add here any information that I consider useful for the reproduction of the bug. Device, operating system, browser name and version are some of the details that I consider important. For desktop applications the build number is also added. This part could be specific to each project.

    • Attachment: video or photo

    Except UI bugs, where a photo is explanatory enough, I personally like to add short videos with the steps, it saves a lot of time and developers have no excuse to send the bug back with the reason that they cannot reproduce it. I create the videos without sound and no longer than 1 min or 1 min and half, as that is long enough to execute the reproduction steps, and short enough to not loose the attention of the viewer.

    Some people add gifs. I do not like that, especially for longer scenarios, because you cannot pause it. It’s going in the loop for a while until I can understand what is there.

    Also I like to add the error that the console throws, or at least keep that open while creating the screen record so it will be easier to debug and understand why that scenario fails.

    Now lets see a practical example

    First example: DON’T


    Photo by Kai Pilger on Unsplash

    Title: Application not working as it should

    Steps: 1. Open the online shop 2. Add a product to the favorite list Actual: Product is not added

    Expected: Application should work correctly

    Severity: Critical

    Notes: Tested on my local computer

    First, the title is very general, it should be more specific and refer exactly to the bug that is described.

    Second, the steps are not clear enough, the bug may be related to specific buttons or products and the bug does not state what buttons to click.

    Third, actual result could be more detailed. Does it throw any error, is the user redirected or is the button even clicked?

    Fourth, a critical severity refers to a defect that shuts down the system. Lets not create panic, you should add Critical severity only if that application is down or something like that.

    Fourth, add exactly what should happen after doing those steps. Correctly can mean different things to every person. You should have a requirement from the client that states what correctly means for that particular application, so please use that as an expected result. The bug may be fixed in a wrong way if we use such a general statement in the expected results.

    Last, be more specific about your computer: OS and browser used.

    Lets see the correct example now:

    Example number 2: DO


    Photo by Carlos Alberto Gómez Iñiguez on Unsplash

    Title: Error is displayed when adding a product to favorites list

    Steps: 1. Open the online shop (add the name/link to the shop if the team is working on multiple projects) 2. Search for iPhone XR 3. Select the product 4. Press on Add to favorites button Actual: ‘Error’ message is displayed on the screen and the product was not added to the favorites list

    Expected: ‘Successfully added to your list’ message is displayed and user can find the product in the favorite list

    Severity: Medium

    Notes: Tested on Windows 10, Chrome 74.0.3729.169
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第439期:《网站设计灵感 design-inspiration》

    28 5 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《网站设计灵感 design-inspiration》
    今日推荐英文原文:《Why Defensive Programming is the Best Way for Robust Coding》

    今日推荐开源项目:《网站设计灵感 design-inspiration》传送门:GitHub链接
    推荐理由:在设计网页的过程中有时候需要一些小小的灵感来激发创造力,而观察从未见过的东西正是一个很好的方法——它能打开新世界的大门。这个项目就收集了很多有新意的网站设计和在设计时可能用到的资源,兴许有些正好能让你眼前一亮,展开新的思路。
    今日推荐英文原文:《Why Defensive Programming is the Best Way for Robust Coding》作者:Ravi Shankar Rajan
    原文链接:https://medium.com/swlh/why-defensive-programming-is-the-best-way-for-robust-coding-cfa790fe04cd
    推荐理由:试着防范可能发生的问题是个很好的习惯——在那些问题真正发生时更是如此

    Why Defensive Programming is the Best Way for Robust Coding

    Defensive programming is when a programmer anticipates problems and writes code to deal with them.

    It is like seeing a car crash in the future….. and remaining calm because you have insured for it.

    That said, the whole point of defensive programming is guarding against errors you don’t expect. A defensive programmer is on the watch for trouble, to avoid it before it can cause real problems. The idea is not to write code that never fails. That is a utopian dream. The idea to make the code fail beautifully in case of any unexpected issue. Fail beautifully can mean any one of the following. · Fail early: your code should ensure all important operations are terminated in advance especially if those are computationally expensive or might irreversibly affect data. · Fail safe: where there is a failure, your code should ensure that it relinquishes all locks and does not acquire any new ones, not write files, and so on. · Fail clearly: when something is broken, it should return a very clear error message and description which can enable the support team to resolve the error. Ok. You might argue here.

    There are no problems in the present. My code is working beautifully. Why should I invest time and effort in a “future anticipated “problem? After all, we have been repeatedly taught to use “You Ain’t Gonna Need It” (YAGNI). And you are a professional programmer and not a hobbyist who can keep adding to the code at will.

    The key here is pragmatism.

    Andrew Hunt in his book Pragmatic Programmer describes defensive programming as “Pragmatic Paranoia”.

    Protect your code from other people’s mistakes and your own mistakes. If in doubt, validate. Check for data consistency and integrity. You can’t test for every error, so use assertions and exception handlers for things that “can’t happen”.

    Healthy Paranoid Programming is the right kind of programming. But paranoia can be taken too far. The key is striking the right balance.

    And here are some ways to do defensive programming.

    Ask Yourself: If this Fails?

    Every line of code does something so the 1st point of defense is asking yourself if the code fails, then what.

    For example, consider the following non-compliant code.
    CASE SY-INDEX. // Noncompliant; missing WHEN OTHERS clause
    
    WHEN ONE.
    
    WRITE ‘One’.
    
    WHEN 2.
    
    WRITE ‘Two’.
    
    ENDCASE.
    
    Here we can ask the following questions.
    • What happens if sy-index is not 1.
    • What happens if sy-index is not 2.
    To solve this problem, we add a OTHERS statement.
    CASE SY-INDEX.
    
    WHEN ONE.
    
    WRITE ‘One’.
    
    WHEN 2.
    
    WRITE ‘Two’.
    
    WHEN OTHERS. // Compliant
    
    WRITE ‘Unexpected result’
    
    ENDCASE.
    
    Simple. Isn’t it?

    It is this “what if” thinking that separates good programmers from those that write code and hope it never fails. “Never” always comes sooner than expected, and by then the code is buried in a long-forgotten part of the program, with the error messages giving no indication of where the problem is and how to resolve it.

    The beauty is of this defensive programming technique is that it costs almost no time to add exhaustive type checking to your code. You are not “over coding”. You are just “securing” your code.

    Check the Boundary Conditions Carefully.

    The very first check is to ascertain if you need a boundary condition as after all as loops are expensive.

    Boundary (or edge) conditions are where all the action happens. Loop from 0 to 100 and loop values 1 through 98 are pretty much the same (barring conditionals in the code of course). But loop 0 is where the code enters the loop, and initialization conditions are set up (and possibly set up wrong). Likewise, the last loop is where things leave, and whatever the loop was doing to values, stops.

    A loop with at most one iteration is equivalent to the use of an IF statement to conditionally execute one piece of code. No developer should expect to find such usage of a loop statement. If the initial intention of the author was really to conditionally execute one piece of code, an IF statement should be used in place.

    Consider the following non-compliant and compliant code. We don’t need a loop at all in this case. A simple IF will do.
                Noncompliant Code Example
    
    DATA remainder TYPE i.
    
    DO 20 TIMES.
    
    remainder = sy-index MOD 2.
    
    cl_demo_output=>write_text().
    
    EXIT. “ noncompliant, loop only executes once. We can use IF
    
    ENDDO.
    
              Compliant Code Example
    
    DATA remainder TYPE i.
    
    DO 20 TIMES.
    
    remainder = sy-index MOD 2.
    
    cl_demo_output=>write_text().
    
    ENDDO.
    
    Always remember debugging loops always involves most of the effort at the start and the end, making sure what goes in and what comes out is correct. So once you are clear with the boundary conditions, nothing else can really go wrong with your code.

    Use TDD (Test Driven Development)

    The fundamental idea of TDD is “first write unit tests, then write the code, then refactor, then repeat.”

    Unit tests are automated tests that check whether functions work as expected. Your very first unit test should fail since it’s written before you even have any codebase.

    You add a bit to the test case code. You add a bit to the production code. The two code streams grow simultaneously into complementary components. The tests fit the production code like an antibody fits an antigen.

    The problem with testing code is that you have to isolate that code. It is often difficult to test a function if that function calls other functions. To write that test you’ve got to figure out some way to decouple the function from all the others. In other words, the need to test first forces you to think about good design.

    This creates a better, decoupled design in which you have better control over things as the code develops.

    While writing test cases upfront might consume time initially but this brings a lot of benefits. Developers admit that previously they used to write lines of code, realize that their solutions were irrelevant, and then start coding again from scratch.

    Unlike outdated coding practices, TDD allows developers to go back to the drawing board and concentrate on designing a lightweight, flexible architecture upfront.

    And the very fact of writing test cases upfront prevents any bugs that might pop up later thus saving time, effort and heartburn.

    Always Write Optimized Code.

    Some programs (and programmers) like resources a lot. But whenever you can, use the minimum. And to use the minimum your code should be as optimized as possible.

    Usually, one sure shot way to optimize is to turn on whatever optimizations the compiler provides inbuilt.

    Compiler optimizations usually improve runtime from a few percents to a factor of 2. Sometimes it may also slow the product so just measure carefully before taking the final call. Modern compilers however do sufficiently well in this regard as they obviate much of the need for small scale changes by programmers.

    Besides the standard compiler optimizations, there are several other tuning techniques that can be used.

    Collect common subexpressions.

    If an expensive computation occurs in multiple places, it is better to compute in one place and remember the result. Don’t put such computations within a loop unless required.

    Replace expensive operations by Cheap ones.

    String manipulation is probably one of the most common operations in any program. However, it can be an expensive operation if done incorrectly. Similarly, in some cases, you can improve performance by replacing multiplication with a series of shift operations. Even where this is effective (and it isn’t always) it produces very confusing code. So take the decision considering the readability of code also.

    Eliminate Loops.

    Loops are mostly overheads. Try to avoid loops wherever possible if iterations are not much.

    Cache frequently used values.

    Caching takes advantage of locality, the tendency of programs and people to reuse recently used data. Caching just the most used character or data significantly improves the performance of the program.

    Rewrite in a lower level language.

    This should be the last resort. Lower level languages tend to be more efficient, although more time consuming from the programmer’s point of view. Occasionally we get significant improvements by rewriting crucial code in lower level languages but this comes at the cost of reduced portability and maintenance becomes very hard. So take the decision carefully.

    Remember in optimization, selection is perhaps 90% of the game. It’s worth taking the time to decide what you’re doing and to do it right. Of course: That’s also where the black magic lies!

    And Lastly, Trust no one.

    “There are known knowns; there are things we know we know,” Donald Rumsfeld, the Secretary of Defense during the second Bush administration, once said at a press conference. “We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns — the ones we don’t know we don’t know.”

    Rumsfeld was talking about the war in Iraq, but the same holds true for data also. In a nutshell, this means to verify all data that you do not have complete control over.

    Obviously, user data is always suspect. Users can very well misunderstand what you think is crystal clear. Try and anticipate issues, and verify or otherwise tidy up everything that comes in.

    Program settings data is also prone to error. INI files used to be a common way of saving program settings. Because they were a text file, many people got in the habit of editing them manually with a text editor, and possibly (likely) screwing up the values. Registry data, database files — someone can and will tweak them someday, so it pays to verify even those things.

    In short, the data coming in must be clean if you have any hope of your code doing what it is meant to do. If you’ve ever heard the phrase “Garbage in, Garbage Out” this is where it came from.

    As Edward Demming has rightly said.
    “In God we trust. All others must bring data.”

    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第438期:《猫猫 random-cat-generator》

    27 5 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《猫猫 random-cat-generator》
    今日推荐英文原文:《Git: No Control Without Version Control》

    今日推荐开源项目:《猫猫 random-cat-generator》传送门:GitHub链接
    推荐理由:只要按一下,这个项目就会找出一张猫图给你。没有人能够拒绝可爱猫猫的诱惑的,步骤方便简单,作为放松和转换心情的选择来说相当适合。如果平时附近看不到有人养猫的话,这个项目也刚好能很好的帮你补充猫元素。
    今日推荐英文原文:《Git: No Control Without Version Control》作者:Kudzanayi Dzvairo
    原文链接:https://medium.com/@kudzanayi/no-control-without-version-control-3358c38d404c
    推荐理由:版本控制系统的重要性——不得不承认这玩意的确很重要,特别是在出了岔子的时候

    Git: No Control Without Version Control

    I’ll be writing a few blogs on git and some of its features as it was something I googled often working with partners on projects when I began coding. But before diving into git…

    What is Version Control

    Version control systems allow software teams to manage changes to source code over time. Version control software keeps track of every change over time in a special database. This allows developers the opportunity to turn back time and fix mistakes and make comparisons with the least amount of distraction the team.

    As developers code is the most important asset to a team and has been composed carefully. Version control protects source code from both deliberate and unintentional mistakes.

    Developers work in teams and are continually updating old code and writing new code. The code for a project, app or software is organized in a folder called structure called a ‘file tree’. This allows developers to work on multiple things at once. One may be working on a new feature while another fixes a bug

    Version control helps teams solve these kinds of problems, tracking every individual change by each team member and helping prevent concurrent work from conflicting. Changes made in one part of the software can be incompatible with those made by another developer working at the same time. This problem should be discovered and solved without blocking the work of the rest of the team. On top of that change can introduce new bugs on its own and new software can’t be trusted until it’s tested. So testing and development proceed together until a new version is ready.

    Good version control software supports a developer’s preferred workflow without imposing one particular way of working. Ideally it also works on any platform, rather than dictate what operating system or tool chain developers must use. Great version control systems facilitate a smooth and continuous flow of changes to the code rather than the frustrating and clumsy mechanism of file locking — giving the green light to one developer at the expense of blocking the progress of others.

    Benefits of Version Control

    Developing software without using version control is risky, like not having backups. Version control can also enable developers to move faster and it allows software teams to preserve efficiency and agility as the team scales to include more developers.
    1. A complete long-term change history of every file. This means every change made by many individuals over the years. Changes include the creation and deletion of files as well as edits to their contents. This history should also include the author, date and written notes on the purpose of each change. Having the complete history enables going back to previous versions to help in root cause analysis for bugs and it is crucial when needing to fix problems in older versions of software. If the software is being actively worked on, almost everything can be considered an “older version” of the software.
    2. Branching and merging. Having team members work at the same time is a no-brainer, but even individuals working on their own can benefit from the ability to work on independent streams of changes. Creating a “branch” in VCS tools keeps multiple streams of work independent from each other while also providing the facility to merge that work back together, enabling developers to verify that the changes on each branch do not conflict. Many software teams adopt a practice of branching for each feature or perhaps branching for each release, or both. There are many different workflows that teams can choose from when they decide how to make use of branching and merging facilities in VCS.
    3. Traceability. Being able to trace each change made to the software and connect it to project management and bug tracking software such as Jira, and being able to annotate each change with a message describing the purpose and intent of the change can help with root cause analysis. Having the annotated history of the code at your fingertips when you are reading the code, trying to understand what it is doing and why it is so designed can enable developers to make correct and harmonious changes that are in accord with the intended long-term design of the system. This can be especially important for working effectively with legacy code and is crucial in enabling developers to estimate future work with any accuracy.

    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
  • 开源日报第437期:《说些有意思的 geeksay》

    26 5 月, 2019
    开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
    今日推荐开源项目:《说些有意思的 geeksay》
    今日推荐英文原文:《An Algorithm May Decide Who Gets Suicide Prevention》

    今日推荐开源项目:《说些有意思的 geeksay》传送门:GitHub链接
    推荐理由:有的时候一个意思可以用多种不同的词语表达。设想一下,如果用 || 代表 or,&& 代表 and,self 代替 me……虽然圈子里的人能够听懂,但是没接触过这方面的人可能就云里雾里了。最好不要用它和不懂这些的人对话,话虽如此,偶尔使用这样的说话方法和听得懂它们的人对话倒也是个找乐子的好主意。
    今日推荐英文原文:《An Algorithm May Decide Who Gets Suicide Prevention》作者:Jake Pitre
    原文链接:https://onezero.medium.com/an-algorithm-may-decide-who-gets-suicide-prevention-f46e8f7055c1
    推荐理由:人工智能和它的算法的确在更好的帮助人类,但是算法偏见正在阻碍它——这会让它比人类更快更多的犯下错误

    An Algorithm May Decide Who Gets Suicide Prevention

    A recent study on Google’s search results raises questions about the faith we put in algorithms — and the tech companies that use them

    anyone unfamiliar with the suffocating feeling of suicidal ideation, the significance of a phone call with a stranger might seem dubious. In that moment, the lowest of lows, speaking with someone who understands what you’re going through can — quite literally — mean the difference between life and death.

    While it remains under debate just how effective suicide hotlines are in terms of preventing suicides, there is plenty of anecdotal evidence that lives have been saved by their existence. Based on that evidence, in 2011, Google began to show suicide helpline numbers at the top of results for searches like “effective suicide methods.”

    Like so much of our online lives, the decision to show this advice alongside results is determined by an algorithm. Facebook has been doing something similar since 2017, when it began monitoring posts for content about suicide or self-harm with pattern recognition algorithms, and then sending those users relevant resources.

    Yet, while these steps are helpful, the algorithms concerned do not perform consistently across the world, according to a study published earlier this year in the journal New Media & Society. The researchers — Sebastian Scherr at the University of Leuven and Mario Haim and Florian Arendt at the University of Munich — found that algorithmic bias is increasingly becoming a challenge for technological growth as algorithm creators struggle to confront the limitations of their programming. In this case, they found that Google’s algorithms contribute to a digital divide in access to health information online.

    An algorithm, it seems, could determine, in some cases, who gets shown lifesaving information, and who doesn’t.

    The researchers behind the New Media & Society paper set out to understand this odd quirk of Google’s algorithm, and to find out why the company seemed to be serving some markets better than others. They developed a list of 28 keywords and phrases related to suicide, Scherr says, and worked with nine researchers from different countries who accurately translated those terms into their own languages. For 21 days, they conducted millions of automated searches for these phrases, and kept track of whether hotline information showed up or not.
    “If you’re in an English-speaking country, you have over a 90% chance of seeing these results — but Google operates differently depending on which language you use.”
    They thought these results might simply, logically, show up in countries with higher suicide rates, but the opposite was true. Users in South Korea, which has one of the world’s highest suicide rates, were only served the advice box about 20% of the time. They tested different browser histories (some completely clean, some full of suicide-related topics), with computers old and new, and tested searches in 11 different countries.

    It didn’t seem to matter: the advice box was simply much more likely to be shown to people using Google in the English language, particularly in English-speaking countries (though not in Canada, which Scherr speculates was probably down to geographical rollout). “If you’re in an English-speaking country, you have over a 90% chance of seeing these results — but Google operates differently depending on which language you use,” he said. Scherr speculates that using keywords may simply have been the easiest way to implement the project, but adds that it wouldn’t take much to offer it more effectively in other countries, too.

    A Google spokesperson, who asked not to be quoted directly, said that the company is refining these algorithms. The advice boxes require the cooperation of local organizations which may not always be available, they said, but that relevant resources will still show up in regular search results. Google said the service does not have comprehensive global coverage, and while it is actively working on new languages and locations, rolling that out takes time.

    Suicide prevention might not have the same status as Google’s high profile artificial intelligence projects, but it is nonetheless a feature that could potentially help save lives. Some 800,000 people take their own lives each year around the world, or about one person every 40 seconds. “There’s a lot at stake if you don’t provide the same chances to everyone,” Scherr told me. “Google is a global company, with smart people all over the world. They shouldn’t be forgetting about the rest of the world. They could fix this. They could do that today.”

    Algorithms have increasing influence over every aspect of our lives, from the triviality of Netflix recommendations to determining something as profound as suicide prevention. In 2018, a secret Amazon recruitment algorithm analyzed the resumes of job applicants, but was found to favor male candidates over female ones. And in 2016, ProPublica revealed that one risk assessment algorithm used in many courtrooms routinely recommended harsher sentences to black people than to white offenders — a disturbing reminder about the power we’ve allowed algorithms to wield, even as many of us assume that computers are inherently more reliable than human beings.

    “A.I. makes mistakes, only faster and at scale,” explains Kirsten Martin, a researcher at George Washington University’s School of Business and an expert in A.I. ethics. “There has to be an assumption that mistakes will be made like a human, but at a faster pace. That should be a standard governing principle.”
    “Although Google seems to be attempting to perform a social good by expanding its suicide prevention algorithms, ‘why aren’t they doing that all the time?’”
    Martin says we seem to be letting algorithms run rampant before anyone truly understands what they’re doing. “Just because you ignore the ethics of a decision doesn’t mean it goes away — it just means you do it badly,” Martin told me. “Google’s suicide result box is interesting because they have a good goal in mind, and they’re at least conscious of the fact that they are perhaps saving people in one group and not others.”

    Martin warns that although Google seems to be attempting to perform a social good by expanding its suicide prevention algorithms, it raises an important question. “Why aren’t they doing that all the time? Why aren’t they being that thoughtful about, say, advertising? They’re admitting that they can do it right when they want to, so it’s a shame they aren’t using that principle across all their algorithms.”

    Google, for its part, has made its A.I. principles public, though they mostly consist of vague aphorisms like: “Be accountable to people.” The company also recently announced an internal A.I. ethics council, which was heavily criticized for its makeup and then cancelled after just one week.

    “We care deeply that A.I. is a force for good in the world, and that it is applied ethically, and to problems that are beneficial to society,” the company said in a January research summary. The report highlighted the company’s Google A.I. for Social Impact Challenge, with channels $25 million in funding to groups interested in using Google artificial intelligence. One of those grants went to The Trevor Project, an LGBTQ+ organization that intends to use machine learning to help determine suicide risk levels.

    As these tech companies continue to wrestle with this issue and their responsibility to address it, and continue to utilize algorithms to handle it, perhaps it’s worth remembering that all this technological effort has one simple goal — to make it easier for one person in need to hear the voice of someone who will listen.
    下载开源日报APP:https://opensourcedaily.org/2579/
    加入我们:https://opensourcedaily.org/about/join/
    关注我们:https://opensourcedaily.org/about/love/
←上一页
1 … 149 150 151 152 153 … 262
下一页→

Proudly powered by WordPress