© Ralph McQuarrieKami akan mulai membuka sampanye, melempar gunung salad dan jeruk keprok. Sementara itu, semua tugas menyenangkan ini belum dimulai, mari rangkum blog selama setahun terakhir. Jadi, kiriman tahunan kami dengan kiriman yang mendapat paling banyak plus, serta komentar, tambahkan ke favorit dan tampilan - bagi yang tidak termasuk dalam daftar pendek pertama.
Juara menurut peringkat
Ini adalah kumpulan klinis yang sinis dari apa yang saya pelajari selama 30 tahun dalam pengembangan perangkat lunak. Saya ulangi, beberapa hal sangat sinis, dan sisanya adalah hasil pengamatan panjang di berbagai tempat kerja.
Suatu ketika kolega saya Peter menyarankan untuk berpartisipasi dalam satu proyek yang menarik - penciptaan "telepon gua untuk para speleologis", karena ia tertarik pada speleologi. Cavers memiliki masalah seperti itu: komunikasi nirkabel di bawah tanah tidak berfungsi dalam praktiknya. Penerimaan radio yang dapat diterima hanya mungkin sejalan, tetapi perlu beberapa putaran - dan tidak ada koneksi. Dan Anda perlu berkomunikasi di seluruh gua, yang panjangnya bisa beberapa kilometer. Tentu saja, komunikasi seluler tidak menangkap di sana, yang berarti bahwa tidak ada koneksi dengan dunia luar untuk kelompok yang bekerja secara mandiri di gua selama beberapa minggu.
Pada Agustus 2018, Peter akan berpartisipasi dalam ekspedisi ke gua yang agak rumit dan berbahaya. Untuk ekspedisi ini, kami memutuskan untuk mengembangkan perangkat baru yang akan menyelesaikan masalah menghubungkan kelompok yang bekerja secara mandiri dengan dunia luar.
Mengapa bengkel pertukangan sama sekali? Saya tidak punya jawaban yang pasti. Jika Anda hanya ingin melakukan sesuatu dengan tangan Anda dari kayu, yaitu, bengkel di mana Anda bisa datang, membayar uang untuk sewa mesin dan tempat kerja, dan melakukan semuanya di sana. Tidak perlu memiliki tempat Anda sendiri dan peralatan Anda sendiri. Jika Anda ingin terlibat dalam pengerjaan kayu sebagai bisnis, maka persaingannya tinggi, sulit untuk menemukan ceruk pasar Anda.
Seperti yang mereka katakan, jika Anda tidak malu dengan kode lama Anda, maka Anda tidak tumbuh sebagai seorang programmer - dan saya setuju dengan pendapat ini. Saya mulai pemrograman untuk hiburan lebih dari 40 tahun yang lalu, dan 30 tahun yang lalu secara profesional, jadi saya mendapatkan banyak kesalahan. Sebagai seorang profesor ilmu komputer, saya mengajar siswa saya bagaimana belajar dari kesalahan - kesalahan mereka, milik saya, orang asing. Saya pikir sudah waktunya untuk berbicara tentang kesalahan saya agar tidak kehilangan kesederhanaan. Saya harap seseorang akan merasakan manfaatnya.
Saya bekerja sebagai programmer riset di tim visi komputer Mail.ru Group. Untuk Hari Kemenangan tahun ini, kami memutuskan untuk membuat proyek untuk pemulihan foto-foto militer. Apa itu restorasi foto? Ini terdiri dari tiga tahap:
- kami menemukan semua cacat gambar: istirahat, pertengkaran, lubang;
- mengecat cacat yang ditemukan berdasarkan nilai piksel di sekitarnya;
- mewarnai gambar.
Dalam artikel ini, saya akan membahas setiap tahap pemulihan secara terperinci dan memberi tahu Anda bagaimana dan di mana kami mengambil data, jaringan apa yang kami pelajari, apa yang kami lakukan, garu apa yang kami injak.
Di beberapa bidang pemrograman, adalah normal untuk ingin menulis struktur data atau algoritma yang dapat bekerja dengan elemen dari tipe yang berbeda. Misalnya, daftar generik atau algoritma penyortiran yang hanya membutuhkan fungsi perbandingan. Dalam berbagai bahasa, berbagai cara untuk memecahkan masalah ini ditawarkan: mulai dari sekadar menunjukkan fungsi umum yang sesuai (C, Go) hingga programmer ke sistem generik yang sangat kuat sehingga mereka menjadi Turing lengkap (Rust, C ++). Pada artikel ini saya akan berbicara tentang sistem generik dari berbagai bahasa dan implementasinya. Saya akan mulai dengan memecahkan masalah dalam bahasa tanpa sistem yang sama (seperti C), dan kemudian saya akan menunjukkan bagaimana penambahan ekstensi secara bertahap mengarah ke sistem dari bahasa lain.
Saya menemukan obat generik menjadi pilihan yang menarik, karena mereka adalah kasus khusus sederhana dari masalah pemrograman metap secara umum: menulis program yang dapat menghasilkan kelas dari program lain. Sebagai bukti, saya akan menunjukkan bagaimana tiga metode metaprogramming yang berbeda dan sepenuhnya umum dapat dianggap sebagai ekstensi multi arah dalam ruang sistem generik: bahasa dinamis seperti Python, sistem makro prosedural seperti Template Haskel, dan kompilasi bertahap seperti Zig dan Terra.
Beberapa bulan yang lalu, saya menyebutkan dalam satu posting bahwa ini adalah mitos, seolah-olah const membantu mengaktifkan optimisasi kompiler di C dan C ++. Saya memutuskan bahwa pernyataan ini harus dijelaskan, terutama karena saya sendiri percaya pada mitos ini sebelumnya. Saya akan mulai dengan teori dan contoh buatan, dan kemudian beralih ke eksperimen dan tolok ukur berdasarkan basis kode nyata - SQLite.
Saat ini, online adalah kondisi umum bagi banyak orang. Kita semua membeli, berkomunikasi, membaca artikel, mencari informasi tentang berbagai topik. Jaringan menghubungkan kita dengan seluruh dunia, tetapi di atas semua itu, menghubungkan orang. Saya telah menggunakan Internet sendiri selama 20 tahun, dan hubungan saya dengannya berubah delapan tahun yang lalu ketika saya menjadi pengembang web.
Pengembang menghubungkan orang.
Pengembang membantu orang.
Pengembang memberi orang peluang.
Pengembang dapat membuat jaringan untuk semua orang, tetapi kemampuan ini harus digunakan secara bertanggung jawab. Pada akhirnya, penting untuk menciptakan hal-hal yang membantu orang dan memberdayakan mereka. Pada artikel ini saya ingin berbicara tentang bagaimana header HTTP dapat membantu Anda membuat produk yang lebih baik untuk pekerjaan terbaik semua pengguna di Internet.
Bakteri, bukan kanker, teroris, dan bencana merenggut nyawa banyak orang. Yersinia pestis saja (wabah tongkat) mengakibatkan kematian 150 juta orang. Mengambil antibiotik adalah metode utama untuk memerangi infeksi bakteri. Tetapi bagaimana jika obat-obatan berhenti bekerja?
Ini bukan pertanyaan retoris dan bukan pertanyaan pendahuluan untuk memodelkan hipotesis, tetapi situasi nyata di masa mendatang dengan latar belakang peningkatan resistensi bakteri. Organisasi Kesehatan Dunia (WHO) dan layanan nasional memiliki rencana aksi bersama, tetapi tidak ada negara bagian yang memiliki algoritma terperinci untuk mencegah pandemi bakteri.
Kami akan berbicara tentang penyebab bencana yang akan datang, serta tentang upaya untuk menemukan jalan keluar dari kebuntuan medis dengan bantuan disiplin ilmu terkait - genomik, matematika dan virologi.
Baru-baru ini, saya sedang mengerjakan tugas menambahkan zona waktu ke perpustakaan kalender JS yang dikelola oleh tim saya. Saya sangat menyadari dukungan zona waktu yang tidak berguna dalam JavaScript, tetapi saya berharap bahwa abstrak objek data yang ada akan membuatnya mudah untuk menyelesaikan sebagian besar kesulitan.
Namun, mimpi saya menjadi debu. Ketika saya mempelajari tugas itu, saya menyadari bahwa sangat sulit untuk bekerja dengan zona waktu dalam bahasa ini. Mengimplementasikan sesuatu yang lebih rumit daripada sekadar memformat tampilan waktu dan menghitung tanggal menggunakan operasi kompleks (fungsi kalender) sangat sulit. Saya mendapatkan pengalaman berharga dalam memecahkan masalah ini, dan ini memerlukan kesulitan baru.
Pada artikel ini saya ingin membahas apa yang saya temukan dan bagaimana menyelesaikannya. Sementara saya menulis teks, saya menyadari bahwa alasan semua kesulitan adalah pemahaman saya yang buruk tentang topik zona waktu. Mengingat kesadaran ini, saya mengusulkan pertama untuk berbicara secara rinci tentang definisi dan standar, dan baru kemudian beralih ke JavaScript.
Juara oleh komentar
Kami membawa beberapa hal berguna yang kami gunakan, jika tidak setiap hari, maka cukup sering. Semua ini sampah yang disebut EDC - Everyday Carry. Dan hari ini, dengan kelimpahan dan aksesibilitas luar biasa dari semua jenis alat, gadget, perangkat, nyasar dan kecil nishtyachki, di saku dan tas kami, Anda dapat menemukan kombinasi yang paling menarik dari berbagai hal. Dan di everydaycarry.com, Anda dapat mengunggah foto EDC Anda dan menandatangani setiap item. Kami mengumpulkan set spesialis IT paling menarik dari sana. Mereka juga meminta kami untuk menunjukkan apa yang ada di saku dan ransel karyawan kami.
Artikel ini adalah tentang apa artinya menambahkan obat generik ke Go, dan mengapa saya pikir kita harus melakukan ini. Saya juga akan menyentuh kemungkinan perubahan dalam arsitektur bahasa untuk menambahkan generik.
Go dirilis pada 10 November 2009. Kurang dari sehari kemudian, komentar pertama tentang obat generik muncul. Itu juga menyebutkan pengecualian yang kami tambahkan ke bahasa dalam bentuk panik dan pulih pada awal 2010.
Selama tiga tahun pengamatan, tidak adanya obat generik selalu menjadi daftar dari tiga masalah utama yang perlu diperbaiki dalam bahasa tersebut.
Ini hari Jumat musim semi di luar, dan saya benar-benar ingin mengalihkan perhatian dari pengkodean, pengujian, dan masalah pekerjaan lainnya. Kami telah menyusun untuk Anda sejumlah buku dan film fiksi ilmiah favorit Anda yang telah dirilis sekitar setahun terakhir.
Juara untuk ditambahkan ke favorit
Siapa bilang pengembang dapat mempelajari hal-hal baru hanya melalui buku, video, dan analisis kode orang lain? Lagi pula, kami juga memiliki saluran lain untuk memperoleh informasi dari dunia luar. Tentu saja, ini bukan tentang mencicipi pengetahuan, mencicipinya, atau menciumnya. Tetapi mendengarkan - itu saja. Kami telah menyusun untuk Anda koleksi podcast berbahasa Rusia untuk pengembang saat ini. Cara yang baik untuk mengistirahatkan mata Anda atau terlibat dalam kemacetan lalu lintas.
Mungkin semua orang yang dekat dengan pengembangan web telah mendengar tentang Aplikasi Web Progresif. Aku berharap kamu bisa! Teknologi ini secara virtual menyeimbangkan pengembangan web dan seluler dalam hal distribusi produk dan keterlibatan pengguna. Ya, antarmuka modern yang ditulis, misalnya, dalam Bereaksi, berfungsi sebagai aplikasi. Tetapi aplikasi ini hanya diunduh ke browser dan diluncurkan darinya. Ini adalah hambatan besar yang selalu dimiliki pengembangan ponsel. Mari kita berpikir, daripada dari sudut pandang pengguna biasa, "aplikasi" berbeda dari "situs". Segera terlintas dalam pikiran bahwa aplikasi itu ada di telepon, dan situs itu ada di komputer. Tapi ada browser seluler, jadi situsnya ada di ponsel juga. Lalu ada 3 perbedaan signifikan:
- Ikon aplikasi ada di layar utama smartphone.
- Aplikasi terbuka di jendela terpisah.
- Aplikasi mengirimkan pemberitahuan push.
Semua 3 poin dihapus berkat Aplikasi Web Progresif atau PWA. Sekarang, pergi ke situs dari browser seluler, kita bisa "mengunduhnya", setelah itu kita akan melihat ikon di layar utama. Selain itu, saat memulai, layar splash muncul, seperti di aplikasi seluler, dan jika diinginkan, Anda dapat mengonfigurasi pengiriman pemberitahuan push.
Dan sepertinya semuanya baik-baik saja! Namun sayang, selama lebih dari 10 tahun di era ponsel, pengguna terlalu terbiasa mencari aplikasi di Google Play dan App Store. Melanggar kebiasaan pengguna adalah tugas tanpa pamrih, dan karena itu orang-orang dari Google (ngomong-ngomong, Google adalah pengembang PWA) memutuskan bahwa jika gunung tidak pergi ke Magomed, maka ... Secara umum, baru-baru ini, pada 6 Februari 2019, mereka menyediakan penggunaan Aktivitas Web Tepercaya untuk Perhitungan aplikasi web di Google Play.
Artikel dua bagian akan menunjukkan kepada Anda cara mendapatkan jalur lengkap dari situs web biasa ke aplikasi di Google Play hanya dalam hitungan jam. Semua ini akan ditampilkan pada contoh layanan nyata - Skorochtets.
Pernahkah Anda bertanya-tanya bagaimana browser membaca dan menjalankan kode JavaScript? Itu terlihat misterius, tetapi dalam posting ini Anda bisa mendapatkan ide tentang apa yang terjadi di bawah tenda. Kami memulai perjalanan kami ke dalam bahasa dengan bertualang ke dunia mesin JavaScript yang indah.
Lihat Champions
Saya melihat sepotong kode. Mungkin ini adalah kode terburuk yang pernah saya temui. Untuk memperbarui hanya satu catatan dalam database, itu mengekstrak semua catatan dalam koleksi, dan kemudian mengirim permintaan untuk memperbarui setiap catatan dalam database, bahkan mereka yang tidak perlu diperbarui. Ada fungsi peta yang hanya mengembalikan nilai yang diteruskan ke sana. Ada pemeriksaan bersyarat variabel dengan nilai yang jelas sama, hanya dinamai dalam gaya yang berbeda (firstName dan first_name). Untuk setiap UPDATE, kode mengirimkan pesan ke antrian lain, yang diproses oleh fungsi serverless lain, tetapi yang melakukan semua pekerjaan untuk koleksi lain dalam database yang sama. Saya tidak menyebutkan bahwa fungsi tanpa server ini berasal dari "arsitektur berorientasi layanan" berbasis cloud yang berisi lebih dari 100 fungsi di lingkungan?
Bagaimana hal seperti itu bisa dilakukan? Saya menutupi wajah saya dan menangis tersedu-sedu. Rekan-rekan saya bertanya apa yang terjadi, dan saya menceritakan kembali Hits Terburuk Dari BulkDataImporter.js dalam warna 2018. Semua orang mengangguk dengan penuh simpati kepada saya dan setuju: bagaimana mereka bisa melakukan ini kepada kami?
Terlepas dari kenyataan bahwa dalam tujuh tahun terakhir saya menulis dalam JavaScript hampir setiap hari kerja, saya harus mengakui bahwa saya kurang memperhatikan berita tentang inovasi dari ES. Fitur utama seperti async / wait dan proxy adalah satu hal, tetapi setiap tahun ada aliran perubahan bertahap kecil yang tidak jatuh ke bidang visi saya, karena selalu ada sesuatu yang lebih penting untuk dipelajari.
Dalam artikel ini, saya telah mengumpulkan kemampuan JS modern, yang tidak banyak dibicarakan ketika muncul. Beberapa dari mereka hanya meningkatkan kegunaan, dan beberapa sangat praktis dan dapat menyelamatkan Anda menulis banyak kode.
Bahasa XML ditemukan pada tahun 1996. Dia hampir tidak muncul sebelum kemungkinan penerapannya sudah mulai disalahpahami, dan untuk tujuan yang mereka coba adaptasi, dia bukan pilihan terbaik.
Ini tidak akan berlebihan untuk mengatakan bahwa sebagian besar skema XML yang saya lihat tidak pantas atau penyalahgunaan XML. Selain itu, penggunaan XML ini membuktikan kesalahpahaman mendasar tentang apa itu XML.
XML adalah bahasa markup. Ini bukan format data. Dalam sebagian besar skema XML, perbedaan ini tidak secara eksplisit diperhitungkan, membingungkan XML dengan format data, yang pada akhirnya berarti kesalahan dalam pemilihan XML, karena sebenarnya format data diperlukan.
Tanpa merinci, XML paling baik untuk membubuhi keterangan blok teks dengan struktur dan metadata. Jika tugas utama Anda bukan untuk bekerja dengan blok teks, memilih XML tidak mungkin dibenarkan.
Dari sudut pandang ini, ada cara mudah untuk memeriksa seberapa baik skema XML dibuat. Ambil contoh dokumen dalam skema yang diusulkan dan hapus semua tag dan atribut dari itu. Jika tidak ada gunanya apa yang tersisa (atau jika string kosong tetap), maka skema Anda tidak dibangun dengan benar, atau Anda seharusnya tidak menggunakan XML.
Di bawah ini saya akan memberikan beberapa contoh paling umum dari rangkaian yang salah dibangun.
* * *
Terima kasih untuk semua orang yang membacanya. Dan dengan kedatangannya!