1;(function () {// LICENSE_CODE ZON 2 'use strict'; /*jslint browser:true, es6:true, node:true, react:true*/function _typeof(o) {"@babel/helpers - typeof";return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {return typeof o;} : function (o) {return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;}, _typeof(o);} 3 var define; 4 var is_node = (typeof module === "undefined" ? "undefined" : _typeof(module)) == 'object' && module.exports; 5 if (is_node) 6 define = require('../../../../util/require_node.js').define(module, '..');else 7 8 define = self.define; 9 define([], function () { 10 var E = {}; 11 E.intro = [['div', 12 [['h1', 13 ["Hola Dictionary"], 14 { className: "title" }], 15 16 ['p', 17 [['b', 18 ["What does XXX mean?"]], " On your way becoming ", 19 20 21 ['a', 22 ["Hola Veteran"], 23 { href: "#veteran" }], " you will hear many terms, see many systems, have to understand a\n lot of Hola internal lingo.", 24 25 26 27 ['br'], " What does 'fix the ", 28 29 ['a', 30 ["BAT"], 31 { href: "#bat" }], "' mean? What is 'request a ccgi-b ", 32 33 34 ['a', 35 ["deploy"], 36 { href: "#deploy" }], "'? Here are the answers! "]], 37 38 39 40 ['p', 41 [" Improvements? Suggestions? email ", 42 ['a', 43 ["[email protected]"], 44 { href: "mailto:[email protected]" }], " "]]], 45 46 47 48 { className: "head" }]]; 49 50 E.data = [ 51 { 52 id: 'dict', 53 title: '', 54 tag: 'h2', 55 html: [], 56 "short": 'Hola Dictionary' 57 }, 58 { 59 id: 'bat', 60 title: "Build and Test (BAT): continuous integration", 61 tag: 'h3', 62 "short": "BAT", 63 html: [['p', 64 [['a', 65 ["BAT webpage"], 66 { href: "http://bat.hola.org", 67 'data-toggle': "tooltip", 68 'data-placement': "top", 69 title: "", 70 'data-original-title': "Link to internal Hola site (not public)." 71 }], 72 73 ['br'], " Originally built at ", 74 75 ['a', 76 ["Jungo"], 77 { href: "#jungo" }], " in 2001, and has been constantly upgraded and improved ever\n since. "]], 78 79 80 81 82 ['ul', 83 [['li', 84 ["checkout: cvs co"]], 85 86 ['li', 87 ["make: jake build system, compiling and building images"]], 88 89 ['li', 90 ["lint: ", 91 ['a', 92 ["js/json/perl/html/css"], 93 { href: "#zlint" }]]], 94 95 96 ['li', 97 ["unit-test: ", 98 ['a', 99 ["js (zmocha)"], 100 { href: "#zmocha" }], "/C (jtest)"]], 101 102 103 104 ['li', 105 ["upload: uploading results and images to ", 106 ['a', 107 ["fs"], 108 { href: "#fs" }]]]]]] 109 110 111 112 }, 113 { 114 id: 'bat-colors', 115 title: "BAT colors", 116 tag: 'h4', 117 "short": "BAT colors", 118 html: [['ul', 119 [['li', 120 ["GREEN - build and unit-tests passed successfully"]], 121 122 ['li', 123 ["ORANGE - build passed, but unit-test failed"]], 124 125 ['li', 126 ["YELLOW - build passed, but unit-test identified memory\n leak"]], 127 128 129 ['li', 130 ["RED - build failed"]], 131 132 ['li', 133 ["White strips background indicates a BAT request cycle"]]]]] 134 135 136 }, 137 { 138 id: 'bat-broken', 139 title: "What happen when BAT is broken?", 140 tag: 'h4', 141 "short": "BAT is broken", 142 html: [['ul', 143 [['li', 144 [" You don't necessarily have to fix it yourself;", 145 ['br'], " If possible, find out whose commit broke it and get them\n to fix it.", 146 147 148 ['br'], " Don't assume they already know it's broken.", 149 150 ['br'], " If it's a simple fix - fix it yourself "]], 151 152 153 ['li', 154 ["If you have to fix after someone else broke BAT, add that\n person to the commit message using ", 155 156 ['dfn', 157 ["NOTIFY:"]]]], 158 159 160 ['li', 161 ["If it's not easy to fix (requires thinking/debugging/cannot\n be fixed in 1 minute), revert the offending commit and\n notify whoever made it"]], 162 163 164 165 ['li', 166 [" Alternatively, if unit-test fails, disable the individual\n test using ", 167 168 ['code', 169 ["if (0) // XXX person"]], ".", 170 171 172 ['br'], " Use your judgment as to when to revert and when to disable\n the test.", 173 174 175 ['br'], " Disable when you know that the test itself is the problem,\n or that the breakage is not mission-critical. Always\n notify the person responsible for fixing the test. "]]]]] 176 177 178 179 180 181 }, 182 { 183 id: 'mdoc',
184 title: "Mongo Documents (Mdoc): our crm", 185 tag: 'h3', 186 "short": "Mdoc", 187 html: [['p', 188 [['a', 189 ["Mdoc webpage"], 190 { href: "http://mdoc.hola.org" }], 191 192 ['br'], " Originally built to control the ", 193 194 ['a', 195 ["Deploy"], 196 { href: "#deploy" }], " work flow, it quickly expanded to hold most of our procedures\n for R&D, Deploy, sales, IT and HR.", 197 198 199 200 ['br'], " The system is based on a mongo collection that stores data per\n every procedure. This allows us to control, verify, and\n investigate procedures, which we do daily. "]]] 201 202 203 204 205 }, 206 { 207 id: 'mdoc-worlds', 208 title: "Mdoc worlds", 209 tag: 'h4', 210 html: [['ul', 211 [['li', 212 ["Deploy - holds all the deploy procedures related to\n deploying new versions of our products and servers"]], 213 214 215 ['li', 216 ["CDN/Lum - holds all the CDN/Bright Data customers leads and\n specific procedures executed in this department"]], 217 218 219 ['li', 220 ["R&D - holds all the R&D training procedures"]], 221 222 ['li', 223 ["IT - holds all the IT installation procedures"]], 224 225 ['li', 226 ["HR - holds all our candidates files"]]]]] 227 228 229 }, 230 { 231 id: 'jdoc', 232 title: "Jdoc notification system", 233 tag: 'h3', 234 "short": "Jdoc", 235 html: [['p', 236 [" Jdoc stands for 'Jungo documents', and was originally built at\n ", 237 238 ['a', 239 ["Jungo"], 240 { href: "#jungo" }], " in 2001.", 241 242 243 ['br'], " The jdoc mechanism allows you, or anyone interested, to\n register notifications for a specific file or directory's\n content, based on our ", 244 245 246 247 ['a', 248 ["CVS"], 249 { href: "#cvs" }], ", and review every single commit.", 250 251 252 ['br'], " The jdoc file is located at the root directory of our\n development tree.", 253 254 255 ['br'], " This notification mechanism is being used to implement our ", 256 257 ['a', 258 ["async Review"], 259 { href: "#review-async" }], " and to support the co-ownership of a module or a file, by\n sending emails for every modification made to the file or\n directory's content. Note that you may use the ", 260 261 262 263 264 ['code', 265 ["NOTIFY:"]], " statement, in every commit you do, to manually activate this\n notification system for specific logins (people in Hola) you\n want to notify. "]], 266 267 268 269 270 271 ['pre', 272 ["NOTIFY: colin\nadded 'eval' to dropdown list\n"], 273 274 275 { className: "cm-s-default code bad has-popover", 276 cat: "bad", 277 'data-content': "BAD", 278 'data-original-title': "", 279 title: "" }], 280 281 ['pre', 282 ["added 'eval' to dropdown list\nNOTIFY: colin\n"], 283 284 285 { className: "cm-s-default code good has-popover", 286 cat: "good", 287 'data-content': "GOOD", 288 'data-original-title': "", 289 title: "" }], 290 291 ['p', 292 [" In case you would like to cancel the notification for the\n commit you are about to do, since your change is cosmetic or\n not important, use ", 293 294 295 ['code', 296 ["NOTIFY: cancel"]], " in the commit message. "]]] 297 298 299 300 }, 301 { 302 id: 'review', 303 title: "Peer Review: keeping our code quality\n top-notch", 304 305 tag: 'h3', 306 "short": "Review", 307 html: [['p', 308 [" Writing code is our profession, keeping it top-notch is our\n pleasure!", 309 310 ['br'], " As it's the main form of communication between the team,\n having our codebase perfectly consistent in style makes it\n easy for developers to read and modify each other's code.", 311 312 313 314 ['br'], " So, to increase the team's efficiency, we invest time in\n teaching everyone how to write code. The review process is\n our main tool for doing so. "]]] 315 316 317 318 319 }, 320 { 321 id: 'review-sync', 322 title: "Blocking sync Review: first review, then\n commit", 323 324 tag: 'h4', 325 "short": "Sync", 326 html: [['p', 327 [" During the ", 328 ['a', 329 ["bootcamp"], 330 { href: "#bootcamp" }
330], " and even few weeks after, your code will be reviewed by your ", 331 332 333 ['a', 334 ["mentor"], 335 { href: "#mentor" }], " in order to provide you with all the tools and guidelines on\n how we write our code. During this period, you'll do commit\n sessions together with your mentor until he is fully\n convinced you are prepared to write code like everybody else\n in Hola and commit it on your own.", 336 337 338 339 340 341 342 ['br'], " It's your responsibility to commit your code, and hence, you\n will probably call your mentor for a commit session once you\n are done with your task.", 343 344 345 346 ['br']]]] 347 348 }, 349 { 350 id: 'review-sync-precommit', 351 title: "Pre-commit\n checklist", 352 353 tag: 'h5', 354 "short": "Pre-commit checklist", 355 html: [['p', 356 [" You probably ask yourself what the mentor is checking during\n this session and whether your code is ready?", 357 358 ['br'], " Below is the checklist you need to do before answering\n yourself if your code is ready for a commit session: "]], 359 360 361 362 ['ul', 363 [['li', 364 ["Verify that all editors are closed before committing the\n code"]], 365 366 367 ['li', 368 ["Do ", 369 ['code', 370 ["cvsup -A"]], " on the root directory"]], 371 372 373 374 ['ul', 375 [['li', 376 [" Make sure all new files were added to the cvs using ", 377 ['code', 378 ["cvs add FILENAME"]], " (verify no new files marked with ", 379 380 381 ['code', 382 ["?"]], " exist).", 383 384 385 ['br']]], 386 387 ['li', 388 [" Verify that all modified (", 389 ['code', 390 ["M"]], ") files are files you want to commit.", 391 392 393 ['br'], " If there are files you want to commit later, duplicate\n the tree ", 394 395 396 ['code', 397 ["cp -a zon1 zon1.new"]], ", and make the current tree include exactly what you\n are going to commit. "]]]], 398 399 400 401 402 403 ['li', 404 [" Run ", 405 ['code', 406 ["zlint -m"]], " from the root directory (use ", 407 408 409 ['code', 410 ["cdr"]], " to move to the root directory). "]], 411 412 413 414 ['li', 415 [['a', 416 ["Coding conventions"], 417 { href: "#coding" }], ": re-read the code, and validate it is compliant. Noobs can\n use ", 418 419 420 421 ['code', 422 ["zlint -cm"]], " tool to assist ", 423 424 425 ['a', 426 ["locating convention mistakes"], 427 { href: "/dna/js_code#overview-tool" }], " (the tool is only 95% accurate - so you still must know\n all the rules!). "]], 428 429 430 431 432 ['li', 433 [" Run ", 434 ['code', 435 ["zdiff"]], " and re-check all your changes. Validate there are no\n 'debug leftovers' (console.log()...). "]], 436 437 438 439 440 ['li', 441 [" Its OK to do a ", 442 ['a', 443 ["partial solution/implementation"], 444 { href: "/dna#incremental-mvp" }], ", but in such cases ", 445 446 447 ['a', 448 ["comment in the code"], 449 { href: "/dna/js_code#comment-xxx" }], ", or add to the ", 450 451 452 ['a', 453 ["version_plan"], 454 { href: "#version_plan" }], " a description of what ", 455 456 457 ['a', 458 ["you will do later"], 459 { href: "/dna#individual-solve-half" }], ". "]], 460 461 462 463 ['li', 464 ["If this is a modification/removal, ", 465 ['a', 466 ["rgrep"], 467 { href: "#rgrep" }], " the whole tree to validate all related code is modified\n accordingly"]], 468 469 470 471 472 ['li', 473 ["Run all the ", 474 ['a', 475 ["unit-tests"], 476 { href: "#zmocha" }], " from the root directory"]], 477 478 479 480 ['li', 481 ["Make sure the tree can compile (", 482 ['code', 483 ["jmake cm release"]], ")"]], 484 485 486 487 ['li', 488 ["Test the feature and play with it in ", 489 ['a', 490 ["zlxc"], 491 { href: "#zlxc" }]]], 492 493 494 ['li', 495 [" Open questions? not perfect? not 100% ready for commit\n as-is? then ", 496 497 ['a', 498 ["don't call your mentor for a commit session"], 499 { href: "/dna#individual-noharm-peer" }], ".", 500 501 502 ['br'], " Rather, prepare all the list of questions in an editor,\n with your ", 503 504 505 ['a', 506 ["suggested solutions"], 507 { href: "/dna#individual-owner-complain" }], ", and call your mentor for a Q&A session.", 508 509 510 ['br'], " Later on, once your questions have been answered, and
510you\n code is perfect, call your mentor for a commit session.\n "]]]]] 511 512 513 514 515 516 }, 517 { 518 id: 'review-sync-committing', 519 title: "Committing", 520 tag: 'h5', 521 html: [['p', 522 ["Commit only the files you want to commit"]], 523 524 ['pre', 525 ["cvs ci\n"], 526 527 { className: "cm-s-default code bad has-popover", 528 cat: "bad", 529 'data-content': "BAD", 530 'data-original-title': "", 531 title: "" }], 532 533 ['pre', 534 ["cvs ci file1.js file2.js file3.js\n"], 535 536 { className: "cm-s-default code good has-popover", 537 cat: "good", 538 'data-content': "GOOD", 539 'data-original-title': "", 540 title: "" }]] 541 542 }, 543 { 544 id: 'review-sync-commit_msg', 545 title: "Commit message", 546 tag: 'h5', 547 html: [['p', 548 ["Short, simple and descriptive - ", 549 ['a', 550 ["be minimalistic"], 551 { href: "/dna#effective-minimal" }]]], 552 553 554 ['pre', 555 ["fix mistake in passing of video url in opts from zone_init to zone_find\nand converting opt.url to opt.video_url\n"], 556 557 558 { className: "cm-s-default code bad has-popover", 559 cat: "bad", 560 'data-content': "BAD", 561 'data-original-title': "", 562 title: "" }], 563 564 ['pre', 565 ["move zone_init to zone_find and convert opt.url to opt.video_url\n"], 566 567 { className: "cm-s-default code ok has-popover", 568 cat: "ok", 569 'data-content': "OK", 570 'data-original-title': "", 571 title: "" }], 572 573 ['pre', 574 ["zone_init -> zone_find\nopt.url -> opt.video_url\n"], 575 576 577 { className: "cm-s-default code good has-popover", 578 cat: "good", 579 'data-content': "GOOD", 580 'data-original-title': "", 581 title: "" }], 582 583 ['p', 584 ["Start with small letter"]], 585 586 ['pre', 587 ["Update tasks\n"], 588 589 { className: "cm-s-default code bad has-popover", 590 cat: "bad", 591 'data-content': "BAD", 592 'data-original-title': "", 593 title: "" }], 594 595 ['pre', 596 ["update tasks\n"], 597 598 { className: "cm-s-default code good has-popover", 599 cat: "good", 600 'data-content': "GOOD", 601 'data-original-title': "", 602 title: "" }], 603 604 ['p', 605 ["When doing a sync review add your reviewer login in brackets"]], 606 607 ['pre', 608 ["fixed conventions (nir)\n"], 609 610 { className: "cm-s-default code good has-popover", 611 cat: "good", 612 'data-content': "GOOD", 613 'data-original-title': "", 614 title: "" }], 615 616 ['p', 617 ["Do not include the filename you committed to in the message -\n it is redundant"]], 618 619 620 ['pre', 621 ["fixed conventions in agent_conf.js\n"], 622 623 { className: "cm-s-default code bad has-popover", 624 cat: "bad", 625 'data-content': "BAD", 626 'data-original-title': "", 627 title: "" }], 628 629 ['pre', 630 ["fixed conventions\n"], 631 632 { className: "cm-s-default code good has-popover", 633 cat: "good", 634 'data-content': "GOOD", 635 'data-original-title': "", 636 title: "" }], 637 638 ['p', 639 ["If commit is related to a task, include link in the commit message"]], 640 641 642 643 ['pre', 644 ["fixed layout\nTASK: https://brightdata-group.monday.com/boards/12345/pulses/67890\n"], 645 646 647 { className: "cm-s-default code good has-popover", 648 cat: "good", 649 'data-content': "GOOD", 650 'data-original-title': "", 651 title: "" }]] 652 653 }, 654 { 655 id: 'review-sync-redo', 656 title: "Redo your code for a commit\n session", 657 658 tag: 'h5', 659 "short": "Redo commit", 660 html: [['p', 661 [" You may call your mentor for questioning session. This is more\n than welcome and even recommended during the bootcamp.\n However, once calling your mentor for a commit session the\n expectation is that you did your best to comply with ", 662 663 664 665 ['b', 666 ["ALL"]], " ", 667 668 669 ['a', 670 ["pre-commit checks"], 671 { href: "#review-sync-precommit" }], ". It means that all open questions have been looked up deeply\n and resolved, and
671your code is bright and shining, waiting\n to be sent out to our million of users.", 672 673 674 675 676 ['br'], " In Hola we ", 677 678 ['a', 679 ["respect other's time"], 680 { href: "/dna#individual-mindful" }], ", calling your mentor for a commit session which ended up with\n a \"redo\", is a completely waste of time.", 681 682 683 684 ['br'], " Make sure you meet this expectation. Take very seriously the\n remarks you received, and try to find out how to improve\n your personal commit procedures not to repeat these mistakes\n next time. "]]] 685 686 687 688 689 690 }, 691 { 692 id: 'review-sync-postcommit', 693 title: "Post-commit\n checklist", 694 695 tag: 'h5', 696 "short": "Post-commit checklist", 697 html: [['p', 698 ["Now, after you have committed your code, below is the checklist\n you need to do after your commit:"]], 699 700 701 ['ul', 702 [['li', 703 ["Run ", 704 ['code', 705 ["cvsup"]], " and make sure the tree is fully committed (no ", 706 707 708 ['code', 709 ["M"]], ", nor ", 710 711 712 ['code', 713 ["?"]], " files)"]], 714 715 716 717 ['li', 718 ["Check ", 719 ['a', 720 ["BAT"], 721 { href: "#bat" }], " until you see your commit got compiled and tested green"]], 722 723 724 725 ['li', 726 ["If BAT is broken, ", 727 ['a', 728 ["make it green again"], 729 { href: "#bat-broken" }], " by fixing the problem"]], 730 731 732 733 ['li', 734 ["Deploy your code - bring value!"]], 735 736 ['ul', 737 [['li', 738 [" Deploy your code immediately. Worse case, in case it\n is after ", 739 740 ['a', 741 ["working hours"], 742 { href: "#attendance" }], ", ask for a pending release in the morning "]], 743 744 745 746 ['li', 747 ["Track it immediately, or after deployment (60 seconds\n manual test after deployment, kibana, stats)"]]]]]]] 748 749 750 751 752 }, 753 { 754 id: 'review-async', 755 title: "Non-blocking async Review: first commit, and\n later others will review", 756 757 tag: 'h4', 758 "short": "Async", 759 html: [['p', 760 [" Once passing the stage of ", 761 ['a', 762 ["blocking review"], 763 { href: "#review-sync" }
763], " you'll start committing your code on your own.", 764 765 766 ['br'], " This time, the review will be done by co-owners of the code\n you changed or by other engineers who are registered on the\n files you have modified (using the ", 767 768 769 770 ['a', 771 ["jdoc"], 772 { href: "#jdoc" }], " system). "]]] 773 774 775 776 }, 777 { 778 id: 'fs', 779 title: "FS: Central shared filesystem", 780 tag: 'h3', 781 "short": "FS", 782 html: [['p', 783 [['a', 784 ["text missing: contribution welcome!"], 785 { href: "mailto:[email protected]" }]]]] 786 787 788 }, 789 { 790 id: 'jungo', 791 title: "Jungo: Our origin: Passion for complex networking\n and a love for Open Source", 792 793 tag: 'h3', 794 "short": "Jungo", 795 html: [['p', 796 [['a', 797 ["text missing: contribution welcome!"], 798 { href: "mailto:[email protected]" }]]]] 799 800 801 }, 802 { 803 id: 'rgrep', 804 title: "rgrep: recursive grep", 805 tag: 'h3', 806 "short": "rgrep", 807 html: [['p', 808 [" grep is an amazing tool. Just like you google the Internet for\n answers on public info, you grep source code for answers on\n our private tree.", 809 810 811 ['br'], 812 ['code', 813 ["rgrep"]], " is our recursive grep, with a few little usability\n improvements: "]], 814 815 816 817 818 ['ul', 819 [['li', 820 ["Scans by default all files in the tree, recursively"]], 821 822 ['li', 823 ["Skips version controlled meta-files, editor temporary files\n (swp, bak, ...), and build output directory"]], 824 825 826 ['li', 827 ["Allows language selection, such as ", 828 ['code', 829 ["rgrep --js send_msg"]], " will only search *.js files for send_msg string"]]]], 830 831 832 833 834 ['p', 835 [" We recommended to always ", 836 ['code', 837 ["rgrep"]], " from the root directory. This will ensure you never miss a\n reference.", 838 839 840 841 ['br'], 842 ['code', 843 ["rgrep"]], " is installed on your machine as part of our development\n environment. "]]] 844 845 846 847 848 }, 849 { 850 id: 'zlint', 851 title: "zlint: general purpose linter", 852 tag: 'h3', 853 "short": "zlint", 854 html: [['p', 855 [" Can lint many types of files: js, json, perl, html, css and\n more. Always run it before commit.", 856 857 ['br'], 858 ['code', 859 ["zlint"]], " is installed on your machine as part of our development\n environment. "]]] 860 861 862 863 864 }, 865 { 866 id: 'capture', 867 title: "Screen capture", 868 tag: 'h3', 869 html: [['p', 870 [" When reporting bugs, requesting UI related tasks, or\n completing UI related tasks, add a minimal (cropped) screen\n capture or animated GIF to your report demonstrating the\n item or modification you did. Also, mark in it where the\n change is so it will be easy for the other side reviewing it\n and respond quickly.", 871 872 873 874 875 876 ['br'], " An example of a cropped, tiny marked screenshot: "]], 877 878 879 ['p', 880 [['img', 881 []]]], 882 883 884 ['p', 885 [" Implementing the above can be done by using applications such\n as ", 886 887 ['a', 888 ["FastStone"], 889 { href: "http://www.faststone.org/FSCapturerDownload.htm" }], " for static screenshots, or ", 890 891 892 ['a', 893 ["ScreenToGIF"], 894 { href: "http://www.screentogif.com/" }], " for animated GIFs. "]]] 895 896 897 898 }, 899 { 900 id: 'zmocha', 901 title: "zmocha: mocha based JS unit-testing tool", 902 tag: 'h3', 903 "short": "zmocha", 904 html: [['p', 905 [" Our unit-test framework is based on ", 906 ['a', 907 ["mocha"], 908 { href: "https://mochajs.org" }], ". Every new function deserves a unit-test to make sure further\n development will not affect current behavior.", 909 910 911 912 ['br'], " One of the most efficient ways of testing your code\n modifications is running unit-tests on the whole development\n tree by executing ", 913 914 915 916 ['code', 917 ["jmake run_tests"]], ".", 918 919 920 ['br'], " Running tests on a specific directory can be done by running ", 921 922 ['code', 923 ["zmocha"]], " within the directory.", 924 925 926 ['br'], " Running specific test in a specific directory can be done by ", 927 928 ['code', 929 ["zmocha -g [test]"]]]]] 930 931 932 }, 933 { 934 id: 'zupdate',
935 title: "zupdate: Updating your development environment\n and tools", 936 937 tag: 'h3', 938 "short": "zupdate", 939 html: [['p', 940 [['code', 941 ["zupdate"]], " is a command line that will install and update your\n development environment, based on your ", 942 943 944 945 ['code', 946 [".zon"]], " tree (this is the reason why we keep ", 947 948 949 ['code', 950 [".zon"]], " untouched and unmodified).", 951 952 953 ['br'], " The development environment holds the ", 954 955 ['a', 956 ["gvim"], 957 { href: "#gvim" }], " definition and themes, VM look&feel and all required\n development tools.", 958 959 960 961 ['br'], " It is recommended to run ", 962 963 ['code', 964 ["zupdate"]], " every day, as our codebase is changing rapidly together with\n our development environment and tools.", 965 966 967 968 ['br']]]] 969 970 }, 971 { 972 id: 'gvim', 973 title: "gVim: text editor", 974 tag: 'h3', 975 "short": "gVim", 976 html: [['p', 977 [" Our common text editor based on ", 978 ['a', 979 ["Vim"], 980 { href: "http://www.vim.org/about.php" }], ", powered with many vim plugins that enhance our development\n productivity, and used as our code IDE.", 981 982 983 984 ['br'], " Why are we using gVim?", 985 986 ['br'], " Because it is tidily connected to our development environment\n and tools.", 987 988 989 ['br'], " Can I use any other IDE instead?", 990 991 ['br'], " Sure! You may use any IDE you like, just keep in mind that our\n gVim is already adjusted to our coding conventions and has\n many features to support our way of development. Your IDE\n should be adjusted as well.", 992 993 994 995 996 ['br'], " Moreover, when working with other developers, they mostly\n would like to work on gVim, so you'll have to adjust\n yourself to it.", 997 998 999 1000 ['br'], " Do you have a shortcut for using gVim in your development\n environment?", 1001 1002 1003 ['br'], " Just use ", 1004 1005 ['code', 1006 ["g"]], ". It will open the gVim editor on your machine. More shortcuts\n and useful commands are in our ", 1007 1008 1009 1010 ['a', 1011 ["vi Basic"], 1012 { href: "/dna/basics/vi" }], " page. "]]] 1013 1014 1015 1016 }, 1017 { 1018 id: 'cvs', 1019 title: "CVS: Concurrent Version System", 1020 tag: 'h3', 1021 "short": "CVS", 1022 html: [['p', 1023 [" Our source control plays a major role in daily inter-developer\n communication tool in the company.", 1024 1025 ['br'], " Commits are also a form of email, being one of the core\n engines behind our module ownership and ", 1026 1027 1028 ['a', 1029 ["code reviews"], 1030 { href: "#review-async" }], ".", 1031 1032 1033 ['br'], " Our version of CVS, originally based on the open source CVS,\n has been greatly enhanced and improved over the years to\n provide: "]], 1034 1035 1036 1037 1038 ['ul', 1039 [['li', 1040 ["transparent offline support (via local smart cache proxy)"]], 1041 1042 ['li', 1043 ["instant checkout and update (via background prefetching)"]], 1044 1045 ['li', 1046 ["remote web interface, GitHub like"]], 1047 1048 ['li', 1049 ["local web interface, similar to other version control GUI\n clients"]], 1050 1051 1052 ['li', 1053 [" MD5_CDN signature based smart annotate: find out who ", 1054 ['b', 1055 ["really"]], " originally wrote a function, no matter if it was copied,\n or indentation has been changed. "]], 1056 1057 1058 1059 1060 ['li', 1061 ["commit hooks: committing directly activates many different\n deployment tasks, updating thousands of servers,\n configuration, and code - instantly. "]]]], 1062 1063 1064 1065 1066 ['p', 1067 ["For a quick start, look at ", 1068 ['a', 1069 ["CVS basic command"], 1070 { href: "/dna/basics/cvs#basic" }]]]] 1071 1072 1073 }, 1074 { 1075 id: 'cvsed', 1076 title: "cvsed: utility for editing and committing common\n files", 1077 1078 tag: 'h3', 1079 "short": "cvsed", 1080 html: [['p', 1081 [" An editor tool which combines editing a file using ", 1082 ['a', 1083 ["gvim"], 1084 { href: "#gvim" }], ", and committing capabilities, using ", 1085 1086 1087 ['a', 1088 ["cvs"], 1089 { href: "#cvs" }], " update and commit commands.", 1090 1091 1092 ['br'], 1093 ['code', 1094 ["cvsed"]], " has shortcuts to our most common used files, which can be seen\n by executing ", 1095 1096 1097 1098 ['code', 1099 ["cvsed --help"]], ".", 1100 1101 1102 ['br'], " You may use this tool for editing your ", 1103 1104 ['a', 1105 ["daily"], 1106 { href: "#daily" }], " file (", 1107 1108 1109 ['code', 1110 ["cvsed daily"]], ") or your ", 1111 1112 1113 ['a', 1114 ["version plan"], 1115 { href: "#version_plan" }], " (", 1116 1117 1118 ['code', 1119 ["cvsed vp"]], ") or simply open both (", 1120 1121 1122 ['code', 1123 ["cvsed vpd"]], "). "]]] 1124 1125 1126 1127 }, 1128 { 1129 id: 'zlxc', 1130 title: "zlxc: emulate everything in your PC", 1131 tag: 'h3', 1132 "short": "zlxc", 1133 html: [['p', 1134 [" A staging environment is a great tool for developers: they can\n play around with the feature they developed in a 'full\n system', with all the hundreds of computers, IPs and route\n tables, frontend and backend web servers, databases, message\n queues etc... and validate that everything works well\
1134n together.", 1135 1136 1137 1138 1139 1140 ['br'], " In Hola we wanted every developer to own a complete staging\n environment of his own, so we used ", 1141 1142 1143 ['a', 1144 ["LXC"], 1145 { href: "https://linuxcontainers.org" }], " technology to power it.", 1146 1147 1148 ['br'], " In a single command we manage to start up in ", 1149 1150 ['b', 1151 ["under 6 seconds"]], " a full emulation of hundreds of NodeJS/C/C++ based servers\n with different IP addresses and complex route tables,\n multiple MongoDB and NGINX servers, graphite, elasticsearch,\n and many other servers and services.", 1152 1153 1154 1155 1156 1157 ['br'], " Now every developer can fully test the complete product,\n inside his own laptop, ", 1158 1159 1160 ['b', 1161 ["even before the commit"]], " and see how everything plays well together.", 1162 1163 1164 ['br'], " Give the developers great testing and emulation tools, and\n they will deliver great quality products.", 1165 1166 1167 ['br'], " Full description of ", 1168 1169 ['code', 1170 ["zlxc"]], " can be found once running ", 1171 1172 1173 ['code', 1174 ["zlxc --help"]], ", however some ", 1175 1176 1177 ['code', 1178 ["zlxc"]], " most common commands and usage are: "]], 1179 1180 1181 1182 ['ul', 1183 [['li', 1184 [['code', 1185 ["zlxc run [group]"]], " - runs specific servers (saves booting time)"]], 1186 1187 1188 1189 ['li', 1190 [['code', 1191 ["zlxc relink"]], " - relink modified files to the zlxc container"]], 1192 1193 1194 1195 ['li', 1196 [['code', 1197 ["zlxc windows"]], " - runs zlxc and enable connecting external Windows VM to\n the zlxc environment"]], 1198 1199 1200 1201 1202 ['li', 1203 [['code', 1204 ["cvsup -A && jmake cm release && zlxc run [group]\n --purge"]], " - run an up-to-date clean zlxc instance from scratch"]]]]] 1205 1206 1207 1208 1209 1210 }, 1211 { 1212 id: 'workstation', 1213 title: "Workstation", 1214 tag: 'h3', 1215 "short": "Workstation", 1216 html: [['p', 1217 [" Your work station enables you to be efficient. At Hola we\n invest a lot of efforts making it best configured and\n efficient as possible.", 1218 1219 1220 ['br'], " To keep it up-to-date, make sure to run ", 1221 1222 ['a', 1223 [['code', 1224 ["zupdate"]]], 1225 1226 { href: "#zupdate" }], " every day. It will make sure all your development tools (", 1227 1228 1229 ['a', 1230 ["gvim"], 1231 { href: "#gvim" }], ", ", 1232 1233 1234 ['a', 1235 ["zlxc"], 1236 { href: "#zlxc" }], ", ", 1237 1238 1239 ['a', 1240 ["cvsed"], 1241 { href: "#cvsed" }], ", ", 1242 1243 1244 ['a', 1245 ["zlint"], 1246 { href: "#zlint" }], ", ", 1247 1248 1249 ['a', 1250 ["FastStone"], 1251 { href: "#capture" }], ", etc.) and look&feel are kept configured and updated.", 1252 1253 1254 ['br'], " It could happen that you'll feel the way your workstation is\n configured is not your style, and you would like to change\n it to suit you best. You may freely change it, once you are\n ", 1255 1256 1257 1258 1259 ['a', 1260 ["fully independent"], 1261 { href: "#noob" }], " and can work on your own. Therefore, to ", 1262 1263 1264 ['a', 1265 ["save your colleague's time"], 1266 { href: "/dna#individual-mindful" }], " (as they are used to this environment), work with the current\n configuration and suggest any environment enhancements to\n your ", 1267 1268 1269 1270 1271 ['a', 1272 ["mentor"], 1273 { href: "#mentor" }], ".", 1274 1275 1276 ['br'], " Our development tree is called ", 1277 1278 ['a', 1279 ["zon"], 1280 { href: "#zon" }], ". While the environment and tools are being installed by ", 1281 1282 1283 ['a', 1284 ["zupdate"], 1285 { href: "#zupdate" }], " on the ", 1286 1287 1288 ['code', 1289 [".zon"]], " tree, you may duplicate it for development purposes to ", 1290 1291 1292 ['code', 1293 ["zon1"]], " and/or ", 1294 1295 1296 ['code', 1297 ["zon2"]], ", by simply execute ", 1298 1299 1300 ['code', 1301 ["cp -a .zon zon1"]], " or ", 1302 1303 1304 ['code', 1305 ["cvs co -d zon2 zon"]], ". This will give you the ability to work on one task in ", 1306 1307 1308 ['code', 1309 ["zon1"]], ", while doing other tasks on ", 1310 1311 1312 ['code', 1313 ["zon2"]], ".", 1314 1315 1316 ['br'], " Moreover, doing your ", 1317 1318 ['a', 1319 ["daily"], 1320 { href: "#daily" }], " and updating your ", 1321 1322 1323 ['a', 1324 ["version plan"], 1325 { href: "#version_plan" }], " can be done very easily by executing ", 1326 1327 1328 ['code', 1329 ["cvsed daily"]], " (to update your daily), or ", 1330 1331 1332 ['code', 1333 ["cvsed vp"]], " to update your version plan's section, or ", 1334 1335 1336 ['code', 1337 ["cvsed vpd"]], " to update both daily and version plan at the end of the day. "]]] 1338 1339 1340 1341 }, 1342 { 1343 id: 'monitor', 1344 title: "Monitor and alerts", 1345 tag: 'h3', 1346 "short": "Monitor", 1347 html: [['p', 1348 [" We use graphite as the base of our monitoring and alerting\n system. We add many ", 1349 1350 ['a', 1351 ["zcounters"], 1352 { href: "#zcounter" }
1352], " in our code to send stats to our servers, and aggregate them\n up on a realtime monitoring and alerting dashboard. That's\n how we keep our services up and running 24/7/365. "]]] 1353 1354 1355 1356 1357 1358 }, 1359 { 1360 id: 'zcounter', 1361 title: "zcounter: monitor your code", 1362 tag: 'h3', 1363 "short": "zcounter", 1364 html: [['p', 1365 [" To validate your code runs well in the real world, add\n zcounters inside your code - count and measure events, and\n use our ", 1366 1367 1368 ['a', 1369 ["graphite based dashboard"], 1370 { href: "#monitor" }], " to monitor their values, and alert when something goes wrong.\n "]]] 1371 1372 1373 1374 1375 }, 1376 { 1377 id: 'perr', 1378 title: "perr: collect errors and other reports", 1379 tag: 'h3', 1380 "short": "perr", 1381 html: [['p', 1382 [" The idea of \"perr\" was so that clients (initially is was for\n Hola Accelerator) could submit crashes and other runtime\n errors. Submission of perr reports is open to the outside\n world, and the system is built to handle a very large\n incoming flow. "]], 1383 1384 1385 1386 1387 1388 ['p', 1389 [" These days, the technology has been repurposed to collect\n reports about events other than errors, too. For instance,\n our browser extensions, Android apps etc send reports on\n events such as \"authentication\", \"first use\" and so on. "]], 1390 1391 1392 1393 1394 ['p', 1395 [" The perr servers receive these reports over HTTP. Then they do\n several things: "]], 1396 1397 1398 ['ol', 1399 [['li', 1400 [" Report ", 1401 ['a', 1402 ["zcounters"], 1403 { href: "#zcounter" }], " about certain types of perr or their properties. Most, if\n not all, perr types produce a zcounter ", 1404 1405 1406 1407 ['code', 1408 ["stats.glob.perr.$ID"]], " just to count them. Also, CDN reports produce many\n zcounters that are specific to particular\n customers/zones, based on individual events mentioned in\n the report. In fact, most of the CDN world in the\n dashboard is produced this way by the perr servers. "]], 1409 1410 1411 1412 1413 1414 1415 1416 ['li', 1417 [" Drop certain reports. The server can be configured to drop\n reports according to specific rules. This is done so\n that the database does not get flooded with millions of\n identical reports when we only need a few to diagnose\n problems. Note that the zcounter submission above\n happens before the dropping. "]], 1418 1419 1420 1421 1422 1423 1424 ['li', 1425 [" Forward remaining reports to the database where their\n bodies will be stored. "]]]]] 1426 1427 1428 1429 }, 1430 { 1431 id: 'perr-visualization', 1432 title: "perr data\n visualization", 1433 1434 tag: 'h4', 1435 "short": "perr visualization", 1436 html: [['p', 1437 [" ElasticSearch is the specialized database to which the perr\n service submits the reports on step 3 above. In fact, the\n full data flow is like this: "]], 1438 1439 1440 1441 ['p', 1442 [['code', 1443 [" (client) -> zs-client-*-f -> zs-perr-*-b -> zs-log ->\n zs-elasticsearch -> (kibana) "]]]], 1444 1445 1446 1447 ['p', 1448 [" (The zs-log server does little more than just forward the\n reports. These days, its presence is mostly historical.) "]], 1449 1450 1451 ['p', 1452 [" Kibana is a web application that lets you explore the\n ElasticSearch database. It is to ElasticSearch what our\n dashboard is to metricdb. "]]] 1453 1454 1455 1456 }, 1457 { 1458 id: 'deploy', 1459 title: "Deploy: shipping your code to millions of\n users", 1460 1461 tag: 'h3', 1462 "short": "Deploy", 1463 html: [['p', 1464 [" Deployment is putting your work out for everyone to use. The\n deploy team will take your request, and will follow a\n detailed procedure that will label, test and eventually\n release your code.", 1465 1466 1467 1468 ['br'], " If an issue occurs during this process, the deploy team will\n notify you - so you will be able to quickly fix it.", 1469 1470
1471 ['br'], " The deploy team is available to receive your requests and is\n responsible for ", 1472 1473 1474 ['a', 1475 ["monitoring dashboard"], 1476 { href: "http://dashboard.hola.org", 1477 'data-toggle': "tooltip", 1478 'data-placement': "top", 1479 title: "", 1480 'data-original-title': "Link to internal Hola site (not public)." }], " 24/7/365 "]]] 1481 1482 1483 1484 }, 1485 { 1486 id: 'bootcamp', 1487 title: "\n \n Bootcamp: your first days at Hola\n", 1488 1489 1490 1491 tag: 'h3', 1492 "short": "Bootcamp", 1493 html: [['p', 1494 [" A ", 1495 ['a', 1496 ["3 week training program"], 1497 { href: "/dna/bootcamp" }], ", in which you are introduced to the way we work, communicate\n and collaborate with each other.", 1498 1499 1500 1501 ['br'], " It's time to learn! and adopt our ", 1502 1503 ['a', 1504 ["DNA"], 1505 { href: "/dna" }], ", as well as perform your profession skills.", 1506 1507 1508 ['br']]]] 1509 1510 }, 1511 { 1512 id: 'noob', 1513 title: "\n \n Hola Noob: start doing real stuff, but still a lot of questions\n", 1514 1515 1516 1517 tag: 'h3', 1518 "short": "Hola Noob", 1519 html: [['p', 1520 [" Larger tasks, significant contribution while actively learning\n about the company's DNA, software architectures and work\n methods. ", 1521 1522 1523 ['a', 1524 ["Code reviews"], 1525 { href: "/dna/dict#review-sync" }], " for most commits, some ", 1526 1527 1528 ['a', 1529 ["without a pre-commit review session"], 1530 { href: "/dna/dict#review-async" }], ", and sometimes even only after deployment. "]]] 1531 1532 1533 1534 }, 1535 { 1536 id: 'junior', 1537 title: "\n \n Hola Junior: on your way to being part of the family!\n", 1538 1539 1540 1541 tag: 'h3', 1542 "short": "Hola Junior", 1543 html: [['p', 1544 [" A major contributor to Hola's products, developing specific\n domain knowledge in fields that are of interest to you\n within Hola. Commit directly to the product tree without\n prior review, and see your contributions going live to\n millions of users within hours of being developed. Still\n internalizing Hola's DNA and best practices, and open to\n comments about commits from other Hola Veterans. "]]] 1545 1546 1547 1548 1549 1550 1551 1552 }, 1553 { 1554 id: 'veteran', 1555 title: "\n \n Hola Veteran: A 'did-it-all' Veteran at Hola\n", 1556 1557 1558 1559 tag: 'h3', 1560 "short": "Hola Veteran", 1561 html: [['p', 1562 [" An integral part of the Hola Family. A major contributor,\n knowledge center, and a person who can help Noobs and\n Juniors get up to speed on the Hola DNA and best practices\n through ", 1563 1564 1565 1566 ['a', 1567 ["mentoring"], 1568 { href: "/dna/dict#mentor" }], ", and ", 1569 1570 1571 ['a', 1572 ["code reviews"], 1573 { href: "/dna/dict#review" }], ". "]]] 1574 1575 1576 1577 }, 1578 { 1579 id: 'chef', 1580 title: "Hola Chef", 1581 tag: 'h3', 1582 "short": "Hola Chef", 1583 html: [['p', 1584 [" We truly believe that eating healthy and good food should be\n part of having fun at work, while being creative and\n productive when creating fantastic products!", 1585 1586 1587 ['br'], " Our in-house chefs are responsible for those great meals we\n have every day. "]]] 1588 1589 1590 1591 }, 1592 { 1593 id: 'mentor', 1594 title: "Mentor: Your Hola veteran buddy", 1595 tag: 'h3', 1596 "short": "Mentor", 1597 html: [['p', 1598 [" The Hola mentors are selected ", 1599 ['a', 1600 ["Veterans"], 1601 { href: "#veteran" }], " that embody the Hola DNA and have the ability to help ", 1602 1603 1604 ['a', 1605 ["Noobs"], 1606 { href: "#noob" }], " learn to become great contributing team members.", 1607 1608 1609 ['br'], " Every Noob is assigned a mentor -- a Veteran who helps to\n progress from ", 1610 1611 1612 ['a', 1613 ["noob"], 1614 { href: "#noob" }], " to ", 1615 1616 1617 ['a', 1618 ["junior"], 1619 { href: "#junior" }], " to ", 1620 1621 1622 ['a', 1623 ["veteran"], 1624 { href: "#veteran" }], " status. It's up to you, the Noob, to get as much face time\n with the Veteran and ask any question, so that you can learn\n as much as possible. The Mentor is busy with his tasks, but\n will take the time to help you as much as you need when you\n ask for it.", 1625 1626 1627 1628 1629 1630
1631 ['br'], " What's the best way to learn from a mentor? One very effective\n way is plain old imitation -- looking at his practices,\n daily routines, time and task management, email styling, at\n how he communicates with colleagues. These are all great\n practices to take on until you create your own style at\n Hola. "]], 1632 1633 1634 1635 1636 1637 1638 1639 ['ul', 1640 [['li', 1641 [" At ", 1642 ['a', 1643 ["Bootcamp"], 1644 { href: "#bootcamp" }], " stage mentor helps how to find what is necessary for\n fulfilling tasks: documentation, code, people. He also\n reviews your code. "]], 1645 1646 1647 1648 1649 1650 ['li', 1651 ["Mentor of a ", 1652 ['a', 1653 ["Noob"], 1654 { href: "#noob" }], " helps learning company's DNA, and still does the code\n reviews."]], 1655 1656 1657 1658 1659 ['li', 1660 ["Mentor of a ", 1661 ['a', 1662 ["Junior"], 1663 { href: "#junior" }], " is a go-to person to understand how the company and\n procedures work in detail."]]]]] 1664 1665 1666 1667 1668 1669 }, 1670 { 1671 id: 'mvp', 1672 title: "MVP: Minimal Viable Product", 1673 tag: 'h3', 1674 "short": "MVP", 1675 html: [['p', 1676 [" In any task/feature/product we build at Hola, we try to\n progress incrementally, by building a Minimal Viable Product\n (or minimal viable task/feature) that brings value to the\n end user. This allows testing whether the solution is in the\n right direction. It also brings immediate value to the end\n user, or if it is an internal task - brings an immediate\n solution to a real problem. If the MVP works out well,\n additional incremental improvements will be done. If not, a\n different direction (thus a different MVP) will be tried out\n to solve the same problem.", 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 ['br'], " This is a core concept in modern ", 1687 1688 ['a', 1689 ["Lean Startups"], 1690 { href: "http://theleanstartup.com/principles" }], ". We highly recommend you read ", 1691 1692 1693 ['b', 1694 ["The Lean Startup"]], " book. See also ", 1695 1696 1697 ['a', 1698 ["Wiki"], 1699 { href: "https://en.wikipedia.org/wiki/Minimum_viable_product" }], ". "]]] 1700 1701 1702 1703 }, 1704 { 1705 id: 'zon', 1706 title: "ZON: appears in the code - but what is it?", 1707 tag: 'h3', 1708 "short": "Zon", 1709 html: [['p', 1710 [" Hola was founded in 2008, and sticking to the ", 1711 ['a', 1712 ["MVP"], 1713 { href: "#mvp" }], " method, our 0.1 version of the company name was ZON. This gave\n us time to find a name that best represents our values:\n simplicity, directness, friendly, welcoming. By the\n beginning of 2009 we found it: \"Hola\", coupled with is\n friendly smiley :-)", 1714 1715 1716 1717 1718 1719 1720 ['br'], " So our source tree directory is still '.zon', and our internal\n tools and functions many times have a 'z' prefix, and our\n P2P protocol is called zmsg. "]]] 1721 1722 1723 1724 1725 }, 1726 { 1727 id: 'coding', 1728 title: "Coding conventions (Style Guides)", 1729 tag: 'h3', 1730 "short": "Coding conventions", 1731 html: [['p', 1732 [" Source Code is the main produce of software developers. It's\n most of what we read and write at all day - even more than\n the time we spend reading and writing emails (... we also\n have ", 1733 1734 1735 1736 ['a', 1737 ["email style guide"], 1738 { href: "/dna/comm#email" }], " to make them consistent!)", 1739 1740 1741 ['br'], " It's the main form of communication between the team, and\n therefore its consistency is highly important.", 1742 1743 1744 ['br'], " Having our codebase perfectly consistent in style makes it\n easy for developers to read and modify each other's code. We\n try to express our individuality and personal great\n engineering skills, not by spacing and indenting our code\n differently than others, rather by finding simple solutions\n to complex problems, great algorithms, original and\n efficient designs.", 1745 1746 1747 1748 1749 1750 1751 1752 ['br'], " There's no 'right' or 'wrong' in coding conventions - any\n coding convention chosen can be 'right', as long as it\n exists, and is strictly followed by all of us - thus\n achieving consistency. "]], 1753 1754 1755 1756 1757 1758 ['ul', 1759 [['li', 1760 [['a', 1761 ["Tree structure"], 1762 { href: "/dna/tree_code" }]]], 1763 1764 1765 ['li', 1766 [['a', 1767 ["JS"], 1768 { href: "/dna/js_code" }]]], 1769 1770 1771 ['li', 1772 [['a', 1773 ["CSS"], 1774 { href: "/dna/css_code" }]]], 1775 1776 1777 ['li', 1778 [['a', 1779 ["HTML"], 1780 { href: "/dna/html_code" }]]], 1781 1782 1783 ['li', 1784 [['a', 1785 ["C/C++"], 1786 { href: "/dna/c_code" }]]], 1787 1788 1789 ['li', 1790 [['a', 1791 ["Perl"],
1792 { href: "/dna/perl_code" }]]], 1793 1794 1795 ['li', 1796 [['a', 1797 ["Java"], 1798 { href: "/dna/java_code" }]]], 1799 1800 1801 ['li', 1802 [['a', 1803 ["C#"], 1804 { href: "/dna/cs_code" }]]], 1805 1806 1807 ['li', 1808 [['a', 1809 ["Shell"], 1810 { href: "/dna/shell_code" }]]], 1811 1812 1813 ['li', 1814 [['a', 1815 ["Google Sheets/Excel"], 1816 { href: "/dna/sheet_code" }]]]]]] 1817 1818 1819 1820 }, 1821 { 1822 id: 'email', 1823 title: "Email", 1824 tag: 'h3', 1825 "short": "Email", 1826 html: [['p', 1827 [" Emails is our primary way of communicating within the team, as\n we appreciate each other's time.", 1828 1829 ['br'], " We use it to discuss issues offline, to notify about code\n modifications (", 1830 1831 1832 ['a', 1833 ["jdoc"], 1834 { href: "#jdoc" }], "), as well as provide tasks to each other and share useful\n information.", 1835 1836 1837 1838 ['br'], " Since this interface is central to the way we work, just like\n with ", 1839 1840 1841 ['a', 1842 ["coding conventions"], 1843 { href: "#coding" }], ", we also adopted an ", 1844 1845 1846 ['a', 1847 ["email style guide"], 1848 { href: "/dna/comm#email" }], " to speak the same language, and be more efficient while\n handling it as part of our regular tasks. "]]] 1849 1850 1851 1852 1853 }, 1854 { 1855 id: 'version_plan', 1856 title: "version_plan: Open planning for the\n near and far future", 1857 1858 tag: 'h3', 1859 "short": "version_plan", 1860 html: [['p', 1861 [" The version plan can be found in ", 1862 ['code', 1863 ["doc/design/version_plan.txt"]], ".", 1864 1865 1866 ['br'], " Each engineer will have a section with his login and username,\n holding his future and current tasks. The version plan holds\n the R&D planned tasks. It is the engineer's responsibility\n to update his progress in this file once a day.", 1867 1868 1869 1870 1871 ['br'], " Updating this file can be done easily with ", 1872 1873 ['a', 1874 ["cvsed"], 1875 { href: "#cvsed" }], ". Writing guidelines can be found in the ", 1876 1877 1878 ['a', 1879 ["Version plan code"], 1880 { href: "/dna/plan_code#vp" }], ". "]]] 1881 1882 1883 1884 }, 1885 { 1886 id: 'daily', 1887 title: "daily: Open reporting of daily achievements", 1888 tag: 'h3', 1889 "short": "Daily", 1890 html: [['p', 1891 [" Your daily file is a text file, located under your name in ", 1892 ['code', 1893 [".zon/doc/report"]], " directory.", 1894 1895 1896 ['br'], " The goal of this file is to report your daily achievements,\n describe your commitment (tasks you will complete for sure\n in the next day) and state your next planned task/s (tasks\n your are about to start after completing your commitment).", 1897 1898 1899 1900 1901 ['br'], " This daily report, makes our development ", 1902 1903 ['a', 1904 ["transparent"], 1905 { href: "/dna#transparentall" }], " and let everybody understand what everybody does, as well as\n let everybody comment or suggest what is best to do next\n (you may use the ", 1906 1907 1908 1909 1910 ['a', 1911 ["NOTIFY"], 1912 { href: "/dna/dict#jdoc" }], " to let specific people know about your progress).", 1913 1914 1915 ['br'], " Updating this file is done every day, usually at the end of it\n (you may choose to update it at the beginning of the work\n day, summarizing your previous working day) using our ", 1916 1917 1918 1919 ['a', 1920 ["cvsed"], 1921 { href: "#cvsed" }], " tool.", 1922 1923 1924 ['br'], " What should be reported?", 1925 1926 ['br'], " In general, every task that took you more than half a day,\n should be reported.", 1927 1928 1929 ['br'], " What kind of tasks should I report?", 1930 1931 ['br'], " The file actually describes your working progress, according\n to the plan described in ", 1932 1933 1934 ['a', 1935 ["version_plan.txt"], 1936 { href: "#version_plan" }], ". Writing guidelines can be found in the ", 1937 1938 1939 ['a', 1940 ["Daily code"], 1941 { href: "/dna/plan_code#daily" }], ". "]]] 1942 1943 1944 1945 }, 1946 { 1947 id: 'prod_weekly', 1948 title: "Product weekly report", 1949 tag: 'h3', 1950 "short": "Product weekly report", 1951 html: [['p', 1952 [" A weekly executive summary, generated by product or project\n owners, to their team, managers and stake holders, to be\n send by the end of the week, spreading the news about weekly\n accomplishments.", 1953 1954 1955 1956 ['br'], " What should be reported?", 1957 1958 ['br'], " In general, every achievement accrued and completed during the\n last week (with respect to a specific\n product/responsibility) should be reported as well as\n relating to the activities and goals to be carried out the\n following week.", 1959 1960 1961 1962 1963 1964 ['br'], " Be ", 1965 1966 ['a', 1967 ["precise"], 1968 { href: "/dna#transparent-precise" }], ". Write down numbers. Compare to previous weeks and explain the\n growth/regression, success/failure. "]], 1969 1970 1971 1972 1973 ['pre', 1974 ["Was a great week: we reached 95% success rate in install flow, so\nour installs improved dramatically.\nwe have many ideas we will work on next week to continue improving it.\nAlso the homepage changes helped to get the numbers up.\n"], 1975 1976 1977 1978
1979 { className: "cm-s-default code bad has-popover", 1980 cat: "bad", 1981 'data-content': "BAD", 1982 'data-original-title': "", 1983 title: "" }], 1984 1985 ['pre', 1986 ["Improved number of downloads on hola homepage\nas a result of improving the user flow during installation.\nCompleted:\n+ web installer - increase the installs from 65% to 95% by\n fixing technical bugs during installation flow.\nPlanned:\n* Design and implement the main view in hola homepage to increase the first\n click on the main button from 35% to 70% (attached first version of the\n new design. we will run a test during the weekend).\n"], 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 { className: "cm-s-default code good has-popover", 1997 cat: "good", 1998 'data-content': "GOOD", 1999 'data-original-title': "", 2000 title: "" }]] 2001 2002 }, 2003 { 2004 id: 'online', 2005 title: "Online", 2006 tag: 'h3', 2007 "short": "Online", 2008 html: [['p', 2009 [" The working hours of everyone, including management, are all\n open for the whole company to see - enabling real time peer\n collaboration.", 2010 2011 2012 ['br'], " This allows the company's R&D to be spread out in 20+ cities,\n over 15 time zones, and still be an efficient and productive\n development team. "]]] 2013 2014 2015 2016 2017 }, 2018 { 2019 id: 'products', 2020 title: "The Hola product lines", 2021 tag: 'h3', 2022 "short": "Products", 2023 html: [['ul', 2024 [['li', 2025 ["Hola ", 2026 ['a', 2027 ["hola.org"], 2028 { href: "http://hola.org" }]]], 2029 2030 2031 ['ul', 2032 [['li', 2033 ["Value: Making the web worldwide again by allowing\n everyone the freedom to watch content"]], 2034 2035 2036 ['li', 2037 ["Tech: Its the only P2P network in the world.\n P2P makes Hola free and open"]], 2038 2039 2040 ['li', 2041 ["Platforms: Available as a Chrome Extension, Firefox\n Extension, stand-alone browser, iOS, Android"]]]]]]] 2042 2043 2044 2045 2046 }, 2047 { 2048 id: 'dna_mgr', 2049 title: "DNA Manager", 2050 tag: 'h3', 2051 "short": "DNA Manager", 2052 html: [['p', 2053 [" Hola is a ", 2054 ['a', 2055 ["DNA company"], 2056 { href: "/dna#dna" }], 2057 2058 ['br'], " To keep our DNA, which is critical to our success, the DNA\n manager overlooks all activities in the company, and makes\n sure they are compliant with our DNA, which we all\n participated in creating.", 2059 2060 2061 2062 2063 ['br'], " This includes activities such as: "]], 2064 2065 2066 ['ul', 2067 [['li', 2068 [['a', 2069 ["version plan"], 2070 { href: "#version_plan" }]]], 2071 2072 2073 ['li', 2074 [['a', 2075 ["daily"], 2076 { href: "#daily" }], " report"]], 2077 2078 2079 2080 ['li', 2081 ["attendance: hours, vacations, leave, sick, holiday..."]], 2082 2083 ['li', 2084 [['a', 2085 ["emails and communications"], 2086 { href: "/dna/comm" }]]], 2087 2088 2089 ['li', 2090 ["R&D and Deploy shifts"]], 2091 2092 ['li', 2093 ["DNA training sessions in ", 2094 ['a', 2095 ["bootcamp"], 2096 { href: "/dna/bootcamp" }]]], 2097 2098 2099 ['li', 2100 [['a', 2101 ["Hola ranks"], 2102 { href: "/dna#dna-team-veteran" }]]], 2103 2104 2105 ['li', 2106 ["... and generally looking out for any deviation from our\n DNA"]]]]] 2107 2108 2109 2110 }, 2111 { 2112 id: 'attendance', 2113 title: "Attendance", 2114 tag: 'h3', 2115 "short": "Attendance", 2116 html: [['p', 2117 [" At Hola you may choose to work from any location you prefer to\n be as productive and effective as you can.", 2118 2119 ['br'], " We find that working in the office with your peers is\n typically the most productive environment and most fun to\n work at. This is the reason we have several offices\n worldwide, allowing our employees to spend their day with\n their peers. So while working from our offices, we usually\n work for 9.5 hours a day (working hours are usually\n 09:00-18:30), out of which 30 minutes is our ", 2120 2121 2122 2123 2124 2125 2126 2127 ['a', 2128 ["lunch break"], 2129 { href: "#chef" }], ". Minimum working day is usually 4-5h a day.", 2130 2131 2132 ['br'], " But some of us live far from the office or in countries where\n Hola does not have an office and so must work from ", 2133 2134 2135 ['a', 2136 ["home (cloud office)"], 2137 { href: "/dna/cloud" }], ". "]]] 2138 2139 2140 2141 }, 2142 { 2143 id: 'attendance-report', 2144 title: "Reporting attendance", 2145 tag: 'h4', 2146 html: [['p', 2147 [" We have several interfaces to report attendance: "]], 2148 2149 ['ul', 2150 [['li', 2151 [['b', 2152 ["attendance clock"]], 2153 2154 ['br'], " When working from the office, use your card or your\n fingerprint on the attendance clock, at the entrance, to\n login / logout upon entering and leaving the office. "]], 2155 2156 2157 2158 2159 ['li', 2160 [['b', 2161 ["web"]], 2162 2163 ['br'], 2164 ['a', 2165 ["Timesheet"], 2166 { href: "https://web.hola.org/att", 2167 'data-toggle': "tooltip", 2168 'data-placement': "top", 2169 title: "", 2170 'data-original-title': "Link to internal Hola site (not public)." }], " web interface (requires VPN connection), which enables you\n to login and logout while defining your work location: ", 2171 2172 2173 2174 ['ul', 2175 [['li', 2176 [['dfn', 2177 ["At home"]], " - When working from home or hotel"]], 2178 2179 2180 2181 ['li', 2182 [['dfn', 2183 ["In Office"]], " - When working from Hola's office only if the\n attendance clock is not working or available "]], 2184 2185 2186 2187 2188 ['li', 2189 [['dfn', 2190 ["On Road"]], " - Used by sales people, going to meetings outside\n their home or hotel "]]]]]], 2191 2192 2193 2194 2195 2196 2197 ['li', 2198 [['b', 2199 ["email"]], " (sales team only)", 2200 2201 2202 ['br'], " Send an email to ", 2203 2204 ['code', 2205 ["[email protected]"]], " with your location in the subject (", 2206 2207 2208 ['code', 2209 ["home"]], ", ", 2210 2211 2212 ['code', 2213 ["office"]], ", ", 2214 2215 2216 ['code', 2217 ["meeting"]], ", ", 2218 2219 2220 ['code', 2221 ["on the road"]], "...): ", 2222 2223 2224 ['div', 2225 [['span', 2226 [['span', 2227 ["From:"], 2228 { className: "email-tag" }], " [email protected]"], 2229 2230 2231 { className: "email-tag-line" }], 2232 2233 ['br'], 2234 ['span', 2235 [['span', 2236 ["To:"], 2237 { className: "email-tag" }], " [email protected]"], 2238 2239 2240 { className: "email-tag-line" }], 2241 2242 ['br'], 2243 ['span', 2244 [['span', 2245 ["Subject:"], 2246 { className: "email-tag" }], " meeting"], 2247 2248 2249 { className: "email-tag-line" }], 2250 2251 ['br']], 2252 { className: "email has-popover", 2253 cat: "good", 2254 'data-content': "GOOD", 2255 'data-original-title': "", 2256 title: "" }], " to logout, send: ", 2257 2258 2259 ['div', 2260 [['span', 2261 [['span', 2262 ["From:"], 2263 { className: "email-tag" }], " [email protected]"], 2264 2265 2266 { className: "email-tag-line" }], 2267 2268 ['br'], 2269 ['span', 2270 [['span', 2271 ["To:"], 2272 { className: "email-tag" }], " [email protected]"], 2273 2274 2275 { className: "email-tag-line" }], 2276 2277 ['br']], 2278 { className: "email has-popover", 2279 cat: "good", 2280 'data-content': "GOOD", 2281 'data-original-title': "", 2282 title: "" }]]], 2283 2284 2285 ['li', 2286 [['b', 2287 ["command line"]], 2288 2289 ['br'], 2290 ['code', 2291 ["daily login"]], " / ", 2292 2293 2294 ['code', 2295 ["daily logout"]], " - which enable you to login and logout respectively from\n within your Ubuntu VM (usually being used by the R&D) "]]]]] 2296 2297 2298 2299 2300 2301 }, 2302 { 2303 id: 'attendance-absence', 2304 title: "Reporting absence", 2305 tag: 'h4', 2306 html: [['p', 2307 [" If you have a planned absence - report it in advance on your ", 2308 ['a', 2309 ["daily"], 2310 { href: "#daily" }], " report. Unplanned absence (e.g. sick leave) should be reported\n on the daily report as well.", 2311 2312 2313 2314 ['br'], " If you plan to work less hours a day for a given period of\n time, notify your manager - to set expectation of your\n progress correctly. Your daily report for such days should\n also indicate it. "]]] 2315 2316 2317 2318 2319 2320 }, 2321 { 2322 id: 'suggest', 2323 title: "Suggest", 2324 tag: 'h3', 2325 "short": "Suggest", 2326 html: [['p', 2327 [" When making an improvement suggestion, whether of an internal\n tool or of a new design to replace an existing one, the\n suggestion needs to be well thought of before. The\n responsibility for thinking it out over, and bringing\n well-prepered suggestions are on the one who is suggesting\n it.", 2328 2329 2330 2331 2332 2333 ['br'], " The ", 2334 2335 ['a', 2336 ["cost-effectiveness"], 2337 { href: "/dna#effective-cost" }], " of the proposed solution should be the main factor. "]]] 2338 2339 2340 2341 }, 2342 { 2343 id: 'suggest-checklist', 2344 title: "Suggestion checklist", 2345 tag: 'h4', 2346 "short": "Suggestion checklist", 2347 html: [['ul', 2348 [['li', 2349 ["How much time is spent today due to the existing design?"]], 2350 2351 ['li', 2352 ["How much time will be saved after the implementation?"]], 2353 2354 ['li', 2355 [" How much Total Cost Ownership is the change (preparing\n suggestion, discussion time, agreeing on it, coding,\n debugging, deploying, finding all the edge cases)? "]], 2356 2357 2358 2359 ['li', 2360 ["Do we lose any features? Are you fully aware that these\n features are not required?"]], 2361 2362 2363 ['li', 2364 ["Do you have a full idea on how to implement it, on all its\n technical aspects and details, and there are no 'black\n holes'?"]], 2365 2366 2367 2368 ['li', 2369 ["What are the cheaper/quicker ways to solve the same\n problem?"]]]]] 2370 2371 2372 2373 }]; 2374 2375 return E; 2376 });})(); 2377//# sourceMappingURL=dict.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.