OPEN SOURCE SOFTWARE NOTICE
Please note we provide an open source software notice along with this product and/or this product firmware (in the following just ¡°this product¡±). The open source software licenses are granted by the respective right holders. And the open source licenses prevail all other license information with regard to the respective open source software contained in the product, including but not limited to End User Software Licensing Agreement. This notice is provided on behalf of Huawei Technologies Co. Ltd. and any of its local subsidiaries which may have provided this product to you in your local country.
Warranty Disclaimer
The open source software in this product is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the applicable licenses for more details.
Copyright Notice and License Texts
Software: The Legion of the Bouncy Castle 1.64
Copyright notice:
Copyright (c) 2000-2019 The Legion Of The Bouncy Castle Inc. (http://www.bouncycastle.org)
Copyright (c) 2000-2019 The Legion of the Bouncy Castle Inc. (http:www.bouncycastle.org)
Copyright (c) 2011 Tim Buktu<EMAIL_ADDRESS>Copyright (c) 2005 The Legion Of The Bouncy Castle (http:www.bouncycastle.org)
Copyright 2011, Cisco Systems, Inc
License: MIT License
The MIT License
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction,including without limitation the rights
to use, copy, modify, merge, publish,distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Software: AndroidX Exifinterface 1.0.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Appcompat 1.2.0
Copyright notice:
Copyright (C) 2017 The Android Open Source Project
Copyright (C) 2015 Google Inc.
Copyright (C) 2016 The Android Open Source Project
Copyright (C) 2010 The Android Open Source Project
Copyright 2018 The Android Open Source Project
Copyright (C) 2012 The Android Open Source Project
Copyright (C) 2013 The Android Open Source Project
Copyright (C) 2014 The Android Open Source Project
Copyright (C) 2006 The Android Open Source Project
Copyright (C) 2011 The Android Open Source Project
Copyright 2017 The Android Open Source Project
Copyright (C) 2015 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Savedstate 1.0.0
Copyright notice:
Copyright 2019 The Android Open Source Project
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Paging 2.1.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: okhttp 3.12.0
Copyright notice:
Copyright (C) 2018 Square, Inc.
Copyright (C) 2016 Square, Inc.
Copyright (C) 2014 Square, Inc.
Copyright (C) 2012 Google Inc.
Copyright (C) 2011 Google Inc.
Copyright (C) 2013 Square, Inc.
Copyright (C) 2011 The Android Open Source Project
Copyright (C) 2012 Square, Inc.
Copyright (C) 2017 Square, Inc.
Copyright (C) 2015 Square, Inc.
Copyright 2013 Square, Inc.
Copyright (C) 2012 The Android Open Source Project
Copyright (C) 2009 The Android Open Source Project
Copyright (C) 2010 The Android Open Source Project
Copyright 2012 Twitter, Inc
Copyright (c) 2013 Karl Swedberg
Copyright 2013 Twitter, Inc.
Copyright (C) 2013 The Android Open Source Project
Copyright 2016 The Netty Project
Copyright (C) 2016 Google Inc.
Copyright 2014 Square Inc.
Copyright (C) 2011 The Guava Authors
License: Apache License V2.0
Please see above.
Software: AndroidX Startup 1.0.0
Copyright notice:
Copyright (C) 2020 The Android Open Source Project
Copyright 2020 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Versionedparcelable 1.1.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Collection 1.1.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Arch Core 2.1.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Interpolator 1.0.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX CardView 1.0.0
Copyright notice:
Copyright (C) 2014 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: swiperefreshlayout 1.0.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: gifdecoder 4.11.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: streamsupport 1.7.2
Copyright notice:
License: GPL V2.0 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.   12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License.
Please see above.
Software: AndroidX Customview 1.0.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Media 1.0.1
Copyright notice:
Copyright (C) 2017 The Android Open Source Project
Copyright 2018 The Android Open Source Project
Copyright 2019 The Android Open Source Project
Copyright (C) 2014 The Android Open Source Project
Copyright (C) 2013 The Android Open Source Project
Copyright 2014, The Android Open Source Project
Copyright (C) 2017 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Annotation 1.1.0
Copyright notice:
Copyright (C) 2014 The Android Open Source Project
Copyright (C) 2016 The Android Open Source Project
Copyright (C) 2015 The Android Open Source Project
Copyright (C) 2017 The Android Open Source Project
Copyright 2019 The Android Open Source Project
Copyright (C) 2013 The Android Open Source Project
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: Danikula.videocache 2.7.1
Copyright notice:
License: Apache License V2.0
Please see above.
Software: guava 27.1-android
Copyright notice:
Copyright (C) 2013 The Guava Authors
Copyright (C) 2008 The Guava Authors
Copyright (C) 2016 The Guava Authors
Copyright (C) 2012 The Guava Authors
Copyright (C) 2017 The Guava Authors
Copyright (C) 2011 The Guava Authors
Copyright (C) 2011 The Guava Authors.
Copyright (C) 2007 The Guava Authors
Copyright (C) 2015 The Guava Authors
Copyright (C) 2005 The Guava Authors
Copyright (C) 2009 The Guava Authors
Copyright (C) 2010 The Guava Authors
Copyright (C) 2018 The Guava Authors
Copyright (C) 2014 The Guava Authors
Copyright (C) 2006 The Guava Authors
License: Apache License V2.0
Please see above.
Software: AndroidX Viewpager 1.0.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: constraintlayout-solver 2.0.4
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Fragment 1.2.4
Copyright notice:
Software: AndroidX Activity 1.1.0
Copyright notice:
Copyright 2019 The Android Open Source Project
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Lifecycle 2.2.0
Copyright notice:
Copyright (C) 2017 The Android Open Source Project
Copyright 2019 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX LocalBroadcastManager 1.0.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Vectordrawable 1.1.0
Copyright notice:
Copyright (C) 2015 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: viewpager2 1.0.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Loader 1.0.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Slidingpanelayout 1.0.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: guava 9999.0-empty-to-avoid-conflict-with-guava
Copyright notice:
License: Apache License V2.0
Please see above.
Software: disklrucache 4.11.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Drawerlayout 1.0.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX CoordinatorLayout 1.1.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: annotations 4.11.0
Copyright notice:
License: BSD 2-Clause License
BSD Two Clause License
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Software: guava 1.0.1
Copyright notice:
License: Apache License V2.0
Please see above.
Software: material 1.1.0
Copyright notice:
Copyright (C) 2016 The Android Open Source Project
Copyright 2017 The Android Open Source Project
Copyright 2019 The Android Open Source Project
Copyright 2018 The Android Open Source Project
Copyright (C) 2019 The Android Open Source Project
Copyright (C) 2015 The Android Open Source Project
Copyright (C) 2017 The Android Open Source Project
Copyright (C) 2018 The Android Open Source Project
Copyright 2020 The Android Open Source Project
Copyright (C) 2020 The Android Open Source Project
Copyright (C) 2014 The Android Open Source Project
License: Apache License V2.0 Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Please see above.
Software: AndroidX Constraintlayout 2.0.4
Copyright notice:
Copyright (C) 2016 The Android Open Source Project
Copyright (C) 2015 The Android Open Source Project
Copyright (C) 2017 The Android Open Source Project
Copyright (C) 2018 The Android Open Source Project
Copyright (C) 2020 The Android Open Source Project
Copyright (C) 2019 The Android Open Source Project
Copyright 2019 The Android Open Source Project
Copyright (C) 2011 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Navigation 2.3.1
Copyright notice:
License: Apache License V2.0
Please see above.
Software: gson 2.8.6
Copyright notice:
Copyright (C) 2008 Google Inc.
Copyright (C) 2011 Google Inc.
Copyright (C) 2018 The Gson authors
Copyright (C) 2017 The Gson authors
Copyright (C) 2010 The Android Open Source Project
Copyright (C) 2012 Google Inc.
Copyright (C) 2010 Google Inc.
Copyright (C) 2014 Google Inc.
Copyright (C) 2009 Google Inc.
License: Apache License V2.0
Please see above.
Software: greendao-api 3.3.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Print 1.0.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Documentfile 1.0.0
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Asynclayoutinflater 1.0.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Dynamicanimation 1.0.0
Copyright notice:
Copyright (C) 2017 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: Google Android ExoPlayer 2.12.2
Copyright notice:
License: Apache License V2.0
Please see above.
Software: AndroidX Transition 1.2.0
Copyright notice:
Copyright (C) 2017 The Android Open Source Project
Copyright 2019 The Android Open Source Project
Copyright (C) 2016 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: greenDao 3.3.0
Copyright notice:
Copyright (C) 2011-2016 Markus Junginger, greenrobot (http://greenrobot.org)
Copyright 2011-2016 by Markus Junginger / greenrobot.org
Copyright (C) 2011 Markus Junginger, greenrobot (http://greenrobot.de)
Copyright (C) 2011-2015 Markus Junginger, greenrobot (http://greenrobot.de)
License: Apache License V2.0
Please see above.
Software: AndroidX RecyclerView 1.1.0
Copyright notice:
Copyright (C) 2013 The Android Open Source Project
Copyright (C) 2015 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Core 1.3.1
Copyright notice:
Copyright (C) 2011 The Android Open Source Project
Copyright (C) 2018 The Android Open Source Project
Copyright 2015 The Android Open Source Project
Copyright (C) 2016 The Android Open Source Project
Copyright (C) 2015 The Android Open Source Project
Copyright 2018 The Android Open Source Project
Copyright (C) 2019 The Android Open Source Project
Copyright (C) 2013 The Android Open Source Project
Copyright (C) 2009 The Android Open Source Project
Copyright 2017 The Android Open Source Project
Copyright (C) 2012 The Android Open Source Project
Copyright (C) 2017 The Android Open Source Project
Copyright (C) 2014 The Android Open Source Project
Copyright 2019 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: AndroidX Legacy 1.0.0
Copyright notice:
¹¤¾ßÎ´É¨Ãèµ½ÈÎºÎcopyrightÐÅÏ¢
License: Apache License V2.0
Please see above.
Software: okio 1.17.5
Copyright notice:
Copyright (C) 2018 Square, Inc. and others.
Copyright (C) 2015 Square, Inc.
Copyright (C) 2016 Square, Inc.
Copyright (C) 2018 Square, Inc.
Copyright (C) 2019 Square, Inc.
Copyright 2014 Square Inc.
Copyright (C) 2017 Square, Inc.
Copyright 2013 Square, Inc.
Copyright (C) 2014 Square, Inc. and others.
Copyright (C) 2016 Square, Inc. and others.
Copyright (C) 2014 Square, Inc.
License: Apache License V2.0
Please see above.
Software: AndroidX Cursoradapter 1.0.0
Copyright notice:
Copyright 2018 The Android Open Source Project
License: Apache License V2.0
Please see above.
Software: glide 4.11.0
Copyright notice:
Copyright (c) 2013. Bump Technologies Inc. All Rights Reserved.
License: Apache License V2.0
Please see above.
Written Offer
This product contains software whose rights holders license it on the terms of the GNU General Public License, version 2 (GPLv2) and/or other open source software licenses. We will provide you and any third party with the source code of the software licensed under an open source software license if you send us a written request by mail or email to the following addresses:
<EMAIL_ADDRESS>detailing the name of the product and the firmware version for which you need the source code and indicating how we can contact you.
Please note you need to make a payment before you obtain the complete Corresponding Source Code from us. For how much you will pay and how we will deliver the complete Corresponding Source Code to you, we will further discuss it by mail or email.
This offer is valid to anyone in receipt of this information.
This offer is valid for three years from the moment we distributed the product or firmware .


nmap -n -Pn -sS -p- --max-retries 0 --min-rate 1000 <LHOST>
do a quick SYN scan, don't retry. This requires root, but other types of scans shouldn't.
Use TCPdump to verify what reaches LHOST


Reaction time test shows if you're as alert as an athlete, OAP or drunk person
Hillarys has developed the reaction time test, which reveals whether you’re as alert as an athlete, a well-rested person, a drunk person or an elderly person
by Shivali Best, https://www.facebook.com/shivalibestjournalist/With Christmas just 36 days away now, your diary is likely getting filled up with late night festivities.
These late nights can play havoc with the amount of sleep you get, and now a new test could shed light on the effect this sleep deprivation could have on your reaction times.
Hillarys has developed the reaction time test, which reveals whether you’re as alert as an athlete, a well-rested person, a drunk person or an elderly person.
Lucy Askew, a spokesperson for Hillarys, said: “Losing a little sleep here and there might not seem a big deal, but it dramatically affects our reactions, with studies showing that a lack of rest can have more of an impact on our reaction times than alcohol.
“Anyone in their mid-twenties scoring an unusually large number of scores describing their reaction times as that of an ‘OAP’ might want to consider going to bed a little earlier tonight and repeating the quiz again tomorrow!”
The test challenges you to watch an on-screen cannon animation, and click your mouse or press any button on your smartphone or keyboard as soon as Santa is fired out of a cannon.
Based on how quickly you react, you’ll then be given a rating as an athlete (up to 0.155ms), a well-rested person (0.156 to 250ms), a tipsy person (250 to 280ms) or an elderly person (280ms upwards).
So far, over 3,028 people have tested their reaction times on the site.
The results have revealed that only 8.79% are as alert as an athlete, while 24.01% are as alert as a well-rested person.
Meanwhile, 14.33% are as alert as a drunk person, and the majority (29.47%) have the reaction times of an OAP!
To try the reaction test yourself, click here.


Alabama vs. Western Carolina: Game Time, Spread, Channel, Announcers
by Chris RosvoglouAlabama quickly found itself back in the win column last weekend, but it came at a price. Tua Tagovailoa went down with a season-ending hip injury against Mississippi State.
Losing a player as talented as Tagovailoa is certainly a tough blow for the Crimson Tide. However, the selection committee still has Alabama in the top five of the College Football Playoff.
It’ll be on Alabama to show the committee it can still be a dominant team without its star quarterback. That means Mac Jones will have to be impressive in the team’s final two games.
Jones will start this Saturday against Western Carolina, which should give him a nice chance to build up confidence before the Iron Bowl.
Western Carolina is just 3-8 this season as is coming off a double-digit loss to Samford.
Here are the details for the Alabama-Western Carolina game:
Game Time: 12:00 p.m. ET
Channel: ESPN
Spread: Alabama -57
Over/Under: 61
Announcers: Roy Philpott, Kelly Stouffer
Even without Tagovailoa this weekend, the Crimson Tide should take care of business against the Catamounts.
Jones doesn’t have that much experience as the starting quarterback, but he’ll have plenty of weapons at his disposal. Jerry Jeudy, Devonta Smith and Henry Ruggs III should have plenty of chances to get loose against Western Carolina’s secondary.
Do you think Alabama will look dominant in Week 13?


Select your team to win the tournament ({{group.winnerPoints}} points) and the goal king ({{group.goalKingPoints}} points). Guessing the
correct amount of goals in a match wields {{group.teamGoalPoints}} points, and if the score is exactly correct it is
{{group.exactScorePoints}} points. Guessing the winner correctly will also wield {{group.correctWinnerPoints}} points. Each match score
can be edited right up to the moment the game begins.


Experience
Undergraduate Research Assistant | May 2018 - July 2018
Click here for an overview of our project.Worked with Dr. Chakra Chennubhotla on ciliary motion analysis. Used computer vision and machine learning techniques, namely unsupervisped learning, to discover new motion patterns for ciliary motion.
Undergraduate Teaching Assistant | August 2017 - Current
UTA for Department of Computer Science at the University of Pittsburgh. Led recitiations of around 25 students for CS0007 Intro to Programming with Java and CS0445 Data Structures.
Coursework
- Calculus 1 & 2
- Object Oriented Programming with Java
- Discrete Mathematics
- Data Structures & Algorithms
- Computer Organization & Assembly Language
- System Software
- Intro to Theoretical Mathematics
- Applied Statistics
- Parallel Programming
- Computer Vision
- Intro to Operating Systems
Programming Languages
- Java
- C
- Python
- Matlab
APIs and Libraries
- OpenMP
- CUDA
- MPI
- Scikit-learn


Weather Dashboard
Search for a City:
Search
Austin
Chicago
New York
Orlando
San Francisco
Seattle
Denver
Atlanta
5-Day Forecast:


#include <RRsrcMgr.h>
Public Types | |
| typedef bool(* | Parser )(const SBscToken *&curTok, const BscArrayTable &arrayTable, const BscVarTable &varTable, tstring &errors) |
Public Member Functions | |
| RRsrcMgr () | |
| ctor & dtor | |
| ~RRsrcMgr () | |
| void | RegisterScriptParser (const tstring &keyword, Parser parser) |
| public methods | |
| bool | LoadScript (const UPath &fileName, const tstring &defKeyword, tstring &errors) |
| const UPath & | GetRecentScriptName () const |
| template<typename _T > | |
| URef< _T > | Find (const UPath &fileName) |
| Finds a resource that has already been loaded. |
Definition at line 33 of file RRsrcMgr.h.
| typedef bool( * RRsrcMgr::Parser)(const SBscToken *&curTok, const BscArrayTable &arrayTable, const BscVarTable &varTable, tstring &errors) |
| RRsrcMgr::RRsrcMgr | ( | ) |
ctor & dtor
the file manager must be started before the resource manager!
make sure the resource manager hasn't already been started.
Definition at line 42 of file RRsrcMgr.cpp.
| RRsrcMgr::~RRsrcMgr | ( | ) |
Definition at line 54 of file RRsrcMgr.cpp.
Finds a resource that has already been loaded.
template functions
Definition at line 83 of file RRsrcMgr.h.
| const UPath& RRsrcMgr::GetRecentScriptName | ( | ) | const [inline] |
returns the script currently being parsed (or the last script parsed). This is available mainly so that parsers know the name of the file they're parsing.
Definition at line 53 of file RRsrcMgr.h.
loads a script file. The default keyword is used if a keyword is not present. Returns true on success. If noScriptName is false, then the name of the script file will be prepended to the name of each resource created. The script file name and the resource name will be separated with a ':'.
create the array table.
note that we cannot create file local variables, so we can simply grab a const reference to the global variable table.
ensure that a default keyword was specified.
read in the file data and pass it to the lexer.
return an error if we could not load!
get the file data.
create a lexer to build the token stream.
go through each token and determine what kind of resource needs to be created.
we have an array.
loop again.
we have a keyword.
no keyword specified, so assume the default keyword.
set the recent script name and create the resource.
Create the resource.
make sure we don't keep a copy of the file's data around.
build the error message.
set the output string.
make sure we don't keep a copy of the file's data around.
success!
Definition at line 75 of file RRsrcMgr.cpp.
public methods
registers a script parser. When an 'object' is encountered, it will be parsed with the appropriate callback.
Definition at line 66 of file RRsrcMgr.cpp.


|
Unity Overlay Toolkit
|
This class is used for lists of structs that are synchronized from the server to clients. More...
Public Member Functions | |
| new void | AddInternal (T item) |
| T | GetItem (int i) |
| Public Member Functions inherited from UnityEngine.Networking.SyncList< T > | |
| delegate void | SyncListChanged (Operation op, int itemIndex) |
| A delegate that can be populated to recieve callbacks when the list changes. More... | |
| void | InitializeBehaviour (NetworkBehaviour beh, int cmdHash) |
| Internal function. More... | |
| void | HandleMsg (NetworkReader reader) |
| void | Add (T item) |
| Same as List:Add() but the item is added on clients. More... | |
| void | Clear () |
| Same as List:Clear() but the list is cleared on clients. More... | |
| bool | Contains (T item) |
| Determines whether the list contains item item. More... | |
| void | CopyTo (T[] array, int index) |
| Copies the elements of the SyncList<T> to an Array, starting at a particular Array index. More... | |
| int | IndexOf (T item) |
| Determines the index of a specific item in the SyncList<T>. More... | |
| void | Insert (int index, T item) |
| Same as List::Insert() but also inserts into list on clients. More... | |
| bool | Remove (T item) |
| Same as List:Remove except removes on clients also. More... | |
| void | RemoveAt (int index) |
| Same as List:Remove except it removes the index on clients also. More... | |
| void | Dirty (int index) |
| Marks an item in the list as dirty, so it will be updated on clients. More... | |
| IEnumerator< T > | GetEnumerator () |
| Returns an enumerator that iterates through the SyncList<T>. More... | |
Protected Member Functions | |
| override void | SerializeItem (NetworkWriter writer, T item) |
| This is used to write a value object from a SyncList to a stream. More... | |
| override T | DeserializeItem (NetworkReader reader) |
| This method is used when deserializing SyncList items from a stream. More... | |
Properties | |
| new ushort | Count [get] |
| Properties inherited from UnityEngine.Networking.SyncList< T > | |
| int | Count [get] |
| Returns the number of elements in this SyncList<T>. More... | |
| bool | IsReadOnly [get] |
| Reports whether the SyncList<T> is read-only. More... | |
| SyncListChanged | Callback [get, set] |
| The delegate type used for SyncListChanged. More... | |
| T | this[int i] [get, set] |
This class is used for lists of structs that are synchronized from the server to clients.
To use SyncListStruct, derive a new class with your struct as the generic parameter.
| T |
| T | : | struct |
|
inline |
|
inlineprotectedvirtual |
This method is used when deserializing SyncList items from a stream.
| reader | Stream to read from. |
Implements UnityEngine.Networking.SyncList< T >.
|
inline |
|
inlineprotectedvirtual |
This is used to write a value object from a SyncList to a stream.
| writer | Stream to write to. |
| item | Item to write. |
Implements UnityEngine.Networking.SyncList< T >.
|
get |


_Basic Settings_
_Members_
_Groups_
_Associated Projects_
_ReferenceFiles_
_Remote
_Metadata Templates_
_Delete Project_
This should not be displayed. It should be overwritten by the specific page.


WITNESS LIST Human Services Committee March 1, 2005-12:00A CPS Reform For: Holman, Nancy (Texas Alliance of Child and Family Services) Senske, Dr. Kurt (Lutheran Social Services) On: Coale, Jeannie (Department of Family and Protective Services) Foster, Mike (Caring Family Network) Hartman, Robert (DePelchin Children's Center) Heiligenstein, Anne (Health and Human Services Commission) James, Joyce (Department of Family and Protective Services) McClure, Madeline (TexProtects; Texas Association for the Protection of Children & Prevent Child Abuse Texas) McCown, F. Scott (Center for Public Policy Priorities) McLean, William Paul (Texas Association for the Protection of Children & Prevent Child Abuse Texas) Pearson, Travis (Texas Association of Child Placing Agencies) Spiser, Diana (Department of Family and Protective Services) Zelasko, Terri (Texas Foster Family Association) Registering, but not testifying: On: Cockerell, Carey (Department of Family and Protective Services)


Give your products the presentation they deserve with Stack's uniquely presents e-commerce styling.
Forget handling cumbersome mockups. Get building immediately in the comfort of your browser.
Stack's diverse blog styles make your written-content shine and your user's smile
Stack comes with integration for Mail Chimp and Campaign Monitor forms - ideal for launching modern marketing campaigns
The regular license allows you to customize, store and even host your website using your platform
Value Purchase Now


RSPEC
Sep 10, 2015
I've been blessed enough to done some contract work for a company last week. It was great learning opportunity and meeting interesting people. My task was creating newsfeed for the site. It was rails app using haml, scss and coffee script. I wasn't familiar with haml and scss but it was rails app so I wasn't so intimidated. When I complete the feature and push to the master branch I realized that I forget to write rspec.
Before getting into details about RSpec, two things always taken care of. One is setting or knowing test environment config and simply how to run rspec.
For instance, the test database need to be set up.
What it actually does is that it runs any pending migrations on the development environment and updates db?schema.rb The rake db:test:load recreats the test database from the current db/schema.rb. On subsequent attemps, it is a good idea to first run db:test:prepare, as it first checks for pending migrations and warns you appropriately. Basically it handles cloning the database so you don't have to run the migrations against test to update the test database. For more information, check here.
The second important thing is how to run the spec.
The following commend will run every rspec you have under the rspec directory.
I don't have much experience in writing test specs but I never consider spec is difficult. As anything else, once you learn it, it will be piece of cake. Let's face it. No one will complain about quality of the test code and it will be just fine as long as it covers 100% test subject. WRONG! Completely Wrong!
When they review my code, they put special attention to rpec and told me that these specs are not only insufficient but completely wrong. Here is the example of controller specs I wrote
This is seriously wrong. This test is actually using ActiveRecord's 'delete' function rather than controller's 'delete' function. Here is what we can test for delete function:
The rails 3 will provide RSpec scaffolds and the generated controller specs pass along session parameters:
To read more about How To: Test controllers with Rails 3 and 4 (and RSpec), click here
For more information, github rspec section has much useful information than others (like relish).


VSL // Tech Talk
* Who needs a Hyperloop? Japan’s new train
today’s Very Short List:
tech 24 Nov 2014
Sahil Lavingia is the founder & CEO of Gumroad
Subscribe
* It’s great to see free software being supported, and crazy that one individual,
* Facebook is being really honest
http://link.nyobserver.com/516ca68465217dc6e1b9a3a620l5c.25hb/TvnrKi0WTdwTHwxwC215c
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a620l5c.25hb/UHyHCJsf7NZSKXrPC99db
Subscribe
Forward
My Account
Unsubscribe
culture 19 Nov 2014
Lauren Cerand slows down, mindfully and meaningfully.
culture 17 Nov 2014
VSL editor Alexa Jaccarino meets some behind-the-scenes makers.
food 14 Nov 2014
Valentina Rice cooks small-batch family-style.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2014
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


ui.scrollbar
innovaphone.ui.ScrollBar(container)
- getContent()
-
returns the content node of the scrollbar
- appendContent(element)
-
appends the element to the content node
- removeContent(element)
-
removes the element from the content node
- clearContent()
-
removes all elements from the content node
- insertContentBefore(element, refelement)
-
insert element before refelement
- resize()
-
resizes the scrollbar to fit to the content
- scrollToBottom()
-
scrolls to the bottom
- scrollIntoView(element)
-
scrolls until the element is inside the view
- setWidth(width)
-
sets the width of the scrollbar content. This might be neccessary if the content does not have a fixed width.
- setMaxHeight(height)
-
sets the maximum height of the scrollbar content. This might be neccessary if you can't determine the height.
- setOnScroll(function)
-
Set a onScroll event handler. The onScroll handler is called with the scrollTop value as argument


Working and Development First ordered list item Another item Unordered sub-list. Actual numbers don’t matter, just that it’s a number Ordered sub-list And another item. ⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we’ll use three here to also align the raw Markdown).
⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.


As the founder of Drive to Create, award-winning designer Aaron Kaufman is committed to using his knowledge of branding and marketing to educate non-profits. He probably would have won a ton of competitions by now, too, if he did that sort of thing.
Storytelling with passion and personality has been the ongoing mission of award-winning filmmaker Brian Marks. With exposure to a wide-range of projects, his motivation lies in the idea that everybody’s story is their own.
Do you have a rad idea or topic for a future show? Please contact us!


Marvel and the Nazis
The drama of World War II also played itself out in the adventures of the golden-era comic books. Many of Captain Marvel's adventures were based on thwarting nefarious plots hatched by Nazis and Nazi sympathizers. The most prominent of Captain Marvel's opponents in this regard was certainly Captain Nazi.
Captain Nazi was a genetically altered "super soldier" given superhuman strength, stamina, and the ability to fly. Acting as a Adolph Hitler's champion, Captain Nazi was sent personally by the fuhrer to do battle with America's superheroes including both Captain Marvel and Bulletman. He made in last appearance in a Fawcett comic book in 1944 but was later revised his role in several DC Comics reboots of the Captain Marvel franchise.
The Monster Society of Evil was home to several infamous characters from the Second World War. Adolph Hitler, Benito Mussolini and Tojo. were charters members, along with other prominent Nazis and war criminals. One of the schemes hatched by the society involved using Captain Nazi to steal magic fortune-telling pearls from an Egyptian princess. Another plot saw the society attempting to use a giant cannon to blow holes in various countries across the world. In all of these schemes, Captain Marvel was always there to save the day for the freedom-loving countries of the world.


Introduction
One of the best things to come out of the modern DevOps movement is the aggressive push for “feature switches” (also known as “feature flags” or “feature toggles”). At All Around the World , we strongly recommend them for our clients and sometimes we implement them, but I’m still surprised that many companies don’t use them. They’re dead-simple to build and they’re a powerful tool for site reliability. Unfortunately, many articles discuss how to build them or use them, but best practices are neglected. So we’ll skip the implementation and instead focus on using feature switches effectively.
Note: the discussion below refers to “sites” because this is in the context of websites. Obviously, it doesn’t have to be.
A couple of decades ago when I was working for a small web-development firm in Portland, Oregon, we released a new version of our software that had a critical bug in a new feature. The bug was serious enough that it took down the entire web site. We had to revert to an earlier version (from CVS, the good ‘ol days!) and redeploy the web site. Our largest client’s site was down for an hour and that was not good. Had we used feature switches, we could simply have turned the feature off and the client might not have even noticed.
Note that you don’t need to implement everything I suggest in your first pass; you just need to get up and running and comfortable with feature switches. Once you do, you can better understand the additional tooling support needed for your use case.
Programming A New Feature
For the developer, using feature switches is straight-forward. Imagine that you always show a list of categories for products you sell, but you’re fetching it from the database every time. Developers argue for caching the list, but sometimes it changes and arguments over cache invalidation stall development. Finally, an agreement is reached, but you don’t want to roll the new functionality out blindly, so you use a feature switch. Here’s some pseudo-code in Perl.
my $categories;
if ( feature_on('cached_categories') ) {
$categories = $cache->category_names;
}
else {
$categories = $app->category_names;
}
Side note: the above is shown for simplicity. In reality,
$app
variables often imply some kind of global state and if it’s mutable, that can be dangerous, but we’re keeping it simple.
In the above, if the cached_categories
feature is on, we fetch features from
the cache. If it’s not, we fetch it from the database. There are numerous ways
this can be done on the front-end, but we’ll skip those for the purposes of this
article.
Why would you bother to use a feature switch for the above? You’ve tested it. The customer won’t see a difference. You know it works. Right?
No, you don’t. What if your cache invalidation doesn’t work quite as expected? What if your cache isn’t loaded? What if your brand-new caching system isn’t as reliable as you thought and you actually need the following?
my $categories;
if ( feature_on('cached_categories') ) {
$categories = $cache->category_names || $app->category_names;
}
else {
$categories = $app->category_names;
}
Sound paranoid? One definition of a good programmer is someone who looks both ways before crossing a one-way street.  How?
Use Control Panels
Typically, a good system for feature switches should have a web-based control panel that lists each feature and shows, amongst other things:
- The name of the feature
- A description of what the feature is for
- The current on-off state
- Whether the feature is permanent (more on that later)
- An “on-off” history of the feature
The “on-off” history is simply an audit log. At minimum, you want:
- Who toggled the feature
- The date it was turned on/off
- Why it was turned on/off
- Possibly the release-tag of the software
An audit log of the history can be immensely useful if you want to turn on a feature that was turned off for several months and you don’t remember why. For companies that make heavy use of feature switches, this can be invaluable. If your company is structured well enough, you might even want to include what team the feature belongs to, or what departments are responsible for it. Because so many companies are structured differently, it’s hard to give clear guidance without knowing the specifics.
Don’t Use Control Panels
Yes, feature switches are usually used via control panels and they make it easy to turn features on and off, but there are caveats. It sometimes happens that enabling a new feature causes every page on your site to crash, taking down the control panel! Oops. Having a control panel running on a dedicated server, separate from the servers using the features can help to mitigate this. Having command-line tools to turn features on or off can also be useful. Do not rely on control panels alone. Nothing’s worse than having everything web-based and losing web access.
Permanent Features
One thing often overlooked for features switches is that some of them should be permanent. Imagine that your site goes viral and you’re hitting unprecedented amounts of load and you’re struggling. Some sites handle this by having optional features on the site wrapped in permanent feature switches. If your site is struggling under a heavy load, being able to toggle off optional features such as autocomplete or “related searches” that aren’t critical can help you manage that load. Your site experience degrades gracefully instead of simply crashing.
“Sampled” Switches
Before turning on a switch, it’s often useful to turn it on only for a subset of requests. For example, you might only want 10% of users to experience it. If a feature turns out to be disastrous, this can limit the impact. However, this can be odd for someone who sees a new feature, refreshes a web page, and that feature disappears because they are no longer in the randomly selected subset. Making such features persistent per user can be tricky, though. Do you rely on cookies? Your mobile app may not use cookies. Or someone might switch browsers, such as switch from their work to their personal computer.
Don’t stress about this (unless you’re doing A/B testing). “Sampled” features are short-lived. As feature switches are primarily a site reliability tool, the limited sample run is just there to avoid disaster and you should go 100% as soon as is feasible.
Naming Conventions
For one of our clients, they have no naming convention for their features, but
they use features heavily. We wrote code to scan our CODEOWNERS
file to dump a
list of all features in our code in order to regularly monitor them. This
allowed us to do heavy cleanup when we found many features that had been running
successfully for years, but were never cleaned. Even this was limited because
many of “our” features were scattered in other parts of the codebase.
To deal with this, establishing a naming convention early on can make it easier
to search for features. Are you on the advertising team and you have a new
feature offering a discount for first-time buyers? You use ADV-
as a prefix:
ADV-FIRST_TIME_BUYER
. Searching for all features prefixed with ADV-
gives
you an overview of the features your team has running.
When you identify a naming convention, do not put ticket numbers in the feature name. Many companies switch ticketing systems and old ticket numbers become useless. Instead, having a “Ticket URL” field on your form when you create a feature allows others to click through and understand the intent of that feature.
Operations
Errors
If you dump out rich error data to error logs, include a list of running
features, sorted by last start time. Frequently, new errors show up due to
recently introduced features and this makes it much easier to debug, especially
if first time buyers sometimes can’t place orders and you see the
ADV-FIRST_TIME_BUYER
feature was just switched on. This makes life much
easier.
Communications
Let other teams know when you’re about to start a new features, especially your site reliability engineers (or equivalent). Give them a heads-up about the intent of the feature and what to look for if their are issues. Such communication can allow tracking down issues faster.
Simplicity
Feature switches are a site reliability tool. Keep them simple. You don’t want your site to break because someone made the feature switch tool too complicated. This is one of the reasons I prefer features to be “booleans” (in other words, “on or off”). Some recommend feature tools that allow you to do this:
my $categories;
if ( 'enhanced' eq feature_on('SOME_FEATURE') ) {
$categories = $app->categories_enhanced;
}
elsif ( 'expanded' eq feature_on('SOME_FEATURE') ) {
$categories = $app->categories_expanded;
}
elsif ( feature_on('SOME_FEATURE') ) {
warn "Unknown feature category for SOME_FEATURE";
}
$categories //= $app->category_names;
Does the above start to look complicated? Well, kinda. If you allow more than
just “on” or “off”, you need to check for the case where the feature value
doesn’t match expectations. Maybe someone added a new value to the feature?
Maybe expanded
was actually expandable
and you misspelled it in your code.
By allowing these multiple values, you’re complicating code that’s a site
reliability tool.  Feature switches are there to
make life easier. Don’t overthink them.
Clean Features Regularly
Aside from “permanent” features that you want to always be able to switch off, it’s important to regularly clean features. Otherwise, you get into messes like this:
if (feature_on('FEATURE_1')) {
# do something
if (feature_on('FEATURE_2')) {
# do something else
}
elsif (feature_on('FEATURE_3') {
# do yet another thing
if (feature_on('FEATURE_4')) {
...
}
}
}
Not only does that make the code harder to read, you can wind up with cases where features work well on their own, but there could be some unknown interaction between conflicting features that won’t be noticed unless you have the right combination of features toggled on or off. This is miserable to debug.
Don’t Check Features at Compile=Time
This one is a subtle trap. Feature switches are designed to allow you to quickly turn a feature on or off while the system is still running. However, if your code that checks the feature does so too early and not at runtime, you may find that you can’t turn your feature on or off! Here’s an example in Perl:
package Some::Package;
sub import ($class) {
if ( feature_on('MY_COOL_FEATURE') ) {
...
}
}
# elsewhere
package Another::Package;
use Some::Package;
...
In the above, the use Some::Package
statement will cause Some::Package
to
call import
and that will check the feature switch, but that will happen only
once. Toggling the feature switch later will likely not affect the code while
Another::Package
is resident in memory.
Worse, if some other code is loaded later, but the feature switch has been toggled, you may find that different parts of your codebase do not agree on whether or not a feature is running. This is not a good place to be.
Conclusion
Feature switches are an incredibly powerful site reliability tool which can often eliminate the need to redeploy your software if something goes wrong. This can improve your customer experience and dramatically cut costs. However, like any new system you implement, you want to take some time up front deciding how it will be used and what your best practices are.
You will probably find that the best practices you develop for your company differ from what I describe above. That’s OK. I’m not dogmatic. But planning for this in advance can give you greater confidence in pushing new code that might otherwise be cause for concern.
If you’d like top-notch experienced developers with decades of experience to come in and make your life easier, let me know. Our work at All Around the World , is focused on pragmatic development custom-tailored to client needs.


We are learning more about visitors to this website so we can continue to improve it. How would you best describe yourself?
Thank you for your feedback!


Class Configuration
Configuration
Namespace: Native5
Package: Native5
Category: Configuration
Copyright: <<<<<<< HEAD 2012 Native5. All Rights Reserved
License: attached NOTICE.md for details
Author: Barada Sahu<EMAIL_ADDRESS>======= 2013 Native5. All Rights Reserved
License: attached NOTICE.md for details
Author: Shamik Datta<EMAIL_ADDRESS>>>>>>>> release-0.2.0 Version: Release: 1.0
Link: Created : 27-11-2012 Last Modified : Fri Dec 21 09:11:53 2012
<<<<<<< HEAD Located at Native5/Configuration.php
======= Located at Native5/Configuration.php
>>>>>>> release-0.2.0
Package: Native5
Category: Configuration
Copyright: <<<<<<< HEAD 2012 Native5. All Rights Reserved
License: attached NOTICE.md for details
Author: Barada Sahu<EMAIL_ADDRESS>======= 2013 Native5. All Rights Reserved
License: attached NOTICE.md for details
Author: Shamik Datta<EMAIL_ADDRESS>>>>>>>> release-0.2.0 Version: Release: 1.0
Link: Created : 27-11-2012 Last Modified : Fri Dec 21 09:11:53 2012
<<<<<<< HEAD Located at Native5/Configuration.php
======= Located at Native5/Configuration.php
>>>>>>> release-0.2.0
Methods summary
public
|
#
<<<<<<< HEAD
__construct( mixed $configFile )
=======
__construct( mixed $applicationContext = null )
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|
|
public
|


Patching
CodeInstruction
The workhorse of a transpiler is the type CodeInstruction.
CodeInstruction
is an abstraction around the .NET Emit namespace. The idea is to abstract most of the specific things you can do in order to help multiple mods that patch/manipulate the same method to coexist. As such, specific instructions like "jump 4 instructions forward" are not possible and instead there are a couple of concepts that differ from the arguments that you know from the ordinary Emit arguments.
Every transpiler will receive a list of CodeInstruction
and is expected to return a modified list of CodeInstruction
. In addition, you can inject an ILGenerator into the transpiler to create one or more Label
and instances of LocalBuilder
which represent local variables.
Most arguments from Emit() are used in the same way:
- Emit takes an OpCode and so does CodeInstruction
- Operands are mostly the same:
- Type
- FieldInfo,
- MethodInfo,
- ConstructorInfo,
- Int64/Int32/Int16/Single/Double/String/Byte
Some things though will be restricted:
- Operands of jumps cannot be numeric, use
Label
instead SignatureHelper
support is experimental at best- You should avoid using indices when referring to local variables
Do not use ILGenerator.Emit()
. While it does create IL code, Harmony is an abstraction over it. Harmony takes the returned IEnumerable<CodeInstruction>
and after some manipulation, calls Emit()
itself. ILGenerator
should only be used for its methods to define blocks and labels. See Labels and Try/catch boundaries for more information.
In general, it is advised to reuse and to copy existing operands for things like labels and local variables. Search for a significant and unique location in the existing codes and grab the operand from there. This will allow you to refer to local variables and labels in a change-resistant way.
Local variables
The instructions that your transpiler will receive will contain existing local variables and Harmony will not alter the original operands of instructions. This means that you need to be prepared to deal with instructions that refer to local variables either with a number (like "2nd local variable") or with a LocalBuilder
object. A LocalBuilder object is an opaque representation of a local variable and you can create a new one using the DeclareLocal method for ILGenerator or copy the operand of an existing instruction.
Labels
All original labels (or those generated by a previous transpiling) are represented by a Label object. They are used in operands of a CodeInstruction
or in the labels
field (of type Label[]
) of it. When you want to create a jump, you specify the jump Opcode and the label as the operand. Then you append the label to the destinations labels.
To create a new label to jump to, use ILGenerator.DefineLabel()
and put that label into the labels
field of the target CodeInstruction
. Use that label as the argument for a jump opcode as described above.
Try/catch boundaries
When constructing methods with instructions, you need to specify the exception block boundaries. Harmony will automatically create the necessary meta information from them. Use the blocks
field of an instruction (of type ExceptionBlock[]
) to mark the different types of boundaries. They are named in correspondence to the actual names. Please note that filter blocks are unsupported because it's not possible to build them dynamically into a method as of now.
Convenience methods
To create, search and compare instructions, Harmony defines a number of extension methods on CodeInstruction
. Those methods make it easier to compare operands (which are defined as type object
) with specific values as well as to find specific instructions easier.
You will find more information about those methods in the API documentation.
Pitfalls
A common error is to remove instructions that contain labels or exception blocks without dealing with the corresponding pair. You end up with a dynamic method compile error because an instruction will want to jump to a label that is not assigned to any other instruction. Another common case is if you copy an existing instruction and thus copy the labels and blocks fields with it. You end up with multiple defined labels/block boundaries. Makes you you clear those or use proper duplication.
To avoid such cases, it is important to keep an eye on the labels
and blocks
fields. CIL is quite sensitive to undefined or duplicate labels. Normally it is enough to move the contents of those fields around if you insert new instructions. One of the typical cases is inserting a new instruction at a place and pushing the old one one index up thus moving the labels on that instruction with it. Moving the labels/blocks from the old instruction to the newly inserted one usually solves the problem.
In general, it is useful to turn the Harmony debug log output on (set Harmony.DEBUG = true
or use [HarmonyDebug]
). The log will contain all your generated instructions, labels and blocks so you can verify the error more informed.


Final Project¶
The end goal of this course is that you will be able to build your own software to solve your own problems. To work on this, you will write a program to solve a problem or answer a question from your own research.
I would rather you select an interesting problem than worry about your ability to code it. We’ll help you scope the problem with a project proposal. (The earlier you turn this in, the better we can help you succeed). Further, the last two weeks of class will be devoted working on your programs in class. If you put in significant effort, but it becomes clear your program won’t work, we will not dock you for this. Your program has to run and do something on the way to your final goal by the end of class; it does not have to achieve the stated goal.
Constraints¶
The problem should be real.
At the end of the day, the program you write should be useful.
The approach should be feasible. This means it is not only mathematically possible, but that you can make significant progress on the project in a few weeks of coding.
The problem should not be one you could solve better and faster using an existing software package. If you say you’re going to write a transcriptome assembler, I’m going to point you to Trinity (unless you have reason to believe you can do better!)
If you need data to develop the program (e.g. experimental images, sequencing runs, etc.) these should already have been collected.
Resources¶
Definitely use software packages that help you achieve your goals. If you’re analyzing colonies on a plate, use libraries like
PIL
andskimage
–don’t write your own image parser!Talk to your lab mates and PI about interesting problems and what software might be useful.
Talk to Luis and me about strategies. For example, if you want to classify stuff, machine learning might be the way to go. We’re not going to discuss it in detail in class, but Luis and I can point you to resources that will help you get started.
Project Ideas:¶
Counting/classifying something in an automated fashion
Fitting complicated model(s) to data
Squeezing every last drop of information out of a high-throughput experiment
Processing spectra
Pulling shapes out images
Tracking a particle in a video
Extract some cool feature out of an MD simulation
Machine learning to classify stuff
What you turn in:¶
Prospectus:¶
Due on (or, preferably, way before) Friday, May 8th.
It should have the following (bullet points are fine):
Identify a problem from your research that you will solve computationally.
Describe the strategy your program will use as a flow chart. (Can be hand drawn, as long as it’s legible).
Describe the data you will use to develop your program (for example: images from a control and treatment condition).
Describe how you will verify the program is actually doing what you want it to do.
Describe existing software that you can use to help solve the problem.
The point of the prospectus is to help you think through the project, not to create busy work. I will review the proposal and discuss it with you one-on-one during one of the in-class workshops. The earlier you bring it in, the earlier you can get rolling on the final project. If there are issues that should be addressed, I might ask for a revised version.
Final project¶
Due on Tuesday, June 9th.
You will turn in EITHER a url for a github repo OR a zipped directory containing your project. The repo/directory should have the following structure:
README.md
any python-y bits
demo.ipynb
data_files/
data_file_for_demo
data_file_for_demo
...
Assessment criteria:
Does the README.md file give sufficient information to know what the software does and how to use it?
Does the software actually solve a meaningful problem or analyze data in an interesting way?
Does
demo.ipynb
run without error?Does
demo.ipynb
effectively demonstrate the capabilities of the software?Is your python code well-documented and readable?


Here are some fun facts for you!
Click on the Present Tense Verbs in the following sentences.
1)
Hands and feet have more than half of the bones in human body.
2)
Albert Einstein’s eyes are preserved in a safe in New York.
3)
The brain weighs less than 2 percent of the body weight.
4)
A giraffe’s tongue is 21 inches long.
5)
Chocolates affect the functions of nervous system and heart in dogs.
6)
Sounds travel three times quickly in water than in surface.
7)
A bee visits more than 2 million flowers to produce a single pound of honey.
8)
Pigs are the fourth smartest animals on the planet.


Member Edit
Member Edit
Id:
First Name:
Last Name:
Email:
Phones:
Home:
Mobile:
Club Executive Position if any:
Address:
City:
Province,Country,PostCode:


Toolkit Quick Start
Apache ServiceComb Toolkit
Apache ServiceComb Toolkit is a contract-based microservice development toolkit. Provides the ability to convert and verify contracts, code, and documents, helping users quickly build microservice projects based on popular microservices frameworks and popular programming models, reducing the cost of microservices entry, enabling users to focus on business development, enhance refactoring and development efficiency.
Quick Start
1 Build tool and plugins from source
Build environment requirements
# Get the latest source code for toolkit from github
$ git clone https://github.com/apache/servicecomb-toolkit.git
$ cd toolkit
# Build package
$ mvn clean install
2 Use the toolkit-maven-plugin plugin
2.1 configuration
Configured in the pom file of the maven project
<plugin>
<groupId>org.apache.servicecomb.toolkit</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>0.2.0-SNAPSHOT</version>
<configuration>
<!-- Set to 'code' to resolve the current project. Set to 'contract' to resolve the contract file for the specified path.If not set, the default is 'code' -->
<sourceType>code</sourceType>
<!-- The type of the contract file is generated. If it is not set, the default is 'yaml' -->
<contractFileType>yaml</contractFileType>
<!-- The type of the generated document. If not set, the default is 'html' -->
<documentType>html</documentType>
<!-- The root directory to save microservice project,contract file and document. If it is not set, the default is the 'target' under the directory where the command is run -->
<outputDirectory>./target</outputDirectory>
<!-- Input contract file path. Valid when sourceType is set to 'contract', must be set -->
<contractLocation>./contract</contractLocation>
<!-- Checked contract file path. Valid when sourceType is set to 'contract', must be set -->
<sourceContractPath>./target/contract</sourceContractPath>
<!-- Sample contract file path, must be set -->
<destinationContractPath>./contract</destinationContractPath>
<!-- Generated microservice project configuration -->
<service>
<!-- Microservice type,can generated 'provider/consumer/all',the default is 'all' -->
<serviceType>all</serviceType>
<!-- Microservice project 'groupid',optional,the default is 'domain.orgnization.project' -->
<groupId>domain.orgnization.project</groupId>
<!-- Microservice project 'artifactId',optional,the default is 'sample' -->
<artifactId>sample</artifactId>
<!-- Microservice project 'artifactVersion',optional,the default is '0.1.0-SNAPSHOT' -->
<artifactVersion>0.1.0-SNAPSHOT</artifactVersion>
<!-- Microservice project 'packageName',optional,the default is 'domain.orgnization.project.sample' -->
<packageName>domain.orgnization.project.sample</packageName>
</service>
</configuration>
</plugin>
2.2 Command
# Generating contract, document and microservice project
mvn toolkit:generate
# Verify code and contract consistency
mvn toolkit:verify
2.2.1 Extract the microservice project, OpenAPI contract file and document from the code
Configuration(use default configuration if not set <configuration>
)
example
<plugin>
<groupId>org.apache.servicecomb.toolkit</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>0.2.0-SNAPSHOT</version>
<configuration>
<!-- Set to 'code' to resolve the current project. Set to 'contract' to resolve the contract file for the specified path.If not set, the default is 'code' -->
<sourceType>code</sourceType>
<!-- The root directory to save contract file and document. If it is not set, the default is the 'target' under the directory where the command is run -->
<outputDirectory>./target</outputDirectory>
<!-- Generated microservice project configuration -->
<service>
<!-- Microservice type,can generated 'provider/consumer/all',the default is 'all' -->
<serviceType>all</serviceType>
</service>
</configuration>
</plugin>
Run in shell
mvn toolkit:generate
When generating contracts from code,support for identifying restful interfaces written by the following annotations (class level)
RestController, RestSchema, RpcSchema, RequestMapping
When generating contracts from code,the restful interface method access modifier must be specified as public
2.2.2 Generate the microservice project and document from contract
Configuration(use default configuration if not set <configuration>
)
example
<plugin>
<groupId>org.apache.servicecomb.toolkit</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>0.2.0-SNAPSHOT</version>
<configuration>
<!-- Set to 'code' to resolve the current project. Set to 'contract' to resolve the contract file for the specified path.If not set, the default is 'code' -->
<sourceType>contract</sourceType>
<!-- The root directory to save contract file and document. If it is not set, the default is the 'target' under the directory where the command is run -->
<outputDirectory>./target</outputDirectory>
<!-- Input contract file path. Valid when sourceType is set to 'contract', must be set -->
<contractLocation>./contract</contractLocation>
<!-- Generated microservice project configuration -->
<service>
<!-- Microservice type,can generated 'provider/consumer/all',the default is 'all' -->
<serviceType>provider</serviceType>
</service>
</configuration>
</plugin>
Run in shell
mvn toolkit:generate
2.2.3 Contract verify
Configuration
example
<plugin>
<groupId>org.apache.servicecomb.toolkit</groupId>
<artifactId>toolkit-maven-plugin</artifactId>
<version>0.2.0-SNAPSHOT</version>
<configuration>
<!-- Set to 'code' to resolve the current project. Set to 'contract' to resolve the contract file for the specified path.If not set, the default is 'code' -->
<sourceType>code</sourceType>
<!-- Sample contract file path, must be set -->
<destinationContractPath>./contract</destinationContractPath>
</configuration>
</plugin>
Run in shell
mvn toolkit:verify
3 Use the toolkit cli
The executable jar package is located in the toolkit/cli/target/bin directory
$ java -jar toolkit-cli-{version}.jar help
3.1 Service contract generation microservice project
$ java -jar toolkit-cli-{version}.jar codegenerate -m ServiceComb -i swagger.yaml -o ./project -p SpringMVC
codegenerate Command option
- -m, –microservice-framework. Specify microservices framework, now supports ServiceComb.
e.g.：-m ServiceComb- -p, –programming-model. Specify programming model, optional JAX-RS, POJO, SpringMVC, SpringBoot.
e.g.：-p SpringMvc- -i, –input. Specifies contract files that follow the OpenAPI specification, supports yaml and json formats, and supports specifying local and network files.
e.g.：-i http://petstore.swagger.io/v2/swagger.json- -o, –output. Generated project code output path.
e.g.：-o ./project- –group-id. Specify the group id of the generated project.
e.g.：–group-id com.demo- –artifact-id. Specify the artifact id of the generated project.
e.g.：–artifact-id springmvc-example- –artifact-version. Specify the artifact version of the generated project.
e.g.：–artifact-version 1.0.0- –api-package : Specify the api package of the generated project.
e.g.：–api-package com.demo.api- –model-package : Specify the model package of the generated project.
e.g.：–model-package com.demo.model- -t, –service-type : Specify microservice type of generated microservice project. optional value is provider,consumer,all
e.g.：–service-type provider
3.2 Service contract generation document
$ java -jar toolkit-cli-{version}.jar docgenerate -i swagger.yaml -o ./document
docgenerate Command option
- -i, –input. Specifies contract files that follow the OpenAPI specification, supports yaml and json formats, and supports specifying local and network files. e.g：-i http://petstore.swagger.io/v2/swagger.json
- -o, –output. Document output path. e.g：-o ./document
- -f, –format. Specifies the output document format, now supports swagger-ui e.g：-f swagger-ui
3.3 Service contract style checking
$ java -jar toolkit-cli-{version}.jar checkstyle oas.yaml
or
$ java -jar toolkit-cli-{version}.jar cs oas.yaml
checkstyle Command argument
- <file> OpenAPI v3 spec yaml file
3.4 Service contract compatibility checking
$ java -jar toolkit-cli-{version}.jar checkcompatibility left-oas.yaml right-oas.yaml
or
$ java -jar toolkit-cli-{version}.jar cc left-oas.yaml right-oas.yaml
checkcompatibility Command argument
- <files> Two OpenAPI v3 spec yaml file


Table S84. Prediction of damaging effect on TNF
|
SNP |
Protein ID |
Amino acid |
Amino acid change |
SIFT |
PolyPhen2 |
PMut |
MutPred |
SNAP2 |
SNP&GO |
PANTHER |
|
rs1800620 |
NP_000585 |
233 |
A94T |
Damaging |
Benign |
Neutral |
0.183 |
Effect 63% |
Neutral |
Probably Benign |
|
rs3179060 |
NP_000585 |
233 |
H52N |
Damaging |
Benign |
Neutral |
0.730 |
Neutral |
Neutral |
Probably Benign |
|
rs4645843 |
NP_000585 |
233 |
P84L |
Damaging |
Benign |
Neutral |
0.100 |
Neutral |
Neutral |
Probably Benign |
|
rs11574936 |
NP_000585 |
233 |
I194N |
Damaging |
Probably Damaging |
0.9720 Pathological |
0.861 |
Effect 80% |
Disease |
Probably Benign |
|
rs35131721 |
NP_000585 |
233 |
P64L |
Damaging |
Benign |
Neutral |
0.341 |
Neutral |
Neutral |
Probably Benign |