Auto-generate Flow Chart from Java/C++ Codes:

Raptor Flowchart Tutorial For Beginners

Showing posts with label pengaturcaraan. Show all posts
Showing posts with label pengaturcaraan. Show all posts

Monday, November 05, 2018

4 Langkah Untuk Mula Belajar jQuery


.
Hari ini, jQuery adalah perpustakaan JavaScript penting untuk dipelajari.Banyak pemula sering bertanya bagaimana untuk memulakan dengan jQuery, dan, dalam tutorial ini, saya akan melakukan yang terbaik untuk memberikan jawapan. Saya harap anda mendapati tutorial ini berguna.

Apakah jQuery?

Ia adalah skrip pengaturcaraan yang berjalan dalam pelayar web. Dalam istilah teknikal, jQuery adalah perpustakaan JavaScript-dan saya merasa sangat berguna dan mudah digunakan.
Anda boleh belajar jQuery tidak dalam beberapa hari tetapi dalam beberapa jam.
Tajuk imejBeberapa perkara yang saya suka mengenai jquery ialah:
  1. Ia membuat kod saya sangat singkat.
  2. Saya boleh melakukan tugas yang kompleks seperti memanipulasi struktur HTML halaman web (juga dikenali sebagai Manipulasi DOM) hanya dalam beberapa baris kod.
  3. Pengendalian Acara lebih mudah daripada JavaScript vanila.
  4. Panggilan AJAX sangat mudah.

Belajar jQuery dalam 4 Langkah

Sebagai pemula, anda mungkin mahu melompat dan mencuba fungsi dan prestasi ujian seperti hal-hal baru. Dari perspektif pemula, saya telah mencatatkan empat langkah penting yang akan membantu anda memulakan jQuery dengan segera. Mari kita bincangkan empat langkah ini satu demi satu ...

Langkah 1 - Tambah Rujukan jQuery

Apabila bekerja dengan jQuery, perkara pertama yang perlu dilakukan adalah untuk menambah rujukannya. Rujukan disediakan di kepala halaman.Rujukan diberikan di bawah:
 
Dalam baris di atas, saya merujuk jQuery CDN dari Google Hosted Libraries.
"Jika anda bekerja di tempat yang tidak ada Internet maka rujukan di atas tidak akan berfungsi, dalam hal ini, anda boleh memuat turun jQuery di PC Lokal anda dan merujuknya dari sana. Pautan jQuery download https: // jquery. com / muat turun / "
Jika anda telah memuat turun jQuery pada PC tempatan anda, anda menambahnya ke folder laman web anda dan merujuknya seperti:
  

Langkah 2 - Pengendalian Acara jQuery

Peristiwa seperti butang klik, keyup, keydown, tetikus, fokus, jQueryUncheck acara kotak, dll, boleh diprogram dengan mudah.
Sebagai contoh, di sini saya akan menunjukkan cara untuk memprogramkan klik butang acara di jQuery:

HTML of Page

    
Dalam kod di atas, saya telah meletakkan acara klik butang di dalam $(document).ready(function () { } . Ini kerana ia memberitahu jQuery untuk dijalankan selepas halaman dimuatkan sepenuhnya.
Ingat bahawa semua kod jQuery anda harus disimpan di dalamnya.
Apabila anda menjalankan halaman anda dalam pelayar dan klik butang anda akan mendapat kotak mesej amaran seperti yang ditunjukkan dalam imej di bawah:
jQuery Button Click Event
Mari ambil contoh lain untuk memeriksa sama ada huruf 'Y' ditekan di mana saja di halaman kami, dan kemudian menunjukkan mesej amaran. Berikut adalah kod untuknya:
 $(document).keyup(function (event) { if(event.which==89) { alert("Letter 'Y' is pressed"); } }); 
Perhatikan bahawa 89 adalah peristiwa utama untuk huruf 'Y'.

Langkah 3 - Manipulasi DOM Dengan jQuery

Kita boleh membuat banyak perubahan dalam DOM dengan jQuery, dengan mudah. Jika anda pernah mencuba melakukan ini dengan JavaScript kemudian, kemungkinan besar, anda akan tahu betapa sukarnyanya. Dengan jQuery, ia adalah sekeping kek.
Mari kita melakukan manipulasi DOM mudah untuk menguji diri kita sendiri.Di sini, seseorang terpaksa memilih ibu negara AS dari 7 pilihan. Pilihan diberikan dalam butang radio. Apabila orang memilih yang salah maka teks "Salah" muncul. Apabila mereka memilih yang betul (Washington DC) maka teks "Hak" akan muncul.
Kami membuat ini berlaku pada acara klik butang radio dan menambah 'perenggan' dengan teks "Betul" atau "Salah", di sebelah butang radio.
  
  • Albany
  • Buffalo
  • Kingston
  • Tonawanda
  • Sherrill
  • Washington DC
  • Oneida
Perhatikan bahawa dalam kod jQuery di atas saya periksa nilai butang radio, apabila ia diklik, dan kemudian cari induknya (iaitu "li" elemen). Kepada ibu bapa ini, saya menambah perenggan dengan teks yang sesuai.
jQuery DOM Manipulation

Langkah 4 - jQuery AJAX

Postback separa dicapai dengan permintaan AJAX. Dengan jQuery, kami boleh membuat permintaan AJAX dengan mudah dan memanggil fungsi pelayan (seperti memanggil fungsi PHP atau C #) dengan kod jQuery.Kemudian tunjukkan nilai kembalikan fungsi ini di dalam halaman HTML.
Kadang-kadang anda mungkin perlu menanyakan pangkalan data kami untuk rekod (seperti mencari butiran pelanggan dari pangkalan data berdasarkan nama). Di sini, kita boleh menggunakan jQuery untuk memanggil fungsi PHP / ASP kami (yang mengembalikan butiran pelanggan), dan kemudian menunjukkan butiran dalam div.
Perkara penting yang perlu diperhatikan di sini adalah bahawa anda melakukan ini dalam postback separa.

Kod jQuery AJAX

 
 
Perhatikan bahawa dalam kod di atas saya panggil GetCustomer   fungsi halaman "jquery-ajax.aspx" dan diserahkan kepadanya nama pelanggan sebagai parameter.
Fungsi fungsi ini adalah untuk mendapatkan butiran pelanggan orang dari pangkalan data dan mengembalikannya ke fungsi jQuery. Maklumat ini ditunjukkan di dalam div yang dipanggil customerDetails .

Ringkasan

Saya harap anda mendapati tutorial saya berguna dan selepas membacanya, anda boleh maju ke hadapan dengan membangunkan fungsi jQuery untuk aplikasi web dan laman web.
Jangan ragu untuk menghubungi saya melalui bahagian komen jika anda mempunyai sebarang soalan mengenai jQuery.
.
Diterjemah dari: https://dzone.com/articles/4-steps-to-learn-jquery-for-beginners
.

Lindungi Keselamatan Laman Web Menggunakan Java Spring Boot

Boot Spring sebenarnya sangat mudah ...


.
Dalam tulisan ini, saya akan menerangkan bagaimana Spring menguruskan keselamatan. Saya tidak akan meliputi segala-galanya, sudah tentu - isu keselamatan akan menjadi buku besar, tetapi kami sekurang-kurangnya akan melihat bagaimana untuk mendapatkan laman web.
Seperti biasa, saya ingin bermula dengan mengatakan bahawa kod sumber boleh didapati di halaman GitHub saya. Program ini dibuat di Java menggunakan Spring Boot.
Nah, mari kita mulakan dengan melihat cara untuk mendapatkan laman web di Spring.
Boot Spring sebenarnya sangat mudah kerana kami akan menggunakan apa yang permulaan permulaan Spring, yang tidak lain hanyalah kumpulan pakej yang dikelompokkan oleh fungsi yang mereka tawarkan. Jadi dalam kes ini, pakej itu akan termasuk Web, Thymeleaf, dan, tentu saja, Keselamatan.
Berikut adalah sekilas Eclipse untuk memilih pakej yang diperlukan.
Tajuk imej
Sebilangan besar daripada anda sudah tahu, dependensi fail pom.xml membolehkan anda melihat lebih terperinci.
Thymeleaf adalah perisian yang mengintegrasikan dengan lancar dengan Spring dan mencipta templat laman web. Ini serupa dengan JSP, tetapi Thymeleaf adalah versi yang lebih baik. Atau, jika anda lebih suka JavaServer Faces, ia akan kelihatan seperti JavaEE. Kesnya adalah bahawa ia membolehkan halaman HTML untuk mengintegrasikan dengan lancar dengan kelas kami yang dibangunkan di Spring.
Oleh kerana kami ingin melihat di laman web kami, nama pengguna yang kami rakamkan membolehkan kami menggunakan keselamatan perpustakaan Thymeleaf untuk Spring. Untuk melakukan ini, kami akan memasukkan baris berikut dalam fail pom.xml kami.
 org.thymeleaf.extras   thymeleaf-extras-springsecurity4   3.0.3.RELEASE   

Dan di sini, anda dapat melihat bagaimana ia akan menyusun program kami
Tajuk imej
Kini, kami mula mengisytiharkan kelas pertama kami, yang telah dipanggil WebSecurityConfiguration.java:
 @SpringBootApplication @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { public static void main (String [] args) { SpringApplication.run (WebSecurityConfiguration.class, args); } @Bean @Override public AuthenticationManager authenticationManagerBean () throws Exception { super.authenticationManagerBean return (); } @Bean @Override public UserDetailsService userDetailsService () { UserDetails user = User.builder (). Username ( "user"). Password (passwordEncoder (). Encode ( "secret")). roles ( "USER") build ().; UserDetails UserAdmin = User.builder (). Username ( "admin"). Password (passwordEncoder (). Encode ( "secret")). roles ( "ADMIN") build ().; return new InMemoryUserDetailsManager (user, UserAdmin); } @Bean public PasswordEncoder passwordEncoder () { return new BCryptPasswordEncoder (); } @Override protected void set (http HttpSecurity) throws Exception { http .csrf (). disable () .authorizeRequests () .antMatchers ( "/" "/ index", "/ webpublico"). permitAll () .antMatchers ( "/ webprivado"). authenticated () .antMatchers ( "/ webadmin"). hasRole ( "ADMIN"). and () .formLogin () .loginPage ( "/ login") .permitAll () .and () .logout () // get method for I desabilitado CSRF .permitAll (); } } 

Yang pertama ialah menggunakan label @SpringBootApplication  dan @EnableWebSecurity . Teg pertama adalah jelas - sejak permohonan kami, kami mahu bekerja dengan Spring Boot.Yang kedua adalah untuk menentukan bahawa keselamatan web diaktifkan; jujur, label ini tidak diperlukan. Boot Spring sangat pandai, seperti yang kita lihat keselamatan pakej (dalam pom.xml, ingat) dalam projek kami. Ia termasuk mesej ini sekali lagi, yang tidak semestinya sesuatu yang buruk, kerana ia memberikan penjelasan lebih lanjut tetapi, walaupun, berlebihan.
Sekarang, kami menyatakan bahawa kelas kami akan mewarisi dari WebSecurityConfigurerAdapter kerana kita akan menimpa beberapa fungsi kelas itu. Jadi, anda perlu memahami Spring dan melihat apakah terdapat kelas yang mengimplementasikan antara muka WebSecurityConfigurer , yang mengimplementasikan WebSecurityConfigurerAdapterkelas, dan jika ya, ia menggunakan fungsi antara muka itu untuk mengkonfigurasi aplikasi keselamatan.
Sekiranya kita mempunyai kelas yang menggunakan antara muka ini, Spring tidak akan dapat mengakses mana-mana halaman permohonan kami, yang mungkin difahami oleh anda, tidak praktikal.
Kini, kita perlu menulis fungsi authenticationManagerBean  untuk memulangkan kelas yang bertanggungjawab untuk mengurus pengesahan (seperti namanya). Baiklah, anda mungkin tertanya-tanya: tetapi bagaimana pula jika anda hanya memanggil fungsi untuk menentukan? Ini sebenarnya sangat mudah kerana kita menggunakan @Bean   label untuk Spring. Adalah penting untuk mengetahui di mana untuk mendapatkan (menyuntikkan) jenis objek AuthenticationManager   kerana anda perlu mengawal keselamatan.
Dalam fungsi userDetailsService , kami menentukan pengguna yang akan mempunyai akses ke laman web kami. Dalam kes ini, kami mencipta dua pengguna: pengguna dan admin (ya, saya tahu bahawa saya tidak cuba terlalu keras memilih nama itu), masing-masing mempunyai kata laluan dan peranannya sendiri. Jelaskan bahawa ROLE adalah harfiah percuma, yang bermaksud bahawa ini boleh menjadi apa sahaja yang anda mahukan. Contohnya, USER_WITH_EYES - hakikatnya, maka kita akan menggunakan peranan itu, ia harus sepadan dengan surat dengan huruf dengan set.
Juga, ambil perhatian bahawa kata laluan disulitkan, dalam kes ini, dengan Bcrypt algoritma. Kami melakukan ini dengan memanggil passwordEncoder @Bean , yang dijelaskan dengan Spring @Bean   label.
Maksudnya, Spring perlu mengetahui sistem penyulitan yang kita gunakan untuk menyimpan kata laluan, dan ia mencari objek yang menggunakan PasswordEncoder antara muka. Jika kita gagal, kita tidak dapat mencari permohonan itu.
Saya ingin menjelaskan bahawa kami menggunakan cara paling mudah untuk mengisytiharkan pengguna dan menyimpannya, dalam ingatan, dengan kelas InMemoryUserDetailsManager . Dalam program sebenar, ia akan menggunakan JdbcUserDetailsManager , yang membolehkan kami menyimpannya dalam pangkalan data. Atau, ini boleh termasuk mana-mana kelas lain yang melaksanakan antara muka UserDetailsManager , kerana ia boleh menjadi LdapUserDetailsManager   jika kita menggunakan perkhidmatan LDAP.
Dan kerana kita perlu menentukan bahagian mana aplikasi kita akan dilindungi, peranan mesti mempunyai kebenaran untuk mengakses setiap bahagiannya. Ya, saya telah menulis peranan dan bukan pengguna, kerana seperti yang telah kami katakan sebelum ini, apabila anda menentukan pengguna, anda mesti menetapkan peranan. Dan biasanya, peraturan penapisan digunakan oleh kumpulan yang dimiliki pengguna.Untuk menetapkan keizinan untuk setiap sumber, kami akan mengkonfigurasi objek HttpSecurity yang diterima dalam konfigurasi batal fungsi yang dilindungi (HttpSecurity http).
Saya akan menjelaskan garis demi baris apa yang dilakukan dalam fungsi ini:
  • csrf (). disable () 
Pertama, kita melihat CSRF mengawal kawalan. CRSF bermaksud pemalsuan permintaan Cross Site , seperti yang dijelaskan oleh Wikipedia:
Pemalsuan permintaan silang tapak , yang juga dikenali sebagai serangan satu klik atau menunggang sesi dan disingkat CSRF (kadang-kadang disebut surfing laut ) atau XSRF , adalah sejenis eksploit yang berniat jahat di laman web di mana arahan yang tidak dibenarkan dihantar daripada pengguna web amanah permohonan. Terdapat banyak cara di mana tapak web berniat jahat boleh menghantar arahan tersebut; Contohnya, tag imej khusus, bentuk tersembunyi, dan JavaScript XMLHttpRequests, misalnya, semuanya boleh berfungsi tanpa interaksi pengguna atau pengetahuan. Tidak seperti skrip silang tapak (XSS), yang mengeksploitasi kepercayaan pengguna untuk laman web tertentu, CSRF mengeksploitasi kepercayaan bahawa tapak mempunyai dalam pelayar pengguna.
Melumpuhkan CRSF mempunyai kesan sampingan yang boleh melakukan log keluar sesi dengan permintaan HTTP GET jenis, maka lalai hanya dapat dilakukan dengan permintaan POST:
  • .authorizeRequests () .antMatchers ( "/" "/ index", "/ webpublico"). permitAll ()
Kami menyatakan bahawa petisyen di laluan ini dengan mana-mana rentetan "/", "/ index", "/ webpublico" tidak akan mempunyai keselamatan. Itu dibenarkan untuk semua orang.
  • antMatchers ( "/webprivado"). authenticated ()   
Kami menyatakan bahawa permintaan ke laluan "/ webprivado" boleh   hanya diproses jika pengguna disahkan, tanpa menentukan peranan apa yang perlu dimiliki.
  • .antMatchers ( "/webadmin"). hasRole ( "ADMIN")   
Hanya pengguna yang menjadi sebahagian daripada ADMINkumpulan akan mempunyai akses ke URL "/ webadmin."
Fungsi antMatchers   membolehkan penggunaan ungkapan biasa, jadi jika, misalnya, kami ingin memohon peraturan kepada semua yang bergantung pada laluan, kami boleh meletakkan ini:
http.antMatchers ("/ users / **"). hasRole ("USER") untuk menentukan bahawa sebarang permintaan kepada URL / pengguna / XXX hanya mempunyai akses kepada pengguna milik kumpulan USER.
  • .formLogin(). loginPage( "/login"). permitAll()   
Kami menyatakan bahawa halaman masuk akan " / login " dan dibenarkan untuk sampai kepada semua orang.
  • logout(). permitAll()   
Kami menyatakan halaman logout harus dibenarkan untuk mencapai semua orang. Secara lalai, halaman ini jawapan dalam URL " / logout ."
Sempurna. Kami telah menentukan keselamatan laman web kami. Kini, kami hanya menetapkan titik masuk ke halaman.Ini dilakukan di kelas WebController.java .
 @Controller public class WebController { @RequestMapping ({ "/", "index"}) public String start () { return "index"; } @RequestMapping ( "/webprivado") public private String () { "Private" return; } @RequestMapping ( "/webpublico") public String loginpub () { "Public" return; } @RequestMapping ( "/webadmin") public String admin () { return "admin"; } @RequestMapping ( "/login") public String login () { return "login"; } } 

Seperti yang dilihat di atas, kelas mempunyai banyak misteri.W hanya tentukan label @Controller untuk menjadi kelas di mana kita boleh menentukan titik kemasukan untuk permintaan web.
Kami mempunyai fungsi yang berlainan dalam label @RequestMapping   untuk menentukan URL dan diproses oleh setiap fungsi. Oleh itu, permulaan fungsi akan dipanggil apabila permintaan kepada URL, " / " atau " / indeks ."Perhatikan bahawa kita perlu dimasukkan ke dalam bar awal.
Rentetan yang dikembalikan akan menjadi template yang Thymeleaf dikembalikan supaya fungsi mula panggilan akan mengembalikan templat "index.html", seperti ditunjukkan di bawah:
 <! DOCTYPE html>    Home Page </ title> </ Head> <body> <h1>
 Home Page </ h1> <p>
 <a th:href="@{/webpublico}"> Click here to view a page </a> public. </ P> <p>
 If you are a regular user clicks </a> <a th:href="@{/webprivado}"> here to view a private page </ p> <p>
 If you are a regular administrator </a> click <a th:href="@{/webadmin}"> here to see the profile Administrator </ p> <div sec: Authorize = "isAuthenticated ()">
 Hello <span sec: authentication = "name"> someone </ span> <p>
 <a th:href="@{/logout}"> Disconnect </a> </ p> </ Div> </ Body> </ Html></code> </pre>
<p pid="40" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<br style="box-sizing: border-box;"></p>
<p pid="41" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Bagaimanakah ia kelihatan seperti HTML tulen?</span> <span class="notranslate" style="box-sizing: border-box;">Ini adalah salah satu kelebihan menggunakan tag HTML standard Thymeleaf.</span> <span class="notranslate" style="box-sizing: border-box;">Saya tidak akan menjelaskan bahasa di sini, tetapi saya akan menerangkan beberapa label yang digunakan:</span></p>
<p pid="42" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;"><strong style="box-sizing: border-box;"><a th: href="@{/webpublico}"></strong> - Buat pautan ke URL " <strong style="box-sizing: border-box;">/</strong>webpublico."</span> <span class="notranslate" style="box-sizing: border-box;">Ia seperti menggunakan "tag <strong style="box-sizing: border-box;"><a href="/webpublico"></strong> .</span></p>
<p pid="43" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;"><strong style="box-sizing: border-box;"><div sec: Authorize = "isAuthenticated ()">
</strong> -</span> <strong style="box-sizing: border-box;"> </strong> <span class="notranslate" style="box-sizing: border-box;">Ini adalah satu-satunya kod yang akan diberikan di DIV jika pengguna disahkan.</span> <span class="notranslate" style="box-sizing: border-box;">Dengan kata lain, jika pengguna tidak log masuk, ia tidak dipaparkan di laman web yang antara tag DIV (sebenarnya, ia tidak akan dipaparkan pada halaman web atau DIV).</span></p>
<p pid="44" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;"><strong style="box-sizing: border-box;"><span sec: authentication = "name"> someone </ span></strong> - Jika pengguna log masuk dengan nama pengguna mereka, ia akan menunjukkan apa yang anda ada di antara tag <strong style="box-sizing: border-box;">span.</strong></span><span class="notranslate" style="box-sizing: border-box;">Dalam kes ini, ia menunjukkan seseorang.</span></p>
<p pid="45" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Dan dengan ini, kami mempunyai aplikasi yang selamat!</span> <span class="notranslate" style="box-sizing: border-box;">Ya, kami mengamankan halaman web dengan hanya dua kelas Java dan fail HTML yang sesuai.</span></p>
<p pid="46" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Untuk menyelesaikan siaran ini, saya meninggalkan beberapa tangkapan skrin aplikasi:</span></p>
<p pid="47" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<img alt="Tajuk imej" class="fr-fin fr-dib" src="https://dzone.com/storage/temp/10534853-captura-12.png" width="655" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"></p>
<figure id="attachment_393" style="box-sizing: border-box; margin: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);"><figcaption style="box-sizing: border-box; clear: both; font-size: 16px; margin: 0px 0px 30px 10px; line-height: 1.2; color: rgb(115, 121, 129);"><span class="notranslate" style="box-sizing: border-box;">Ini adalah halaman rumah tanpa mendaftar.</span></figcaption></figure><figure id="attachment_393" style="box-sizing: border-box; margin: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);"><figcaption style="box-sizing: border-box; clear: both; font-size: 16px; margin: 0px 0px 30px 10px; line-height: 1.2; color: rgb(115, 121, 129);"><p style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px;">
<img alt="Tajuk imej" class="fr-fin fr-dib" src="https://dzone.com/storage/temp/10534857-captura1-1.png" width="654" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"><span class="notranslate" style="box-sizing: border-box;">Ini adalah halaman awam.</span></p>
<p style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px;">
<img alt="Tajuk imej" class="fr-fin fr-dib" src="https://dzone.com/storage/temp/10534866-captura5.png" width="685" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"></p>
</figcaption></figure><p pid="48" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Ini kelihatan di laman utama sebaik sahaja ia mengenal pasti 'pengguna'.</span></p>
<p pid="49" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<img alt="Tajuk imej" class="fr-image-dropped fr-fin fr-dib" src="https://dzone.com/storage/temp/10534867-captura2.png" width="600" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"></p>
<p pid="50" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Sekarang, kami mengenal pasti pengguna "pengguna:"</span></p>
<p pid="51" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<img alt="Tajuk imej" class="fr-fin fr-dib" src="https://dzone.com/storage/temp/10534869-captura4.png" width="704" style="box-sizing: border-box; border: 0px; vertical-align: middle; max-width: 100%; height: auto; text-align: center; margin: auto; display: block; float: none !important;"></p>
<figure id="attachment_397" style="box-sizing: border-box; margin: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);"><figcaption style="box-sizing: border-box; clear: both; font-size: 16px; margin: 0px 0px 30px 10px; line-height: 1.2; color: rgb(115, 121, 129);"><span class="notranslate" style="box-sizing: border-box;">Sekarang, kita dapat melihat ralat mengakses laman web;</span> <span class="notranslate" style="box-sizing: border-box;">" <b style="box-sizing: border-box;">/ admin</b> " didaftarkan dengan pengguna pengguna 'dan tidak mempunyai keizinan untuk laman web itu.</span></figcaption></figure><p pid="52" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<br style="box-sizing: border-box;"></p>
<p pid="53" style="box-sizing: border-box; margin-top: 5px; margin-bottom: 15px; padding-top: 0px; color: rgb(34, 38, 53); font-family: Cambria, serif; font-size: 19px; background-color: rgb(255, 255, 255);">
<span class="notranslate" style="box-sizing: border-box;">Harap ini membantu!</span> <span class="notranslate" style="box-sizing: border-box;">Selamat coding.</span></p>
<p>
.</p>
<p>
<br></p>
<p>
.</p>

Diterjemah dari sumber: https://dzone.com/articles/securing-a-web-with-spring-boot

12 Perkara Yang Memusnahkan Produktiviti Pembangun Perisian aka Programmer

kami melihat banyak pasukan yang mengalami kerugian produktiviti yang besar dalam beberapa cara yang negatif 


.
Banyak artikel menangani peranan petunjuk teknologi dan pengurus kejuruteraan. Satu tema biasa yang sering kita temui ialah bagaimana meningkatkan produktiviti pasukan . Tetapi sebelum anda menumpukan tenaga anda untuk meningkatkan produktiviti mereka, anda mungkin perlu mempertimbangkan apa yang memusnahkannya, untuk mempunyai asas bunyi yang boleh anda bina. Malangnya, walaupun Peopleware telah diterbitkan hampir 30 tahun yang lalu, kami melihat banyak pasukan yang mengalami kerugian produktiviti yang besar dalam beberapa cara yang negatif (negatif)!
Tiada siapa yang mengharapkan seorang pengaturcara untuk mendapatkan kerja yang dilakukan tanpa akses kepada komputer, tetapi terdapat banyak syarikat yang mengharapkan pengaturcara untuk mendapatkan kerja yang dilakukan tanpa akses kepada fikiran mereka. Ini sama sekali tidak realistik.
Jadi marilah kita menyelam dalam senarai 12 perkara yang menghalang pemaju anda daripada masuk "ke zon" dan menjadi produktif. Saya akan cuba untuk mengutamakan senarai ini dari yang paling kurang kepada yang kurang berkesan. Jangan ragu untuk komen!
Jika anda tertanya-tanya sama ada semua ini bernilai pelaburan, hanya pertimbangkan gaji pemaju. Malah produktiviti 10% lebih banyak!

1) Gangguan & Mesyuarat

Gangguan adalah pembunuh produktiviti utama untuk pemaju, dalam fikiran saya. Pemaju tidak boleh dengan mudah kembali ke tempat yang betul sebelum gangguan. Mereka perlu masuk ke dalam pemikiran untuk pembangunan dan kemudian perlahan-lahan mengesan kembali ke mana mereka berhenti. Ini boleh mengambil masa lebih daripada 30 minit.Dan lebih banyak gangguan, lebih banyak kekecewaan, kerja yang kurang berkualiti, semakin banyak pepijat - dan ia berterusan.
"Semakin banyak kali anda mengarahkan saya semasa saya cuba memulakan - semakin lama setiap kali saya cuba. Jika anda mengisi pagi saya dengan gangguan - jangan terkejut apabila hari itu tidak produktif. "-A pemaju di Reddit
Bagaimana dengan mesyuarat? Satu-satunya perbezaan antara mesyuarat dan gangguan adalah bahawa mesyuarat adalah gangguan yang dirancang, yang menjadikannya lebih buruk lagi. Pemaju tidak boleh maju ke atas tugas jika mereka tahu bahawa mereka akan mengalami gangguan ketika mengerjakannya. Jadi jika mereka mengadakan pertemuan dalam satu atau dua jam, mereka tidak akan dapat maju apa-apa, kerana kebanyakan tugas kejuruteraan memerlukan lebih banyak masa.
Seperti yang ditulis Paul Graham , "Satu pertemuan tunggal boleh meniup seluruh petang dengan memecahnya menjadi dua keping, masing-masing terlalu kecil untuk melakukan apa-apa yang sukar."
Bagaimanakah ini boleh dielakkan? Bahagian ini didokumenkan dengan baik; anda tidak mempunyai alasan.Mengadakan mesyuarat status pendek pada awal hari atau sebelum makan tengah hari, sebagai contoh, untuk mengelakkan gangguan yang tidak perlu.

2) Pengurusan mikro

Daripada jenis pengurus yang berbeza, pengurus mikro mungkin paling buruk dari segi produktiviti pemaju. Pasti, pengurus mikro cenderung mempunyai lebih banyak mesyuarat dan gangguan yang tidak dirancang. Tetapi itu bukan hanya itu. Mereka menunjukkan kekurangan kepercayaan, dan dengan berbuat demikian, anda merasakan mereka sentiasa melemahkan kemahiran anda dan keupayaan anda untuk menyelesaikan sesuatu. Mana-mana motivasi pemaju yang ada antara gangguan akan pergi pada ketika itu.Kesannya melampaui produktiviti. Pengurus mikro mungkin menjadi alasan pertama untuk pemaju meninggalkan, atau sekurang-kurangnya, untuk menukar pasukan.

3) Ketiadaan

Terdapat banyak cara untuk menggambarkan kekaburan.Laporan bug seperti "Ia rosak, memperbaikinya!" Tidak mempunyai maklumat yang mencukupi untuk pemaju berfungsi. Dengan cara ini, mempunyai template laporan pepijat boleh membantu dalam kes itu.
Atau spesifikasi yang tidak jelas mengenai ciri, di mana pemaju akan mula melaksanakan apa yang dirasakan tepat kepada mereka sebelum mereka perlu bermula semula dari awal sekali apabila pengurus lebih terperinci mengenai perilaku yang diharapkan.
Keutamaan yang tidak jelas juga tergolong dalam kategori ini.Masa yang dibelanjakan seorang pembangun yang tertanya-tanya jika mereka bekerja pada tugas yang betul boleh dengan mudah dielakkan. Dan sekiranya mereka mendapat komen dari pengurus yang bertanya mengapa mereka bekerja pada tugas tertentu (sementara keutamaan tidak ditakrifkan) ... baik, anda mendapatkannya - banyak kekecewaan ...

4) Pengurusan Seagull

Pernahkah anda mendengarnya? Ia berlaku apabila pengurus benar-benar tidak terlibat dalam kerja, tetapi ... mereka hanya menyerang sekali seketika untuk mengelak segala-galanya."Ini salah, dan ini, dan ini kelihatan buruk," dan sebagainya, sebelum terbang lagi. Saya perlu mengakui saya suka imej, tetapi malangnya, ini berlaku lebih kerap daripada yang kami mahukan. Tingkah laku ini sangat mengecewakan kepada pemaju; mereka tidak dapat kembali ke zon dalam beberapa jam ke depan, dan kadang-kadang tidak selama beberapa hari.

5) Kredit Kerakitan

Pernahkah anda mempunyai pengurus atau pemaju lain yang mengambil semua kredit untuk kerja yang telah anda lakukan dalam beberapa minggu yang lalu? Pemaju nilai kecekapan di atas semua. Mengambil kredit untuk orang lain mengambil kecekapan yang lain untuk diri sendiri dan membuangnya dari dia. Ini cukup tinggi dalam senarai saya, kerana saya rasa ia mencetuskan ketegangan sehingga ia hanya memusnahkan produktiviti keseluruhan pemaju untuk seketika.

6) Persekitaran - Bunyi, Gerak, Rangka Kerja Ruang Kerja ...

Ini mungkin kelihatan aneh untuk bukan pengaturcara, tetapi persekitaran di mana pemaju bekerja mempunyai kesan penting terhadap aktiviti mereka. Sebagai contoh, mempunyai bunyi bising putih - AC kuat, kereta dan trak pendengaran digulung - membantu mereka memberi tumpuan lebih baik.Itulah sebabnya banyak daripada kita meletakkan alat dengar!Saya sebenarnya telah menemui RainyMood - sangat hebat!
Begitu juga, jika ruang kerja direka untuk mempunyai gerakan sebanyak mungkin, itu tidak akan menolong mereka fokus!Atau mempunyai skrin komputer desktop berorientasikan sedemikian rupa sehingga mereka dapat dilihat oleh para pengurus ... dengan baik, yang menimbulkan beberapa tekanan tambahan dan lebih banyak kesempatan untuk terganggu.

7) Skop Penyerapan

Skop rayapan (juga dikenali sebagai rayap fokus, merayap keperluan, merayap ciri, dan kadang-kadang sindrom sink dapur) dalam pengurusan projek merujuk kepada perubahan yang tidak terkawal dalam skop projek. Ini boleh berlaku apabila skop projek tidak ditakrifkan, didokumenkan, atau dikawal dengan betul.
Skop rayapan bertukar permintaan yang agak sederhana ke dalam raksasa yang sangat kompleks dan memakan masa!Dan kebanyakan masa ia berlaku semasa pembangunan!Sebagai contoh, untuk ciri mudah: 
  • Versi 1 (sebelum pelaksanaan): ciri ini ialah "Papar peta lokasi" 
  • Versi 2 (apabila versi 1 hampir selesai): ciri ditukar kepada "Tunjukkan peta 3D lokasi" 
  • Versi 3 (apabila versi 2 hampir selesai): ciri ini sekali lagi ditukar kepada "Tunjukkan peta 3D lokasi yang pengguna boleh terbang melalui"

8) Proses Definisi Produk

Jadi ini mungkin kelihatan aneh pada pandangan pertama tetapi sebenarnya agak mudah dimengerti. Jika pasukan produk menentukan keutamaan pasukannya tanpa mengesahkan (melalui maklum balas pelanggan atau apa-apa cara lain) kepentingan ciri-ciri yang sepadan, dan pemaju melihat bahawa kebanyakan ciri akhirnya tidak digunakan, mereka akan merasakan bahawa apa yang mereka lakukan adalah sia-sia dan akan kehilangan motivasi mereka. Kita semua mahu merasa berdampak, dan itu mungkin lebih penting kepada pemaju!

9) Kurangnya Pertimbangan Hutang Teknikal

Hutang teknikal adalah keputusan yang disengajakan untuk melaksanakan penyelesaian bukan terbaik atau menulis kod yang paling tidak tepat untuk melepaskan perisian dengan lebih cepat. Mengambil beberapa hutang teknikal tidak dapat dielakkan dan boleh meningkatkan kelajuan dalam pembangunan perisian dalam jangka pendek. Walau bagaimanapun, dalam jangka panjang, ia menyumbang kepada kerumitan sistem, yang melambatkan pemaju ke bawah. Bukan programmer sering meremehkan kehilangan produktiviti dan tergoda untuk sentiasa bergerak ke hadapan, dan itu menjadi isu. 
Tetapi jika refactoring tidak pernah menjadi sebahagian daripada keutamaan, ia bukan sahaja akan memberi kesan kepada produktiviti tetapi juga kualiti produk.

10) Alat Multiplicity & Hardware

Pemaju menggunakan banyak alat untuk program, menolak dan menggabungkan kod mereka setiap hari. Semakin banyak automasi, semakin baik. Ia tidak mengatakan bahawa jika anda menggunakan alat "kuno", ini akan memberi kesan kepada produktiviti anda. Begitu juga, mempunyai skrin besar vs hanya komputer riba yang boleh memberi impak.Memandangkan kos perkakasan dan gaji pemaju, hanya memperoleh keuntungan produktiviti sebanyak 5% pasti bernilai apa-apa pelaburan pada ketika itu! Hanya beri alat dan perkakasan yang dikehendaki oleh pasukan pembangun anda (secara individu untuk perkakasan, tetapi sebagai kumpulan untuk alat).

11) "Bagaimana" Dokumentasi

Apabila belajar bagaimana untuk kod, kami diberitahu untuk memberi komen awal dan sering. Idea ini adalah lebih baik untuk mempunyai terlalu banyak komen daripada terlalu sedikit. Malangnya, banyak pengaturcara tidak betul mentafsirkan ini bermakna mereka mesti memberi komen setiap baris kod, sebab itulah kami sering melihat kod seperti ini (dari jawatan Jeff Atwood pada "Coding Without Comments" ):
r = n / 2; // Set r to n divided by 2 // Loop while r — (n/r) is greater than t while ( abs( r — (n/r) ) > t ) { r = 0.5 * ( r + (n/r) ); // Set r to half of r + (n/r)} 
Adakah anda mempunyai idea apa kod ini? Saya tidak.Masalahnya adalah bahawa walaupun terdapat banyak komen menggambarkan apa yang dilakukan oleh kod, tidak ada yang menggambarkan mengapa ia melakukannya. Sekiranya terdapat bug dalam program ini dan anda tersandung kod ini, anda tidak akan tahu di mana hendak bermula.

12) Deadlines yang Ketat

Yang terakhir ini dikaitkan dengan kecenderungan para pengurus untuk meminta pemaju untuk membuat anggaran, kemudian tolak mereka untuk menurunkan anggaran tersebut sebanyak mungkin, dan kemudian secara ajaib menganggapnya sebagai tarikh akhir! Pengurus akan menganggapnya, kerana pemaju sendiri "membuat keputusan" atas anggaran, mereka komited kepada tarikh akhir, dan oleh itu, tarikh akhir harus dianggap cukup sah untuk dikongsi dengan pengurusan atasan.
Tidak menghairankan, pemaju merasakan bahawa tarikh akhir tersebut tidak munasabah dan sewenang-wenangnya ketat; ini mewujudkan ketegangan dan ketidakupayaan untuk memberi tumpuan.
Bagaimana semua perkara yang unik kepada pemaju? Jika anda melihat semua 12 perkara, mereka sebenarnya cukup biasa untuk kebanyakan pekerjaan berasaskan projek lain.Hanya impak setiap ini adalah lebih penting bagi pemaju, kerana mereka memerlukan fokus yang mendalam untuk maju ke atas tugas mereka.
Jika anda mengenali beberapa perkara yang disebutkan di atas dalam syarikat anda, mungkin menarik untuk mengatasinya dengan pemaju anda. Bercakap dengan mereka;mengetahui sama ada ini adalah isu dan bagaimana ia dapat diselesaikan. Apa sahaja yang mereka katakan, perkara yang paling penting ialah mempercayai maklum balas dan pandangan mereka. Dan sementara teknologi hari ini sangat berbeza dari 30 tahun yang lalu, pelajaran masih sama. Anda tidak boleh mengabaikan faktor manusia apabila anda mempertimbangkan produktiviti pasukan. Terangkan proses, persekitaran dan tabiat kerja anda dengan pasukan anda, dan biarkan mereka membimbing anda tentang bagaimana produktiviti dan impak yang tinggi.
.
Diterjemah dari sumber asal: https://dzone.com/articles/top-12-things-that-destroy-developer-productivity?edition=407250
.