PageSourceSearch

https://cdn4.hola.org/www/hola/pub/dna/dict.js

js hola.org collected 2026-09-24 10:18:22 UTC 62,877 bytes, 2,377 lines download raw bytes

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.