Công Nghệ
Review và giải thích sâu về framework, ngôn ngữ, AI, blockchain… ngắn gọn, dễ hiểu, cập nhật liên tục như git pull ‑‑rebase.
1826 bài viết

Sử dụng CSS content như thế nào cho đúng
Thuộc tính content trong CSS thường được sử dụng cùng với 2 ghost element là after và before, những giá trị nào có thể đưa vào cho thuộc tính content này <div data-done="✅" class="email"> chriscoyier@gmail.com </div> .email::before { /* Chèn trước thẻ div giá trị của data-done + Email: */ content: attr(data-done) " Email: "; } Không phải giá trị nào đưa vào content này cũng hợp lệ /* Được */ ::after { content: "1"; } /* Không được */ ::after { content: 1; } Không thể tính toán gì đâu, nó chỉ là string thôi <div data-price="4" data-sale-modifier="0.9">Coffee</div> /* Méo chạy */ div::after { content: " $" calc(attr(data-price) * attr(data-sale-modifier)); } /* Nope */ ::after { content: calc(2 + 2); } Muốn nối chuỗi ư? /* Không chạy đâu, không phải javascript hay php */ ::after { content: "1" . "2" . "3"; content: "1" + "2" + "3"; /* Dùng bình thường thế này thôi */ content: "1" "2" "3"; content: "1 2 3"; } Đường dẫn hình thì được, mà không cho thay đổi kích thước hình ¯_(ツ)_/ p:before { content: url(image.jpg); } Station D via Vuilaptrinh

Giải thích Javascript Reactivity
Bài viết được sự cho phép của tác giả Lưu Bình An Rất nhiều thư viện Javascript như Angular, React, Vue sử dụng Reactivity, hiểu được reactivity là gì và cách nó chạy sẽ giúp nâng cao kỹ năng lập trình Một ví dụ về Reactivity của Vue <div id='app'> <div>Price: ${{ price }}</div> <div>Total: ${{ price * quantity }}</div> <div>Taxes: ${{ totalPriceWithTax }}</div> </div> var vm = new Vue({ el: '#app', data: { price: 5.00, quantity: 2 }, computed: { totalPriceWithTax() { return this.price * this.quantity * 1.03 } } }) Ở đây khi chúng ta thay đổi giá trị của price , thằng Vue nó sẽ làm 3 thứ Cập nhập lại giá trị price Tính lại giá trị total Gọi lại hàm totalPriceWithTax và cập nhập lại giá trị Thấy hết sức bình thường, nhưng đó KHÔNG PHẢI LÀ CÁCH CHẠY BÌNH THƯỜNG CỦA JAVASCRIPT Ví dụ với javascript bình thường let price = 5 let quantity = 2 let total = price * quantity // kết quả sẽ là 10 price = 20 // gán lại giá trị của price console.log(`total is ${total}`) Bạn hãy đoán xem kết quả log ra là mấy? Sẽ là 10 chứ không phải 40 đâu. Tham khảo tuyển dụng javascript lương cao trên Station D Vấn đề và giải pháp Vấn đề là chúng ta cần phải lưu cái cách tính price * quantity này lại ở đâu đó, để chúng ta re-run cách tính này khi gọi lại total , nó sẽ không nên là biến số mà là thành hàm, thì khi đó nếu giá trị price hoặc quantity thay đổi chúng ta sẽ có kết quả total thay đổi theo. Chúng ta cần một nơi để lưu phần code tính toán kiểu như vậy lại ở đâu...

Trước giờ khai mạc tại Tp.HCM, Vietnam Mobile Day cập nhật Agenda mới nhất!
Chỉ còn chưa đầy 18 tiếng nữa , sự kiện được mong chờ nhất của cộng đồng Mobile – Vietnam Mobile Day sẽ chính thức “nổ phát súng” đầu tiên tại Tp.HCM . Trước thời khắc nóng bỏng này, BTC Station D cũng đã cập nhật chính xác những nội dung & diễn giả góp mặt tại Ngày hội, với hy vọng đóng góp những giá trị thiết thực về chuyên môn, bài học kinh nghiệm lẫn các mối quan hệ hợp tác lâu bền, vững mạnh. Truy cập https://Station D.vn/vmd/partners để xem Agenda tại Tp.HCM Thời gian & địa điểm: – 20/05/2017 tại Trung tâm hội nghị 272, Võ Thị Sáu, Q.3, Hồ Chí Minh – 27/05/2017 tại Trung tâm hội nghị và tiệc cưới Forevermark, 614 Lạc Long Quân, Quận Tây Hồ, Hà Nội – 03/06/2017 tại One Opera Danang hotel, 115 Nguyễn Văn Linh, Q. Hải Châu, Đà Nẵng Website thông tin chi tiết: https://mobileday.vn/ Mọi chi tiết thắc mắc xin liên hệ ngoc.do@applancer.net (Ms. Ngọc) | 0944 685 243 event@applancer.net (Event Team) | 08 6273 3497

Cải thiện mối quan hệ giữa lập trình viên với sếp: dễ hay khó? (P2)
Cải thiện mối quan hệ giữa lập trình viên với sếp: dễ hay khó? (P1) Tôn trọng chuyên môn của nhau Điều này khá rõ ràng và đơn giản. Ở cấp quản lý, nếu bạn có thể tự tạo trang web hoặc hệ thống mà bạn đang yêu cầu các developers làm, hãy tự làm điều đó. Bạn không cần thiết phải yêu cầu developers làm việc đó thay cho bạn. Nó giống viêc yêu cầu một nhà thầu xây dựng cho bạn một ngôi nhà, và bạn là một dược sĩ, bạn đến gặp họ và yêu cầu họ xây dựng ngôi nhà theo cách của bạn. Các developers hoàn toàn không biết gì. Họ có kỹ năng và kinh nghiệm mà bạn có thể không có. Hãy tôn trọng nó và đặt niềm tin vào đó. Là một developer, bạn cũng phải làm điều tương tự. Bạn cần phải thành thật về những hạn chế trong kinh nghiệm của bạn. Đừng để cái tôi quá lớn ảnh hưởng công việc của bạn. Đừng cố gắng thể hiện biết tất cả. Bạn có thể nói “Tôi không biết làm thế nào để giải quyết vấn đề này” hoặc câu gì đó gần giống như thế. Hơn nữa, nó rất có lợi cho bạn khi tìm hiểu sâu tình hình kinh doanh của công ty và hiểu nó. Ít nhất phải tốn một khoảng thời gian tương đối dài để bạn có thể hoàn thành tốt code của bạn. Thử thách lẫn nhau Vâng! Điều này là bình thường ! Bạn hoàn toàn có thể bàn luận về cách tiếp cận. Thậm chí cũng có thể tranh luận. Bạn hoàn toàn có thể giữ vững lập trường của bạn hoặc đưa ra phương án tốt hơn. Khi bạn đang thử...

Những blogger nổi tiếng nhất làng công nghệ
Bài viết được sự cho phép của tác giả Trần Thị Thu Hà Trở thành một blogger, đặc biệt là trong giới công nghệ, đòi hỏi không chỉ tài năng và kiến thức mà còn cần một chút tư duy kinh doanh và sự may mắn nữa. Các blogger công nghệ dưới đây thực sự thành công nhờ hội tụ đầy đủ những yếu tố ấy, tạo được dấu ấn cho riêng mình và có mức thu nhập khiến chúng ta ngưỡng mộ. 25 blogger IT nổi tiếng mà dân lập trình ai cũng phải biết Câu chuyện về cái comment tại một blog nọ Ewdison Then – “SlashGear” Ewdison Then là người đồng sáng lập kiêm biên tập chính của website tin tức công nghệ và điện tử tiêu dùng này. Luôn cập nhật các thông tin mới nhất về các sản phẩm công nghệ và các ứng dụng kèm theo những nhận xét xác đáng và lời khuyên hữu ích đã giúp SlashGear của Then trở thành một trong những blog thành công nhất trên nền tảng WordPress. Sự thành công của SlashGear đem về cho Ewdison Then khoảng 60.000 đến 80.000 USD/tháng. Collis Ta’eed – “TutsPlus” TutsPlus là nơi cung cấp những video hướng dẫn, các bài học và rất nhiều phương tiện học tập về phần mềm ứng dụng và vô số các công cụ thiết kế. Người theo dõi trang này có thể học mọi thứ từ việc đơn giản như download một bức ảnh đến phức tạp như thiết kế một ứng dụng phần mềm. Nhờ có TutsPlus, Collis Ta’eed kiếm được 55.000 – 120.000 USD/tháng. Vitaly Friedman – “SmashingMagazine” Anh là người sáng lập SmashingMagazine, một blog chuyên dành cho các nhà thiết kế website , cập nhật những tin tức mới nhất...

5 điều lập trình viên Java Developer chắc chắn sẽ thích ở Kotlin
Trong năm 2018, chúng ta đã chứng kiến ngôn ngữ Kotlin ngày càng trở nên phổ biến hơn bao giờ hết. Nó được sử dụng rộng rãi không chỉ trong phát triển ứng dụng di động, mà còn cho các hệ thống server. Như bạn đã biết, Kotlin là một ngôn ngữ lập trình statically-typed trên JVM. Đó là lý do tại sao nó thường được so sánh với ngôn ngữ Java. Có thể nói, một trong những lý do chính cho sự phổ biến của Kotlin là ở sự đơn giản. Nó thật sự rất tinh gọn và loại bỏ những phần thừa thãi từ Java. Tuy nhiên, Kotlin vẫn cũng rất giống với Java để bất kỳ nhà phát triển Java có kinh nghiệm nào đều có thể làm quen với Kotlin chỉ trong vài giờ. Trong bài viết này, tôi sẽ thảo luận về một số tính năng thú vị của Kotlin được sử dụng để phát triển phía server so với Java. Xin lưu ý rằng đây là danh sách cá nhân của tôi về các tính năng yêu thích của Kotlin mà Java không hề có. Giải quyết vấn đề với mà Java thường gặp phải với các Collections Tôi thực sự thích Java, nhưng đôi khi phải làm việc với các collection chung chung có thể là một trải nghiệm vô cùng khó chịu, đặc biệt nếu bạn phải sử dụng các loại type lạ. Tin tốt là Kotlin không có bất kỳ loại type nào như vậy. Thay vào đó, nó cung cấp hai tính năng khác được gọi là declaration-site variance và type projection. Bây giờ, hãy xem xét hệ thống phân cấp class sau: abstract class Vehicle { } class Truck extends Vehicle { } class PassengerCar extends Vehicle { }...

Data Scientist là gì? Và hành trình để trở thành Data Scientist
Vào năm 2018, Harvard Business Review đã bầu chọn nghề Data Scientist – Nhà khoa học dữ liệu công việc “hot” nhất thế kỷ 21 để nhấn mạnh sự thành công và sức ảnh hưởng của Dữ liệu đến thị trường thế giới. Tuy nhiên, lĩnh vực này chưa hoàn toàn lớn mạnh như kỳ vọng, cũng như còn nhiều hiểu lầm – hiểu sai về công việc data scientist là gì. Nó xuất hiện với nhiều người như một thứ “kỹ thuật mờ”, có thể có khả năng triển khai sản phẩm hoặc dịch vụ của họ. Sự hiểu lầm này có thể dẫn đến thất bại trong việc sử dụng tốt các nguồn lực. Hãy cùng lùi lại một bước để có cái nhìn chi tiết hơn về nghề Data Scientist, cùng như giải mã cách để bạn có thể “dấn thân” theo con đường này. Data Scientist là gì? Data Scientist (kỹ sư khoa học dữ liệu) là những người phân tích, sắp xếp và thay dữ liệu “kể chuyện”, bất kể nó có cấu trúc hay không. Công việc của họ sẽ cần phối hợp giữa cả khoa học máy tính, thống kê và toán học. Họ sẽ là người phân tích, xử lý và “mô hình hóa” các dữ liệu, sau đó diễn giải các kết quả để tạo ra các kế hoạch hoạt động cho team và doanh nghiệp. Nói một cách dễ hiểu, nghề data scientist làm việc cũng dữ liệu và cho ra các insight mang tính phân tích. Họ sẽ truyền đạt các phát hiện và insight này với các bên liên quan – từ lãnh đạo cấp cao, quản lý đến khách hàng. Từ đó các công ty có thể trực tiếp hưởng lợi từ việc đưa ra các quyết...

Tìm hiểu tham số và đối số trong hàm C++
Đặt vấn đề Trong bài học trước, chúng ta đã học về hàm có thể trả về một giá trị cho người gọi hàm đó. Chúng ta đã sử dụng điều đó để tạo ra một hàm getValueFromUser mà chúng ta đã sử dụng trong chương trình này: # include <iostream> int getValueFromUser ( ) { std :: cout << "Enter an integer: " ; int input { } ; std :: cin >> input ; return input ; } int main ( ) { int num { getValueFromUser ( ) } ; std :: cout << num << " doubled is: " << num * 2 << 'n' ; return 0 ; } Tuy nhiên, điều gì sẽ xảy ra nếu chúng ta muốn đầu ra của một hàm để cho vào một hàm khác? Bạn có thể thử một cái gì đó như thế này: # include <iostream> int getValueFromUser ( ) // this function now returns an integer value { std :: cout << "Enter an integer: " ; int input { } ; std :: cin >> input ; return input ; // added return statement to return input back to the caller } // This function won't compile // The void return type means the function won't return a value to the caller void printDouble ( ) { std :: cout << num << " doubled is: " << num * 2 << 'n' ; } int main ( ) { int num { getValueFromUser ( ) } ; printDouble ( ) ; return 0 ; } Điều này đã không được biên dịch, vì hàm printDouble không biết định danh num là gì?. Bạn có thể thử định nghĩa num là một biến bên trong hàm printDouble(): void printDouble ( ) { int num...

Các cách khai báo function trong JS
Bài viết được sự cho phép của tác giả Lưu Bình An Khai báo tường minh Cách khai báo function “vở lòng” mà ai cũng phải biết, sau từ khóa function là tên function chúng ta muốn khai báo 5 kinh nghiệm khi viết arrow function 5 điểm khác nhau giữa function thường và arrow function function foo ( ) { console . log ( ‘vui lap trinh’ ) } Gán function vào một biến Chúng ta khai báo một biến, gán giá trị của biến này là một function const foo = function ( ) { console . log ( ‘vui lap trinh’ ) } Với cách này, lưu ý là không dùng function trước khi khai báo , giống như chúng ta không thể dùng một biến mà chưa được khai báo vậy. foo ( ) ; // Uncaught ReferenceError: foo is not defined const foo = function ( ) { console . log ( ‘vui lap trinh’ ) } Arrow function Khai báo function bằng dấu => mũi tên, bên trái là params của function, bên phải là phần ruột function ( ) => console . log ( ‘vui lap trinh’ ) // hoặc bỏ luôn ngoặc kép [ ‘An’ , ‘luckyluu’ , ‘vui’ , ‘laptrinh’ ] . filter ( name => name . length > 5 ) . map ( name => name . toLowerCase ( ) ) Lưu ý cho arrow function, sẽ không có object đặc biệt arguments , các function khác sẽ có cái object tên là arguments chứa các tham số truyền vào cho function đó Ko có gọi new (() => {}) Không có this , super , new.target constructor Ko được khuyến khích sử dụng, đọc cho vui const myStrangeFunc = new Function ( "a" , "console.log(a + ' with...

Search theo custom field trong wordpress và các ứng dụng của nó
Bài viết được sự cho phép của tác giả Võ Quang Huy Để xây dựng tính năng search trong wordpress thì phải nói cực kỳ đơn giản, các bạn chỉ cần vài ba đoạn code nhỏ là có thể làm được. Nhưng… Search theo custom field ? Các bạn đã thử chưa Nếu chưa thì hôm này mình sẽ hướng dẫn cho các bạn cách để làm chức năng đó. Search cha con trong wordpress tưởng không dễ mà dễ không tưởng Custom authentication filter đăng nhập không cần password trong Spring Security Custom checkbox là gì ? Và cách tạo custom checkbox đẹp dễ dàng Để ôn lại 1 tý thì mình sẽ nhắc lại cách tạo 1 form search bình thường trong wordpress. Các bạn xem đoạn code phía dưới nha Tạo form search trong wordpress Form search đơn giản nhất <form action="/" method="GET" role="form" _lpchecked="1"> <input type="text" name="s" id="s-home" autocomplete="off" placeholder="Từ khóa...."> <button type="submit" class="button-search"><i class="fa fa-search"></i></button> </form> Search theo 1 post type nào đó <form action="/" method="GET" role="form" _lpchecked="1"> <input type="hidden" name="post_type" value="post"> <input type="text" name="s" id="s-home" autocomplete="off" placeholder="Từ khóa...."> <button type="submit" class="button-search"><i class="fa fa-search"></i></button> </form> Trong ví dụ trên mình search các bài viết thuộc post type là post nha. Các post type khác sẽ không được hiển thị trong kết quả search Tìm việc làm WordPress lương cao mới nhất trong tháng tại đây <<< Search theo 1 category nào đó <form action="/" method="GET" role="form" _lpchecked="1"> <select name="cat" id="cat" class="form-control"> <option value="">Chọn chuyên mục</option> <?php $args = array( 'hide_empty' => 0, 'taxonomy' => 'category' ); $cates = get_categories( $args ); foreach ( $cates as $cate ) { ?> <option value="<?php echo $cate->term_id; ?>"><?php echo $cate->name; ?></option> <?php } ?> </select> <input type="text" name="s" id="s-home" autocomplete="off" placeholder="Từ khóa...."> <button type="submit" class="button-search"><i class="fa fa-search"></i></button> </form> Đoạn...

Làm layout masonry bằng flexbox
Bài viết được sự cho phép của tác giả Lưu Bình An Một trong những cách đơn giản nhất để tạo masonry layout là dùng flexbox, tất cả những gì cần làm là set flex-flow: column wrap và height: giá-trị-độ-cao-nào-đó , là bạn có kiểu layout nổi tiếng của pinterest. Cách vận hành của Flexbox Làm chủ CSS Flexbox trong 5 phút /* hiển thị theo dạng column, rớt dòng khi cần thiết */ .container { display : flex ; flex-flow : column wrap ; align-content : space-between ; /* fixed height, cao hơn độ cao của item cao nhất */ height : 960 px ; } Cách này bị một vấn đề, thứ tự các item chúng ta sẽ là như thế này Đây không phải là kết quả chúng ta mong muốn, nó phải xếp các item từ trái qua phải mới hợp gu Nếu chuyển giá trị flex-direction: row , thứ tự sẽ đúng như mong muốn, tuy nhiên nó lại bị khoảng trống khi các item có độ cao không đồng nhất, như thế này Sử dụng kết hợp với 2 thuộc tính :nth-child() và order để giải quyết vấn đề này Column 1 Column 2 Column 3 Row 1 1 2 3 Row 2 4 5 6 Row 3 7 8 9 Row 4 10 11 12 Chúng ta có 3 cột, chúng ta sẽ xếp các item theo từng cột, nhưng order nó theo hàng /* sắp xếp lại theo từng dòng */ .item :nth-child ( 3n + 1 ) { order : 1 ; } // set order = 1 cho các item 1 , 4 , 7 , 10 , ... .item :nth-child ( 3n + 2 ) { order : 2 ; } // set order = 1 cho các item...

Các giai đoạn trong vòng đời của Android Activity
Bài viết được sự cho phép của tác giả Trần Hữu Cương Giới thiệu lớp Activity trong Android Lớp Activity là thành phần quan trọng nhất của ứng dụng Android, cách mà chúng hoạt động tạo thành nền tảng cơ bản của mô hình lập trình ứng dụng. Khi một Activity chỉ định là Activity chính, nó sẽ là màn hình đầu tiên khi khởi chạy ứng dụng. Một Activity này lại có thể gọi và kích hoạt một Activity khác. Activity chịu trách nhiệm chuyển giao sự kiện cho các view trong nó và quản lý vòng đời của nó. Một ứng dụng Android có thể có một hoặc nhiều Activity. Một class được gọi là Activity khi nó extend (kế thừa) từ những class cha như : AppCompatActivity, Activity, FragmentActivity Tuyển dụng lập trình viên android các vị trí Các giai đoạn trong vòng đời của Android Activity Để tạo một Activity thì bạn phải tạo ra một lớp kế thừa lớp Activity, sau đó triển khai tối thiểu phương thức onCreate(Bundle savedInstanceState) , sau đó tùy ngữ cảnh mà khi Activity hoạt động vòng đời của nó diễn ra như mô tả ở hình sau: onCreate(Bundle savedInstanceState) : Được gọi khi hoạt động mới được tạo, tại đây khởi tạo các biến, nạp giao diện layout …, phương thức này cũng nhận dữ liệu lưu lại trạng thái hoạt động trước đó (với mục đích để phục hồi – savedInstanceState). onStart() : Được gọi ngay trước khi Activity hiển thị trên màn hình. onResume() : Được gọi ngay khi Activity bắt đầu có thể tương tác với người dùng, và Activity nằm trên cùng trong danh sách các Activity của hệ thống. onPause() : Được gọi khi hệ thống sắp kích hoạt một Activity khác, nếu bạn...