Daha çox

GDAL_CALC işləyir, amma hər prosesin sonunda avtomatlaşdırmanın qarşısını alan bir piton xətası alıram


Python 3.4.1, GDAL 1.11.0, OSGEO4W, Windows 7, OSGEO4W Windows Shell

Hamısı 64 bit

(ArcGIS, Python 2.7 ilə 10.2 də quraşdırılmışdır)

Beləliklə gdal_translate yaxşı işləyir.

gdal_calc mükəmməl nəticələr təqdim edir, lakin hər bir prosesin sonunda aşağıdakı xətanı alıram. Bu açılan səhv səbəbindən heç nəyi avtomatlaşdıra bilmədiyim üçün bir problem var. Yaxın vurdum və səhv aradan qalxdı, çıxış faylı% 100 mükəmməldir, lakin sonrakı gdal_calc satırı da mənə eyni səhv verir.

Bu səhv verən bir nümunə kod xəttidir (demək olar ki, bütün gdal_calc əmrlərim səhv verir, amma gdal_translate deyil).

gdal_calc.py -A 2000025-2000032.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  QUAL  2000025-2000032.m0481pfv50-qual.hdf.tiffBINARY.tiff --outfile = A25_32_SSTQUAL4. calc = "A * B"

və bu səhvdir. Dediyim kimi, proses həqiqətən işləyir və səhv qutusunu bağladıqda davam edəcəkdir. DONE sözü göründükdən sonra səhv açılır, pəncərəni bağlayıram və sonra növbəti kod sətri işləyir, sonra səhv yenidən açılır və s.

Yaranan əlavə səhv mesajı> Problem imzası: Problem hadisəsi adı: APPCRASH Tətbiq adı: python.EXE Tətbiq Sürümü: 0.0.0.0 Tətbiq vaxtı nişanı: 5193f3af Hata modulu Adı: ntdll.dll Hata Modulu Versiyası: 6.1.7601.18247 Hata Modulu Zaman damgası: 521eaf24 İstisna Kodu : c0000005 İstisna Ofset: 0000000000053290 OS Versiyası: 6.1.7601.2.1.0.256.48 Yerli şəxsiyyət kodu: 1033 Əlavə məlumat 1: 8c64 Əlavə məlumat 2: 8c64dfac0942d27b36722f7434c64847 Əlavə məlumat 3: e156 Əlavə məlumat 4: e156d560349593030

Kimi son dərəcə Ağır, son çaba səyləri yanaşması, Windows istifadə qəza dialoqlarını aradan buraxa bilərsinizDontShowUIWindows Error Reporting qeyd defteri düymələrindəki dəyər.


OSGEO4W pəncərəsindən eyni səhvim var ... Bəlkə də mühitin qurulması ilə bağlı bir problem, kitabxanaya girəndə itkin bir şey var:

_sre import MAXREPEAT ImportError: MAXREPEAT adını idxal edə bilmir

Ancaq normal bir komanda pəncərəsində çox yaxşı işləyir ... GDAL-ın pythonda işləməsi üçün vacib olan GDAL_DATA və digər mühit dəyişənlərini əlavə etdim və python 2.7 istifadə edirəm (ArcMap ilə birlikdə gəlir).

GDAL-ın istifadə etdiyi mühit dəyişənləri:

GDAL_DATA C:  Program Files  QGIS Dufour  share  gdal GDAL_DRIVER_PATH C:  Program Files  QGIS Dufour  bin  gdalplugins GEOTIFF_CSV C:  Program Files  QGIS Dufour  share  epsg_csv PROJ_LIB C: Program  proj

Bu qovluqları yerli sisteminizdə tapmalı olacaqsınız, kifayət qədər yaxın olmalıdırlar.

Python əmrləri siyahısını ".bat" uzantısı ilə qeyd edib avtomatlaşdırmaq üçün iki dəfə vurun. Ətraf mühit dəyişkənlərini qalıcı bir şəkildə təyin etmək sizə xoş deyilsə, belə bir formatdan istifadə edin:

set GDAL_DATA = C:  Program Files  QGIS Dufour  share  gdal set GDAL_DRIVER_PATH = C:  Program Files  QGIS Dufour  bin  gdalplugins set GEOTIFF_CSV = C:  Program Files  QGIS Dufour  share  epsg_csV set PRO_  Program Files  QGIS Dufour  share  proj gdal_calc.py -A 2000025-2000032.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  QUAL  2000025-2000032.m0481pfv50-qual.hdf.tiffBINARY. tiff --outfile = A25_32_SSTQUAL4.tiff --calc = "A * B" fasilə

Bir toplu iş faylı (.bat) kimi qeyd edildikdə və cüt vurulduqda bir əmr pəncərəsi açılacaq, əmri işə salın və sonra istifadəçiyə davam etmək (çıxmaq) üçün enter düyməsini basması istənəcəkdir. Ətraf mühit parametrləri bu şəkildə edildikdə qalıcı deyil və yalnız həmin pəncərəyə tətbiq olunur. Python'un hansı versiyanın kodu işlədəcəyi ilə maraqlanırsınızsa, istifadə edinyol təyin et =;% yol%yolu yalnız bir versiyaya məhdudlaşdırmaq.

Bir toplu işdə% A %% A ilə əvəz olunur, əmr prosessoru ilk% silir:

set GDAL_DATA = C:  Program Files  QGIS Valmiera  share  gdal set GDAL_DRIVER_PATH = C:  Program Files  QGIS Valmiera  bin  gdalplugins set GEOTIFF_CSV = C:  Program Files  QGIS Valmiera  share  epsg_csv set PRO_  Program Files  QGIS Valmiera  share  proj pauza %% A in ("C:  temp  *. Hdf") gdal_translate -of GTiff -a_srs "+ init = epsg: 4326" -a_ullr -180 90 180 - 90 -co "COMPRESS = PACKBITS" -sds "%% A" "%% A.tiff" in %% A in ("C:  temp  *. Tiff") do gdalinfo "%% A" >> "% % A. A üçün %% Atxt ("C:  temp  *. Tiff") do gdal_calc.py -A "%% A" --outfile = "%% ABINARY.tiff" --calc = "0 * (A <3) "-calc =" 1 * (A> 3) "in %% A in (" C:  temp  *. Tiff ") do gdal_calc.py -A" %% A "- outfile = "%% A_C.tiff" --calc = "A * (0.07500000298)" gdal_calc.py -A 2000001-2000008.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  2000001-2000008. m0481pfv50-qual.hdf.tiffBINARY.tiff --outfile = A1_8_SSTQUAL4.tiff --calc = "A * B" gdal_calc.py -A 2000009-2000016.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  tema  2000009-2000016.m0481pfv50-qual.hdf.tiffBINARY.tiff --outfile = A9_16_SS TQUAL4.tiff --calc = "A * B" gdal_calc.py -A 2000017-2000024.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  2000017-2000024.m0481pfv50-qual.hdf.tiffBINARY. tiff --outfile = A17_24_SSTQUAL4.tiff --calc = "A * B" gdal_calc.py -A 2000025-2000032.s0481pfv50-sst-16b.hdf.tiff_C.tiff -BC:  temp  2000025-2000032.m0481pfv50-qual .hdf.tiffBINARY.tiff --outfile = A25_32_SSTQUAL4.tiff --calc = "A * B" gdal_calc.py -A A1_8_SSTQUAL4.tiff -B A9_16_SSTQUAL4.tiff -C A17_24_SSTQUAL4_Tiff -C A17_24_SSTQUAL4_TIF -SF .tiff --calc = "A + B + C + D" gdal_calc.py -A 2000001-2000008.m0481pfv50-qual.hdf.tiffBINARY.tiff -B 2000009-2000016.m0481pfv50-qual.hdf.tiffBINARY.tiff -C 2000017-2000024.m0481pfv50-qual.hdf.tiffBINARY.tiff -D 2000025-2000032.m0481pfv50-qual.hdf.tiffBINARY.tiff --outfile = QUAL_final.tiff --calc = "A + B + C + D" gdal_calc. py -A SST_SUM_C.tiff -BC:  temp  QUAL_final.tiff --outfile = SST_Final_C.tiff --calc = "A / B" gdal_translate SST_Final_C.tiff -of GTiff -ot Float32 -a_nodata 0 SST_Final_C_NoData.t SST_Final_C_NoData.tiff -md 5 -si 2 SST_Final_C_NoData_Foc.tiff üçün %% A ("C:  temp  landmask  *. Hdf") gdal_translate -of GTiff -a_srs "+ init = epsg: 4326" -a_nodata 2 - a_ullr -180 90 180 -90 -co "COMPRESS = PACKBITS" -sds "%% A" "%% A.tiff" in %% A in ("C:  temp  landmask  *. tiff") do gdal_calc. py -A "%% A" --outfile = "%% A_FINAL.tiff" --calc = "1 * (A <5)" gdal_calc.py -A SST_Final_C_NoData_Foc.tiff -BC:  temp  landmask  pfv50_land. m04.hdf.tiff_FINAL.tiff --outfile = SST.tiff --calc = "A * B" gdal_translate SST.tiff -of GTiff -ot UInt16 -a_nodata 0 -stats -co "COMPRESS = LZW" SST_ALLDONE.tiff pauza

Pdf417 barkod yaradılması, Reed Solomon səhv düzəltmə kod sözləri, python və JAVA arasındakı fərq

Python kitabxanası pdf417gen istifadə edərək bir pdf417 barkod yaratdım.

Barkod "M1LONG" simvolunun qrafik təsviri idi. Barkodda iki məlumat sütunu var və Reed Solomon səhv düzəltmə təhlükəsizlik səviyyəsi "1" olaraq təyin edilmişdir. Bu, səkkiz məlumat kod sözünün girişi ilə səhv düzəltmə kod sözlərinin sayının dörd olması lazım olduğunu göstərir.

Python çıxışı, D07-dən D00-ə qədər məlumat kodu sözlərini <8, 389, 902, 11, 900, 344, 396, 900> olaraq göstərir. Python, C03-dən C00-dək səhv düzəltmə kod sözlərini <718, 801, 313, 877> kimi sadalayır. Bütün kod sözləri yaratmaq üçün istifadə olunan Python:

Səhv düzəltmə kod sözləri polinomlar, Galois Field hesabı və pdf417 sistemi üçün mümkün kod sözlərinin sayı olan 929 modulunun tamamlayıcılarından istifadə etməklə yaradılır. Hesablamalar prosesi sadələşdirmək üçün bir sıra amillərdən istifadə edir. Təhlükəsizlik səviyyəsi 1 üçün tövsiyə olunan amillər sayı dörddür. Faktlar 522,568,723,809-dur

Problem budur. Http://grandzebu.net/informatique/codbar-en/pdf417.htm saytından əldə edilmiş bir JAVA yalançı kodunu istifadə edərək səhv kod sözlərini yenidən yaratmağa çalışdım.

Yuxarıda təsvir olunan Python proqramı ilə eyni kod sözləri sınamaq və yaratmaq üçün bir JAVA proqramı yazdım, ancaq eyni səhv kod sözləri yaratmır.

JAVA proqramı tərtib edir və işləyir, riyaziyyat mənim öyrədilməmiş gözüm üçün yaxşı görünür, amma çıxarılan səhv kodları eyni deyil. Budur mənim JAVA, iki proqramı müqayisə etməyi asanlaşdırmaq üçün JAVA dəyişənləri Python ilə eyni adlandırılır.

Pdf417gen kitabxanasında yer alan python proqramı ilə eyni səhv kod sözləri yaratmağı əngəlləyən JAVA kodunda problemin nə olduğunu bilmək üçün çox minnətdar olardım.


Xaricdəki TikZ 2.10 kitabxanası bu problemi həll edir. LaTeX sənədində bütün TikZ qrafiklərini xaricə çıxarmaq aşağıdakı qədər asandır:

Sənədiniz report.tex adlanırsa, bu bir sıra şəkilləri atacaq: report-figure0.pdf, report-figure1.pdf, və s. Daha idarəolunan bir nəticə əldə etmək üçün bir qovluq göstərə bilərsiniz. fayllar yerləşdirilməli və report-figure0.pdf-dən daha təsviri olan adlar:

Sənədi tərtib etmək üçün rəqəmlər qovluğunun mövcudluğunu təmin etməli və qabıq icrası aktivləşdirilərək pdflatex-i çalıştırmalısınız:

Rəqəmlərin çıxış tərzini fərdiləşdirmək üçün bütün bir yığın seçim mövcuddur. Tam məlumat və seçimlər üçün inkişaf versiyası sənədlərinin 52.4 bölməsinə (bu nömrələmə dəyişdirilə bilər!) Baxın. Təlimat ayrıca EPS çıxışının necə alınacağını da əhatə edir, lakin bu seçim PDF çıxışından daha az cilalanmış görünür.

Magistr tezisini yazarkən bütün rəqəmlərimi və diaqramlarımı tikz və pgfplots ilə yaratmışdım (matplotlib2tikz istifadə edərək). Hamısının mənbə daxilində saxlanılması qəbuledilməz idi, çünki tərtib həqiqətən ləng gedirdi, ona görə də bütün bu rəqəmləri mətnimə əlavə edə biləcəyim pdf fayllarına avtomatik yığmağıma imkan verəcək bir şey axtarırdım.

Müxtəlif səbəblərə görə digər həllərdən heç biri məni qane etmirdi, buna görə məqsədimə uyğun Python skriptini yazdım.

Unutmamalı olduğunuz şeylər:

  1. Şrifti main.tex dosyanızla eyni səviyyədə qoydunuz
  2. Tikz kodunuzu yazırsınız. Hər bir rəqəmi * .tikz uzantısı olan bir faylın içərisinə yerləşdirirsiniz. Hər bir fayl yalnız begin ehtiva edir . end .
  3. * .Tikz faylları ilə istifadə etmək istədiyiniz giriş sözü yazırsınız. Bu mütləq main.tex dosyanızın giriş hissəsi ilə eyni paketləri ehtiva etmir. Bütün rəqəmlər üçün ortaq preambula saxlamağınızın səbəbi şriftlər və s. Kimi şeylərdə dəyişiklik etməyi asanlaşdırmaqdır.
  4. Ssenarini idarə edirsiniz!

Şrift * .tikz sənədləri üçün bir qovluq quruluşunda rekursiv olaraq axtarır və göstərilən girişdən istifadə edərək onları tərtib edir. Skriptlər hər dəfə işlədikdə, hər * .tikz faylının dəyişiklik müddətini saxlayır və sonrakı işlərdə yalnız son işdən bəri dəyişdirilmiş faylların yeni yaradılmış sənədlərini tərtib edir. Preambulanızda dəyişiklik etsəniz, yalnız bir əmr sətri arqumentini ötürürsünüz və bütün * .tikz sənədlərini tərtib edir.

Linuxda əla işləyir. Pəncərələrdə sınaqdan keçirməmişəm, amma niyə işləməməli olduğunu bilmirəm. Hər halda, hər hansı bir problem olsa belə, düzəliş həqiqətən əhəmiyyətsiz olacaq

Budur alternativ Konradın cavabı, yəqin ki, o qədər yaxşıdır və əlbəttə ki, daha yaxşı sənədləşdirilmişdir.

Sadəcə aşağıdakıları düşündüm. Çox yaxşı işləyir (Unix / Linux və Mac-də):

İzahat:

Beginpgfgraphicsnamed olan bütün sətirləri süzmək üçün grep istifadə edir, ancaq yalnız sətirdəki əmrdən əvvəl yalnız boşluq varsa. Bu, şərh edilmiş əmrlərin də tapılmasına mane olur.

Sonra, bu sətirlərdən yalnız müvafiq hissəni, yəni pdflatex iş adı kimi istifadə ediləcək əmr arqumentini süzmək üçün sed çağırır. Sonra bütün bu iş adları üzərində təkrarlamaq üçün istifadə edir və hər biri üçün növbə ilə pdflatex çağırır.

PDF fayllarını bütün tikz / pgfplots / -dan düzəldən bir shell skriptini hazırladım. - şəkillər. Mövcud həllərlə müqayisədə yanaşmamın bəzi üstünlükləri var: (Mövcud həlləri çox yaxşı bilmirəm. Ancaq ümid edirəm bəzi üstünlükləri həqiqi üstünlüklərdir.)

Fərdi şəkillərin düzəldilməsi yalnız lazım olduqda, yəni mənbə və ya daxil edilmiş məlumatlar və ya daxil edilmiş başlıqlar (mövcud?) PDF-dən daha yeni olduqda baş verir. Əgər məsələn pgfplots ilə bəzi məlumatlar, yalnız sağ qovluğa yeni bir csv faylı qoya bilərsiniz və əsas sənədin növbəti tərtibində bu tanınır və yalnız bu faylı istifadə edən şəkil yenidən qurulur.

Çözümümün bir üstünlüyü də PDF-lərin paralel olaraq tərtib edilməsidir. Ancaq bir və ya bir neçə pdf-nin qeyd sənədlərindən ətraflı məlumat daxil olmaqla tərtib edə bilməməsi və sonra əsas sənədin qalan tərtibinin dayandırılması ilə fərqlənirsiniz. Arxa planda işləyən tərtiblərin sayı 4 və ya 8 kimi bir sıra proseslərlə məhdudlaşdırıla bilər (istifadə etmək istədiyiniz CPU nüvələrinin sayından asılı olaraq). Xüsusilə bir proses çox RAM tələb edərsə (mənim vəziyyətimdə bəzi geniş pgfplots şəkillərinin tərtibi zamanı> 1 GB RAM-ə ehtiyac olur.)

layihə seçimi, lazımsız tərtiblərdən qaçınmaq üçün tanınır. Üstəlik, başlıqları təkrar-təkrar dəyişdirməyiniz üçün faydalı ola biləcək bir buildall və buildnone seçimi var.

Məhdud tikz deyil, hər bir şəkil normal, tam bir .tex sənəd olduğu üçün hər hansı bir paket mümkün olmalıdır.

Tikz-ə gəlincə, şəkillərin sərhədlərində mətni bağımsız istifadə edərək kəsməklə bağlı bəzi problemlər yaşadım. Tərtib etdikdən sonra pdfcrop ilə şəkillərlə A4 səhifələrini kəsdiyim üçün bu davranış mənim həllimlə baş vermir.

Aşağıdakı kimi göstərildiyi kimi ssenari zəngi üçün .sty-faylım var. Şəkillər-Qovluq üçün bir tərif var, iki nümunə şəkli və skript çağırışı və qaytarma dəyəri işlənməsi. usepackage əsas sənədimdəki documentclass-dan sonra ilk sətirdir, buna görə bütün pdf-lərin daima yeniləndiyindən əmin olur.

Şəkil (çox qısa) əsas sənədə bu şəkildə daxil edilmişdir:

Bir şəkil üçün bir nümunə ola bilər

Çağırılan qabıq ssenarisi aşağıdakı şəkildə göstərilir. Hər bir .tex sənədində istifadə, paket, giriş, pgfplotstableread axtarır və istifadə olunan faylların mövcud PDF-dən daha yeni olduğunu da tanıyır.


5 Cavablar 5

Test avtomatlaşdırmasına gəldikdə həmişə testləri diqqətlə seçməlisiniz. :)

Dediyiniz kimi səbəblərdən biri üst-üstə düşməkdir (və bununla birlikdə icra müddəti və möhkəmlik). Bir misal aydınlaşdırmaq:

  • API'nizin hər birində bir neçə fərqli səhv mesajı verə biləcək 10 son nöqtə var.
  • Etmə Hər bir səhvi UI testi kimi sınayın: bu çox işləmə vaxtı alacaq və eyni zamanda ən yüksək baxıma səbəb olacaq. Bəli, API və vahid testləri ilə funksional üst-üstə düşəcəksiniz.
  • Etmə hər bir səhv bir API testi kimi test edin əgər məntiqləri vahid testlərində tamamilə əhatə olunur.
  • Et ön tərəf tərəfindən düzgün göstərildiklərindən əmin olmaq üçün bir və ya iki səhv üçün bir UI testi yazın. Ancaq bu, ehtimal ki, ümumi bir sistemdir, buna görə sistem işləsə, hər hansı bir səhv mesajı üçün işləyəcəkdir. UI testləri tətbiqetmənin axınlarını yoxlamaq kimi qəbul edilməli və istifadəçinin məntiqi dərindən yoxlamamaqla işi bitirə biləcəyini görməlidir.
  • Et bir və ya iki səhv üçün API testlərini yazın, arxa entegrasiyanın istəkdən cavaba (vahid testlərinin əhatə dairəsi xaricində) yaxşı oynadığından əmin olun. Və ya konkret hallar üçün daha çox test yazın (məsələn, vahid testində lağa qoyulacaq verilənlər bazasına girişin işə düşdüyü yer).

Hansı halların avtomatlaşdırılacağını düşünməyin başqa bir səbəbi sadəcə hər avtomatlaşdırılmış testin uzunmüddətli perspektivdə o qədər faydalı və ya səmərəli olmamasıdır. Angie Jones'un & quotHansı testləri avtomatlaşdırmalıyıq & quot; mövzusundakı təqdimatı üçün YouTube'da baxmanızı məsləhət görürəm - https://slides.com/angiejones/which-tests-should-we-automate#/20

Fərqli test səviyyələrində üst-üstə düşən test qabları anlayışı yoxdur,

Hər ikisi tamamilə təcrid olunmuşdur

API yaxşı işlədiyinə görə UI-nin yaxşı işləməyinə zəmanət verə bilməzsiniz.

Bütün API testlərinizi keçdiyini, lakin istifadəçi interfeysindən istifadə edə bilməyəcəyini düşünün, önbelleğe alınmış məlumatlar səbəbiylə işləyən bütün interfeyslərinizi təsəvvür edin.

Vahid testi və API testi kimi daha aşağı səviyyəli əhatə dairəsini təmin edin, bu daha sürətli test icrası və geribildirim qurmağınızı təmin edir. Bu da daha sürətli ayıklamanı təmin edəcək, çünki testləriniz komponentə və ya xüsusiyyətə daha çox yönəldiləcəkdir.

UI testində faktiki iş axını və səhv işləmə testləri

Hər bir test səviyyəsində fərqli test sahələrimiz var.

Biz iş axınını yox, komponenti və funksionallığı yoxlayırıq

İnteqrasiya Testi

Digər komponentlərlə inteqrasiya, daha yüksək səviyyəli komponentlərlə genişləndirmək üçün istifadə edilə bilən inteqrasiya edilmiş alt sistemin nə qədər sabitdir. UI ilə API kimi

Sistem Testi

Burada Kullanışlılığı, istifadəçi qarşılıqlı əlaqələrini, vizual regresiyanı, iş məntiqini və axını test edirsiniz.

Beləliklə, fərqli test səviyyələrində üst-üstə düşən testlər anlayışı yoxdur

TLDR: E2E və API inteqrasiya test halları arasında üst-üstə düşəcəksiniz, eyni son nöqtələr baxımından hər ikisində və hər şey yaxşıdır - bir şeyin səhv olduğu təqdirdə (. zaman) problemin harada olduğunu anlamağa kömək edir.

Hal-hazırda hərtərəfli avtomatlaşdırılmış testi olmayan bir kod bazası ilə işləyərkən, E2E (/ funksional / UI) testləri ilə başlayın. Niyə?

Tətbiqin UI iş axınları vasitəsilə avtomatlaşdırılması istifadəçilər üçün empati yaratmağa kömək edir - bunları nə üçün istifadə edirlər və bunu necə edirlər?

Bu testlər, proqramın istifadəçilərinizə API dəyəri və ya funksiyaları ilə maraqlanmaması lazım olan dəyəri təmin etdiyini yoxlamağınıza imkan verir! Diqqət yetirin ki, API yalnız veb müştəri tərəfindən istehlak olunmayan özlüyündə bir məhsul olsaydı, bu fərqli olardı.

Daha texniki test nöqteyi-nəzərindən, aşağı səviyyəli testlər, ehtimal ki, sınaq barədə düşünmədən yazılmış kodu tətbiq etmək üçün bəzi dəyişiklikləri (məsələn, sınamaq üçün müvafiq sərhədləri tətbiq etmək) tələb edəcəkdir. Bu dəyişikliklərin düzgün edildiyinə əmin olmaq üçün daha yüksək səviyyəli testlərə ehtiyacınız var.

Bu, ehtimal ki, həddindən artıq uzun sınaq müddəti ilə xarakterizə olunan çox sayda E2E testinizin olduğu bir yerə gətirib çıxaracaq, ancaq indi testləri inteqrasiya və vahid testlərinə yığışdırmaqla başlaya bilərsiniz. Bir sıra əsas iş axınlarının saxlanmasına diqqət yetirin (bu, komandanızdakı məhsul insanlarla yaxşı bir söhbət ola bilər - hər kəs əsas iş axınlarının nə olduğunu bilirmi? var?) E2E səviyyəsində, daha az vacib olan yolları və təkrarı aşağı səviyyəli testlərə keçirin.

Xüsusilə API testləri baxımından, hər bir son nöqtəni ən azı bir dəfə istifadə etməli olduğunuz E2E test vəziyyətlərinizin üst-üstə düşməsi çox olacaq (yoxsa istifadə olunmayan son nöqtələrin silinə biləcəyini düşünün). Bu üst-üstə düşmə yaxşıdır, çünki indi bir E2E testi uğursuz olsa da, müvafiq API testləri keçərsə, məsələni interfeysdə lokallaşdırdınız. Ancaq UI vasitəsilə sınanması çətin olan şeylər olacaq. Ümumiyyətlə bunlar bədbəxt yollar, misal üçün:

ehtimal ki, istifadəçi interfeysi səviyyəsində girişlərin doğrulaması var, əgər etibarsız olduqda sorğunun edilməsinə mane olur, lakin yenə də server tərəfindəki doğrulamanı sınamalı və

yəqin ki, istifadəçi interfeysindəki itkin mənbələrə bağlantılarınız yoxdur, lakin yenə də 404-ləri sınamaq istəyərsiniz.

Eynilə, API-də sınanması çətin olan və bu vəziyyətdə bir çox quraşdırma və sökülmə tələb edən şeylər var, xidmət / iş məntiqi qatını vahid test etmək üçün daha aşağıya doğru itələyin (istərdim) yox vahidin nəzarətçi / nəqliyyat və ya depo / davamlılıq təbəqələrini sınaqdan keçirməsini tövsiyə edin, bu, çox məntiqə sahibdirsə, yəqin ki, səhv yerdədir).


5 Cavablar 5

ConflictResolution: = xlLocalSessionChanges parametrini SaveAs metodunda istifadə etməyi sınamısınız?

  • Bu ayar heç bir makrosun işləməsinə imkan vermir. Yeni bir Excel iş kitabını açdığınız zaman, makrolar içərisində olduğunuzu xəbərdar etmirsiniz, buna görə bunun bir iş kitabının gözlənildiyi kimi işləməməsinin səbəbi olduğunu bilmirsiniz.

  • Bu parametr makroların işləməsinin qarşısını alır. Ancaq bir iş kitabında makrolar varsa, makroların mövcud olduğunu və aradan qaldırıldığını xəbərdar etmək üçün bir pop-up göstərilir.

  • Bu parametr yalnız etibarlı mənbələrdən makroların işləməsinə imkan verir. Bütün digər makrolar işləmir. Yeni bir Excel iş kitabını açdığınız zaman, makrolar içərisində olduğunuzu xəbərdar etmirsiniz, buna görə bunun bir iş kitabının gözlənildiyi kimi işləməməsinin səbəbi olduğunu bilmirsiniz.

  • Bu parametr bütün makroların işləməsinə imkan verir. Yeni bir Excel iş kitabını açdığınız zaman, makrolar içərisində olduğunuzu xəbərdar etmirsiniz və fayl açıq olduğu müddətdə işləyən makrolardan xəbərdar olmaya bilərsiniz.

Makrolara güvənirsinizsə və onları aktivləşdirmək üçün yaxşısınızsa, bu seçimi seçin:

və bu informasiya qutusu makrolar üçün görünməməlidir.

Qənaət üçün dialoqa gəldikdə, bunun Mac 2011 üçün Excel-də işlədiyini qeyd etdikdən sonra SO, StackOverflow - Excel faylını (.xlsm) olan bir makronu qeyri-makro kimi saxlamaq üçün VBA istifadə edərkən dialoqun qarşısını alın. fayl (.xlsx) ehtiva edir. Bundan, bəzi Klaviatura Giriş simulyasiyası istisna olmaqla, dialoqun silinməsi mümkün görünmür. Bununla maraqlanmaq üçün başqa bir sual göndərərdim. Bağışlayın, mən sizi yalnız yarıya qədər gətirə bildim. Digər seçim, Microsoft Excel ilə Windows kompüterindən istifadə etmək olardı, baxmayaraq ki, bu halda sizin üçün bir seçim olub-olmadığına əmin deyiləm.


Readme-dən çıxarış

Alternativ olaraq, Python's ilə halo istifadə edə bilərsiniz:

Nəhayət, dekorativ kimi halodan istifadə edə bilərsiniz:

Orijinal versiyada az sayda olduğu üçün @ Victor Moyseenkodan təkmilləşdirilmiş versiyası

  1. iplik tamamlandıqdan sonra əyirici personajlarından ayrılırdı
  2. və bəzən aşağıdakı çıxışın ilk xarakterini də aradan qaldırmağa gətirib çıxarır
  3. çıxışı üzərinə threading.Lock () qoyaraq nadir bir yarış vəziyyətindən qaçınır
  4. heç bir tty olmadıqda daha asan çıxışa düşür (dönmə yoxdur)

yuxarıdakı Spinner sinifinin istifadəsi nümunəsi:

Əlbəttə, mümkündür. Sadəcə, "imleci" fırlanan kimi göstərəcək dörd simvol arasında (-, , |, /) arxa boşluq işarəsini ( b) yazdırmaqdır.

lənət modulu. addstr () və addch () funksiyalarına nəzər yetirərdim. Heç vaxt istifadə etmədim.

Daha inkişaf etmiş konsol manipulyasiyaları üçün unix-də lə'nət python modulundan, pəncərələrdə isə lənət kitabxanasının ekvivalent funksionallığını təmin edən WConio istifadə edə bilərsiniz.

Zəhmli tərəqqi çubuğu modulunu əldə edin - http://code.google.com/p/python-progressbar/ RotatingMarker istifadə edin.

GitHub-da py-spin paketi tapdım. Çox gözəl iplik üslubu var. Budur istifadə qaydaları, Spin1 - / üslubudur:

Spin təlimatına da nəzarət etmək mümkündür:

Aşağıdakı gifdəki digər üslublar.

CAVEATS: Təcrübəmdə bu, bütün terminallarda işləmir. Unix / Linux altında bunu etmək üçün daha etibarlı bir yol, daha mürəkkəb olsun, Windows altında işləməyən lənət modulundan istifadə etməkdir. Yəqin ki, arxa planda gedən həqiqi emal ilə bunu necə yavaşlatmaq istəyirsiniz.

Budur ya sadə və aydın.

Kobud, lakin sadə həll:

Aşkar məhdudiyyətlər var, amma yenə xam.

Dekorativlərdən istifadə edərək bir həll təklif edirəm

Bütün tətbiqetmə tərəfindən paylaşılan ümumi bir Singleton hazırladım

Bu eyni zamanda bir parametrə sahib bir funksiyadan istifadə edərək başqa bir həll yolu ola bilər.

Hazırkı sətri təmizləmək üçün ' r 033 [K' yaza bilərsiniz. Və aşağıdakı @ nosdan dəyişdirilmiş bir nümunədir.

Nodejs ilə maraqlanan hər kəs üçün nodejs nümunəsi də yazıram.

Təxminən bir həftə əvvəl python ilə başladım və bu yazını tapdım. Burda tapdıqlarımın bir hissəsini başqa yerlərdə mövzu və növbə haqqında öyrəndiklərimlə birləşdirdim, fikrimcə daha yaxşı bir tətbiq təmin etmək üçün. Mənim həllimdə, ekrana yazı məzmununa görə növbəni yoxlayan bir mövzu ilə idarə olunur. Bu növbənin məzmunu varsa, fırlanan ipin dayandığını bilir. Flipside, dönən kursor iplik növbə kilid kimi istifadə edir, beləliklə çap ipliyi əyirici kodun tam ötürülməsi tamamlanana qədər çap etməyəcəyini bilir. Bu, yarış şərtlərini və insanların konsolu təmiz saxlamaq üçün istifadə etdikləri çox sayda kodun qarşısını alır.

Bütün söylədiklərimi və yazdıqlarımın hamısını söyləyərək, yalnız bir həftədir piton işləri ilə məşğul oluram. Bunu etmək üçün daha təmiz üsullar varsa və ya bəzi yaxşı təcrübələri qaçırmışamsa, öyrənmək istərdim. Təşəkkürlər.


Ən yaxşı veb sayt göstəriciləri

Artıq veb saytınıza hansı bir monitorinq alətinin uyğun olduğunu bildiyiniz üçün nəzərə alınacaq növbəti şey veb saytınız üçün doğru performans göstəriciləridir. "Doğru" ölçümləri axtarmaq çox böyük olduğundan qorxunc bir işdir.

Bununla birlikdə, doğru metrik həmişə veb saytınızdan və iş növündən asılıdır. Ən yaxşı təcrübə məsələləri şiddətinə görə kateqoriyalara ayırmaqdır. Məsələn, bir iş sahibi əlaqələrin qırılması və ya yükləmə sürətindəki cüzi dəyişikliklər barədə xəbərdarlıq selini almaq istəmir. İnfrastrukturun dayanması kimi kritik məsələləri bloklaya biləcəyi üçün bu tip xəbərdarlıqları inkişaf qrupuna buraxın.

Hər bir veb sayt sahibinin nəzarət etməsi lazım olan on veb performans göstəricisi.

İş vaxtı

Əksər müəssisələr öz saytlarına çox güvəndikləri üçün onlayn mövcudluq artıq bir seçim deyil. Bir veb sayt bir neçə dəqiqə ərzində fəaliyyət göstərmirsə və ya tövsiyə olunan müddətdən daha yavaş yüklənən bir səhifə varsa, bu birbaşa gəliri təsir edir. Əlavə olaraq, əlçatmaz bir veb sayt iş proseslərini və iş axınlarını pozur. Nəticədə, uzadılmış fasilə və bunun nə qədər tez-tez baş verməsi bütün şirkətinizin nüfuzunu poza bilər.

Ancaq arızalı vaxtın öhdəsindən gəlmək üçün burada deyilik. Bunun əvəzinə danışaq İş vaxtı. Uptime monitorinqi bir veb saytın kritik performans göstəricisidir. Bir veb sayt sahibi olaraq “beş doqquz” üçün çalışmalısınız. Bu veb saytınız deməkdir olmalıdır % 99.999 iş vaxtı var. Bundan əlavə, veb saytınızın müxtəlif yerlərdən işləmə müddətini yoxlamaq ən yaxşı təcrübədir.

İlk bayta qədər vaxt (TTFB)

İlk bayta keçmə vaxtı (TTFB) bir serverin və ya digər şəbəkə mənbələrinin cavab qabiliyyətini ölçür. HTTP sorğusu göndərən istifadəçi və ya müştəridən, müştəri brauzerinin qəbul etdiyi səhifənin ilk baytına qədər olan vaxtı ölçür.

Bir performans göstəricisi necə əlaqəlidir? Cavab sadədir. Çox onlayn istifadəçi səbirsizdir. Buna görə məqalə Neil Patel-dən bir saytın ziyarətçilərinin yüzdə 40ını itirmədən əvvəl yükləməsi üçün yalnız üç saniyə var. Beləliklə, səhifəniz sürətlə yüklənmirsə, böyük məzmuna sahib olsanız da, böyük ehtimalla onlayn ziyarətçilər ayrılacaqlar.

Bu performans göstəricisindən istifadə etməyin ən yaxşı yolu müxtəlif yerlərdən sorğu göndərməkdir. Ən yüksək və yüksək olmayan saatlarda veb serverinizin nə qədər sürətli cavab verdiyini yoxlayın.

TTFB bu üç əməliyyat çərçivəsində ölçülür:

  1. Serverə sorğu göndərilir
  2. Cavabın işlənməsi və yaradılması
  3. Cavabın müştəriyə göndərilməsi

Tam səhifə yükləmə vaxtı

Tipik olaraq, bir veb sayt ziyarətçisi yalnız tam yükləndikdə səhifənizlə əlaqə qurur. Düymələrdən, şəkillərdən və videolardan bütün xüsusiyyətlərinin mənası yerindədir. Tam səhifə yükləmə vaxtının necə işlədiyini. Buna görə tam səhifə yükləmə müddəti, müəyyən bir səhifənin mənbə kodunu yükləmək üçün lazım olan vaxtdır.

Yaxşı, tam səhifə yükləmə müddətini necə ölçürsən? Siz istifadə edə bilərsiniz Tətbiq performansının monitorinqiBu göstərici ilə sizə kömək edəcək (APM) həllər. Bu asanlaşdırır izləmə mənbə kodunuzu və veb saytınızın sürəti haqqında məlumat verir.

İstifadəçilərin sürətli yüklənən veb saytlara üstünlük verdiyini unutmayın. Bəzi istifadə hallarına nəzər salaq:

  • Bir şirkət, 100 millisaniyə sahə yükləmə gecikməsinə görə% 1 nisbətində bir zərər itkisi yaşadı.
  • Bir iş veb saytının dönüşüm nisbətini% 1,5 artırması lazımdır.
  • Bir şirkət dönüşümləri yaxşılaşdırmaq üçün yükləmə müddətini azaltmaq istəyir.

Bu ssenariləri mərkəzləşdirilmiş qeyd etmə və real istifadəçi nəzarəti ilə performans izləmə vasitələrindən istifadə edərək həll edə bilərsiniz.

Hələ əmin deyilsiniz? Müzakirəmizi yalnız istifadəçi təcrübəsi ilə deyil, üzvi axtarış reytinqləri ilə genişləndirməyə nədir? Google, alqoritm sıralaması amillərinin bir hissəsi olaraq səhifə sürətini, məzmun dərinliyini və mobil əlverişliliyi daxil etdi.

Ayrıca, səhifə ölçüsündən və tarama aralığından asılı olmayaraq tam səhifə monitorinqi çox bant genişliyi trafiki yaradır. Beləliklə, sürətli bir tam səhifə yükləmə müddətinə çatmağın asan yolu şəkil ölçüsünü azaltmaqdır.

Qırılmış Links

Köprülər vebin hamısını təşkil edir. Beləliklə, əlaqələrin pozulması qaçılmazdır. 404 səhvinə səbəb olan keçidləri olan bir veb sayt sadə bir problemdir, ancaq fəlakətli ola bilər. Bir sözlə, nə veb saytınızın istifadəçiləri, nə də Google kimi axtarış motorları qırılmış bağlantılar kimi.

Bəlkə təyinat URL-sini səhv yazmısınız, yoxsa əlaqəli səhifə artıq mövcud deyil? Alt xətt qırılan əlaqələrin iş üçün zərərli olmasıdır.

Müntəzəm baxım və qırılmış əlaqələrin yoxlanmasını həyata keçirin. Sizə kömək etmək üçün qırıq linklərlə işləyərkən həmişə bunları xatırlayın:

  • Qırılmış bağlantılar ziyarətçilərinizi məyus edir və nüfuzunuza xələl gətirə bilər.
  • Bu "müntəzəm ev işləri" aparmadığınız təəssüratını yaradır.
  • Dönüşüm nisbətinizi təsir edə bilər.
  • Qırılmış bağlantılar səhifə sıralaması optimallaşdırmasına mane olur.

İstifadəçi Səyahəti

İstifadəçi səyahəti, davamlı inkişafda sizə kömək etdiyi üçün bir başqa vacib performans göstəricisidir. Doğru iş axınınız olub olmadığını müəyyənləşdirir. Effektiv iş axını, istifadəçilərinizin böyük bir istifadəçi təcrübəsinə sahib olmasını təmin edir.

Düzgün işləyən bir sifariş prosesi elektron ticarət saytları üçün vacibdir. İstifadəçilərinizin bütün prosesi gəzib dolaşmadığını və problemsiz işləməsini təmin edin. Eynilə, həm müştərilər, həm də qeydiyyatdan keçmiş istifadəçilər üçün veb sayt girişləri, səhvsiz olmalıdır bir başqa ayrılmaz prosesdir. Çoxsaylı giriş problemləri kimi təkrarlanan giriş problemləri istifadəçiləri məyus edir və müştərilərin alış-verişinə mane olur.

Nəhayət, qurğuşun istehsal veb saytları üçün bülleten qeydiyyatınızın düzgün işlədiyini yoxlamalısınız. Abunə prosesində iş axını xətası müştərilərin potensial itkisinə səbəb olur.

Verilənlər bazası performansı

Verilənlər bazası performansı nə üçün vacibdir? Əksər veb saytlar verilənlər bazasından çıxarılan dinamik məzmuna malikdir. Düzgün işləyən bir veb sayt təmin etmək üçün başqa bir vacib veb performans göstəricisidir.

Əksər hallarda, çox yavaş cavab verən bir veb sayt zəif performanslı bir verilənlər bazasına sahibdir. Buna görə verilənlər bazası sorğularınıza cavab müddətini izləməlisiniz. Ən çox vaxt aparan və optimallaşdırma aparan sualları axtarın.

Bu qorxunc bir vəzifədir, amma Retrace kimi APM ilə irəliləyirsiniz verilənlər bazanızın ümumi performansını izləyə bildiyiniz üçün. Bir darlığın olub olmadığını öyrənməyinizə kömək edən xüsusiyyət baxımından zəngin bir APM-dir. Sorğularınızın nəticələrində səhv mesajları varsa və ya gözlənilən aralığın xaricində olan nəticələr varsa, Retraciya siqnallar verir.

Coğrafi performans

Sürətli İnternetin yaranması ilə veb saytın sürəti və dünyanın müxtəlif yerlərindən istifadəsi artıq problem olmamalıdır. Coğrafi performans, yerləşməsindən asılı olmayaraq müştərilərə xidmətinizin fasiləsiz əlçatanlığını təmin edən bir göstəricidir.

Qlobal səviyyədə fəaliyyət göstərən və ya dünya miqyasında müştərilərə xidmət göstərən şirkətlər üçün çox vacibdir. Əksər şirkətlər ən yaxın server yerlərini təmin edərək infrastruktur planları qururlar. Veb saytının sürətini artırmaq vacibdir.

Əksər şirkətlər coğrafi performanslarının vəziyyətini təyin etmək üçün məlumat analitiklərindən istifadə edirlər. Coğrafi performansınıza nəzarət etmək çox vacibdir və əsas prioritet odaklanacağınız yerləri seçməkdir. Müəyyən bir yerin performansını və ya qlobal performansı izləmək üçün məlumat analitikasından istifadə edə bilərsiniz.

Veb Serverin Təchizatı

Veb saytının işində boş disk boşluğunun izlənməsi vacibdir. Daha az disk sahəsi gətirən bir neçə səhv var. Buraya əhəmiyyətli miqdarda disk sahəsi yeyə biləcək günlük sənədləri, verilənlər bazası girişləri, fotoşəkillər və video sənədlər daxildir.

Nəticədə daha az disk sahəsi və yüksək CPU yükü veb saytın sıradan çıxmasına səbəb olur. Yüksək CPU yükü bir çox aktiv prosesin CPU'nuzu aşması və bütün serverin işini yavaşlatması deməkdir. Veb saytlarla işləyərkən yüksək CPU istifadəsinin bir neçə səbəbi var. Bir nümunə trafik artımından yeni bir xüsusiyyətin məsuliyyət daşımasıdır.

Mütəmadi CPU istifadəsinin izlənməsi bir çox veb server uğursuzluğunun qarşısını alır. Uzun bir müddət ərzində yüksək bir CPU ilə qarşılaşarsanız, cihazınızı yeniləməyi düşünməlisiniz. Əlavə olaraq, CPU monitorinqi ilə birlikdə yaddaş istifadəsinə də diqqət yetirin.

Veb səhifə ziyarətçiləri

Veb sayt trafiki, onlayn mövcudluğunuz üçün uğurlu bir göstəricidir. Bu veb saytınızın dözə biləcəyi yükləri sınamaq və qiymətləndirmək üçün bir yoldur. Onlayn trafikinizlə cazibə qazandığınızda əsas fikirlər veb serverlərinizi təkmilləşdirmək olmalıdır. Serverləriniz veb sayt trafiğini çox vaxt idarə edə bilsə, razı olmayın. Bir çox insanın saytınıza eyni vaxtda girməsi halında nə olacağını düşünün.

Digər tərəfdən veb sayt ziyarətçilərinin sayı azalsa, texniki problem ola bilər və ya məzmununuz kifayət qədər maraqlı deyil.

Veb sayt keyfiyyəti

Son göstərici veb sayt keyfiyyətidir. Bütün texniki performans göstəricilərinə sahib ola bilərsiniz, ancaq veb saytınızın keyfiyyətinə diqqət yetirməlisiniz. Veb saytının keyfiyyəti yoxlanılması əl ilə hazırlanmış bir prosesdir və mütəmadi olaraq aparılmalıdır.

Veb saytınızın keyfiyyət auditində aşağıdakı sualları nəzərdən keçirin:

  • Veb sayt istifadəçi interfeysi uyğun və cəlbedicidir?
  • Hər səhifənin aydın bir məqsədi varmı?
  • Mətn yaxşı qurulmuş və oxunaqlıdır?
  • Kopirayt üslubu hədəf auditoriyaya uyğundurmu?
  • İstifadəçilərə və qonaqlara dəyərli məlumatlar verirmi?

Uğursuz Test imtahan sualları

SQS növbəsinə yeni bir mesaj əlavə olunduqda, müəyyən bir müddət üçün istehlakçı instansiyalarından gizlədiləcəkdir.

Bir istehlakçı nümunəsi bir mesaj aldıqda, bu mesaj müəyyən bir müddət üçün növbədə gizlənəcəkdir.

İstehlakçı instansiyası yeni iş üçün sorğu aldıqda, SQS xidməti əlaqəni bağlamadan əvvəl bir və ya daha çox mesajın olması üçün müəyyən bir müddət gözləməyə imkan verir.

Bir mesajı işləyərkən istehlakçı instansiyası mesajın görünürlük sayğacını sabit bir miqdarda dəyişdirə bilər

Bir mesajı işləyərkən bir istehlakçı nümunəsi əvvəlcədən təyin olunmuş vaxt aşma sayacını yenidən başlataraq mesaj görünürlüğünü sıfırlaya bilər.

Ən populyar 5 məlumat veb səhifənizi təqlid etmək və veb səhifələrinizi qeyd etmək üçün daxili java skriptləri ilə bəzi veb səhifələr yaratmaq üçün veb dizayn qrupunuzla çalışın.

Kampaniya müddəti ərzində mövcud serverinizi Ixlarge-dən 32x-lə yüksəldin.

SQS & amp Lambda istifadə edərək asenkron işləmə üçün DynamoDB-da qeyd məlumatlarını saxlayan təkrar qeyd səhifəsi yaradın.

Ən populyar 5 məlumat veb səhifənizi təqlid etmək və veb səhifələrinizi qeyd etmək üçün 32xlarlıq bir EC2 nümunəsində çalışmaq üçün PHP-də bəzi veb səhifələr yaratmaq üçün veb dizayn qrupunuzla çalışın.

5 ən populyar yeni müştəri veb səhifənizi yenidən yaradın və Lightsail-də veb səhifələrdə qeydiyyatdan keçin və yükü götürmək üçün AWS avtomatik miqyaslandırmadan istifadə edin.

SQS növbəsinə yeni bir mesaj əlavə olunduqda, müəyyən bir müddət üçün istehlakçı instansiyalarından gizlədiləcəkdir

Bir mesajı işləyərkən bir istehlakçı nümunəsi əvvəlcədən təyin olunmuş vaxt aşma sayacını yenidən başlataraq mesaj görünürlüğünü sıfırlaya bilər.

Bir mesajı işləyərkən istehlakçı nümunəsi mesajın görünürlük sayğacını sabit bir miqdarda dəyişdirə bilər

İstehlakçı instansiyası yeni iş üçün sorğu aldıqda SQS xidməti əlaqəni bağlamadan əvvəl bir mesajın olması üçün müəyyən bir müddət gözləməyə imkan verəcəkdir.

Bir istehlakçı nümunəsi bir mesaj aldıqda, bu mesaj müəyyən bir müddət üçün digər istehlakçı nümunələrindən gizlədiləcəkdir.

bir Elastik Yük Balanslaşdırıcıdan istifadə edin, EC2 İsteğe bağlı Nümunələr (ikinci dərəcəli) bir Avtomatik Ölçmə qrupu (ikinci dərəcəli) ilə tandemdə işləyən EC2 Spat nümunələrinin (birincil) bir Auto-Scaling qrupunun çox AZ yerləşdirilməsi, DynamoD

2. EQ Spot nümunələrinin (ikinci dərəcəli) Auto-Scaling qrupu ilə tandemdə işləyən EC2-nin tələb olunan nümunələrinin (birincil) bir Auto-Scaling qrupunun çox-AZ yerləşdirilməsini, bir Elastik Yük Balanslaşdırıcısını istifadə edin. RDS.

3. Elastik Yük Balanslaşdırıcıdan istifadə edin, EC2 Spot nümunələrinin Auto-Scaling qrupunun (birincil) EC2-nin Avtomatik Ölçmə qrupu ilə tələb olunan nümunələrin (ikincil) bir çox AZ yerləşdirilməsi, çox AZ yerləşdirmə RDS.

1Qrup və NACL parametrlərini oxuya bilən bir siyasət ilə bir IAM İstifadəçisi yaradın.

Təhlükəsizlik qrupu və NACL parametrlərini oxuya bilən bir siyasət ilə IAM rolu yaradın.

3 Təhlükəsizlik qrupu və marşrut parametrlərini oxuya bilən bir siyasət ilə bir IAM rolu yaradın.

4AWS-nin şəbəkə təhlükəsizliyini fərqli şəkildə tətbiq etdiyini və Firewall cihazı kimi bir şey olmadığını izah edin. Daha sonra məsləhətçiyə yoxlamaya hazırlıq məqsədilə 'A Cloud Guru' AWS CSA-A kursunu keçməsini təklif edə bilərsiniz.

5 Təhlükəsizlik qrupu və marşrut parametrlərini oxuya bilən bir siyasət ilə bir IAM İstifadəçisi yaradın.

4 AWS-nin şəbəkə təhlükəsizliyini fərqli şəkildə tətbiq etdiyini və Firewall cihazı kimi bir şey olmadığını izah edin. Daha sonra məsləhətçiyə yoxlamaya hazırlıq məqsədilə 'A Cloud Guru' AWS CSA-A kursunu keçməsini təklif edə bilərsiniz.

NAT nümunəsində Mənbə / Hedef Yoxlamasını aktivləşdirin.

Elastik Yük Balanslaşdırıcı vasitəsi ilə çıxmaq üçün bütün trafiki konfiqurasiya edin.

NAT nümunənizdə Mənbə / Hedef Yoxlamasını aradan qaldırın.

Bir mesajı işləyərkən istehlakçı nümunəsi mesajın görünürlük sayğacını sabit bir miqdarda dəyişdirə bilər.

Bir mesajı işləyərkən bir istehlakçı nümunəsi əvvəlcədən təyin olunmuş vaxt aşma sayacını yenidən başlataraq mesaj görünürlüğünü sıfırlaya bilər.

İstehlakçı instansiyası yeni iş üçün sorğu aldıqda, SQS xidməti əlaqəni bağlamadan əvvəl bir mesajın olması üçün müəyyən bir müddət gözləməyə imkan verəcəkdir.

SQS növbəsinə yeni bir mesaj əlavə olunduqda, müəyyən bir müddət üçün istehlakçı instansiyalarından gizlədiləcəkdir

Bir istehlakçı nümunəsi bir mesaj aldıqda, bu mesaj müəyyən bir müddət üçün növbədə gizlənəcəkdir.

6 Keçid zamanı ikinci bir AWS Storage Gateway VTL həllinin müştərinin yeni VPC-də istismara verilə və mövcud VTS ilə inteqrasiya olunmasını təklif edin. Eyni zamanda, mövcud Enterprise Backup Solution, Arxivləri lentdən VTL / VTS virtual lentinə köçürmək üçün lentdən lentə nüsxələrini yerinə yetirmək üçün istifadə edilə bilər.


Təhlükəsizlik qrupları və hansı limanların məhdudiyyətsiz girişinə dair məsləhət


Veb saytınızı 2 fərqli bölgədə yerləşdirin. 53 nömrəli marşrutu bir uğursuz marşrut siyasəti ilə konfiqurasiya edin və əsas saytda sağlamlıq yoxlamaları qurun.

Parıltı üçün Amazon FSx, dünyanın ən populyar yüksək performanslı fayl sistemini işə salmağı və işləməyi asanlaşdırır. Maşın öyrənmə, yüksək performanslı hesablama (HPC), video işləmə və maliyyə modelləşdirməsi kimi iş yükləri üçün istifadə olunur. Açıq mənbəli Luster fayl sistemi, sürətli yaddaş tələb edən tətbiqetmələr üçün nəzərdə tutulub - yaddaşınızın hesablamanıza uyğun gəlməsini istədiyiniz yer. Luster üçün FSx, Amazon S3 ilə inteqrasiya edir və Luster fayl sistemi ilə məlumat dəstlərinin işlənməsini asanlaşdırır. Bir S3 vedrə ilə əlaqələndirildikdə, Luster fayl sistemi üçün bir FSx şəffaf şəkildə S3 obyektlərini fayl kimi təqdim edir və dəyişdirilmiş məlumatları yenidən S3-ə yazmağa imkan verir.
Parıltı üçün FSx həm 'isti məlumatları' paralel və paylanmış bir şəkildə işləmə, həm də 'soyuq məlumatları' Amazon S3-də asanlıqla saxlama imkanı verir. Bu səbəbdən bu seçim verilən problem ifadəsi üçün ən yaxşısıdır.

Yanlış seçimlər:
Windows File Server üçün Amazon FSx - Windows File Server üçün Amazon FSx, sənayedə standart olan Service Message Block (SMB) protokolu üzərindən əldə edilə bilən tam idarə olunan, olduqca etibarlı bir fayl saxlama təmin edir. İstifadəçi kvotaları, son istifadəçi faylının bərpası və Microsoft Active Directory (AD) inteqrasiyası kimi geniş idarəetmə xüsusiyyətləri təqdim edən Windows Server üzərində qurulmuşdur. Windows üçün FSx, S3 obyektlərini fayl kimi təqdim etməyə imkan vermir və dəyişdirilmiş məlumatları yenidən S3-ə yazmağa imkan vermir. Bu səbəbdən oxumaq və yeniləmələr üçün ucuz qiymətə sürətli giriş ilə & quotcold data & quot; -ə istinad edə bilməzsiniz. Bu səbəbdən bu seçim düzgün deyil.

Amazon EMR - Amazon EMR, Apache Spark, Apache Hive, Apache HBase, Apache Flink, Apache Hudi və Presto kimi açıq mənbəli vasitələrdən istifadə edərək çox sayda məlumatın işlənməsi üçün sənayenin lider bulud böyük məlumat platformasıdır. Amazon EMR, məlumatlarınızı və emalınızı Amazon EC2 nümunələrinin yenidən ölçülənə bilən bir qrupuna paylamaq üçün açıq mənbəli bir çərçivə olan Hadoop istifadə edir. EMR, Parıltı üçün FSx ilə eyni saxlama və işləmə sürətini təklif etmir. Beləliklə, verilmiş yüksək performanslı iş axını ssenarisi üçün uyğun deyil.


12 Cavablar 12

PLC istehsalçıları, proqramlarının daha etibarlı və daha yaxşı sınaqdan keçirildiyinə inanmağınızı istərlər. Təəssüratım odur ki, PLC-lərin əsas ƏS komponentləri ümumiyyətlə kifayət qədər yaxşı hazırlanmış və sınaqdan keçirilmişdir, lakin xarici aparat (hərəkət sistemləri və bu kimi) üçün sürücülər tez-tez tətbiqetmə mühəndisləri tərəfindən bir araya gələrək şirkətin ətrafına ötürülən kitabxanalardır. PLC-lərdəki avadanlıq tez-tez köhnəlir - bir çoxu köhnə, isti Geode prosessorları işləyir.

Allen-Bradley, B & ampR, Siemens və ya digər böyük oyunçulardan bir PLC satın aldığınız zaman, işlər qaydasında olmadıqda, əsasən dəstək üçün pul ödəyəcəksiniz. Onların aparatları Arduinos ilə eyni istehsal prosesləri ilə hazırlanır və PLC-lərdə işləyən real vaxt əməliyyat sistemlərində sehrli bir şey yoxdur ki, onları səhvsiz edir. Ancaq düşünürəm ki, dəstək çox vaxt ödəməyə dəyər. Şirkətə işləmədiyi hər gün 1 milyon dollara başa gələn bir maşındırsa, lənətə gəldim ki, bir şey səhv olduqda, onu düzəltməyə kömək edəcək mütəxəssislər qrupu var, yalnız mən və Google. Xüsusi işıq pərdələri və ya digər təhlükəsizlik kilidləri üçün, istehsalçının hər hansı bir xüsusi məqsəd üçün bütün ticarət qabiliyyətini rədd etməyə çalışan bir ifadədən çox, böyük bir sığorta polisi olduğuna əmin olmaq istərdim.

Buna baxmayaraq, bəzi qurğular üçün (məsələn) bir az sadə pnevmatik işə salmağı planlaşdırırdımsa və maşını qıranda düzəltmək üçün dəstək yükünü götürməyə hazır idim (və ya ayrılmış mənbələri əldə edə bilmədimsə) və PLC-ni ödəmək üçün) və təhlükəsizlik problem deyildi, məmnuniyyətlə bir Arduino istifadə edərdim.

Yəqin ki, sistemi Arduino ilə prototipləşdirərdim və sonra işləyəndə kodu təmiz C-də yenidən yazardım, beləliklə kodum mikrokontrolordakı yeganə kod idi.

Arduino, lazımi qoruma və amp qoruyucu olmaması səbəbindən sənaye tətbiqetmələrində yaxşı deyil. Ancaq sənaye səviyyəli AVR əsaslı nəzarət cihazları etmək mümkündür:

Qoruma, güc filtrləmə / tənzimləmə / qoruma, xarici şeyləri idarə etmək üçün optopairlər, hər bir rəqəmsal çipdə layiqli ayırma qapaqları olmalıdır.

Yüksək yükləri açarkən / söndürən zaman bunu çox diqqətlə sınamalısan, osiloskopla (1ns aralığına qədər) bu komutasiya əsnasında yer / güc / məlumat xətlərindəki hər hansı bir çatışmazlığın olub olmadığını yoxlamaq daha yaxşıdır.

Saat qaynağınızı çox diqqətlə yoxlamalısınız - kristal osilatorun sıradan çıxması halında AVR RC osilatora düşməz. Beləliklə, saat dəqiqliyinə ehtiyacınız yoxdursa və ya kristal marşrutlaşdırma, yük kondansatörləri, PCB keyfiyyəti (= axın xatırlatmaları, nəm qorunması) və büllurun ətrafından qorunmağa əlavə diqqət yetirməsəniz daxili RC-yə sadiq qalmaq daha yaxşı olar.

Sənaye tətbiqetmələri üçün daha yaxşı uC var, xüsusən də bu RC-geri düşmə xüsusiyyətinə malikdir.

Əvvəl PLC, sənaye prosesi nəzarəti rele logix (rəqəmsal nəzarət üçün) və PID nəzarətçiləri analoq nəzarət üçün. Rölelər məlum olmayan dərəcədə etibarsız idi, bəzi hallarda uğursuzluqları ciddi nəticələrə səbəb olurdu. Buna baxmayaraq, bunun daha yaxşı bir şəkildə yerinə yetirilə biləcəyi təklifi kompüter çalışan proqram təminatı Röle əvəzinə yarımkeçirici çıxışları ilə o dövrdə əksər elektrik mühəndislərini dəhşətə gətirdi. O günlərdə PLC-nin qəbul edilməsinə qarşı dəlillər bu forumdakı cavablardakı bəzi dəlillərə bənzəyirdi. Maraqlı təkliflərə müqavimət göstərin və yaxşı şirkətdə olmağınıza əminsiniz. İqtisadiyyat, dayanma və istismar mülahizələri sabit telli idarəetmədən mikro nəzarətçi / proqram nəzarətinə keçidi (yavaş-yavaş) təmin etdi. Bu yaxınlarda xatırlayıram ki, Ethernet və o vaxt bağlı müxtəlif protokolların dəhşət idarəsi tərəfindən qarşılandı. Ethernet indi sürətlə proses nəzarəti üçün faktiki standart halına gəlir.

Günümüzdə, ən inkişaf etmiş idarəetmə sistemlərində təhlükəsizlik üçün kritik proseslər həmişə telli / pnevmatik / hidravlik / mexaniki bir ehtiyata və ya ən azından uğursuz bir vəziyyətə sahibdir. İdarəetmə sisteminə daxil olan operator interfeysi, idarəetmə sisteminin vacib bir hissəsidir, maşın nəzarətindən kənarda, əksər hallarda yerli PC mağazasından bir arabası / qəzaya meylli bir əməliyyat sistemi olan bir masa üstü kompüterdir. meylli proses nəzarət proqramları. Bu mübaliğə deyil. Kimyəvi və mədən sənayesində toz və dumanların həyatın bir hissəsi olduğu, hətta nəzarət otağında olduğu üçün ən çətin mühitlərdə bitkilər dizayn etdik və inşa etdik və standart satışdan kənar istehlakçı / ticarət avadanlığından daha çox uğursuzluq yaşadıq. sənaye avadanlığı. Sabit disklər sıradan çıxır, amma möhürlənmişdir. Hər halda uğursuz olurlar. HMI-ləri işləyən PC anakartların sənaye toz buludlarını mütəmadi olaraq havaya sovururuq. Hiylə bütün vacib / kritik sistemlərdə ikiqat / üçqat ixtisarın olmasıdır. Hər şey uğursuz ola bilər. Bu səbəbdən təhlükəsizlik baxımından kritik şeylər hər zaman aparat tərəfindən dəstəklənir və bu da qanunvericilik tələbidir ən çox ölkələr və digərlərində sağlam düşüncə.

Biri aviasiya məsələsini müzakirəyə çıxarmaq istəyirsə, Airbus olmayan təyyarə istehsalçılarının tel-by-fly təklifinə necə dözdüklərini xatırlayın. Hava qəzalarında, mühəndislik / sistem çatışmazlığı deyil, insan səhvləri (əksər pilot, həm də texniki xidmət işçiləri), hələ də ən çox qəzaya səbəb olur. PLC / mikro nəzarətçi sənaye / ticarət məkanında, proqramlaşdırma terminalındakı insanın hələ də ən vacib element olduğunu iddia edərdim. Proqram DİZAYNI, YAPISI və QORUNMAQ bacarıqları deyil, əsas komponentlərdir.

Rockwell, standart bir mağaza PC-də çalışan bir proqram PLC olan SoftLogix məhsulunu təklif edir. Düşünün. PC-nin PLC-lərdən / nəzarətedicilərdən daha qorumalı bir elektrik / atmosfer mühitində işləməsi barədə mübahisələr bəzi hallarda doğru ola bilər, əksər hallarda deyil və xidmət etdiyimiz bitkilərdə çox azdır. İroniya budur ki, Ethernetin çoxalması sahədəki Ethernet açarlarını tələb edir. Biz, bir qayda olaraq, sənaye açarları deyil, standart ticarət məhsulları istifadə edirik və 10 il və yüzlərlə quraşdırma sonrasında bir açar arızası olmamışıq. Bu açarlar PLC I / O ilə eyni panellərdə yerləşir. Uğursuz olan, lakin nadir hallarda, açarı müşayiət edən ucuz enerji təchizatıdır. Bunun qarşısını alın və keçid quraşdırmadakı ən etibarsız komponent olmayacaq.

Sənaye PLC avadanlığının ciddi sınaq / keyfiyyət nəzarətinə gəlincə, bu yaxınlarda 8 və ya 10 uzaq giriş / çıxış analoq giriş kartından HƏR birinin DOA olduğu bir zavodu istismara verdim. Dünyanın ən böyük markalarından biri olan tədarükçü göz yumdu və hamısını dərhal əvəz etdi. Düşünürəm ki, bu pis bir toplu idi və problemi hesabatımızdan əvvəl bilə bilərdilər. Əvəzedicilər mükəmməl işlədi və 3 il sonra yenə də bunu edirlər.

Bu günlərdə qorxu bizi qorxutmaq üçün istifadə olunur. Səbəbdən istifadə edin və bəzi köhnə taymerlərin dediyi kimi, 'onu çəkin və görün (özünüz üçün)'. 'İstehsal olmayan' mikro nəzarətçiləri hər yerdə sınamaqda tərəddüd etməzdim. Yalnız yaxşı mühəndislik təcrübəsinə riayət edin, riski müəyyənləşdirin və lazımi qaydada hərəkət edin. Yeri gəlmişkən, motorlu nəqliyyat vasitələri bəzi sənaye şərtlərinə (yaş, isti, titrəmə) bənzəməyən şəraitdə işləyir, lakin bir çox elektron təhlükəsizlik üçün vacib sistemə malikdir. İndi sənaye idarəetmə sistemləri mühəndisinə zavodunuzda bir avtomobil komponentini sınaqdan keçirmək istədiyinizi təklif etməyə çalışın! CANbus və ya DNET kimsə? Rəqəmə get (:)


Əla, biz məhkumuq! - Bu barədə nə edirik?

Nəhayət, yuxarıda göstərilənlərin hamısı hələ də davam edir. Proqramlaşdırmanın çox hissəsini daha çox əsas alət və dillərdən istifadə etmək üçün bu sistemdən çıxara bilmirsinizsə, onu "sadəcə" sisteminizin məhdudiyyətlərinə uyğunlaşdırmalısınız.

Versiya və saxlama haqqında

Sonda demək olar ki, hər zaman edə bilərsiniz versiya şeylər, hətta ən məhdud və divarlı mühitlə. Əksər hallarda, bu sistemlər hələ də öz versiyaları ilə gəlir (təəssüf ki, tez-tez olduqca sadədir və yalnız əvvəlki anları saxlayaraq əvvəlki versiyalarına çox görünürlük olmadan qayıtmağı təklif edir). Seçdiyiniz SCM kimi diferensial dəyişikliklərdən tam istifadə etmir və ehtimal ki, dəyişiklikləri eyni vaxtda təqdim edən bir çox istifadəçi üçün uyğun deyil.

Ancaq yenə də belə bir funksionallıq təmin edərlərsə, bəlkə də həll yolunuz yuxarıdakı sevimli sənaye standartlarına əməl etmək və onları bu proqramlaşdırma sisteminə köçürməkdir!

Saxlama sistemi bir verilənlər bazasıdırsa, ehtimal ki, ixrac funksiyalarını ifşa edir və ya fayl sistemi səviyyəsində dəstəklənə bilər. Xüsusi bir ikili format istifadə edirsə, bəlkə də onu ikili məlumatlar üçün yaxşı dəstəyi olan bir VCS ilə versiya etməyə cəhd edə bilərsiniz. İncə toxumalı bir nəzarətiniz olmayacaq, ancaq ən azından fəlakətlərə qarşı arxa örtüyünüz olacaq və müəyyən bir fəlakət bərpa vəziyyətinə uyğunlaşacaqsınız.

Test haqqında

Testlərinizi platformanın özündə tətbiq edin və müntəzəm ehtiyat nüsxələrini qurmaq üçün xarici alətlərdən və arxa plan işlərindən istifadə edin. Çox güman ki, bu sınaq sistemlərini bu proqramlaşdırma sistemi ilə hazırladığınız proqramları yandırdığınız kimi yandırırsınız.

Əlbəttə ki, bu bir hack işi və mütləq "normal" proqramlaşdırma üçün ümumi olan standartlara uyğun deyil, amma fikir professional proqram inkişaf etdirmə prosesinin bir bənzərini qorumağa çalışarkən sistemə uyğunlaşmaqdır.

Yol uzun və dikdir.

Həmişə olduğu kimi niş mühitləri və sifarişli proqramlaşdırma sistemləri ilə və yuxarıda göstərdiyimiz kimi, qəribə formatlarla, yalnız məhdud (və ya tamamilə yararsız) ehtimal clunky alətlər dəsti və bir toplumun yerinə bir boşluqla məşğul olursunuz.

Tövsiyə: Yuxarıdakı təlimatları mümkün qədər sifarişli proqramlaşdırma sisteminiz xaricində tətbiq etməyə çalışın. Bu, müvafiq dəstəyi və icma sürücüsü olan "ümumi" alətlərə etibar edə biləcəyinizi təmin edir.

Çözüm: Bu bir seçim olmadıqda, bu qlobal çərçivəni "qutunuza" yenidən qurmağa çalışın. Fikir, proqramlaşdırma sisteminizin üstündəki sənaye standartları təcrübələrinin bu planını üst-üstə qoymaq və ən yaxşısını etməkdir. Tövsiyə hələ də qüvvədədir: quruluşu və ən yaxşı təcrübələri müəyyənləşdirin, uyğunluğu təşviq edin.

Təəssüf ki, bu, dalış etməyinizə və çox sayda ayaq işi görməyinizə ehtiyacınız ola bilər. Belə ki.

Məşhur Son Sözlər və Təvazökar İstəklər:

  • Sənəd etdiyiniz hər şey.
  • Paylaş təcrübənizi.
  • Açıq mənbə hər hansı bir vasitə sizin yazmaq.

Bütün bunları etməklə:

  • oxşar vəziyyətlərdə olan insanlardan dəstək almaq şansınızı artırmaqla yanaşı,
  • həm də digər insanlara kömək göstərin və texnologiya yığınınız ətrafında müzakirələr aparın.

Kim bilir, yeni bir canlı cəmiyyətin başlanğıcında ola bilərsən Qaranlıq Dil X. Heç biri yoxdursa, birini başla!

Bəlkə də içəridə gözəldir, Amma heç kimin bir ipucu yoxdur indiyə qədər, belə kömək edin bu çirkin divarı yıxbaşqalarına bir baxış olsun!

Çox ilk addım olardı Versiya Nəzarət sisteminin tətbiqi (SVN, Git, Mercurial, TFS və s.). Yenidən faktorinq alacaq bir layihə üçün bu olmalıdır.

Redaktə edin: VSC ilə əlaqəli - Hər bir qaynaq nəzarət paketi bəzi məhdudiyyətlər olsa da ikili sənədləri idarə edə bilər. Bazardakı alətlərin əksəriyyəti xüsusi bir fərq görüntüləyicisi və redaktoru istifadə etmək qabiliyyətinə malikdir, bu qabiliyyəti istifadə edin. İkili mənbə sənədləri bəhanə deyil versiya nəzarətindən istifadə etməmək.

Necə edəcəyinə bənzər bir yazı var miras kodu ilə məşğul olmaq, təqib etmək yaxşı bir istinad ola bilər - Əvvəlki kodla işləmək üçün tövsiyələr

Spagetti kodu ilə işləməli olduğum zaman ilk işim budur modullaşdırma. Xətlər çəkə biləcəyiniz və kod bazasının müstəqil (az və ya çox) hissələrini çıxara biləcəyiniz yerləri tapın. Yüksək dərəcədə qarşılıqlı əlaqə və birləşmə səbəbi ilə, çox güman ki, çox kiçik olmayacaqlar, ancaq axtarsanız bəzi modul xətləri ortaya çıxacaq.

Bir dəfə modullara sahib olduqda, artıq bütün dağınıq bir proqramı təmizləmək üçün qorxunc bir vəzifə ilə qarşılaşmırsınız. İndi bunun əvəzinə təmizləmək üçün bir neçə kiçik müstəqil dağınıq modulunuz var. İndi bir modul seçin və daha kiçik miqyasda təkrarlayın. Böyük funksiyaları daha kiçik funksiyalara və ya hətta siniflərə ayıra biləcəyiniz yerləri tapın (G2 onları dəstəkləyirsə).

Dilin kifayət qədər güclü tip sisteminə sahib olması, hamısını çox asanlaşdırır, çünki tərtibçidən sizin üçün çox ağır yük qaldırmasını ala bilərsiniz. Uyğunluğu (qəsdən) pozacaq bir yerdə dəyişiklik edirsiniz, sonra tərtib etməyə çalışın. Tərtib səhvləri sizi birbaşa dəyişdirilməsi lazım olan yerlərə aparacaq və onları almağı dayandırdıqda hər şeyi tapdınız. Sonra proqramı işə salın və hər şeyi sınayın! Yenidən işləyərkən davamlı testlər çox vacibdir.

Bunun sizin üçün bir variant olub olmadığını bilmirəm, amma onları inandırmağa çalışardım daha peşəkar inkişaf etdiricilər işə götürün. Bu şəkildə domen problemlərində cəmləşə bildilər (əminəm ki, orada kifayət qədər var).

Çox ağıllı insanlar olduqlarına inanıram, amma yaxşı bir inkişafçı olmaq çox vaxt tələb edir. Əsas işi olmayan bir fəaliyyətdə bu qədər vaxt sərf etməyə hazırdırlar? IMHO, bu ən yaxşı nəticəni əldə etməyin yolu deyil.

Heyrət! Vay. Qarşınızda həqiqətən böyük bir problem var kimi səslənir! Aşağıdakı xətlər boyunca bir şey edərdim:

  • Hər şeydən əvvəl: Prioritet verin. Əvvəlcə nəyə nail olmaq istəyirsən? Layihənin hazırkı vəziyyəti üçün ən vacib olan nədir? Oraya çatmaq üçün nə qədər vaxt lazım olduğunu vs ən çox nə əldə edəcəksən?
  • Bir var ki, əmin olun versiya nəzarəti sistem. Məsələn Git və ya Mercurial.
  • Bir növ alın davamlı inteqrasiya sistem (məsələn, Jenkins) işləyir.
  • Almaq səhv izləmə sistem işlək vəziyyətdədir. Mantis mənim fikrimcə olduqca gözəldir.
  • İçinə baxmaq statik kod analizi (hazırda işlədiyiniz dil üçün bir şey varsa).
  • O qədər nail olmağa çalışın tutarlılıq dəyişənlərin adlanmasından tutmuş ümumi kod konvensiyalarına və kod bazasındakı təlimatlara qədər.
  • Sistemi sınaqdan keçirin. Fikrimcə, bu kimi böyük bir miras sistemi üçün son dərəcə vacibdir. Mövcud davranışı sənədləşdirmək üçün test hallarından istifadə edin, davranışın qəribə olub olmadığını hiss etməməsindən asılı olmayaraq (ümumiyyətlə kodun niyə yaxşı, pis və ya hər ikisi P ola biləcəyinin müəyyən bir səbəbi var). Legacy Code ilə Effektiv Çalışan Michael Feathers bunun üçün əla bir qaynaqdır.

Bir problemin həllində ilk addımın bir problemin olduğunu qəbul etmək olduğunu söyləyirlər. Bunu nəzərə alaraq, cari kod bazanız olan geniş dolaşıqlığı göstərən bir asılılıq qrafiki yaratmağa başlaya bilərsiniz. Asılılıq diaqramı yaratmaq üçün yaxşı vasitədir? bir neçə yaşındadır, lakin bu cür qrafiklərin yaradılmasına kömək edə biləcək alətlərin bəzi göstəricilərini ehtiva edir. Nöqtəni evə aparmaq üçün mümkün qədər çox göstərən böyük, çirkin bir qrafiklə gedərdim. Həddindən artıq qarşılıqlı asılılıq nəticəsində yaranan problemlərdən danışın və bəlkə Buckaroo Banzai-dən bir sətir atın:

Anatomiyanızı istədiyiniz qədər yoxlaya bilərsiniz və normal bir dəyişiklik ola bilsə də, dərhal aşağıya gəldikdə, başın içərisində hamısı eyni görünür. Xeyr, xeyr, xeyr. Nəyə bağlı ola biləcəyini heç bilmirsən.

Oradan qarışıqlığı düzəltməyə başlamaq üçün bir plan təqdim edin. Kodu mümkün qədər müstəqil olan modullara ayırın. Bunu necə edəcəyinizə dair təkliflərə açıq olun - söhbət etdiyiniz insanlar kodun tarixçəsini və funksionallığını sizdən daha yaxşı bilirlər. Məqsəd, ancaq böyük bir problemi götürüb bir neçə kiçik problemə çevirməkdir ki, bunları prioritetləşdirib təmizləməyə başlaya bilərsiniz.

Modullar arasında təmiz interfeyslər yaradın və istifadə etməyə başlayın. Köhnə kod, zərurət olaraq, bir müddət bu gözəl yeni interfeyslərdən istifadə etməməyə davam edə bilər - həll etməyə başladığınız problem budur. Ancaq hamının yalnız irəli gedən yeni interfeyslərdən istifadə etməyi qəbul etməsini istəyin. Arayüzlərdə olmayan ehtiyac duyduqları bir şey varsa, interfeysləri düzəldin, onları dolaşmayın.

Eyni funksiyanın təkrarlandığı hallara baxın. Birləşməyə doğru işləyin.

Hər kəsə zaman-zaman bu dəyişikliklərin həyatı asanlaşdırmaq üçün deyil, çətinləşdirmək olduğunu xatırlat. Keçid ağrılı ola bilər, amma bunun üçün yaxşı bir məqsəd var və hamı nə qədər çox olsa, faydalar daha sürətli gələcək.

Gensym G2-yə bir az baxdıqdan sonra bu problemə yanaşma üsulunun kod bazasının nə qədər göründüyündən çox asılı olacağı görünür:

İkincisi vəziyyətində, təsirli olaraq bilinən bir miqdar olan mənbə kodu ilə işləyirsiniz və digər cavabların bəziləri bununla məşğul olmaq üçün çox müdrik məsləhətlər verir.

Kod bazasının əksəriyyəti sonuncudursa və ya hətta böyük bir hissə olsa da, son dərəcə ixtisaslaşmış və ya daha pis bir şəkildə göründüyü üçün yenidən düzəldilə bilməyəcək kodu olan maraqlı bir problemlə qarşılaşacaqsınız. çıxarıla bilər, ancaq düzgün sənədləşdirilmədiyi təqdirdə, ilk baxışdan belə görünməyən kritik kodu (skram əməliyyatında bir şey düşündüyünüzü) silirsənmi bilmirsən.

ElYusubovun işarə etdiyi kimi açıq şəkildə ilk prioritetiniz bir növ onlayn idarəetmə əldə etmək olacaq və görünür ki, versiya nəzarəti 8.3 versiyasından bəri dəstəklənir. G2, bir neçə fərqli dil metodologiyasının birləşməsi olduğundan, başqa bir şey tapmaq və işə düzəltmək əvəzinə onunla təchiz olunmuş versiya nəzarətindən istifadə etməyi ən təsirli hesab edəcəksiniz.

Bundan sonra, bəzilərinin yenidən işlənməyə başlamağı məsləhət görsələr də, kodlardan hər hansı birinə toxunmağa başlamazdan əvvəl işlədiyiniz sistemi tam anlamağınızdan əmin olmağın güclü bir müdafiəçisiyəm, xüsusən də kod və vizual diaqramlarla işləyərkən. proqram mühəndisliyi metodologiyaları üzrə rəsmi təhsili (və ya keçmişi) olan inkişaf etdiricilər. Bunun səbəbi bir neçə qatdır, amma ən açıq səbəbi, potensial olaraq 100 nəfərdən çox illik dəyəri olan bir tətbiq ilə işləməyiniz və həqiqətən nə etdiyini və nə qədər işlədiyini bildiyinizə əmin olmalısınız. orada sənədlər var. Sistemin hansı sənayedə qurulduğunu söyləmədiyiniz üçün G2 haqqında oxuduğum məlumatlara əsasən, bunun çox güman ki, həyat təhlükəsizliyi ilə əlaqəli potensialı da ola biləcək bir kritik bir tətbiq olduğunu güman etmək təhlükəsizdir. . Beləliklə, tam olaraq nə etdiyini başa düşmək çox vacib olacaqdır. İnsanlar kodun nə etdiyini müəyyənləşdirə biləcəyinə əmin olmaq üçün sənədləşmənin yerinə yetirildiyindən əmin olmaq üçün komandadakı digərləri ilə sənədləşdirilməmiş bir iş var.

Daha sonra kod bazasının və vizual diaqramların çox hissəsini vahid testlərinə bağlamağa başlayın. Bunu G2 ilə necə etmək lazım olduğuna dair bir cahilliyi qəbul etməliyəm, ancaq bunu yerinə yetirmək üçün demək olar ki, öz test çərçivənizi yaratmağa dəyər ola bilər. Bu, eyni zamanda komandanın digər üzvlərini kod keyfiyyəti ilə əlaqəli daha sərt mühəndislik təcrübələrindən istifadə etmələri üçün təqdim etməyə başlamaq üçün ideal bir zamandır (yəni bütün kodların vahid testləri və sənədləri olmalıdır).

Kodun ədalətli bir miqdarı üzərində vahid testlər edildikdən sonra yenidən işlənməyə haylemin təklif etdiyi qaydada yaxınlaşmağa başlaya bilərsiniz, lakin mütəxəssis sistemlərinin inkişafı və yenidən işlənməsi üçün nəzərdə tutulmuş bir şeylə məşğul olduğunuzu unutmayın. bu bir yoxuş döyüşü ola bilər. Bu əslində deyiləcək bir şeyin olduğu bir mühitdir yox bəzən son dərəcə ümumi kod yazmaq.

Nəhayət, digər komanda üzvlərinin dediklərinə diqqətlə yanaşdığınızdan əmin olun, çünki kod və diaqram keyfiyyətinin ən yaxşı olmaması mütləq onlara pis təsir etmir. Nəticədə, hələlik tətbiqin səndən daha çoxunu biləcəyi ehtimalı böyükdür, bu səbəbdən də geniş dəyişikliklər etməzdən əvvəl oturub nə etdiyini başa düşməyinizdən daha vacibdir.

Ümumiyyətlə əvvəlcədən eşitdiyiniz şikayətlərin vacib problemlərlə heç bir əlaqəsi yoxdur. Axı hər hansı bir proqram layihəsində bu şikayətləri eşitmək tamamilə normaldır.

Kodu anlamaq çətindir? Yoxlayın. Kütləvi kod bazası? Yoxlayın.

Əsl problem insanların getməsidir və yeni şəxs quruma qoşulduqda tipik bir yönəlməzlik yaranır. Bundan əlavə, qeyri-real gözləntilər və kod keyfiyyəti məsələləri var.

Budur həll etmək istədiyim şey:

  1. Yedəklər, həm server, həm də yerli versiya
  2. Hata izləyicisini quraşdırın
  3. Versiyonlaşdırma sistemini qurun
  4. FAQ / Wiki qurun
  5. Bütün alimlərin / proqramçıların ilk icmalları
    • Onlara 80/20 qaydasını xatırlat. Hataların 20% -i problemlərin 80% -nə cavabdehdir.
    • Ən böyük problemlərə odaklanın və inkişaf istəklərini və s. Kənarda saxlayın.
    • Buradakı məqsəd insanları böyük bir siyahı ilə qorxutmaq deyil, əldə edilə bilən kiçik qələbələrin siyahısıdır. Axı dəyərinizi də sübut etməlisiniz.
  6. Qurma sistemini qurun
    • Etibarlı quruluşlar əldə etməyə çalışın (bu bir müddət çəkə bilər)
    • hər bir layihəni müəyyənləşdirin və adlandırın
    • tsiklik asılılıqları müəyyənləşdirin
    • bəzi açıq mənbəli layihələrdən ikili sənədlər varsa, mənbələr əldə etməyə çalışın
  7. G2 kodunun necə modulləşdirilə biləcəyini təyin edin, məs. API, xidmətlər
  8. G2 kodunun necə sınaqdan keçiriləcəyini, sənədləşdirilməsini müəyyənləşdirin.
  9. Kod nəzərdən keçirmə sistemini qurun
  10. İkinci icmal
    • İdeal modul necə görünür?
    • Köhnə kodu necə bağlamaq olar
    • Yeni modulu köhnə kodun ətrafına necə bükmək olar (Bax Strangler Pattern http://agilefromthegroundup.blogspot.com.au/2011/03/strangulation-pattern-of-choice-for.html)
  11. Daha yaxşı proqramçılardan yaranan bir qrupu təyin edin və modullarını bağlamaq üçün onlarla çalışın.
  12. Rabitə və sənədləri yaxşılaşdırmaq üçün bu mərhələdə kod təhlilləri mövcuddur. Bu mərhələdə asan saxlayın. Hər hansı bir proses məsələsini sıralayın.
  13. Sistemi digər proqramçılara təqdim edin. Çatlaq komandası üzvlərinin qalanların həmyaşıdları olmasına icazə verin. Unutmayın ki, burada miqyaslandırma məsələsidir. Effektiv şəkildə idarəetmə rolundasınız.

Bu kimi suallar Proqram Dülgərliyi layihəsinin mövcud olmasının bütün səbəbləridir.

Son 14 ildə elm adamlarına və mühəndislərə əsas proqram inkişaf etdirmə bacarıqlarını öyrədirik: versiya nəzarəti, test, kodun modullaşdırılması və s. Bütün materiallarımız Creative Commons lisenziyası əsasında sərbəst şəkildə əldə edilir və insanların işə başlamasına kömək etmək üçün hər il bir neçə düz iki günlük seminarlar keçiririk.

Buna əsasən, düşünürəm ki, ən yaxşı başlanğıc nöqtəsi, yəqin ki, Robert Şüşənin əla (qısa) kitabıdır Proqram mühəndisliyinin həqiqətləri və yalnışlığı: dəlillərə əsaslanan yanaşma, elm adamlarına yaxşı proqramlaşdırma təcrübələri haqqında söylədiklərimizin yalnız fikirlərdən daha çox olduğuna inandırmaq üçün yaxşı bir yoldur.
Xüsusi təcrübələrə gəldikdə, insanların mənimsəməyə ən çox razı olduqları iki variant, tətbiq olunduqdan sonra versiya nəzarəti və vahid testidir, Michael Feathers-in təsvir etdiyi sistematik yenidən işləmə növü ilə mübarizə apara bilərlər. Legacy Code ilə səmərəli iş.
Artıq tövsiyə etmirəm Praqmatik Proqramçı (çox nəsihət, təcrübəsizlərin tətbiq etməsi çətin) və məncə McConnell-in Kod Tamamlandı başlamaq üçün çox şeydir (baxmayaraq ki, əsasları mənimsədikdən sonra onlara altı ay və ya bir il vermək böyük bir şeydir).

Paul Duboisin əla kağızını da çox tövsiyə edirəm "Elmi proqramlarda düzgünlüyün qorunması" (Elm və amp mühəndisliyində hesablama, May-İyun 2005), bir çox fərqli təcrübəni məntiqi və tutarlı bir şəkildə birləşdirən "dərin bir müdafiə" yanaşmasını təsvir edir.

Düşünürəm ki, hər şeydən əvvəl vəziyyətinizi təmizləməlisiniz. Səndən nə istəyirlər?

  • Qədim bir dil öyrənməyinizi istəmələri ehtimalı çox azdır, çünki bu, indi bir çıxılmaz nöqtə kimi görünür: G2-ni bilən və ya öyrənmək istəyən hər kəsi tapmaq şansı azalmaqdadır, bu səbəbdən də məlumat yıxılan kod yığınına basdırılacaqdır mövcud elm adamları ayrılır və ya yamaqlanmış kod getdikcə daha çox uğursuz olur.
  • Alimlər (və ya bəziləri) yeni bir dil və çox sayda proqramlaşdırma paradiqması öyrənməyə hazırdırlar? Yoxsa proqramlaşdırma və elmi fəaliyyətini uzunmüddətli dövrdə ayırmaq istəyirlər və ehtiyac olarsa bəlkə də daha çox proqramçı var? Bu, təcrübənin rasional və daha səmərəli ayrılması kimi görünür.

Düşünürəm ki, buradakı əsas tələb "sistemdəki bilikləri xilas etmək" dir, ona görə də gedib onu qazmalısan!

İlk vəzifə sənədləşdirməkdir.

Quruluşu və tələbləri sanki bu yeni bir tapşırıq olacaq, amma mövcud bir sistemin köməyi ilə təhlil edin. Onlar məmnun qalacaqlar, çünki əvvəlcə TƏLİM əvəzinə soruşursunuz - və tez bir zamanda proqramçı baxımından kifayət qədər, lakin daha mütəşəkkil arxa plan məlumatı əldə edəcəksiniz: "burada nə baş verir?" Sənədlər (sistemin statik quruluşu, iş axını, komponentlər, problemlər) onlar üçün dərhal dəyərli olacaq və bəlkə də sizinlə müqayisədə onlar üçün daha uyğun məlumatları göstərəcək (bəzi uşaqlar "AHA!" Ola bilər və dərhal bəzi kodları düzəltməyə başlayacaqlar) ).

Sonra hara getmək istədiklərini soruşmağa başlamalısınız?

G2-dən uzaqlaşmağa hazır olduqları təqdirdə, hansı sistemi görmək istəyirlər (platforma, dil, interfeys, ümumi quruluş)? Mümkünsə, sistemin ətrafına xarici bir sarğı yazmağa başlaya bilərsiniz, hədəf quruluşuna sahib olsanız da, orijinal komponentləri saxlayaraq, bu hədəf mühitində yeni komponentlərin tətbiq olunmasına imkan verən bir növ çərçivəni yavaş-yavaş başlayasınız. Əsas xidmətləri (davamlı məlumat əlaqələri və "alət dəstləri": əsas hesablama, rəsm,. Kitabxanalar) tapmalısınız və buna görə də yeni platformada və dildə onlara tanış bir mühit təmin edirsiniz ki, bu da sizin və ya onların keçidinə imkan verir: köhnə kodları bir-bir götürün, yeni mühitdə tətbiq edin (və TƏMİZ!). Hazır olduqda, yeni dili bilirlər və xidmət qatını (əsasən sizin tərəfinizdən hazırlanırsınız, üzr istəyirik) yeni komponentləri qəbul etməyə hazırdır.

Əgər hərəkət etməsələr, G2-ni öyrənməlisiniz və orada komponentləri (təmizliklə) daşımalı olduğunuz modul çərçivəni yaratmalısınız. Hər halda, dil yalnız məlumatların və alqoritm ağacının seriallaşdırılmasıdır.

Sənədləri təhlil edərkən və yazarkən, GoF Design nümunələrini oxuyun, istifadə edin və reklam edin! :-)

Robert Martin-in iş yoldaşlarım üçün SOLID prinsiplərinə dair bir sıra təqdimatlar hazırladıq. Bu prinsiplərin G2-yə nə qədər yaxşı çevrildiyini bilmirəm, ancaq 5-7 əsas təməli axtardığınız üçün, başlanğıc üçün köklü bir dəst kimi görünürlər. 7-yə qədər yuvarlaqlaşdırmaq istəyirsinizsə, DRY ilə başlayıb Fail-Fast ata bilərsiniz.

Yeganə istehsal problemi dəyişiklik idarəçiliyi məsələsi kimi səslənir. Əgər belədirsə və proqram başqa bir şəkildə yerinə yetirirsə, verəcəyim ilk tövsiyə çox tez bir zamanda etmək istəməsinə qarşı durmaqdır.

Mənbə nəzarəti, yenidən işləmə, daha çox təlim keçmiş mütəxəssislər yaxşı təkliflərdir, ancaq bu cür məsələlərlə ilk dəfə qarşılaşmalı olsanız yavaş hərəkət edir və nəzarət altında dəyişikliklər etmək kifayət qədər vurğulanmaz.

Dağınıqlıqları qırmaq istəyi bəzən əla olacaq, ancaq dəyişdirdiyiniz versiyanı lazımi dərəcədə sınaqdan keçirə biləcəyinizi bildiyinizə qədər tərtib olunana qədər çox diqqətli olmalısınız.

Belə bir vəziyyətdə işləmək üçün ən vacib prinsiplər bunlardır:

Səbirli olun. 20 il qazmağı tələb edən bir çuxur bir neçə həftə içində doldurulmayacaq.

Müsbət olun. Şikayət etmək və küsmək cazibəsinə qarşı durun.

Praqmatik olun. Bir gündə edə biləcəyiniz müsbət dəyişikliyə baxın və bunu bu gün edin. Hələ versiya idarəetmə sisteminiz var? Bunu həyata keçirin və insanları öyrədin. Sonra baxın və testi avtomatlaşdıra biləcəyinizə baxın (Vahid testi və ya oxşar bir şey). Durulayın. Təkrarlamaq.

Bir model olun. Çevik olmaqla insanlara çevik necə işlədiyini göstərin (sadəcə söyləməyin). Yuxarıdakı ilk üç nöqtə, təsirli Çevik bir oğlan olmağın sələfi olan Yaxşı Bir Uşaq olmağın açarlarıdır. Məncə, təqdirəlayiq inkişaf etdiricilər olan insanlar yalnız ağıllı deyil, həm də yaxşı, model işçilər və həmkarlardır.

Bölgənizi xəritəyə salın. Nəhəng miras kod bazalarının xəritələnməsi üçün bir texnikam var. Reponu klonlayıram, işləyən bir nüsxə çıxarıram və sonra nəyisə dəyişdirməyə çalışıram və görüm nələr pozulur. Birləşməni araşdıraraq (qlobal vəziyyət və ya qırılmış API-lər və ya uyğun API olmaması və ya hər hansı bir soyutlama və ya interfeys tətbiq olunmaması üçün) və şeyləri dəyişdirdiyim zaman pozulan kodu oxuyaraq, həqiqəti aşkar edirəm, səbəb olan suallar verirəm. komandanın qalan hissələrindən olan fikirlər (Əlavə etdik ki, Boss X 5 il əvvəl tələb etdiyinə görə heç işləməyib!). Zamanla ərazinin zehni xəritəsini əldə edəcəksiniz. Nə qədər böyük olduğunu bildikdən sonra xəritənizi düzəltmək və evə getmək üçün kifayət qədər məlumat əldə edəcəksiniz. Başqalarını nəhəng kod bazasının ərazisini xəritələşdirməyə və komandanın texniki biliklərini inkişaf etdirməyə təşviq edin. Bəzi insanlar çevik olmadığı üçün "sənədləşməyə" laqeyd qalırlar. Nə olursa olsun. Elmi mühitlərdə də işləyirəm və sənədlər mənim üçün kraldır, çevik manifestoslar lənətlənsin.

Kiçik proqramlar yaradın. Əvvəlki bir kod bazası ilə işləyərkən, bir əzələyə düşdüyümü görürəm. Kiçik köməkçi proqramlar quraraq ruhumu geri alıram. Bəlkə də bu tətbiqlər o nəhəng G2 kod bazasını oxumağınıza, anlamağınıza və dəyişdirməyinizə kömək edəcəkdir. Bəlkə mühitinizdə işləməyinizə kömək edəcək bir mini IDE və ya təhlil vasitəsi edə bilərsiniz. Meta-proqramlaşdırma və alət qurmağın köhnə kod bazalarının sizə tətbiq etdiyi nəhəng dalana çıxmağınıza kömək etməyinizlə yanaşı beyninizə G2 dilinizlə məhdudiyyətsiz uçmaq imkanı da verəcəyi bir çox hal var. Alətlərinizi və köməkçilərinizi ən sürətli və ən yaxşı şəkildə edə biləcəyiniz istənilən dildə yazın. Mənim üçün bu dillərə Python və Delphi daxildir. Bir Perl oğlusunuzsa və ya həqiqətən C ++ və ya C # dilində proqramlaşdırma BƏYƏNƏSİNİZsə köməkçi vasitələrinizi bu dildə yazın. komandanın qalan hissəsinə kiçik köməkçi tətbiqetmələr və alətlər və "komponentlər" yaratmağı öyrədin və nəticədə köhnə kod bazanızın o qədər də qorxunc olmadığını görəcəksiniz.

Revizyon nəzarəti: domen mütəxəssislərinə geri qaytarmaq, kimin nəyi dəyişdirdiyini görmək və s. faydasını göstərin (bu, ikili fayllarla daha sərtdir, amma məzmunu həqiqətən koddursa, şübhəsiz ki, bir növ G2-to-text çeviricisi var fərqləri təmin edə bilər.)

Davamlı inteqrasiya və sınaq: demək olar ki, bütün funksiyaları əhatə edən ucdan uca testlər (daha asan, çünki onsuz da bir yerdə giriş və gözlənilən nəticələr olmalıdır) və kiçik vahid testlər (daha çətindir, çünki spagetti kodu çox qlobal dəyişənləri ehtiva edir). və istifadə halları.

Refactor ümumi kodu təkrar istifadə olunan rutinlərə və komponentlərə. Yenidən baxışa sahib olmayan proqram təminatı olmayan insanlar, ehtimal ki, rutinlər düzəltmək üçün bir anda 100s sətri kopyalayıb yapışdırın. Bütün testlərin keçdiyini və kodun qısaldığını göstərərək onları tapın və yenidən işləyin. Bu həm də onun memarlığını öyrənməyinizə kömək edəcəkdir. Sərt memarlıq qərarlarını verməyə başlamağınıza qədər şanslısınızsa, 100KLOC-a düşə bilərsiniz.

Siyasi baxımdan, bu müddətdə köhnə taymerlərdən müqavimət taparsanız, içəri girmək və yaxşı proqram metodologiyası barədə danışmaq üçün bir məsləhətçi işə götürün. Baxışları ilə razı olduğunuz yaxşı birini tapdığınızdan əmin olun və domen mütəxəssisləri olmasa da rəhbərliyi məsləhətçinin zərurəti ilə satın alsın. (Razılaşmalıdılar - axı səni işə götürdülər, buna görə açıq şəkildə proqram mühəndisliyi təcrübəsinə ehtiyac duyduqlarını başa düşdülər.) Bu, əlbəttə ki, pul israf edən bir hiylədir, amma səbəb budur ki, sən - yeni qaynar gənc proqramçı - onlara bir şey etmələri lazımdır, bunu görməzdən gələ bilərlər. Ancaq rəhbərlik bir məsləhətçiyə girmək və nə etmələri lazım olduğunu söyləmək üçün 5000 dollar ödəyərsə, buna daha çox inanacaqlar. Bonus xalları: məsləhətçidən istədiyiniz qədər iki dəfə çox dəyişiklik etməsini tövsiyə etsin, o zaman "yaxşı oğlan" ola və domen mütəxəssislərinin tərəfində ola bilərsiniz, məsləhətçinin təklif etdiyi qədər yalnız yarısını dəyişdirməkdən güzəştə gedə bilərsiniz.

"Proqram özü kompleks bir kimyəvi emal zavodunun fiziki modelidir."

"G2 kod olmayan bir şey olduğu üçün, əksinə bəzi gadwful GUI tərəfindən yazılmış avtomatlaşdırılmış koddur." - Erik Reppen

Proqramınızın əsas məqsədini simulyasiya etmək olduğunu düşünsək (bəlkə də optimallaşdırın, parametr qiymətləndirmələrini işə salın) a kompleks kimya zavodu və ya birinin hissələri. sonra daha fərqli bir təklif irəli sürmək istərdim:

Özü, əsas riyazi modelləri çıxarmaq üçün yüksək səviyyəli riyazi modelləşdirmə dilindən istifadə etməyi düşünmək yaxşı olar. çıxmaq əl kodlu proqram.

Modelləşdirmə dilinin işi problemin təsvirini problemi həll etmək üçün istifadə olunan alqoritmlərdən ayırmaqdır. Bu alqoritmlər ümumiyyətlə müəyyən bir sinifin (məsələn kimyəvi proseslərin) əksər simulyasiyaları / optimallaşdırmaları üçün tətbiq olunur, bu halda onlar həqiqətən yenidən icad edilməməli və evdə saxlanılmamalıdır.

Sənayenizdə geniş istifadə olunan üç ticarət paket bunlardır: gPROMS, Aspen Custom Modeller və (modellərinizdə boşluqlar arasında paylanmış hadisələr daxil deyilsə), Dymola kimi Modelica əsaslı proqram paketləri var.

Bu paketlərin hamısı "uzantıları" bu və ya digər şəkildə dəstəkləyir, belə ki, modellərinizdə xüsusi proqramlaşdırma tələb edən hissələriniz varsa, bunlar bərabərliklər tərəfindən istinad edilə bilən bir obyektə (məsələn .DLL) daxil edilə bilər. model. Bu arada, modelinizin əsas hissəsi qisa olaraq qalır, birbaşa alimlər tərəfindən asanlıqla oxunaqlı bir şəkildə təsvir olunur. Bu, şirkətinizin məlumatlarını və IP-lərini əldə etmək üçün daha yaxşı bir yoldur.

Bu proqramların əksəriyyəti ayrıca 'kiçik başlamağa' imkan verməli və monolit kodunuzun kiçik hissələrini (alt modellərini) xaricdən çağırılaraq formatlarına yerləşdirməyinizə imkan verməlidir. Bu, işləmə sistemini qorumaq və hər dəfə bir parça təsdiqləmək üçün yaxşı bir yol ola bilər.

Tam imtina: 8 il gPROMS-un arxasındakı şirkətdə bir proqram mühəndisi işlədim. O dövrdə kiçik və səliqəli başlayan, bəzi ağıllı bir həll və ya alqoritmi tətbiq edən, sonra illərlə uzantılar və dəyişikliklərlə partlayan xüsusi proqram təminatlarının (məsələn, akademiyadan gələn) nümunələrini gördüm (və bəzən). onu təmiz saxlamaq üçün bir proqram mühəndisi. (Mən çox intizamlı komandaların azarkeşiyəm.)

Beləliklə, bir təcrübə ilə deyə bilərəm ki, bir proqram inkişafında zəif başlayan bəzi əsas seçimlər (dil və ya açar kitabxana kimi) uzun müddət uzun müddət ağrılı qalmağa meyllidir. Artıq ətraflarındakı proqramı 'formalaşdırdılar'. Mənə elə gəlir ki, burada uzun illər təmiz kod təmizliyi ilə qarşılaşa bilərsən. (Rəqəmlərdən istifadə etməkdə tərəddüd edirəm, amma 10 yaşdan yuxarı bir insan ili düşünürəm, bəlkə də kodu G2-dən Eclipse / Java tez ağıllı kimi yaxşı avtomatlaşdırılmış yenidən işləmə alətlərini dəstəkləyən bir şey əldə edə bilmirsinizsə.)

Varsayılan statusum "refactor və işləyən bir sistem saxlamaq" olsa da, düşünürəm ki, bir dəfə problem "çox böyüyür", daha radikal bir dəyişiklik / yenidən yazma ümumiyyətlə daha sürətli olur. (Və daha müasir bir texnologiyaya keçid kimi əlavə fayda gətirir.) Deyirəm ki, yeni bir proqram platformasına köçürmə təcrübəsi ilə, amma topladığım şeydən portla riyazi bir modelləşdirmə paketinə qədər daha dramatik bir şey.

Bəzi perspektiv vermək üçün ölçünün azaldılmasına çox təəccüblənə bilərsiniz. Məs. 200.000 LoC əslində 5.000 sətir tənliklər kimi bir şeylə təmsil oluna bilər (Tamam, burada düşünürəm, amma sizə işdəki dostlarınızdan həqiqi rəy ala bilərəm) və C kimi bir şeylə yazılmış nisbətən kiçik bir neçə funksiya modulu (məsələn, fiziki mülk hesablamaları - hərçənd yenidən kimyəvi paketinizə görə rəflərdən kənar paketlər mövcud ola bilər). Bunun səbəbi, sözün əsl mənasında alqoritmik həll kodunu atmağınız və riyazi həlledicilərin ümumi məqsədli bir "yığını" nı çətin işi yerinə yetirməsinə icazə verməyinizdir. Bir dəfə simulyasiyalar işə salındıqda, bunlarla prosesi optimallaşdırmaq kimi daha çox şey edə bilərsiniz - bir kod sətrini dəyişdirmədən.

Nəhayət, deyərdim: müxtəlif riyazi modellərin (və alqoritmlərin) yeganə etibarlı sənədləri kodun özüdürsə, alimlərin və orijinal müəlliflərin köməyindən bu modelləri çıxarmaq üçün ASAP-a kömək etmək istərsiniz, nəinki illərdir. bəziləri davam etmiş ola bilər. Riyazi modelləşdirmə dilinin bu modelləri tutmağın çox təbii bir yolu olduğunu görməlidirlər - hətta yazmaqdan (şok dəhşət) zövq ala bilərlər.

Nəhayət, cavabım işarədən kənarda qaldığından, artıq istinad olunan yaxşı kitabların siyahısına bir kitab daha əlavə etmək istərdim: Robert Martin tərəfindən təmiz kod. Öyrənilməsi və tətbiqi asan, lakin şirkətinizdə yeni kod hazırlayan insanlar üçün fərqli bir dünya yarada biləcək sadə (və əsaslandırılmış) tövsiyələr.


Videoya baxın: Learn Python in Arabic #34 - الاستمرار في التكرار continue in loop Python (Oktyabr 2021).