summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/lt/javascript-trap.html
blob: e53dbb912eee92079b6f732a3f1996e19f7a8aa4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
<!--#set var="PO_FILE"
 value='<a href="/philosophy/po/javascript-trap.lt.po">
 https://www.gnu.org/philosophy/po/javascript-trap.lt.po</a>'
 --><!--#set var="ORIGINAL_FILE" value="/philosophy/javascript-trap.html"
 --><!--#set var="DIFF_FILE" value="/philosophy/po/javascript-trap.lt-diff.html"
 --><!--#set var="OUTDATED_SINCE" value="2016-03-27" -->

<!--#include virtual="/server/header.lt.html" -->
<!-- Parent-Version: 1.77 -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>JavaScript spąstai</title>

<!--#include virtual="/philosophy/po/javascript-trap.translist" -->
<!--#include virtual="/server/banner.lt.html" -->
<!--#include virtual="/server/outdated.lt.html" -->
<h2>JavaScript spąstai</h2>

<p>Pagal <a href="http://www.stallman.org/">Richard Stallman</a></p>

<p><strong>Jūs galbūt šito nesuvokdami kiekvieną dieną savo kompiuteryje
leidžiate nelaisvas programas &ndash; per savo tinklo naršyklę.</strong></p>

<p>Laisvos programinės įrangos bendruomenėje, idėja, kad nelaisvos programos
išnaudoja jų naudotojus yra žinoma.  Kai kurie iš mūsų visiškai atsisakome
įdiegti nuosavybinę programinę įrangą ir daug kitų nelaisvę laiko smūgiu
prieš tą programą.  Daug naudotojų žino, kad ši problema taikoma
programiniams priedams, kuriuos naršyklės siūlo įdiegti, kadangi jie gali
būti laisvi arba nelaisvi.</p>

<p>Bet naršyklės leidžia kitas nelaisvas programas, apie kurias jos jūsų
neatsiklausia ar jums net neužsimena &ndash; programos, kurias turi, ar
nurodo į, tinklapiai.  Šios programos dažniausiai yra parašytos JavaScript,
nors kitos kalbos taip pat yra naudojamos.</p>

<p>JavaScript (oficialiai vadinama ECMAScript, bet mažuma naudoja tą
pavadinimą) kažkada buvo naudojama mažiems tinklapių padekoravimams, tokiems
kaip miela, bet neesminė navigacija ir vaizdavimo ypatybės.  Šiuos buvo
priimtina laikyti paprastais HTML žymėjimo išplėtimais, o ne kaip tikrą
programinę įrangą; jie reikšmingos problemos nesudarė.</p>

<p>Daug svetainių vis dar naudoja JavaScript tokiu būdu, bet kai kurios ją
naudoja svarbioms programoms, kurios atlieka didelius darbus.  Pavyzdžiui,
Google Docs į jūsų mašiną bando atsiųsti JavaScript programą, kuri apima
pusę megabaito, kompaktiška forma, kurią mes galėtume pavadinti
Užslėpt-scenarijumi, nes joje nėra jokių komentarų ir vos keli tarpai, ir
metodų pavadinimai yra vienos raidės ilgio.  Programos šaltinio kodas yra
pageidautina forma jos modifikavimui; kompaktiškas kodas nėra šaltinio kodas
ir tikrasis šitos programos šaltinio kodas naudotojui nėra prieinamas.</p>

<p>Naršyklės įprastai jums nepraneša kada jos įkrauna JavaScript programas.
Kai kurios naršyklės turi būdą JavaScript išjungti visiškai, bet net jei
jums ši problema yra žinoma, jums kiltų daug problemų identifikuoti tas
nepaprastas, nelaisvas programas ir jas užblokuoti.  Tačiau, net laisvos
programinės įrangos bendruomenėje dauguma naudotojų nežino apie šią
problemą; naršyklių tyla linksta ją nuslėpti.</p>

<p>Yra įmanoma JavaScript programą išleisti laisva programine įranga, šaltinio
kodą platinant pagal laisvos programinės įrangos licenciją.  Jei ta programa
yra savarankiška &ndash; jei jos funkcionavimas ir paskirtis yra
nepriklausomi nuo puslapio, kuriame ji patalpinta &ndash; tai yra gerai; jūs
ją galite nukopijuoti į failą savo mašinoje, jį modifikuoti ir atverti tą
failą su naršykle jo leidimui.  Bet tai yra neįprastas atvejis.</p>

<p>Įprastu atveju, JavaScript programos yra numatytos veikti su konkrečiu
puslapiu ar svetaine ir to puslapio ar svetainės funkcionavimas priklauso
nuo jų.  Tada iškyla dar viena problema: net jei programos šaltinis yra
prieinamas, naršyklės nesiūlo būdo leisti jūsų modifikuotą versiją vietoje
originalios, kai lankomasi tame puslapyje ar svetainėje.  Šis efektas yra
palyginamas su tivoizacija<sup><a href="#TransNote1">1</a></sup>, nors iš
principo ir ne tiek sunkus įveikti.</p>

<p>JavaScript nėra vienintelė tinklo svetainių naudojama kalba naudotojui
atsiųstoms programoms.  Flash palaiko programavimą per išplėstos JavaScript
variantą; jei mes kada nors turėsime pakankamai išbaigtą, laisvą Flash
grotuvą, mums reikės spręsti nelaisvų Flash programų problemą.  Silverlight
atrodo tikėtina sukurs problemą panašią į Flash, tik blogesnę, kadangi
Microsoft ją naudoja kaip platformą nelaisvai kodavimo ir dekodavimo
programinei įrangai.  Laisvas Silverlight pakaitalas neatlieka darbo laisvam
pasauliui, nebent jis įprastai pristatomas su pakaitine laisva kodavimo ir
dekodavimo programine įranga.</p>

<p>Java programėlės taip pat leidžiamos naršyklėje ir kelia panašias
problemas.  Bendrai, bet kokio tipo programėlės sistema kelia šio tipo
problemą.  Laisvos vykdymo aplinkos programėlei turėjimas mus priartina tik
tiek, kad susidurtume su ta problema.</p>

<p>Teoriškai yra įmanoma programuoti su HTML ir CSS, bet praktikoje šis
gebėjimas yra ribotas ir nepatogus; net kažkokio mažmožio padarymas yra
įspūdingas įkirtis.  Tokios programos turėtų būti laisvos, bet CSS nėra
rimta problema naudotojų laisvei 2016&nbsp;m.</p>

<p>Išsivystė stiprus judėjimas, kuris tinklo svetaines kviečia komunikuoti tik
per formatus ir protokolus, kurie yra laisvi (kai kurie sako
&bdquo;atviri&ldquo;); taip sakant, kurių dokumentacija yra paviešinta ir
kuriuos bet kas yra laisvas įgyvendinti.  Su programų tinklapiuose buvimu,
tas kriterijus yra būtinas, bet nepakankamas.  Pati JavaScript, kaip
formatas, yra laisva ir JavaScript naudojimas tinklo svetainėje nebūtinai
yra blogai.  Tačiau, kaip mes pamatėme anksčiau, jis taip pat nebūtinai yra
gerai.  Kai svetainė naudotojui persiunčia programą, nėra pakankama tai
programai būti parašyta dokumentuota ir aiškia kalba; ta programa turi būti
laisva, irgi.  &bdquo;Tik laisvos programos persiųstos naudotojui&ldquo;
privalo tapti to kriterijaus dalimi tinkamam tinklo svetainių elgesiui.</p>

<p>Tyliai įkraunant ir leidžiant nelaisvas programas yra viena iš keleto
problemų, iškeltų &bdquo;tinklo aplikacijomis&ldquo;.  Terminas
&bdquo;tinklo aplikacija&ldquo; buvo suprojektuotas nepaisyti fundamentalaus
skirtumo tarp programinės įrangos pristatytos naudotojams ir programinės
įrangos leidžiamos serveryje.  Jis gali reikšti naršyklėje leidžiamą
specializuotą klientinę programą; jis gali reikšti specializuotą serverinę
programinę įrangą; jis gali reikšti specializuotą klientinę programą, kuri
iš vien veikia su specializuota serverine programine įranga.  Kliento ir
serverio pusės kelia skirtingas etines problemas, net jei jos yra taip
glaudžiai integruotos, kad jos argumentuotai sudaro vienos programos dalis.
Šis straipsnis nagrinėja tik kliento pusės programinės įrangos problemą.
Mes nagrinėjame serverio problemą atskirai.</p>

<p>Praktiniais terminais, kaip mes galime elgtis su nelaisvų JavaScript
programų tinklo svetainėse problema? Pirmas žingsnis yra išvengti jos
leidimo.</p>

<p>Ką mes turime mintyje &bdquo;nepaprastomis&ldquo;? Tai yra laipsnio
reikalas, taigi, tai yra paprasto kriterijaus, kuris duoda gerus rezultatus,
projektavimo reikalas, o ne vieno teisingo atsakymo suradimas.</p>
<p>
Mūsų preliminari politika yra JavaScript programą laikyti nepaprasta jei:</p>

<ul>
  <li>ji atlieka AJAX užklausą ar yra įkraunama kartu su scenarijais, kurie
atlieka AJAX užklausą;</li>

  <li>ji įkrauna išorinius scenarijus dinamiškai ar yra įkrauta kartu su
scenarijais, kurie taip daro;</li>

  <li>ji apibrėžia funkcijas ar metodus ir arba įkrauna išorinį scenarijų (iš
html), arba yra įkrauta kaip toks;</li>
  
  <li>ji naudoja dinamines JavaScript konstrukcijas, kurias yra sunku analizuoti
neinterpretuojant tos programos ar yra įkrauta kartu su scenarijais, kurie
naudoja tokias konstrukcijas.  Šios konstrukcijos yra:
    <ul>
      <li>eval funkcijos naudojimas;</li>
      <li>metodų kvietimas su kvadratinių skliaustų žymėjimu;</li>
      <li>naudojimas bet kokios kitos konstrukcijos, nei teksto grandinės raidinio, su
tam tikrais metodais (Obj.write, Obj.createElement, ...).</li>
    </ul>
  </li>
</ul>

<p>Kaip mes galime atskirti, kad JavaScript kodas yra laisvas? Šio straipsnio
pabaigoje mes siūlome konvenciją, kuria nepaprasta JavaScript programa
tinklapyje gali nurodyti URL kur jos šaltinio kodas randasi ir gali nurodyti
jo licenciją irgi, naudojant stilizuotus komentarus.</p>

<p>Pabaigai, mums reikia pakeisti laisvas naršykles tinklapiuose pastebėti ir
užblokuoti nepaprastą, nelaisvą JavaScript.  <a
href="/software/librejs/">LibreJS</a> programa pastebi nelaisvą, nepaprastą
JavaScript jūsų lankomuose puslapiuose ir ją užblokuoja.  LibreJS yra IceCat
ir IceWeasel (ir Firefox) priedas.</p>

<p>Naršyklės naudotojams taip pat reikia patogios priemonės nurodyti JavaScript
kodą naudojimui <em>vietoje</em> JavaScript tam tikrame puslapyje.  (Šis
nurodytas kodas gali būti visiškas pakaitalas ar modifikuota laisvos
JavaScript programos tame puslapyje versija.)  Greasemonkey yra arti
galėjimo šitą padaryti, bet nevisai, kadangi ji negarantuoja JavaScript kodo
puslapyje modifikavimo prieš tos programos vykdymo pradžią.  Vietinio
įgaliojimo naudojimas veikia, bet jis dabar yra per daug nepatogus būti
realiu sprendimu.  Mums reikia sukonstruoti sprendimą, kuris yra patikimas
ir patogus, kaip ir svetainių dalinimuisi pakeitimais.  GNU projektas norėtų
parekomenduoti svetaines, kurios yra dedikuotos tik laisviems pakeitimams.</p>

<p>Šios ypatybės padarys įmanomu JavaScript programai įtrauktai į tinklapį būti
laisva realia ir praktine prasmėmis.  JavaScript daugiau nebus konkreti
kliūtis mūsų laisvei &ndash; ne daugiau nei C ir Java dabar yra.  Mes
galėsime atmesti ir net pakeisti nelaisvas, nepaprastas JavaScript
programas, lygiai taip, kaip mes atmetame ir pakeičiame nelaisvus paketus,
kurie yra siūlomi įdiegti įprastu būdu.  Mūsų kampanija tinklo svetainėms
išlaisvinti jų JavaScript gali tada prasidėti.</p>

<p>Tuo tarpu, yra vienas atvejis kai yra priimtina leisti nelaisvą JavaScript
programą: išsiųsti nusiskundimą tinklo svetainės operatoriams, sakantį jie
turėtų išlaisvinti arba pašalinti JavaScript kodą toje svetainėje.  Prašome
nedvejokite laikinai aktyvuoti JavaScript to padarymui &ndash; bet
prisiminkite po to ją vėl išjungti.</p>

<p><strong>Ačiū jums <a href="/people/people.html#mattlee">Matt Lee</a> ir <a
href="http://ejohn.org">John Resig</a> už jų pagalbą apibrėžiant mūsų
pasiūlytą kriterijų, ir David Parunakian už pagalbą man šią problemą
sužinoti.</strong></p>

<h3 id="AppendixA">A priedas: konvencija laisvų JavaScript programų išleidimui</h3>

<p>Nuorodoms į atitinkamą šaltinio kodą, mes rekomenduojame</p>
<pre dir="ltr">

    // @source:

</pre>

<p>užbaigiant su URL.  Tai patenkina GNU GPL reikalavimą platinti šaltinio
kodą.  Jei tas šaltinis yra kitoje svetainėje, jūs privalote pasirūpinti <a
href="/licenses/gpl-faq.html#SourceAndBinaryOnDifferentSites">tinkamu to
sutvarkymu</a>.  Šaltinio kodas programai būti laisva yra būtinas.
</p>

<p>Įkelto į puslapį JavaScript kodo licencijos parodymui, mes rekomenduojame
tos licencijos pastabos patalpinimą tarp dviejų tokios formos pastabų:</p>
<pre dir="ltr">
<!--TRANSLATORS: Do not translate these license notices.  The <pre>

    elements have dir="ltr" explicitly set to cater for RTL languages.-->

    @licstart  The following is the entire license notice for the 
    JavaScript code in this page.
    ...
    @licend  The above is the entire license notice
    for the JavaScript code in this page.

</pre>
<p>Žinoma, visa tai turėtų būti patalpinta keleto eilučių komentare.</p>

<p><a href="/licenses/gpl.html">GNU GPL</a>, kaip daug kitų laisvos programinės
įrangos licencijų, reikalauja licencijos kopijos platinimo su abejomis
&ndash; šaltinio ir dvejetaine, programos formomis.  Tačiau, GNU GPL yra
pakankamai ilga, jog jos įtraukimas puslapyje su JavaScript programa gali
būti nepatogus.  Jūs galite tą reikalavimą pašalinti, kodui, kuriam jūs
turite autorių teises, su licencijos pastaba, kaip ši:</p>
<pre dir="ltr">

    Copyright (C) YYYY  Developer

    The JavaScript code in this page is free software: you can
    redistribute it and/or modify it under the terms of the GNU
    General Public License (GNU GPL) as published by the Free Software
    Foundation, either version 3 of the License, or (at your option)
    any later version.  The code is distributed WITHOUT ANY WARRANTY;
    without even the implied warranty of MERCHANTABILITY or FITNESS
    FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

    As additional permission under GNU GPL version 3 section 7, you
    may distribute non-source (e.g., minimized or compacted) forms of
    that code without the copy of the GNU GPL normally required by
    section 4, provided you include this license notice and a URL
    through which recipients can access the Corresponding Source.

</pre>

<p>Aš dėkoju Jaffar Rumith už mano dėmesio atkreipimą į šią problemą.</p>

<h3 id="AppendixB">B priedas: laisvų JavaScript programų viešinimas esant žiniatinklio
administratoriumi</h3>

<p>Jei jūs esate žiniatinklio administratorius savo svetainėje dislokuojantis
laisvą JavaScript programinę įrangą, viešinant informaciją apie tų failų
licencijas ir šaltinio kodą aiškiai ir pastoviai jūsų lankytojams padeda
užsitikrinti, kad jie leidžia laisvą programinę įrangą, ir jums padeda
atitikti licencijos sąlygas.</p>

<p>Vienas metodas nurodyti licencijas yra tas vienas apibūdintas anksčiau <a
href="#AppendixA">A priede</a>.  Antras metodas &ndash; <a
href="/licenses/javascript-labels.html">JavaScript licencijos tinklo
etiketės</a>, gali būti labiau patogus sumažintoms JavaScript kodo
bibliotekoms, ypatingai kai jūs jų neparašėte.</p>

<div class="translators-notes">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
<h3>Vertėjo pastabos</h3>
<ol>
<li id="TransNote1">Tivoizacija (anglų k.: tivoization) yra praktika, kai
įrenginyje įdiegtą laisvą programinę įrangą gali pakeisti tik vienas
gamintojas.</li>
</ol></div>
</div>

<!-- for id="content", starts in the include above -->
<!--#include virtual="/server/footer.lt.html" -->
<div id="footer">
<div class="unprintable">

<p>Bendrus FSF ir GNU užklausimus prašome atsiųsti į <a
href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.  Taip pat, yra ir <a
href="/contact/">kiti būdai susisiekti</a> su FSF.  Neveikiančių nuorodų ir
kiti pataisymai arba pasiūlymai gali būti atsiųsti į <a
href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>

<p>
<!-- TRANSLATORS: Ignore the original text in this paragraph,
        replace it with the translation of these two:

        We work hard and do our best to provide accurate, good quality
        translations.  However, we are not exempt from imperfection.
        Please send your comments and general suggestions in this regard
        to <a href="mailto:web-translators@gnu.org">

        &lt;web-translators@gnu.org&gt;</a>.</p>

        <p>For information on coordinating and submitting translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
Mes dirbame sunkiai ir labai stengiamės, kad pateiktume tikslius, geros
kokybės vertimus.  Tačiau mes nesame išimtys netobulumui.  Prašome siųskite
savo komentarus ir bendrus pasiūlymus šia prasme į <a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.</p>
<p>Mūsų tinklapių vertimų koordinavimo ir pateikimo informaciją pamatykite
<a href="/server/standards/README.translations.html">Vertimų
PERSKAITYKITEMANE</a>.</p>
</div>

<!-- Regarding copyright, in general, standalone pages (as opposed to
     files generated as part of manuals) on the GNU web server should
     be under CC BY-ND 4.0.  Please do NOT change or remove this
     without talking with the webmasters or licensing team first.
     Please make sure the copyright date is consistent with the
     document.  For web pages, it is ok to list just the latest year the
     document was modified, or published.
     
     If you wish to list earlier years, that is ok too.
     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
     years, as long as each year in the range is in fact a copyrightable
     year, i.e., a year in which the document was published (including
     being publicly visible on the web or in a revision control system).
     
     There is more detail about copyright years in the GNU Maintainers
     Information document, www.gnu.org/prep/maintain. -->
<p>Copyright &copy; 2009-2013, 2016 Richard Stallman</p>

<p>Šiam puslapiui taikoma <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/deed.lt">Creative
Commons Priskyrimas - Jokių išvestinių darbų 4.0 Tarptautinė licencija</a>.</p>

<!--#include virtual="/server/bottom-notes.lt.html" -->
<div class="translators-credits">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
 </div>

<p class="unprintable"><!-- timestamp start -->
Atnaujinta:

$Date: 2016/11/18 07:32:45 $

<!-- timestamp end -->
</p>
</div>
</div>
</body>
</html>