Home Blog Page 219

Bí kíp để host apps hoàn toàn miễn phí

Nhắc đến dịch vụ web hosting, có rất nhiều lựa chọn tuyệt vời mà lại hoàn toàn free. Tuy vậy, có rất ít nơi cho phép bạn host full stack web app với APIs, CGI, hoặc AJAX backend queries – đặc biệt là khi bạn muốn làm gì khác hơn là chỉ PHP.

Bài viết này sẽ đơn giản là một bài hướng dẫn cặn kẽ cách bạn host scripts trên cloud server.

Khi nào thì dùng tới Cloud Application Platform

Cloud Application Platform là lựa chọn tuyệt vời khi bạn muốn viết code để chạy một server. Chúng thường cung cấp series của Linux application containers phục vụ cho việc triển khai code của bạn từ máy chủ local với một set command line keyword.

Heroku là một trong những dịch vụ hỗ trợ host code một cách dễ dàng. Với chính sách freemium model cho phép user sử dụng 500 giờ dịch vụ hoàn toàn miễn phí (Bảng giá chính thức).

Sau khi bạn đã viết xong code, bạn có thể execute commands để triển khai chúng và gửi vào một workspace của Heroku. Lúc đó, code sẽ được thi hành tùy vào trigger được đặt ra cho chúng. Trigger có thể là web page request, hoặc một quá trình xử lý thông tin nào đó.

Một điều khá hay là bạn sẽ không cần lo lắng về operating system (memory, storage, CPU, security patches) bởi chúng đều đã được quản lí giùm bạn – Tuy vậy nó đồng nghĩa với việc bạn sẽ bị giới hạn trong việc không thể chỉ định sử dụng resource một cách trực tiếp.

Sau đây là một số ví dụ điển hình về những tình huống mà Heroku trở nên vô cùng hữu ích:

  • Host website của chính bạn và tự viết nên web server
  • Thu thập dữ liệu từ một website và lưu trữ vào database để phân tích
  • Cung cấp một API server cho một task riêng biệt như weather data, lưu trữ Internet of Things sensor data, hoặc liên quan tới machine learning model.
  • Cung cấp dịch vụ database.

Cấu trúc của Heroku

Heroku cung cấp một virtual machine (VM) cho người dùng triển khai code. Tất nhiên là nếu bạn muốn dùng free thì sẽ chỉ được triển khai tới 5 application thôi (5 VM). Còn đối với ứng dụng thực của bạn, Heroku sẽ cung cấp một URL subdomain  riêng. Vì thế mà project name của bạn phải không bị trùng.

Những workspace có nhiều components khác nhau như: code và resource files (không phải dynamic data files), database (Postgres), và log files.

Trên local desktop của user, Heroku sẽ dùng directory name để xác định cho project của use, đồng thời cũng là để Heroku hiểu được nội dung của chúng. Do đó bạn có thể có nhiều project khác nhau với directory riêng biệt, miễn là khi chạy Heroku commands  thì nhớ để đúng folder.

Điều duy nhất bạn cần phải lưu ý đó là tất cả mọi thứ đều chạy từ memory. Không hề có bất cứ persistent storage nào. Tôi xin nhắc lại – bạn không thể lưu trữ bất cứ file nào trên file server. Cho persistence, Heroku cung cấp một postgress SQL database cho bạn lưu trữ theo ý thích.

Một ví dụ đơn giản – tạo ra tính năng phát hiện những thay đổi trên website

Nói cách khác nó sẽ y như trang www.changedetection.com; với một số component chính bạn cần phải có như:

  1. Một database dùng để lưu trữ: (a) địa chỉ email để notify sự thay đổi trên website; (b) website để track; (c) một bản ‘copy’ của website.
  2. Một đoạn code với tính năng kiểm tra ột website trong database của #1 (Python script)
  3. Một job scheduler để chạy #2
  4. Một  web user interface để add/delete website để theo dõi trong database của #1
  5. Một cơ chế gửi emails

Yêu cầu đối với bạn

  • Có GitHub account . Nếu chưa có thì đăng kí tại đây.
  • Có Heroku account. Nếu chưa có thì đăng kí tại đây.
  • Dùng Windows. Nhưng nếu không thì cũng chả sao tại tụi nó cũng từa tựa nhau.
  • Đã cài Python. Nếu chưa có thì đăng kí tại đây.
  • Có chút hiểu biết về Python. Nếu chưa có thì đăng kí tại đây.
  • Biết về SQL. Nếu chưa có thì đăng kí tại đây.

Tóm tắt về các bước trong bài viết

  • Bước 1: Tạo web user interface — Hello World trước tiên
  • Bước 2: Persistence — Tạo một database
  • Bước 3: Kiểm tra những thay đổi với website
  • Bước 4: Gửi email notification
  • Bước 5: List output trên web page
  • Bước 6: Triển khai

Bước 1: Tạo web user interface — Hello World trước tiên

Trước tiên, chung ta sẽ triển khai một ứng dụng đơn giản vào Heroku. Nó sẽ là tiền thân của web user interface (#4 trong cái component list). Để có thể cho ra một trang web, ta có thể dùng tới HTML page nhưng như vậy lại cần có web server. Nói cách khác, Khi bạn type vào URL của cái website, một program sẽ cần phải xử lí request và cung cấp nội dung cho HTML file. Bạn có thể tạo ra mini web server với Flask Python librar và cũng là điều mà chúng ta sẽ làm.

Tạo ra folder với directory name là webchecker  

Cài Flask library. Enter command: npm Flask.

Tạo ra Python program sau đây với và đặt tên là showchecks.py:

import os
from flask import Flask, request

app = Flask(__name__) #create an instance of the Flask library

@app.route('/hello') #whenever this webserver is called with <hostname:port>/hello then this section is called
def hello(): #The subroutine name that handles the call
	output = 'Hello World'
	return output #Whatever is returned from this subroutine is what is returned to the requester and is shown on the browser page

if __name__ == '__main__':
	port = int(os.environ.get('PORT', 5000)) #The port to be listening to — hence, the URL must be <hostname>:<port>/ inorder to send the request to this program
	app.run(host='0.0.0.0', port=port)  #Start listening

Trước khi bạn triển khai nó lên Heroku, hãy test nó bằng máy tính của mình. Bạn có thể dùng các bước sau:

Chạy phần mềm: python webchecker.com

Dùng trình duyệt web trên PC của bạn, vào: http://localhost:5000/hello

Sau khi đã chắc chắn thì bạn đã có thể triển khai nó lên Heroku. Trước đó, ta cũng sẽ cần cung cấp một số file để hỗ trợ Heroku hiểu rõ thêm về ứng dụng của bạn.

Đầu tiên là, requirements.txt

Flask==0.12

Một file giúp Heroku biết nên chạy cái gì khi webrequest được thực hiện

web: python showchecks.py

Cuối cùng là phiên bản runtime của Python

python-3.6.1

Như vậy ta sẽ có tổng cộng 4 file:

  1. showchecker.py vốn là code của bạn
  2. requirements.txt cho list của non-standard library dependencies. Dùng để add những libraries mới mà lại không phải là Python Standard Library (phải dùng Tool như “PIP” để cài đặt)
  3. Procfile, vốn là Python script để chạy khi website được call – Nhớ là phải update nó nếu bạn thay đổi Python file.
  4. runtime.txt, chính là phiên bản thật của Python để dùng

Bạn có thể triển khai trong command line theo những bước sau:

  1. heroku create webchecker01 — buildpack heroku/python
  2. git add *.* *
  3. git status
  4. git commit -m “all files”
  5. git push heroku master

Với command #1 (heroku create…), phần “webechecker01” là một unique name mà bạn cần cung cấp cho name của app.

Command #3 (git status) sẽ cho biết file nào sẵn sàng để triển khai. Hãy luôn chắc chắn là tất cả file đều có mặt đầy đủ, nếu chưa thì add thêm chúng vào bằng git add <filename>.

Và giờ bạn đã có thể check website của mình: <application name>.herokuapp.com/hello

À mà cũng nên bảo đảm rằng bạn vẫn có thể xem được logs nhé. Xem bằng chạy command

heroku logstrong webchecker directory.

Nếu mọi thứ không diễn ra như ý muốn thì bạn sẽ phải dừng và kiểm tra lại. Hãy dùng https://dashboard.heroku.com để biết rõ hơn nguyên nhân.

Step 2: Persistence — Tạo một database

Để có thể tạo ra thêm nhiều phần mềm hữu ích khác bạn sẽ cần tới data store. Đây chính là lúc dịch vụ Postgres database  tỏa sáng. Bạn sẽ cần phải triển khai dịch vụ của Heroku database, tạo ra table rồi mới có thể kết nối code của bạn đến với database (để test)

Để có thể triển khai một database service thì trước hết ta cần phải tạo ra nó bằng command sau: 

heroku addons:create heroku-postgresql:hobby-dev

Tiếp theo, truy cập vào database từ command line và tạo ra table của riêng bạn. Lưu ý là database sẽ được xây trên dịch vụ đám mây của Heroku. Tuy nhiên bạn vẫn có vào được nhờ vào command line. Để log vào database  thông qua console, chạy command heroku pg:psql. Nhưng phải nhớ là bạn bắt buộc làm nó trong webchecker folder thì Heroku mới hiểu là database này dành cho webchecker site.

Dùng command `/d` để xem list của tables type

Nhằm tạo ra một table, bạn sẽ phải dùng SQL statement bình thường. Và cho webchecker program, chúng ta sẽ làm một table với 4 cột như sau:

  • ID – Tự động tạo cho mỗi entry (dùng type “serial”)
  • Website – website để theo dõi
  • Emailaddress – địa chỉ email để gửi notification khi có thay đổi diễn ra
  • Lasthashcode- chúng ta sẽ không lưu trữ nguyên cả bản copy của webpage mà thay vào đó sẽ tạo ra hash dựa trên HTML của webpage và so sánh chúng. Nó sẽ giúp tiết kiệm lượng thông tin lưu trữ nhưng sẽ không phản ánh hết những thay đổi đã xảy ra.
  • Lastchangedate  – thời điểm mà sự thay đổi diễn ra.

Để tạo table như trên, ta sẽ điền command vào trong Heroku Postgres database console:

CREATE TABLE webcheckerdb (id serial, website varchar(250), emailaddress varchar(250), lasthashcode varchar(32), lastchangedate timestamp DEFAULT current_date );

Tiếp theo, ta thêm một record vào database để giúp bảo đảm web UI chạy tốt

INSERT into webcheckerdb values(DEFAULT, 'news.google.com', 'email@me.com', '', DEFAULT);

Giờ bạn có thể thoát với \q.

Bước 3: check website để theo dõi sự thay đổi

Trước tiên, ta hãy dùng một đoạn code để xem site có thể retrieved lại được không.

Như vậy, nhiệm vụ được đề ra là retrieve một webpage. Bạn sẽ cần tạo ra một Python file với tên gọi là checkwebsite.py:

import http.client
import hashlib
import pprint


def getCurrentWebsiteHash(weburl):
	httpConn = http.client.HTTPSConnection(weburl)
	httpConn.request('GET', weburl)

	resp = httpConn.getresponse()
	data = resp.read()

	hash_object = hashlib.md5( data )
	print(hash_object.hexdigest())

	return hash_object.hexdigest()

def getWebList():
	webRecordList = [ {'website':'www.google.com', 'lasthashcode':'xxx'} ]
	return webRecordList

def checkWebList(weblist):
	for webrecord in weblist:
		pprint.pprint(webrecord)
		currWebHash = getCurrentWebsiteHash( webrecord['website'])
		if currWebHash != webrecord['lasthashcode']:
			print( 'Website ' + webrecord['website'] + ' has changed ')

if __name__ == "__main__":
	weblist = getWebList()
	checkWebList( weblist )

Kết quả ta có được là:

Nếu bạn gặp phải vấn đề bị thiếu libraries thì thêm chúng vào bằng command line pip install <library>

Giờ ta sẽ kết nối chúng tới database với những dòng code:

import http.client
import hashlib
import psycopg2
from psycopg2.extras import RealDictCursor
import traceback
import urllib.parse
import pprint
import os

urllib.parse.uses_netloc.append("postgres")
url = urllib.parse.urlparse(os.environ["DATABASE_URL"])
dbConn = psycopg2.connect( database=url.path[1:], user=url.username, password=url.password, host=url.hostname, port=url.port)
dbCur = dbConn.cursor(cursor_factory=RealDictCursor)

def getCurrentWebsiteHash(weburl):
	print("getting url:"+ weburl)
	httpConn = http.client.HTTPSConnection(weburl)  #Create connection object
	httpConn.request('GET', weburl)	#Get the website

	resp = httpConn.getresponse()	
	data = resp.read()				#Get the webdata into a string object

	hash_object = hashlib.md5( data )	#Createa  hash code
	print(hash_object.hexdigest())		#print hash code

	return hash_object.hexdigest()

def getWebList():
	rows = []
	try:
		dbCur.execute("select * from webcheckerdb" )	#Get all records from database
		rows = dbCur.fetchall()
	except:
		print ("error during select: " + str(traceback.format_exc()) )
	return rows

def checkWebList(weblist):
	for webrecord in weblist:	#Loop through each record in database
		pprint.pprint(webrecord)
		currWebHash = getCurrentWebsiteHash( webrecord['website'])	#Get the current websites latest hash code
		if currWebHash != webrecord['lasthashcode']:				
			print( 'Website ' + webrecord['website'] + ' has changed ')
			try:
				#If there is a change, print out the change, but also update the database so that next time
				#the message wont get triggered again
				dbCur.execute("update webcheckerdb set lasthashcode ='" + str(currWebHash) + "' where id = '" + str(webrecord['id']) +"'" )
				dbConn.commit()
				print( 'Website hash updated for next time')
			except:
				print ("error during update: " + str(traceback.format_exc()) )

if __name__ == "__main__":
	weblist = getWebList()
	checkWebList( weblist )

Tuy vậy, nếu thử chạy chúng bạn sẽ thấy xuất hiện lỗi ngay – `KeyError: ‘DATABASE_URL’`. Đó là vì Python code của bạn đang tìm địa chỉ của web trên Postgres database host bởi Heroku. Sau này thì việc này sẽ được tự động update cho bạn trên server nhưng trên máy tính của bạn thì phải tự cập nhật bằng tay theo 2 bước sau:

  1. Vào heroku config
  2. Chỉnh DATABASE_URL=<the database string listed from “heroku config”>

Bước 4: Gửi email notification thông báo về thay đổi

Bước cuối cùng là gửi email. Để làm được diều này, bạn sẽ phải cài thêm một Addon với tính năng gửi mail – bạn có thể kiếm chúng trên marketplace của Heroku: https://elements.heroku.com/addons

Trong bài viết này, ta sẽ dùng Addon gọi là SendGrid: https://elements.heroku.com/addons/sendgrid

Bạn có thể thêm nó vào app của mình bằng command line:

heroku addons:create sendgrid:starter

Trước khi sử dụng, bạn cũng sẽ cần tạo một API key, Double click trên SendGrid component và vào Settings->API Key->Create Key.

Một khi bạn đã có key, copy và paste nó vào command prompt:

heroku config:set SENDGRID_API_KEY=<API key from above>

Tuy nhiên nó chỉ mới được register trên server thôi, bạn cũng cân phải làm bằng tay cho desktop của mình:

set SENDGRID_API_KEY=<API Key from above again>

Cuối cùng bạn đã có thể test thử trong Python script gọi là sendmail.py. Để cài library đó, dùng pip install sendgrid:

import sendgrid
import os
from sendgrid.helpers.mail import *


def sendemail(recipient, emailSubject, body):
	sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
	from_email = Email("heroku@myapp.com")
	to_email = Email(recipient)
	content = Content("text/plain", body)
	mail = Mail(from_email, emailSubject, to_email, content)
	response = sg.client.mail.send.post(request_body=mail.get())

	print("### Email sent to: "+ recipient + " ###")
	print(response.status_code)
	print(response.body)
	print(response.headers)

	

if __name__ == "__main__":
	sendemail('email@me.com', "hello world", "you have mail!")

Để kiểm tra xem mail được gởi hay chưa, bạn hãy vào lại SendGrid dashboard và kiểm tra mục Statistics Overview :

Nhớ là lúc check mail thì bạn cũng phải check spam luôn nhé.

Một khi mọi thứ đều hoạt động đúng theo kế hoạch thì bạn giờ chỉ cần thêm 2 dòng code nữa vào checkwebsite.py script thôi:

import sendmail #import the send email subroutine you wrote above
...
#call the subroutine after find the hashcode has changed
sendmail.sendemail(webrecord['emailaddress'], 'Website changed', webrecord['website'] + ' changed')
import http.client
import hashlib
import psycopg2
from psycopg2.extras import RealDictCursor
import traceback
import urllib.parse
import pprint
import os
import sendmail  #import the send email subroutine 

urllib.parse.uses_netloc.append("postgres")
url = urllib.parse.urlparse(os.environ["DATABASE_URL"])
dbConn = psycopg2.connect( database=url.path[1:], user=url.username, password=url.password, host=url.hostname, port=url.port)
dbCur = dbConn.cursor(cursor_factory=RealDictCursor)

def getCurrentWebsiteHash(weburl):
	print("getting url:"+ weburl)
	httpConn = http.client.HTTPSConnection(weburl)  #Create connection object
	httpConn.request('GET', weburl)	#Get the website

	resp = httpConn.getresponse()	
	data = resp.read()				#Get the webdata into a string object

	hash_object = hashlib.md5( data )	#Createa  hash code
	print(hash_object.hexdigest())		#print hash code

	return hash_object.hexdigest()

def getWebList():
	rows = []
	try:
		dbCur.execute("select * from webcheckerdb" )	#Get all records from database
		rows = dbCur.fetchall()
	except:
		print ("error during select: " + str(traceback.format_exc()) )
	return rows

def checkWebList(weblist):
	for webrecord in weblist:	#Loop through each record in database
		pprint.pprint(webrecord)
		currWebHash = getCurrentWebsiteHash( webrecord['website'])	#Get the current websites latest hash code
		if currWebHash != webrecord['lasthashcode']:		
			print( 'Website ' + webrecord['website'] + ' has changed email to ' + webrecord['emailaddress'])
			#call the subroutine after find the hashcode has changed
			sendmail.sendemail(webrecord['emailaddress'], 'Website changed',  webrecord['website'] + ' changed')
			try:
				#If there is a change, print out the change, but also update the database so that next time
				#the message wont get triggered again
				dbCur.execute("update webcheckerdb set lasthashcode ='" + str(currWebHash) + "' where id = '" + str(webrecord['id']) +"'" )
				dbConn.commit()
				print( 'Website hash updated for next time')
			except:
				print ("error during update: " + str(traceback.format_exc()) )

if __name__ == "__main__":
	weblist = getWebList()
	checkWebList( weblist )

Bước 5: Lập list cho output trên web page và set thời gian cho job

Giờ chúng ta cần liệt kê ra các output trên webpage. Bạn sẽ cần tới querying database rồi cycling và hiển thị chúng. Lấy ví dụ là ‘Hello World’ code ở trên, nó sẽ thứ hiện quá trình modification. Bạn có thể test nó với path mà tôi đã tạo ra là: http://localhost:5000/list

import os
from flask import Flask, request
import hashlib
import psycopg2
from psycopg2.extras import RealDictCursor
import traceback
import urllib.parse
import pprint 

app = Flask(__name__) #create an instance of the Flask library
urllib.parse.uses_netloc.append("postgres")
url = urllib.parse.urlparse(os.environ["DATABASE_URL"])
dbConn = psycopg2.connect( database=url.path[1:], user=url.username, password=url.password, host=url.hostname, port=url.port)
dbCur = dbConn.cursor(cursor_factory=RealDictCursor)


@app.route('/list') #whenever this webserver is called with <hostname:port>/hello then this section is called
def list(): #The subroutine name that handles the call
	output = 'Check status:'
	rows = []
	try:
		dbCur.execute("select * from webcheckerdb" )	#Get all records from database
		rows = dbCur.fetchall()
		for webrecord in rows:	#Loop through each record in database
			output = output + '<BR> ' + pprint.pformat(webrecord)
	except:
		output = "error during select: " + str(traceback.format_exc())

	return output #Whatever is returned from this subroutine is what is returned to the requester and is shown on the browser page


@app.route('/hello') #whenever this webserver is called with <hostname:port>/hello then this section is called
def hello(): #The subroutine name that handles the call
	output = 'Hello World'
	return output #Whatever is returned from this subroutine is what is returned to the requester and is shown on the browser page

if __name__ == '__main__':
	port = int(os.environ.get('PORT', 5000)) #The port to be listening to — hence, the URL must be <hostname>:<port>/ inorder to send the request to this program
	app.run(host='0.0.0.0', port=port)  #Start listening

Bước 6: Triển khai

Bước cuối cùng là triển khai tất cả mọi thứ lên Heroku  và lên schedule để nó check mail.

Đến bước này, bạn sẽ phải có những file sau:

  1. Procfile —  file hướng tới showchecker.py
  2. requirements.txt — file chứa library dependencies
  3. runtime.txt — phiên bản của python
  4. showchecker.py —python code hiển thị database output trên web thông qua <your appname>.herokuapp.com/list
  5. checkwebsite.py —python code kiểm tra những thay đổi trên website.

Đối với requirements.txt bạn sẽ cần update các bản libraries mới nhất

Flask==0.12
psycopg2==2.6.2
sendgrid==3.6.3

Triển khai tất cả lên Heroku:

  1. git add *.* *
  2. git commit -m “deployment”
  3. git push heroku master

Test từng component:

  1. Vào <your app name>.herokuapp.com/hello
  2. Vào <your app name>.herokuapp.com/list

Nếu có bất cứ errors nào thì chạy heroku logs trong command line để xem có vấn đề gì rồi chạy checkwebsite.py  trực tiếp trên Heroku để bảo đảm không còn bị lỗi gì khác.

Để làm điều đó, bạn chỉ cần type:

heroku run python checkwebsite.py

Và giờ thì ta đã có thể lên schedule được rùi (tất nhiên là cần phải có Addon)

heroku addons:create scheduler:standard

Chúc mừng bạn đã thành công trong việc làm ra một ứng dụng với chức năng gửi mail nhắc mỗi khi có thay đổi diễn ra trên web page, bạn có thể dùng command line `python checkwebsite.py` để chạy chương trình.

Nguồn: blog.topdev.vn via Medium

Amazon: Phát triển mà không làm mai một văn hóa startup

Điều hành một startup khác với điều hành một công ty lớn rất nhiều. Khi qui mô công ty còn nhỏ, các nhà sáng lập có thể dễ dàng nắm bắt hoạt động của công ty và đảm bảo mọi công việc quan trọng đều được thực hiện. Nhưng đến khi startup phát triển và mở rộng, nhà sáng lập không thể nào nhúng tay tham gia từ A-Z nữa. Nhiều công ty dần xa rời khách hàng; qui trình làm việc trở nên trì trệ; tuyển dụng nhân sự mắc phải sai lầm. Chúng ta đều đã chứng kiến những sai lầm này, kể cả ở những startup xuất sắc.

Phép màu của Amazon là ở chỗ: dù là một công ty khổng lồ, nhưng ở một số khía cạnh chủ chốt, Amazon vẫn vận hành như một startup do nhà sáng lập điều khiển. Điều này một phần là vì Jeff Bezos, CEO của Amazon, có ảnh hưởng rất lớn đến văn hoá của toàn bộ công ty. Bên cạnh đó, Bezos đã phát triển một số công cụ độc đáo nhằm duy trì và củng cố những giá trị cốt lõi của mình trong công ty, chẳng hạn như:

1. Chú trọng vào khách hàng

Amazon có một qui trình phát triển sản phẩm độc nhất vô nhị: trước khi bắt đầu một dự án mới, giám đốc sản phẩm sẽ soạn một thông cáo báo chí nội bộ để ‘công bố’ về sản phẩm đó. Cách tiếp cận trái với qui trình thông thường này giúp cho cả đội ngũ phát triển hiểu rõ giá trị của sản phẩm đối với khách hàng (VD: sản phẩm này giải quyết vấn đề gì cho người dùng). Một cựu giám đốc ở Amazon đã mô tả phương pháp này như sau: “Chúng tôi muốn đi ngược và bắt đầu từ phía khách hàng thay vì bắt đầu từ ý tưởng sản phẩm rồi sau đó cố đóng khung khách hàng vào sản phẩm đó.”

Nếu như cả đội ngũ làm sản phẩm không nghĩ ra được một thông cáo báo chí đủ thu hút, điều đó có nghĩa hoặc là họ cần dành thêm thời gian suy ngẫm thêm, hoặc là sản phẩm của họ không đáng được phát triển.

Bài tập viết một thông cáo báo chí ngắn gọn súc tích là một bài tập hay giúp tóm tắt nhu cầu của khách hàng và lợi ích sản phẩm mang lại. Tuy nhiên, một câu hỏi khác được đặt ra là: làm thế nào để đội ngũ làm sản phẩm có thể thực sự hiểu được những nhu cầu và thách thức mà khách hàng mang lại. Để rút ngắn khoảng cách giữa các nhà quản lý và người tiêu dùng, Amazon để cho họ thường xuyên làm công tác dịch vụ khách hàng. Tại AbeBooks, chúng tôi cũng áp dụng chính sách tương tự.

2. Cơ cấu tổ chức

Amazon có một qui luật khá nổi tiếng: Qui luật Hai chiếc pizza – nếu một nhóm dự án có thể ăn nhiều hơn 2 cái pizza, nhóm đó có quá nhiều người. Để giải quyết vấn đề này, họ sẽ chia nhỏ dự án và đội ngũ thực hiện. Từ đó các nhóm sẽ tinh gọn, hoạt động linh hoạt hơn và quản lý dễ dàng hơn.

Để hỗ trợ các nhóm làm việc với nhau, mỗi một sản phẩm ở Amazon đều phải có API (Application Programming Interface – giao diện lập trình ứng dụng), giống như khi phát triển sản phẩm cho một khách hàng ở ngoài. Với API, các đội dự án có thể hoạt động mà không phụ thuộc vào tốc độ làm việc của nhau cũng như bàn giao công việc cho nhau dễ dàng hơn. Nó thể hiện tầm nhìn của Bezos về một công ty phân quyền, trong đó các nhóm nhỏ có thể độc lập sáng tạo và hoạt động mà không bị các nhóm hay cá nhân khác chi phối.

3. Tuyển dụng

Khi một công ty phát triển và mở rộng đến một mức độ nào đó, nhà sáng lập không thể nào tham gia vào mọi quyết định của công ty nữa. Lúc này công ty cần phải có đội ngũ nhân sự có năng lực.

Trước đây, Bezos đã áp dụng chương trình tuyển dụng thông qua “bar raisers” tại Amazon. Đây là những nhân viên có khả năng nhìn người tốt và phụ trách phỏng vấn các ứng viên ứng tuyển vào Amazon. Họ có quyền phản đối bất kì một ứng viên nào, kể cả khi ứng viên ứng tuyển vào các vị trí hoàn toàn không thuộc lĩnh vực chuyên môn của họ. Bezos đã nói rằng chương trình này đã giúp loại bỏ bớt những ứng viên “lệch với văn hoá” của Amazon và giúp công ty có các quyết định tuyển dụng đúng đắn bằng cách chỉ tuyển người khi nhiều nhân viên ở các lĩnh vực đa dạng chấp thuận người đó.

Một chiến thuật dùng người khác của Amazon là giữ chân những nhà sáng lập mà họ có được khi mua lại các công ty khác. Ví dụ: vào năm 1998, khi mua lại Junglee, Amazon cũng thu nhận nhà sáng lập của công ty này là Mike George. Từ đó trở đi, Bezos đã rất nhiều lần tin tưởng giao cho George rất nhiều dự án mới như đưa marketplace ra các thị trường hay điều hành dự án nền tảng thanh toán quốc tế. Hiện Mike George đang phụ trách dự án Alexa.

Giữ chân các nhà sáng lập không phải là điều dễ làm: khi một ai đó sáng lập ra một công ty, họ muốn làm tướng chứ không muốn làm lính. Các nhà khởi nghiệp thường không hài lòng khi công ty mua lại startup của mình lại muốn dạy dỗ họ cách làm thế nào để điều hành doanh nghiệp mà chính họ “mang nặng đẻ đau” và “nuôi lớn.” Bí quyết để Amazon thành công trong việc giữ chân những nhà sáng lập là cho họ không gian để thoả sức tung hoành.

Hỡi những nhà sáng lập của các startup đang còn ở giai đoạn phát triển ban đầu, bạn có thể dành nhiều thời gian hơn cho việc nghĩ cách làm sao để đưa được sản phẩm của mình ra thị trường hay thu hút được 1,000 hoặc 100,000 khách hàng đầu tư mà chưa để tâm tới các thách thức liên quan tới việc mở rộng qui mô công ty. Thế nhưng một số những công cụ ở trên có thể giúp ích rất nhiều cho startup của bạn kể cả khi bạn mới có 20-30 nhân viên. Hãy nhớ rằng không bao giờ là quá sớm để bắt đầu nghĩ về việc áp dụng những qui trình và công cụ đúng đắn nhằm giúp công ty phát triển mà không bị chệch hướng.

Nguồn: blog.topdev.vn via 500startups.com.vn

Sản phẩm hay Marketing? Cái nào quan trọng hơn?

Thực ra ông nào cũng muốn cả 2 tốt cả, nhưng tui nói thật không có nhiều lựa chọn đâu, nhân dịp hôm qua Jackma đăng đàn chia sẻ về cách xây dựng Taobao, Tmall những năm 2003, để tui kể hầu các thím mấy chuyện liên quan đến Marketing & Product.

Chuyện thứ 1:

Taobao 2 tuần đầu launch thì toàn bộ nhân viên tự đăng, rồi anh em trong công ty cũng tự mua, không hề có người ngoài, 1 tháng sau thì khách hàng đăng đồ lên bán, nhân viên cũng phải mua cho khách để họ tin là cái site này cứ đăng lên là bán được.

Vatgia giai đoạn đầu anh Điệp thuê 40 nhân viên ngồi copy paste các tin đăng ở nơi khác về. Dần dần traffic to lên, dân tình lại thấy Vatgia có nhiều khách xem, lại tự động vào đăng tin thôi.

Lúc tôi khởi nghiệp 2007-2008 trang Vatgia cùi lắm, cơ mà traffic rất khủng, bố đứa nào dám bảo là sản phẩm không tốt khi nó là platform rao vặt lớn nhất Viêtnam.

Chuyện thứ 2:

Thững ngày đầu tiên, phần lớn nội dung của YouTube là không có bản quyền. Muốn xem một tập phim, thay vì phải down từ torrent thì người dùng có thể vào YouTube. Thế là Youtube dần dần trở thành platform video lớn nhất thế giới, khi có thế lực rồi thì lại quay ra giết hết bọn up video không có bản quyền.

Ngày đầu tiên mình vào HDViet (tầm năm 2014) thấy website rất lởm, quảng cáo chiếm 50% màn hình, sản phẩm tệ thật đó, nhưng vẫn là platform xem phim lớn nhất Viêtnam đơn giản vì HDViet có một kho phim “không bản quyền” mà không ai có 🙂) Dần dần có lực rồi thì các anh lại khéo léo mua bản quyền, các khó khăn được giải quyết.

Vào 1 ngày đẹp trời năm 2016, nghe bảo mấy Founder đẹp trai chán phim nên đành bán hết, bỏ túi chơi chơi 7 triệu. Vậy nên soái ca Jimmy H. Tran đánh Poker lúc nào cũng bluff mình, có phải đây là chiến lược Marketing lấy thịt đè người của giới startup không nhỉ? Nguyen Dangcong Dzung NguyenLuân Nhan Thế

Chuyện thứ 3

Tuần trước có 7-Eleven, trước đó nữa là StarBuck vào ngày khai trương đều thuê người xếp hàng. Dân tình cứ nghĩ là Cafe StarBuck ngon hơn Trung Nguyên nên cũng vào mua thử, ờ thì thấy nó cũng đắng đắng đắng ngọt ngọt dễ uống hơn Trung Nguyên, chắc là nó ngon hơn thật.

Thực tế là: Làm mẹ gì có chuyện cafe StarBuck ngon hơn Trung Nguyên. Nếu có là do con mẹ thằng bạn nó bảo thế thôi
🙂
) Chân lý là Marketing Win, còn cả 2 sản phẩm thì cũng chỉ là nược ngọt có vị cafe mà thôi.

Chuyện thứ 4:

Ông Leo Trieu là 1 coder bình thường (vì mình không biết code, thấy hắn có mindset làm business, phần Code vì thế chắc cũng chỉ hơn mình một tí 

😛
) vậy mà năm ngoài launch quả khóa học 30 ngày thu về được 2 tỉ, cách đây 2 hôm lại khoe mình là khóa thứ 2 em mới launch được 2 ngày mà đã được 1 tỉ.

Người trong nghề, không cần hỏi thì tui cũng biết hắn chỉ dành 2 tháng code, quay video màu mè làm cho course thú vị và dễ hiểu, còn lại 10 tháng là đi làm marketing, xây dưng email list và thiết kế rất bài bản “Phễu Bán hàng”

Ông nào không tin vào đây mà xem nha http://kck.st/2sRQ4Qd

Hỏi: Thế ông Leo Triệu thành công là do code tốt hay là marketing tốt? Tự đập đầu vào gối mà trả lời đi

Chuyện trong nhà bây giờ mới kể

Incredible DesignBold hồi đi mẫu giáo bé (hạ sinh 31/10 năm ngoái) về sản phẩm thì thua kém DesignBold Đại học chữ to bây giờ nhiều lắm. Đứa nào bảo DesignBold không “tốt nghiệp đại học” sau khi bọn tui đã ra hơn 30 tính năng và fix hơn 1000 cái bugs trong vòng vẻn vẹn 5 tháng?

Ngày xưa khi mà sản phẩm chưa phải là tốt lắm, vậy mà bọn tui bán được 3 tỉ trong vòng 12 ngày, vì bọn tui khá hiểu thị trường Global, biết target đúng tập khách hàng (tôn trọng bản quyền và thích các sản phẩm đơn giản tiện lợi)

Ngược lại, về mặt sản phẩm, DesignBold bây giờ ngon gấp bội lần, thế mà team Vietnam bán hơn 1 tháng nay không bằng 1 ngày hồi xưa, đơn giản là chúng ta chưa hiểu thị trường: người Vietnam (chủng người khá đặc biệt trên thế giới: Nghèo nhưng lại khó tính, đấy là chưa kể nhiều phẩm chất vô cùng đáng yêu như “thích dùng chùa”, “không tôn trọng bản quyền hình ảnh”, “không thích dùng phần mềm trả phí”

Càng nghĩ lại càng thương mấy anh em như Haravan 1Office TopDevPancake Facebook Tools Cộng đồng Landingpage
Hay là mấy anh em rủ mẹ nhau ra đảo sống nhỉ

Kết luận

Vậy đó, khi không bán được hàng thì đừng có xúm vào mà chửi mấy thằng làm sản phẩm nha bay. Thím nào là Product Builder, Maker, Developer, Designer hay bị bọn làm Business, Marketing, Sales ném đá chê là sản phẩm không tốt nên không bán được thì tag nó vào đây, thực ra là tụi nó làm marketing kém chứ không phải mình làm sản phẩm không tốt đâu. Làm Marketing tốt hay không tốt thì thằng khách hàng nó không chỉ ra được, nhưng sản phẩm mà lỗi thì đứa nào cũng có thế chém mình tung xác.

Nguồn: TechTalk via FB Hung Dinh

Điểm lại những khoảnh khắc đáng nhớ của Thuật toán – Tế bào gốc của AI, Machine Learning, Blockchain

Vào ngày 24/06 vừa qua, sự kiện TopDev Techtalk Thuật toán – Tế bào gốc của AI, Machine Learning, Blockchain tại Tp.HCM đã chào đón gần 250 khách tham dự, để lại nhiều dấu ấn nhờ những câu chuyện xoay quanh nền tảng Thuật toán của các diễn giả.

Đầu tiên phải kể đến ấn tượng từ những định nghĩa nhất về Thuật Toán dưới sự dẫn dắt của anh Phạm Nguyễn Sơn Tùng – người sáng lập ra Bio-Coding, Giảng viên trường Đại Học Khoa Học Tự Nhiên. Đến với TopDev TechTalk lần này, anh Tùng chia sẻ một bất ngờ lớn ngay từ việc định hướng Thuật Toán từ cơ bản cho đến chuyên sâu dưới cái nhìn sư phạm, phổ cập lộ trình học Thuật Toán đúng đắn nhất cho các bạn học sinh – sinh viên và người đang đi làm, giúp người xem tự sắp xếp được một lịch học “thuật toán cá nhân” chuẩn cho chính mình.

Lê Yên Thanh – Backend Developer của Umbala, cái tên “nóng” nhất làng công nghệ Việt Nam thời gian qua cũng xuất hiện với những tự sự về mối tương duyên với nghề lập trình, quan điểm về tương lai của AI lẫn các dự án anh đang trực tiếp túc trực. Lê Yên Thanh đã mang đến bầu không khí pha lẫn sự hài hước lẫn thán phục với cá tính của Yên Thanh và các thành tích mà Thanh đạt được trong những năm tháng còn ngồi trên ghế nhà trường.

Khán giả giao lưu đặt câu hỏi cho 3 diễn giả

Anh Nhân Nguyễn – Kỹ sư của Walmart Labs, cựu kĩ sư của Google tận tình giải đáp thắc mắc

Sự kiện TopDev Techtalk Thuật toán – Tế bào gốc của AI, Machine Learning, Blockchain sẽ tiếp tục

  • Thời gian & địa điểm: 17h30 – 21h30 ngày 02.07.2017 tại The Vuon Luxury Garden Office D2 Giảng Võ, Q. Ba Đình, Hà Nội.
  • Hotline/ Liên hệ hợp tác:
    – ngoc.do@applancer.net (Ms. Ngọc) | 0944 685 243
    – event@applancer.net (event team) | 08 6273 3497

 

Tham khảo thêm các vị trí tuyển dụng Blockchain lương cao cho bạn

Tìm việc làm Machine Learning lương hấp dẫn 3000 USD

PHP – mười người mười ý những vẫn hot không tả nổi

Đã từng có không ít các thông tin bàn luận xoay quanh vấn đề lỗi thiết kế và tính không nhất quán của lập trình ngôn ngữ PHP. Vào năm 2012, một bài viết chia sẻ từ blogger Eevee đã được viết với tiêu đề “PHP: Một ngôn ngữ có thiết kế rất tồi”. Từ đó cuộc tranh luận về nhược điểm của ngôn ngữ lập trình này bắt đầu nhiều hơn: “Không có một triết lý thiết kế rõ ràng”, “PHP không tập trung như các ngôn ngữ khác”, “PHP thật tệ”…

Tuy nhiên, chúng ta tự hỏi với vô số những ý kiến trái chiều ấy tại sao PHP lại vẫn được nhiều người sử dụng và phổ biến đến vậy? Theo W3Techs, có đến 82% website trong thế giới internet dùng ngôn ngữ lập trình PHP. Ngay cả các trang web nổi tiếng như Wikipedia, Facebook, WordPress…cũng đều đang được chạy bởi chính ngôn ngữ này.

Vậy điều gì đã khiến độ hot của PHP vẫn chưa hề giảm nhiệt?

Phổ biến và dễ tiếp cận

Theo CEO của công ty Zend Technologies, ông cho biết: “PHP cho đến nay là ngôn ngữ lập trình web phổ biến nhất”. Với Josh Lockhart, một nhà phát triển web tại Media Campaigns, ông nhấn mạnh PHP được xem là một trong những ngôn ngữ lập trình web đơn giản và dễ diếp cận nhất ngày nay.

Với tất cả những gì liên quan đến website, PHP đều có thể được áp dụng vào. Cấu trúc và câu lệnh của PHP cũng giống với C, Java nên bạn có thể dễ dàng nắm vững trong một thời gian ngắn nếu thường xuyên thực hành nhiều bài tập và dự án nhỏ. Xét về mức độ hiệu suất, khả năng mở rộng thì PHP được đánh giá rất cao; hơn nữa chi phí lại luôn luôn rất thấp. Facebook ban đầu được xây dựng bằng ngôn ngữ PHP và về sau đã thống lĩnh trang mạng xã hội vượt mặt cả trang Myspace đã được ưa chuộng rất nhiều trước đó. Hiện tại thì Facebook chính là trang web có lượng người truy cập lớn thứ 2 trên thế giới.

Tìm việc làm PHP đãi ngộ tốt trên TopDev

Cộng đồng phát triển lớn

Sự lớn mạnh của cộng đồng PHP đã chứng tỏ mức độ phổ biến và chất lượng của chính ngôn ngữ này. Thêm vào đó, các phiên bản cải tiến mới cũng như các version cập nhật đã giúp cho PHP càng trở nên linh hoạt trong việc hoàn thiện.

PHP còn hỗ trợ nhiều Framework mang tính năng mạnh mẽ: Laravel, Yii, Phalcon, CakePHP, Zend,… và mô hình OOP thích hợp. Với các phiên bản phát triển mới trong tương lai thì PHP sẽ cải tiến thêm hiệu suất mang khả năng ứng dụng cao.

Nhu cầu tuyển dụng lớn

Sau Java thì PHP là ngôn ngữ lập trình phổ biến đứng trong top 5 ngôn ngữ lập trình được sử dụng nhiều nhất trong các năm qua theo khảo sát của StackOverFlow.

Khi gõ tìm kiếm nhanh trên trang web việc làm công nghệ Dice.com gần đây thì trang đã cho hiển thị khoảng 19,072 công việc liên quan đến PHP, đứng top 3 chỉ sau Java và Python. Điều này cho thấy rất rõ PHP đang không ngừng gia tăng số lượng công việc gần bằng các ngôn ngữ lập trình khác.

Ngay tại Việt Nam ở 3 khu vực thành phố lớn có rất nhiều công ty đang tuyển dụng việc làm it PHP Developer.

Cuối cùng, bạn đã hiểu lý do tại sao mười người mười ý nhưng độ hot PHP vẫn chưa hề giảm rồi chứ?

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

“Dân làm Product khác hoàn toàn 180 độ với dân làm outsourcing”

Gặp gỡ anh Chu Sĩ Nguyên – Phó Tổng Giám Đốc của SK-Global, một startup khởi nghiệp năm 2016, chuyên xây dựng những Giải Pháp phục vụ cộng đồng với thế mạnh về kỹ thuật thực tế tăng cường (AR), cũng như thâm niên lâu năm trong lĩnh vực Outsourcing trong các lĩnh vực tài chính tiền tệ

Hãy cùng TopDev lắng nghe những chia sẻ thực tế đến từ quá trình hơn 10 năm làm việc.

Q: Chào anh, anh có thể chia sẻ những khó khăn trong quá trình Startup không?

Khó khăn này có lẽ là khó khăn chung của các Startup, đó là việc bài toán cân bằng giữa outsourcing và product. Làm outsourcing quá nhiều thì dễ đánh mất lý tưởng của công ty, còn làm product nhiều thì lại thiếu ngân sách hoạt động.

Hiện tại, giải pháp mà SK Global hướng đến là tìm ra mô hình mới, tách bạch rõ ràng giữa 2 team Product và Outsourcing trong nội bộ công ty, mỗi team có một sứ mệnh rõ ràng chứ không trộn lẫn như bây giờ.

  3 bài học xương máu mà mỗi Product Manager đều phải trải qua.
  Con đường trở thành Product Manager từ lập trình viên tại Amazon

Q: Anh đánh giá như thế nào về các dự án Outsourcing Việt Nam hiện nay?

Mình không nói về các dự án Việt Nam mà tập trung vào các dự án mình đã làm. Nhìn chung giá cả Việt Nam vẫn cạnh tranh được với các nước khác, kể cả Ấn Độ & Trung Quốc. Mình làm rất dàn trải, việc gì cũng làm được nhưng chưa sâu, sâu ở đây có thể hiểu là sâu ở mặt quy trình.

Ví dụ mình chủ yếu chỉ tham gia vào những giai đoạn như phát triển, testing. Những giai đoạn mang đến “linh hồn” và “bản sắc” cho dự án như lên ý tưởng, thiết kế, core library thì hầu như rất hiếm khi được tham gia.. Đến bây giờ, sau 10 năm thì thực tế này vẫn đang tiếp diễn, đối tác tìm đến mình chủ yếu vẫn là do giá thành rẻ.

Q: Một developer muốn vào SK Global thì cần những kĩ năng, kiến thức gì?

Mình tuyển dụng cũng khá nhiều, tùy theo mục đích là làm Product hay làm Outsourcing. Trong đó, hai yếu tố quan trọng là khả năng tự học và khả năng làm việc độc lập. Các công ty khác đánh giá cao khả năng làm việc theo nhóm nhưng theo quan điểm của SK Global thì người làm việc độc lập được thì mới làm teamwork được. Còn khả năng tự học là điều chắc chắn vì SK Global không tuyển một bạn biết hết tất cả mà cần các bạn có nền tảng tốt để có thể tự học được.

Q: Với các dự án riêng của SK Global thì anh có mong đợi kĩ năng/ công nghệ nào đặc biệt từ phía lập trình viên?

Tất nhiên khi tuyển dụng mình phải ưu tiên ứng viên có kĩ năng đáp ứng được nhu cầu công việc lúc đó, nhưng trên hết ứng viên phải có nền tảng tốt về lập trình và thiết kế lập trình. Ngoài ra mình cũng ưu tiên những bạn vững về Javascript, mình nghĩ Javascript sẽ được cộng đồng hậu thuẫn nhiều trong tương lai.

Q: Một lập trình viên làm Product và một lập trình viên outsource thì khác nhau ở điểm nào?

Trong 1 năm làm việc vừa qua, mình đã nhận ra là khác nhau hoàn toàn. Bản thân mình cũng xuất thân từ Outsourcing, thì cái khó nhất của các bạn Outsourcing trước khi chuyển qua Product là tư duy sáng tạo.

Mình đã quen với việc làm bài tập từ thời còn đi học: chỉ làm những gì mà người ta yêu cầu, chỉ làm những gì mình thấy rõ ràng để làm. Thời gian đầu các bạn làm ở SK Global thì hầu hết các bạn đều không làm được vì chỉ nghĩ công việc của mình như là một coder, nhưng khi làm Product các bạn phải can thiệp vào tất cả các khâu từ giai đoạn ý tưởng, thiết kế đến khi thành phẩm.

Các bạn phải tự đóng vai trò là khách hàng, tự đặt ra những chuẩn mực cho dự án, học từ những feedback trực tiếp từ khách hàng, chịu thất bại và tiếp tục phát triển tiếp. Quan trọng nhất phải có ý thức mình là chủ sở hữu của sản phẩm để có thể tâm huyết tạo ra dược sản phẩm tốt nhất. Điều này khác rất nhiều so với làm Outsourcing.

Q: Anh có ví dụ nào thực tế đến từ Product mà SK Global đang làm không?

SK-GLOBAL sắp ra mắt ứng dụng cho phép người dùng thử mắt kính ảo theo thời gian thực ngay trên thiết bị di động. Mình nghĩ mọi người sẽ rất bất ngờ về khả năng mang đến trải nghiệm y như thật của ứng dụng này.

Từ lúc ban đầu khi ý tưởng chưa có, công ty có tổ chức một số buổi brainstorm, hackaton để thu thập ý kiến của mọi người nhưng kết quả không được tốt mấy do mọi người chưa quen với việc tự nghĩ ra cái để làm.

Nhưng dần dần sau khi trải qua tất cả các khâu của dự án, tư duy va cách làm Product của mọi người dần dần được hình thành. Mình nghĩ dự án Product tiếp theo sẽ được hình thành từ chính ý tưởng của các bạn trong công ty.

  Mối quan tâm của người làm Product đến trải nghiệm khách hàng – Case Study về O2O model của TGDĐ
  Làm sao để trở thành Product Manager

Q: SK Global có mối quan hệ thân thiết với các công ty Nhật, thì không biết môi trường/ văn hóa làm việc giữa Nhật Bản và Việt Nam có những điểm khác biệt nào, nhất là đối với developer?

Môi trường làm việc thật ra không có gì quá khác biệt trong môi trường Internet như hiện nay. Cơ sở vật chất Việt Nam cũng không thiếu thốn gì so với nước bạn.

Nhưng văn hóa làm việc thì khác. Người Việt Nam có khuỵnh hướng là không đi đến tận cùng, không có nhu cầu sự hoàn hảo, không có lý tưởng làm sao cho sản phẩm của mình là số 1 trên thế giới.

Q: Nguyên nhân nào dẫn đến thực tế này? Có phải vì dev Việt mình chưa có đủ đam mê…?

Đúng vậy, vì các bạn làm Outsourcing, sản phẩm là của người ta nên mình không cần bỏ quá nhiều công để làm cho hoàn hảo. Thứ hai là xuất phát văn hóa của mình là hay tự thỏa mãn, không đến nơi đến chốn. Ngoài ra, nếu trong công ty Outsourcing thì đa phần mình không có điều kiện, không có cơ hội để thực sự tâm huyết với sản phẩm đó.

Q: SK Global có các khóa training nào cho nhân viên?

Hiện tại công ty có gửi các bạn đi training rất nhiều, nhưng không tập trung vào kiến thức lập trình, vì công nghệ phát triển quá nhanh nên các trường khó dạy tốt và cơ bản các bạn cũng có khả năng tự học rồi.

Chủ yếu vẫn là học Marketing và Design.

Q: Ngoài những vấn đề chuyên môn thì anh có thể mô tả thêm về văn hóa công ty?

Mình muốn tạo ra môi trường làm việc có cơ sở vật chất tốt nhất cho các bạn. Thêm nữa, công ty không có rào chắn giữa người lao động và người sử dụng lao động, mình rất dị ứng tạo ra không khí cấp trên, cấp dưới. Dự án là của mọi người, ai cũng có vai trò, sức ảnh hưởng riêng và cùng nhau hoàn thành dự án. SK Global cũng rất flexible về thời gian làm việc.

SK Global

Nguồn: TopDev

Có thể bạn muốn xem thêm:

Xem thêm các việc làm về Product hấp dẫn tại TopDev

Trở thành Junior Dev ở tuổi 30

Thay đổi công việc là điều gì đó dễ khiến chúng ta hoảng sợ vì mức độ mạo hiểm của nó. Càng lớn tuổi, rủi ro khi chuyển sang một lĩnh vực khác càng lớn. Thời điểm bắt đầu là khó khăn nhất vì bạn phải cạnh tranh với người trẻ hơn, thành công hơn. Đừng lo, đừng nảng lòng. Dấn thân vào công nghệ ở tuổi 30 (hoặc bất kỳ độ tuổi nào) cũng có thể trở thành một cuộc phiêu lưu kì thú với những trải nghiệm đáng nhớ, những con người thú vị và những cơ hội tuyệt vời.

Hôm nay là sinh nhật thứ 32 của tôi và tôi đang nhìn lại một năm phiêu lưu của mình…

Khi 20 tuổi, tôi đã từng chắc mẩm rằng, trước 32 tuổi, tôi sẽ có tất cả. Tôi đã tưởng tượng mình trong tương lai là người phụ nữ có một cuộc sống, sự nghiệp tuyệt vời, mang giày gót cao và sở hữu kế hoạch cuộc đời hoàn hảo.

Tôi hiện tại đang mặc chiếc áo T-shirt quá khổ của chồng tôi, và gương mặt makeup từ ngày hôm qua. Tôi có một cuộc sống tuyệt vời mặc dù nó khác với những gì tôi đã lên kế hoạch ban đầu và sự nghiệp của tôi chỉ mới bắt đầu. Tôi hầu như không mang giày cao gót vì tôi thích những đôi thoải mái…

Hành trình đến với công nghệ của tôi là một câu chuyện dài và phức tạp, có cả nước mắt và tuyệt vọng. Ban đầu, tôi đã trở thành một nhà ngôn ngữ học. Mọi thứ đã được lên kế hoạch và tôi đã trở thành một nhà khoa học, đi khắp thế giới, dịch văn bản cổ và giảng dạy tại các trường đại học có uy tín. Sau đó, mẹ tôi bị ung thư và không điều gì trong số đó trở nên quan trọng với tôi. Cuộc sống của tôi đã dừng lại trong 2 năm rưỡi cho tới khi mẹ tôi mất vì ung thư. Tôi  sụp đổ hoàn toàn- đại học không thành vấn đề, trình độ của tôi không thành vấn đề, tôi không có kế hoạch nào và tôi đã mất tất cả.

Sau khi mất một thời gian khá dài để ổn định lại cuộc sống, tôi bắt đầu suy nghĩ về việc trở thành Web Designer. Tôi đã làm điều này trong phần lớn cuộc đời của mình nhưng chưa bao giờ nghĩ rằng tôi nghĩ sẽ biến nó thành sự nghiệp thực sự. Vì vậy, tôi bắt đầu tham gia chương trình 2-năm, nơi tôi đã biết đến Manuel Matuzovic – người giáo viên đầu tiên cũng đồng thời là một người bạn, người cố vấn của tôi. Anh đặt ra thách thức cho tôi và nhận ra tham vọng muốn làm cho một cái gì đó của bản thân tôi.

Tôi đã làm việc trong vai trò developer toàn thời gian trong gần một năm và dưới đây là những bài học của tôi khi bắt đầu trở thành developer ở tuổi 30.

Mọi người đều còn quá trẻ!

Khi tôi làm dev lần đầu, tôi là Junior lớn tuổi nhất trong công ty. Đây là một kinh nghiệm rất kỳ quặc, đặc biệt là khi tôi đã từng nắm giữ các vị trí quản lý phụ trách hơn 60 người, trước khi chuyển sang làm developer.

Tôi luôn cảm thấy mình sẽ không bao giờ bắt kịp với các đồng nghiệp của mình những người đã dẫn trước tôi hang ngàn dặm. Cảm giác này kéo dài mãi cho tới khi tôi tìm thấy vị trí thích hợp dành cho mình, thứ tôi thực sự giỏi, cảm giác đó bắt đầu giảm dần từng chút một.

Vì vậy, lời khuyên của tôi là: Trở nên giỏi ở một cái gì đó bạn thích, sự tự tin đi kèm với thực hành.

Hội chứng Imposter là có thật

Bạn thật sự không thể lừa lọc trong ngành lập trình đâu. Gửi code đi để reviews là một cơn ác mộng với những người mắc chứng sợ hãi như tôi. Tôi liên tục cảm thấy như một kẻ thất bại hoàn toàn và không bao giờ có thể làm tốt hơn. Chìa khóa để khắc phục điều này là trò chuyện. Tôi nói chuyện với leader của mình về cảm giác bất an và mong nhận phản hồi của ông về khả năng học hỏi và chất lượng code của tôi. Tôi đặt câu hỏi khi tôi không hiểu điều gì đó và tiếp tục học hỏi từ anh ấy cũng như những người khác. Điều này thực hiện được vì tôi có một ông chủ tốt và những người đồng nghiệp tuyệt vời. Họ khiến tôi cảm nhận được sự tự tin mỗi lần đặt câu hỏi.

Tất cả là về vấn đề con người

Giống như bất kỳ công việc nào khác, việc trở thành một developer là câu chuyện xoay quanh con người. Đồng nghiệp, khách hàng, user của bạn.

Tôi đã gặp một số người tuyệt vời tại hội nghị công nghệ. Ngành công nghiệp này thực sự có một số nhân vật “đáng sợ” và tôi vẫn còn sợ cách họ đối xử với nhau. Tất nhiên, những điều không hay này xảy ra trong ngành công nghệ (cũng như trong các ngành công nghiệp khác) nhưng tôi cảm thấy như có một cuộc tranh luận ở đây và mọi người đều ý thức được những gì họ nói. Chúng ta có rất nhiều thứ để cải thiện và mọi người vẫn đang cố gắng.

Không dừng lại một cái nghề

Đối với tất cả các công việc khác, khi ngày làm việc kết thúc, tôi rời văn phòng trở về nhà để cố gắng và không nghĩ về công việc. Bây giờ, tôi thường không về nhà, mà đi thẳng đến những buổi meetup sau giờ làm vài lần một tuần. Vào cuối tuần tôi tham gia hackathons, các hội nghị hoặc các sự kiện.

Trở thành developer tích lũy được rất nhiều kinh nghiệm xã hội và công việc không dừng lại khi bạn rời khỏi văn phòng. Là developer có nghĩa là liên tục liên tục tìm hiểu, không ngừng học hỏi, tham gia các sự kiện, trau đổi với những developer khác, thử nghiệm, xây dựng, cố gắng, thất bại, sửa chữa và cải tiến.

Đây có thể là một thách thức lớn cho những người tham gia vào ngành công nghiệp khi lớn tuổi vì đa phần chúng tôi đã có gia đình và ít thời gian để tham dự các sự kiện. Những ngày đầu tôi gần như không thể cân bằng được giữa gia đình với công việc. Vì vậy tôi giới hạn mình chỉ tham dự 1-2 buổi họp mỗi tuần và dành thời gian cuối tuần cho chồng tôi và bạn bè

Được nói chuyện trước mọi người là niềm hạnh phúc

Tôi là người tham vọng, vì vậy việc tham gia vào lĩnh vực công nghệ là 1 thành công với tôi. Và mặc dù chưa bao giờ có kế hoạch để nói chuyện trước công chúng, tôi may mắn được trở thành một diễn giả công nghệ ở Vienna, tôi tham gia nói chuyện tại những buổi meetup và gần đây nhất là tại một cuộc hội thảo trước hơn 1000 người. Có thể nói về tuổi tác và kinh nghiệm không quan trọng bằng việc tôi được đứng trước mọi người và nói về những gì tôi thích. Tôi cũng đã bắt đầu giảng dạy những gì tôi biết cho người khác. Tôi tự hỏi rằng liệu mình có đủ tự tin để làm điều này lúc tôi 22

Vì vậy, sau tất cả, đó là một chuyến đi tuyệt vời và tôi mong muốn trải nghiệm nhiều hơn trong ngành công nghiệp này với tất cả những con người tuyệt vời và những điều tuyệt vời mà nó đã dạy tôi. Tôi liều lĩnh tham gia cuộc phiêu lưu mạo hiểm này và cho đến nay có vẻ như tôi đã quyết định đúng. Tôi thực sự biết ơn tất cả những người đã ủng hộ quyết định của mình, đặc biệt là chồng tôi.

Điều gì giữ tôi ở lại?

Hy vọng những buổi nói chuyện trước công chúng, những thách thức trong lập trình, các hội nghị lớn, những cái ôm từ những con người tuyệt vời và khả năng đạt được mục tiêu trong công việc là tổng hòa những điều giữ tôi lại với công việc này. Vì vậy, nếu bạn có ý định thay đổi công việc nhưng cảm thấy rằng mình quá già, hãy để tôi nói với bạn một điều: Bạn không bao giờ quá già để trở nên hạnh phúc và thành công, để tận hưởng công việc và để gặp những người mới qua công việc. Bạn xứng đáng được hạnh phúc và làm việc trong một lĩnh vực mà bản thân thật sự đâm mê. Chúc bạn may mắn!

Nguồn: blog.topdev.vn via hackernoon.com

Vì sao Higher Order Components lại quan trọng với sự phát triển của React?

Nếu mới làm quen với React, bạn hẳn đã nghe qua  “Higher Order Components” và “Container” component. Và tự hỏi rằng sao mọi người có vẻ quan tâm đến bọn này cũng như cách chúng hoạt động ra sao.

Là một nhân viên bảo trì cho Apollo’s React integration – Open source library nổi tiếng với High Order Components. Tôi cũng phải mất một thời gian mới có thể hiểu rõ về chúng.

Vì thế mà hi vọng bài viết này sẽ cung cấp thông tin hữu ích cho bạn về Higher Order Components

React re-primer

Đầu tiên, trước khi đọc bài viết này, bạn cần sẽ biết chút đỉnh về React. Nếu có thời gian thì hãy vào xem bài viết của Sacha Greif’s 5 React Concepts. Do tôi muốn giữ mọi thứ ngắn gọn cho dễ đọc nên sẽ chỉ tóm tắt vài điều bạn cần phải biết về React.

Một React Application bao gồm một set của components. Component là tập hợp các input properties (props) và cho ra HTML vốn được rendered lên màn hình hiển thị. Khi component’s props thay đổi thì nó sẽ  re-render và HTML cũng bị thay đổi.

Khi user tương tác với HTML thông qua một event gì đó như click chuột, component  sẽ xử lí quá trình trên nhờ vào callback prop để thay đổi internal state. Hành động trên cũng sẽ khiến cho các state re-render.

Điều đó còn được gọi là component lifecycle, khi component lần đầu tiên được render, và gắn vào DOM cũng như thông qua các props mới, etc.

Component’s render function giúp trả lại một hoặc nhiều component khác. Từ đó tạo ra một nhánh cây – view tree. Nói cách khác, khi tương tác diễn ra sẽ dẫn đến việc các component phản ứng theo trình tự và qui định.

React UI vs statefulness

Có lẽ giờ thì cách này đã trở nên lỗi thời nhưng hồi trước, mọi thứ đều được phân biệt một cách rõ ràng vào 3 nhóm Models, Views và Controllers. Nhiệm vụ của một View là render và xử lý tương tác của người dùng trong khi Controller sẽ chuẩn bị Data cần thiết.

Tuy nhiên,  nhiều developer bắt đầu dùng tới functional stateless components trên React. Chúng là các “pure” component chỉ thực hiện việc chuyển đổi props thành HTML và callback props dựa trên các tương tác của user đưa ra

function MyInput({ title, value, onValueChange }) {
  return (
    <div>
      <label>{title}</label>
      <input type="text" value={value} onChange={onValueChange} />
    </div>
  );
}

Nói cách khác bạn có thể xem chúng là functional, như vậy view tree cũng  được xem là một function khổng lồ dành riêng cho việc chuyển đổi Props thành HTML.

Một lợi thế nổi bật của functional stateless component là vì chúng rất dễ để test và đơn giản. Nói cách khác, nó dễ phát triển và check phát hiện bug nhanh chóng.

Thế nhưng không có nghĩa bạn sẽ luôn dùng tới chúng. Bởi UI cần có state, và như vậy bạn sẽ phải dùng tới class-based components. Vấn đề sẽ bắt đầu trở nên phức tạp hơn khi “global state” của UI dính dáng vào view tree.

Global State

Global state của UI là state không trực tiếp liên kết với chỉ duy nhất một component. Nó thông thường bao gồm 2 phần:

Phần data trong ứng dụng của bạn vốn đến từ server. Thông thường các thông tin này được sử dụng cho nhiều vị trí khác nhau chỉ không phải cho một component duy nhất.

Global UI state – ta thường gắn nó với component ở vị trí cao nhất trong app của bạn và cho phép các component cấp thấp sử dụng nó nếu cần. Và những thay đổi sẽ được đưa ngược lại lên state, quá trình này con được gọi callback.

Phương thức này lại không được tốt bởi do nó sẽ chở nên chậm chạp nhanh chóng. Đó là bởi vì component gốc cần biết và hiểu hết tất cả yêu cầu đưa ra của toàn bộ các thành viên trong view tree.

Containers và Presentational Components

Vấn đề trên thường sẽ được giải quyết bằng cho phép  component truy cập global state từ bất cứ đâu trong view tree.

Nói cách khác, ta sẽ chia component thành nhóm được phép kết nối với global state và nhóm không.

Các “pure” components thuộc nhóm không sẽ dễ hiểu và test hơn (đặc biệt nếu chúng là functional stateless component). Nói cách khác khi chúng trở thành “impure” – làm nhiều chức năng khác thì sẽ khó hơn cho việc phát triển và test chúng.

Vì thế mà ta sẽ chia những “impure” component đó thành 2 phần:

  • Container component: Chuyên làm những việc mờ ám cho global state
  • Presentational component: Không làm cho global state

Và giờ đây ta có thể xem các component này như “Pure” bởi ra chi cách những phần phải làm việc đen tối cho global state vào một container.

Container

Bạn sẽ thấy việc viết ra container rất là thú vị bởi dù nó thuộc component, thế nhưng lại chả giống gì bởi:

  • Lấy và đưa một phần của global state cho các component cần
  • Chạy one data-accessing query và đưa ra kết quả cho các component cấp thấp hơn

Nói khác, chỉ một phần của component mà container chỉ định sẽ được render, đồng thời các component đó cũng phải có liên kết với container.

Tổng quát hóa Container

Các container khác nhau tùy thuộc vào loại component mà chúng liên kết với và loại data mà chúng lấy từ global state. Trong Redux, một container sẽ như sau:

// This is a vastly simplified implementation of what a Redux container would do
class MyComponentContainer extends Component {
  mapStateToProps(state) {
    // this function is specific to this particular container
    return state.foo.bar;
  }

  render() {
    // This is how you get the current state from Redux,
    // and would be identical, no mater what mapStateToProps does
    const { state } = this.context.store.getState();
    
    const props = this.mapStateToProps(state);
    
    return <MyComponent {...this.props} {...props} />;
  }
}

Tuy rằng container này sẽ có hết mọi tính năng như một Redux container thực thụ, bạn cũng có thể thấy ngoài mapStateToPropsMyComponent, chúng ta phải ghi nhập mã lệnh mỗi khi viết một Redux-accessing container.

Cách tạo ra Container

Bạn sẽ ngạc nhiên khi biết rằng khá dễ để viết một function chuyên generate container component dựa trên những thông tin thích hợp.

function buildReduxContainer(ChildComponentClass, mapStateToProps) {
  return class Container extends Component {
    render() {
      const { state } = this.context.store.getState();

      const props = mapStateToProps(state);

      return <ChildComponentClass {...this.props} {...props} />;
    }
  }
}

Đó là Higher Order Component (HOC), một function chuyên lấy một component và các thông tin khác nhằm tạo ra container cho chính component đó.

Gọi là high order là bởi vì đây là function có cấp cao. Nói cách khác, bạn ó thể xem React Components như những function tạo ra UI. Không chỉ thể mà nó vẫn xài được cho functional stateless components và cả pure stateful presentational component.

Một số ví dụ cho HOC

Redux’s connect function có lẽ được biết đến nhiều nhất, `buildReduxContainer` function trong bài viết này chính là một phiên bản dỏm dựa trên nó.

React Router’s withRouter function với tính năng lấy router từ context để biến thành thành prop cho các component.

react-apollovới interface chính là graphql HOC, khi được cung cấp component và GraphQL query sẽ đưa ra kết quả dành cho query và component đó.

Custom HOCs

Viết ra một HOC là một chuyện rất dễ dàng và tôi khuyên các bạn nên đọc qua bài viết rất tổng quát của Fran Guijarro để hiểu thêm về cách thức làm.

Lời kết

Higher order component chính là trái tim của việc phân chia components theo function để giải quyết chúng. Ở các phiên bản của React trong quá khứ, ta phải dùng đến classes và mixins để reuse code, thế nhưng trong tương lai, higher order components sẽ ảnh hưởng mạnh mẽ hơn trong quá trình phát triển của React.

Nếu bạn lo lắng về sự phức tạp thì đừng lo bởi team phát triển React đã dày công nghiên cứu và cải thiện giúp cho chúng trở nên đơn giản hơn ngay cả cho cả người mới.

Tham khảo thêm vị trí tuyển dụng React hấp dẫn tại đây

Nguồn: Topdev via Medium

Câu trả lời đầy bất ngờ của Jack Ma cho thắc mắc “Học gì để kiếm được việc lương cao trong tương lai?”

“Một làn sóng mới đang đến. Con người sẽ bị đánh cắp hết việc làm. Tuy nhiên, những người bắt kịp với làn sóng này sẽ trở nên giàu có và thành công hơn”.

Jack Ma – nhà sáng lập tập đoàn thương mại điện tử hàng đầu thế giới Alibaba, đã nhìn thấy trước sự thay đổi lớn trong kỷ nguyên công nghệ toàn cầu. Trả lời phỏng vấn trên CNBC, vị tỷ phú này cho rằng trong 30 năm tới, trí thông minh nhân tạo (AI) sẽ vượt qua kiến thức của con người dẫn đến hệ quả là chúng ta sẽ dần mất hết việc làm vào tay robot.

“Một làn sóng mới đang đến. Con người sẽ bị đánh cắp hết việc làm. Tuy nhiên, những người bắt kịp với làn sóng này sẽ trở nên giàu có và thành công hơn”, Ma nói.

Ngược lại, đối với những người tụt hậu phía sau, chắc chắn tương lai sẽ rất “thảm khốc”.

Theo vị tỷ phú này, trung tâm của kỷ nguyên công nghệ đang phát triển như vũ bão chính là dữ liệu (data). Do đó, ông dự đoán trong tương lai, thị trường việc làm sẽ ưu tiên những kỹ năng liên quan đến dữ liệu và việc phân tích dữ liệu.

“Thế giới đang chuyển dần sang data hóa. Tôi nghĩ chúng ta đang sống trong giai đoạn khởi đầu của thời đại bùng nổ dữ liệu”, Jack Ma cho biết.

Là một trong những tập đoàn công nghệ hàng đầu thế giới, Alibaba nắm giữ khối lượng dữ liệu khách hàng khổng lồ. Rất nhiều người trong số đó ghé thăm website của Alibaba hàng trăm lần mỗi ngày. Chính điều này đã cho Jack Ma thấy bước chuyển biến trong một thập kỷ tiếp theo của thế giới.

“Chúng tôi nghĩ rằng dữ liệu sẽ trở thành một phần quan trọng trong cuộc sống của con người trong tương lai. Ngày mai, với sự trợ giúp của Internet, tất cả mọi thứ đều có thể kết nối với nhau”, người đứng đầu Alibaba chia sẻ.

Trải nghiệm công cụ tính lương gross to net chuẩn tại TopDev

Trên thực tế, Jack Ma không phải là nhà lãnh đạo duy nhất nhấn mạnh tầm quan trọng của kỹ năng phân tích dữ liệu. Elon Musk – CEO của Telsa và SpaceX cũng đang thực hiện một dự án liên kết não người với máy tính nhằm cải tiến tốc độ xử lý dữ liệu vốn đang “chậm chạp đến khó tin” của não người.

Nhà đồng sáng lập Microsoft Bill Gates cũng nói rằng khả năng khai thác thông tin sẽ giúp chuyển đổi vấn đề sức khỏe toàn cầu và ngăn chặn sự phát triển của nhiều dịch bệnh.

 Chủ tịch Eric Schmidt

Chủ tịch Eric Schmidt

Eric Schmidt – Chủ tịch Tập đoàn Alphabet (công ty mẹ của Google) và Jonathan Rosenberg – Cố vấn cấp cao cho CEO Larry Page đều đồng ý rằng phân tích dữ liệu là kỹ năng hàng đầu mà mọi sinh viên trẻ đều nên học.

“Phân tích dữ liệu, ý tôi là những kiến thức cơ bản về cách thức hoạt động của dữ liệu thống kê, hay cách mà mọi người đưa ra kết luận sau khi phân tích khối lượng dữ liệu lớn”, Schmidt nói.

“Tôi cho rằng kiến thức cơ bản về phân tích dữ liệu là cực kỳ quan trọng với thế hệ những người trẻ tiếp theo. Bởi đó chính là thế giới mà các bạn sắp bước vào”, Chủ tịch Alphabet nhấn mạnh.

Làm thế nào để tạo được app icon hoàn hảo?

Bạn chỉ có 24 chỗ cho app icon trên màn hình iPhone, hoặc 28 nếu là iPhone 7 nên việc tạo ra app icon hoàn hảo là một bước quan trọng để thu hút sự quan tâm của người dùng.

Tôi đã từng gặp 1 user để màn hình chính là các app icon gồm tất cả chữ cái trong bảng chữ cái, nhưng không phải ai cũng vậy. Đối với đa số người tải ứng dụng, app icon là nơi tiếp xúc đầu tiên giữa người dùng với ứng dụng mới. 

Nếu app icon xấu, người dùng sẽ xóa ứng dụng hoặc ẩn ứng dụng trong một thư mục ở nơi nào đó mà họ dễ dàng quên đi. Vậy có thể làm gì để đảm bảo rằng app icon của mình là “nữ hoàng của cuộc chơi” chứ không không phải là “cô gái nhút nhát”?

Tham khảo các việc làm lập trình App mới nhất trong tháng tại Topdev

Bám vào các màu phổ biến

Rất nhiều bài báo khoa học đã nghiên cứu ý nghĩa đằng sau việc chọn màu cho app icon của bạn. Thậm chí đã có người tạo ra biểu đồ các màu phổ biến nhất dùng cho app icon.

Biểu đồ này hàm chứa 2 ý nghĩa: sử dụng chủ yếu các màu như đỏ, xanh hoặc có thể là màu xanh lá cây cho app icon như 1 giải pháp khá an toàn. Mặt khác, bạn có thể chọn màu hồng, tím hoặc màu vàng để nổi bật hơn một chút.

Đương nhiên, mỗi lựa chọn đều có những ưu và nhược điểm riêng. Những gì an toàn và quen thuộc thì dễ bị quên lãng, trong khi việc phá vỡ khuôn khổ tiềm ẩn nguy cơ quá khác biệt và không hài hòa với những ứng dụng khác.

Sử dụng 1 kí tự (hoặc Không …)

Từ kí tự ‘F’ của Facebook và ‘H’ của Hotels.com chữ “D” trong Dailymotion và ‘S’ của Skype, không ít các app sử dụng chữ cái đầu tiên trong tên công ty cho ứng dụng của mình,

Đây chắc chắn là một giải pháp thông minh và đơn giản nhưng không phải là không có rủi ro nếu tên ứng dụng của bạn bắt đầu bằng một kí tự rất phổ biến.

Hãy suy nghĩ về các app trên thị trường, đặc biệt nếu bạn đang cạnh tranh trực tiếp với những ứng dụng đó. Hãy lựa chọn một hướng đi khác nếu không muốn bị nhầm lẫn hoặc thậm chí là đồng nhất với họ.

Có lẽ, sự gắn kết quá lâu của Skype với chữ ‘S’ trong hình ảnh đám mây, đã khiến Skyscanner đưa ra biểu tượng trừu tượng nhỏ gọn cho app icon của họ.

Sử dụng chữ cái là một sự lựa chọn rất an toàn, đặc biệt nếu logo ứng dụng có một phông chữ đặc biệt được liên quan đến nó.

Lấy ví dụ như kí tự  “F” của Facebook trở nên đặc biệt dễ nhận biết nhờ vào sự kết hợp giữa logo công ty với phiên bản sửa đổi của phông chữ Klavika Bold.

Nhưng dường như ngay cả Facebook cũng không thể quyết định xem chữ cái hay biểu tượng thì phù hợp nhất với app icon mà Facebook đang xây dựng. Tại sao người ta lại đưa tia chớp của Harry Potter trở thành icon Messenger thay vì sử dụng chữ ‘m’ trong đoạn thoại bong bóng?

Sử dụng sơ đồ phối màu tương tự

Điều tồi tệ hơn cả app icon xấu, đó là một biểu tượng ứng dụng đẹp nhưng chứa đựng nội dung không hấp dẫn và lỗi thời. Ấn tượng đầu tiên rất quan trọng, nhưng nếu bạn không thể đáp ứng được yêu cầu khách hàng đặt ra bạn sẽ thất bại.

Dưới đây là tip chỉ dẫn từ Dan Counsell –  người đã đưa ra các ví dụ về cách Ember và Clear giữ sự nhất quán từ khi mở ứng dụng tới lúc người dùng thực sự sử dụng nó:

Mặc dù vậy, điều này không có nghĩa rằng tất cả mọi thứ phải được thực hiện chính xác như nhau.

Chẳng hạn, Take Words With Friends đã bổ sung thêm một trái tim và cỏ ba lá vào biểu tượng ứng dụng cho Ngày Valentine và Ngày của Thánh Patrick. Đây chắc chắn là giải pháp rất phù hợp, miễn là người dùng cập nhật ứng dụng thường xuyên, kịp thời.

Và đây là kết quả:

Phản ánh mục đích của ứng dụng

Bạn có nhớ khi Instagram thay đổi biểu tượng?  Nhiều người không biết rằng Instagram đã có app icon trước khi thay đổi thành một cái máy ảnh màu nâu với dải cầu vồng mà mọi người đều biết và yêu thích.

Lý do đưa ra cho việc thay đổi logo đầu tiên: “Biểu tượng cũ không liên quan gì đến Instagram”. Với ý nghĩ đó, thật là dễ hiểu tại sao Instagram lại quyết định thay đổi bộ logo thành:

Biểu tượng máy ảnh nâu cổ điển gợi nhớ những bức hình được chụp bởi chiếc máy ảnh Polaroid, và không có liên quan gì đến tương lai của ngành nhiếp ảnh. Và với 80 triệu ảnh được chia sẻ mỗi ngày trên Instagram, đó là chính xác là những gì Instagram đã làm được – cho dù bạn thích hay không

Kết luận

Thật đáng thất vọng, nhưng như đã dự đoán, không có lựa chọn nào được đánh giá là tốt nhất để tạo ra một app icon hoàn hảo cả. 

Những lời khuyên trên tuy rất hữu ích, nhưng lại không hề đơn giản, như việc bạn cài đặt đồng hồ – ví dụ, 1 ứng dụng dành cho trẻ em hoặc thanh thiếu niên trông rất khác với ứng dụng dành cho doanh nhân hoặc người về hưu

Hầu hết các Founders, app creators… xây dựng sản phẩm hoặc ứng dụng để giải quyết một vấn đề gặp phải trong cuộc sống. Nói cách khác, bạn có thể trở thành đại diện tốt cho chính thị trường mục tiêu của bạn. Hãy suy nghĩ về các app icon mà bạn cảm thấy bị thu hút, hoặc ít nhất bạn cũng phải có tấm lý sẵn sàng để app icon trên màn hình chính của mình. Đó chính là cách xây dựng app icon thành công.

Và, thậm chí nếu bạn kết thúc với một app icon thực sự đáng thất vọng thì ít ra nó cũng có thể “nổi tiếng” trên Reddit.

Nguồn: blog.topdev.vn via medium.freecodecamp.com

SaaS rồi còn gì nữa?

Đó là vào một bữa sáng bình thường như mọi người tại San Francisco, Louis cảm thấy thật tự tin khi bước vào quán ăn ưa thích của mình để mua một cốc cafe. Anh dạo bước đi đến công ty của mình, ánh mặt trời rạng rỡ như đang chào đón anh. Tất cả bắt đầu từ căn hộ nhỏ bé của Louis, nơi anh và đồng nghiệp bỏ ra tới 3 tháng code để tạo ra Saas, và giúp cho công ty có nguồn thu nhập khủng lên tới $10M hàng năm.

Chỉ vài ngày sau đó (diễn ra vào tháng 2, 2016), giá cổ phiếu của SaaS giảm tới hơn 30%. Khiến cho một số công ty công nghệ như Tableau bị giảm giá trị tới hơn một nửa. Một phần nguyên nhân là do Linkedin liên kết với Microsoft. Buổi sáng thứ hai tiếp theo không còn ấm áp nữa, Louis phải che người với chiếc áo khoác của anh khi cơn gió lạnh như băng cứa vào người anh. Đó cũng là lúc Cloud 3.0 được tung ra.

SaaS đang dần chết đi

Cloud vốn luôn thân thiện đối với các doanh nhân, đặc biệt là sau khi Salesforce được khai sinh. Một môi trường vô cùng màu mỡ cho các công ty bởi dịch vụ tốt, set up dễ dàng, quản lí lại cực đơn giản. Sản phẩm làm ra được cải thiện nhanh chóng và làm hài lòng khách hàng.

Tuy nhiên như Gil Dibner đã nói – sự thành công của SaaS lại chính là nguyên nhân dẫn đến sự tàn lụi của chính nó:

Bởi tính sẵn có và áp dụng hàng loạt từ cloud-based (SaaS) technology  khiến cho việc tạo ra các software system cao cấp trở nên quá dễ dàng, nhanh chóng và rẻ đến mức khiến cho giá trị của chúng bị mất đi. Chính do việc software tràn lan đã khiến cho giá trị thu được từ software biến mất. Nói cách khác, khả năng viết và deploy code không còn là một giá trị cốt lõi nữa.

Jerry Chen, đến từ Greylock, cũng cho rằng các công ty công nghệ truyền thống đang bị biến mất nhanh chóng:

Trong thời đại của cloud và open source, việc kiếm tiền từ bán các sản phẩm software cao cấp có sử dụng cloud làm kênh phân phối trở nên khó khăn hơn bởi sự hiện diện của open source. Các công ty chỉ biết tập trung vào phát triển sản phẩm mà không quan tâm đến vấn đề của người dùng sẽ rất khó mà thành công được.  

Chính Louis và các doanh nhân khác đã không thấy được 2 vấn đề rất lớn đối với cách kinh doanh mới của họ: Chi phí cho Stacking Switching

Stacking

Các đế chế phần mềm trong quá khứ như Oracle, SAP, etc – có con đường phát triển rất dễ dàng: turn-key M&A. Họ mua những công ty phần mềm đang lên, cắt bớt quỹ tiền cho việc phát triển sản phẩm và sử dụng đội ngũ sale của mình để đẩy mạnh việc phân phối. Thế là chỉ trong một đêm, công ty với giá trị $10M sẽ tăng chóng mặt lên $50M hoặc $100M.

Thế nhưng giờ đây, với SaaS,software vẫn luôn được cải thiện, phát triển và quản lí bởi product và engineering teams. Giá trị của hợp đồng (tính theo tháng) sẽ bị giảm so với chi phí tìm kiếm khách hàng. Như vậy để có lời thì phải đầu tư rất nhiều, và chỉ có khách hàng lâu năm, hài lòng với sản phẩm mới sẵn sàng bỏ tiền ra mua.

Như vậy với SaaS, team phải nhỏ để tiền lãi được nhiều hoặc qui mô đủ lớn để có thể tạo ra tiền lời. Mọi thứ còn lại sẽ chỉ khiến cho bạn bị lỗ vốn.

Như vậy việc Stacking doanh thu không còn đơn giản như xưa nữa.

Switching

Các công ty SaaS sẽ luôn có khách hàng mới tìm đến, họ đều rất dễ tính, không phải tốn công sức để mồi chài thu hút. Tuy nhiên điều đó cũng đúng với các đối thủ của SaaS. Không những thế, nhiều công ty còn muốn việc khách hàng thay đổi lựa chọn dễ dàng hơn để họ có thể thu hút được nhiều người dùng tìm năng. Tuy nhiên điều đó càng khiến user thiếu đi sự trung thành đối với sản phẩm.

Peter cảm thấy vô cùng chán nản bởi các khách hàng không hề muốn sử dụng software của công ty bởi nó quá rắc rối và tốn công khi phải thay đổi một software. Do đó, Peter và team của mình đã tạo ra một phần mềm làm cầu nối để giúp cho việc switch sử dụng SaaS. Và khi developer được chạm vào nó, việc kết nối trao đổi ngay lập tức đạt tới một level hoàn toàn mới.

Sự thành công của SaaS lại chính là thứ đã giết chết nó bởi thời gian và chi phí bỏ ra để phát triển một software đã bị giảm đi rất nhiều. Khiến cho nhiều công ty như bị lạc vào vùng đất cằn cỗi, không đủ lớn để có thấy tạo ra lợi nhuận, cũng không có khả năng phát triển bởi quá nhiều đối thủ đến từ đủ các nhóm như cao cấp, trung cấp và bình dân.

Khi Google tung ra tool trợ giúp tạo ra ứng dụng, giúp cho việc thay thế và phát triển ứng dụng không còn là điều lạ lẫm nữa, chúng ta đều biết nó sẽ khiến bộ mặt của IT thay đổi hoàn toàn.

Bước vào thời đại của Cloud 3.0

Phiên bản tiếp theo của Cloud software sẽ châm ngòi nổ cho các nhà cung cấp đưa ra các offer mới. Tuy nhiên nó sẽ không còn giống như cũ – mà thay vào đó là các team phát triển nhỏ kèm theo các software đi kèm với nhiều dịch vụ kỹ lưỡng.

Sự khác biệt của các công ty dùng Cloud 3.0:

  • Kết nối từ mọi nơi: Chỉ với một click, bạn đã có thể kết nối với tất cả các platforms với những nguồn dữ liệu liên quan cũng như các tool vô cùng mạnh mẽ.
  • Open platform: APIs được phát triển hoàn thiện với đa dạng các function, kèm theo khả năng lưu trữ core data.
  • Programmatic: Không còn lo lắng về interfaces, dashboards hoặc logins

Giá trị cao (core value):

  • I: Best-in-Class – Lead Scoring
  • II: Connectivity Platform  – Segment, mParticle, Zapier
  • III: Solution Ecosystem – Cung cấp giải pháp cho các developer

Có lẽ sẽ không có gì đáng ngạc nhiên khi Salesforce —  công ty sáng lập ra “The Cloud”, sẽ trở thành kiểu mẫu cho các  công ty thế hệ tiếp theo bởi:

  • Nó là một lược đồ chuẩn cho CRM data
  • Dễ dàng tích hợp với hàng trăm giải pháp
  • Mối quan hệ với hàng nghìn nhà thầu chuyên gia trong phát triển software.

Tin rằng sự tiến hóa của ngành IT sẽ càng mạnh mẽ hơn khi mối quan hệ giữa các developer và nhà đầu tư ngày càng khăn khít hơn. Hãy tưởng tượng xem, hàng triệu công ty được trợ giúp bởi các nhà thầu và chuyên gia hàng đầu về giải pháp.

Các khách hàng của Louis bắt đầu muốn từ bỏ sản phẩm của công ty bởi mức giá không còn phù hợp. Đây cũng đánh dấu thời đại lụi tàn của SaaS khi số lượng các công ty phát triển ngày càng ít đi. Giờ đã xa rồi cái thời đại bỏ tiền đầu tư một cách mù quáng mà thay đó là sự phát triển giữa mối quan hệ các công ty và nhà đầu tư.

Vì thế các CEO hãy luôn tự hỏi bản thân về sản phẩm của mình. Nó đặc biệt ở điểm nào? Liệu có thích hợp với thị trường không? Làm cách nào để ngăn chặn việc copy sản phẩm của mình và bị bán ra với giá chỉ bằng 1/10 của thị trường? Có thể bạn và Louis  cũng đang trăn trở câu hỏi tương tự…..

Nguồn: blog.topdev.vn via hackernoon

Các kỹ thuật SEO tối thiểu mà Dev cần nắm vững trong lập trình Web 2024

Bài viết này được dịch từ nguồn http://qiita.com mà theo mình khá hữu ích đối với web developer muốn tối ưu hoá website (SEO) với các search engine (bộ máy tìm kiếm) như Google, Bing, …

Trong khi đang làm việc tại công ty Basic (1 công ty của Nhật hoạt động trong lĩnh vực Web & Media Marketing, vận hành 2 website ferretferretOne), tôi được giao nhiệm vụ tối ưu hoá công cụ tìm kiếm cho website phocase (1 website bán phụ kiện điện thoại), để hoàn thành công việc này tôi đã phải tìm hiểu và học thêm các kiến thức, tiện đây xin được tổng hợp lại và chia sẻ với các bạn những điều cần nhớ về SEO với vai trò là 1 kỹ sư.

TLDR; Bài viết này dành cho nhiều đối tượng nên tương đối dài, hãy chọn lọc các kiến thức cần thiết cho mình thôi nhé :v

★ Bạn có thể nhận được gì khi đọc bài viết này ?

  • Sự tương tác giữa các Marketer và Director trở nên dễ dàng hơn
  • Nhận biết các đoạn code mà vô tình làm giảm thứ hạng của website trên bộ máy tìm kiếm
  • Đề xuất các giải pháp SEO có thể thực hiện được ở phía Developer
  • Nắm bắt được bức tranh/bối cảnh SEO năm 2017

Nắm bắt chính xác tài liệu được Google chính thức công khai

Có thể tìm kiếm rất nhiều thông tin trên các trang web, nhưng tối thiểu thì hãy thực hiện những chính sách được Google đưa ra về rule của 1 website.

Search Engine Optimization Starter Guide

Ngoài ra bạn cũng có thể tìm hiểu thêm các thông tin tại website chính thức của Google: Official news on crawling and indexing sites for the Google index

Hãy tìm kiếm trong Search Console Help các từ khoá liên quan tới các công việc đã thực hiện từ trước, rất có thể bạn sẽ phát hiện ra những kỹ thuật bị bỏ sót mà mình không hề nghĩ tới.

Chẳng hạn nếu như bạn có sử dụng thẻ alt với ảnh trên website, thì tôi khuyên bạn nên thử tìm kiếm trong Search Console Help các ảnh đã được đánh tag trước đó.
Việc nhồi nhét quá nhiều keyword trong thẻ alt có thể khiến search engineer đưa vào danh sách spam, đây cũng có thể là cách để bạn phòng tránh việc đó.
Search Console Help

Chính sách của Google đối với Mobile Site

Mobile First Index (MFI)

Ngày 5/11/2016, Google chính thức công bố chính sách của mình đối với Mobile site: Mobile-first Indexing

Về cơ bản, cho tới thời điểm hiện tại ngoài rank được đánh cho các website hướng PC Desktop, Google còn bổ sung thêm rank cho các website chú trọng nội dung và thiết kế tới SP (Smart phone)

Ngày 5/4/2017, Tại hội nghị Next10x Conference, Các kỹ sư của Google đã chính thức công bố mục tiêu áp dụng vào trong năm nay, tuy nhiên chưa công bố chính thức khoảng thời gian.

  • Trước khi áp dụng MFI (Hiện tại)
    • PC Search: Hiển thị theo trình tự của rank cho nội dung PC site
    • SP Search: Hiển thị theo trình tự của rank cho nội dung PC site
  • Sau khi áp dụng MFI (Chưa xác định thời gian)
    • PC Search: Hiển thị theo trình tự chú trọng vào rank cho nội dung SP site (Không có nghĩa là không tính đến rank của PC site)
    • SP Search: Hiển thị theo trình tự của rank cho nội dung SP site

★ Các site có khả năng chịu ảnh hưởng:

  • Có sự khác biện lớn giữa phiên bản PC và SP
  • Còn nhiều thông tin tồn tại trên phiên bản cho PC nhưng lại ko có trên phiên bản SP
  • Đã hỗ trợ và có chiến lược SEO cho PC site nhưng lại chưa có cho SP site
  • Ngoài header vs footer ra, các nội dung chính là khác nhau
  • Cấu trúc HTML khác nhau
  • Tốc độ hiển thị cho SP site quá chậm

Mobile Friendly

Ngày 21/4/2015, Google công bố : thứ tự xuất hiện trên kết quả tìm kiếm có liên quan tới UI, UX trong trường hợp truy cập trang web trên Smart Phone Device
Rolling out the mobile-friendly update

Chỉ ảnh hưởng tới thứ tự xuất hiện kết quả tìm kiếm trên Mobile Device
Ảnh hưởng trong phạm vi toàn bộ các ngôn ngữ trên thế giới
Áp dụng cho các page riêng rẽ, chứ không phải toàn bộ trang web

Nếu như website đó không được coi là Mobile Friendly sẽ có thứ tự thấp và không được ưu tiên xuất hiện trên kết quả tìm kiếm. Điều này có tác động trực tiếp tới doanh thu của các website thương mại điện tử (EC site)

Sử dụng website sau, có thể kiểm tra tính thân thiện với thiết bị mobile của 1 trang web
Mobile Friendly Check

★ Các hạng mục cần kiểm tra

  • Font size có thích hợp (>= 16px) không?
  • Có sử dụng thẻ meta và chỉ định viewport cho mobile không?
  • Khoảng cách của các liên kết có bị quá hẹp không? (phòng ngừa lỗi)
  • Nội dung trang web có bị tràn ra ngoài màn hình không?
  • Website có được hiển thị trong vòng 3s không? (Nếu việc hiển thị tốn quá > 3s, thì 40% người dùng sẽ thoát trang web đó)

Đối với các website không thoả mãn tối thiểu các điều kiện trên sẽ có thể có có thứ hạng thấp trong kết quả tìm kiếm.

★ Mobile Friendly Support & Yêu cầu craw lại website

Bằng cách sử dụng GoogleSearchConsole, bạn có thể nắm rõ được chi tiết các thành phần trên website mình không thoả mãn các hạng mục kiểm tra phía trên.
Google Webmaster Home

Sau khi giải quyết các vấn đề trên, hãy gửi yêu cầu cho Google crawl lại các URL đó.
Chi tiết các bạn có thể tham khảo link sau về việc Yêu cầu Google crawl lại các URL

★ Các hạng mục để đánh giá về UX

  • First view của trang web sẽ được hiển thị trong vòng 1 giây (Google recommended)
  • Chuẩn bị riêng biệt kích thước hình ảnh với PC Site, để giảm dung lượng của một trang web
  • Sử dụng công cụ YUI Compressor và JSMin để rút ngắn đoạn code dài như thư viện
  • Thiết lập các nội dung có thể tab được lớn hơn 48px

Để xác nhận tốc độ hiển thị của web site, bạn có thể dụng công cụ: PageSpeed Insights

★ Chuyển tiếp quảng cáo

Đối với các quảng cáo chuyển tiếp thì đến khi hiển thị target page, thì hiển thị quảng cáo với link [Skip this page] giống như ảnh bên dưới, từ tháng 11 năm 2016 sẽ vi phạm điều luật của Google.

Quote: https://london3.jp/2014/12/skip/

★ Các tác động dẫn tới việc giảm thứ hạng rank

  • Nội dung chính nằm trong Popup (kể cả Modal)
  • Trước khi dẫn tới main content (nội dung chính) của website thì hiển thị quảng cáo giống trong ảnh trên
  • First view có chưa quảng cáo với kích thước lớn, nếu không scroll thì không thấy được nội dung chính

★ Các tác động không ảnh hưởng tới thứ hạng rank

  • Pop-up cấp quyền sử dụng Cookie
  • Các hiển thị như xác minh độ tuổi với cơ sở dựa vào pháp luật
  • Các page mà chỉ một bộ phận cụ thể người dùng được hiển thị, chẳng hạn như một trang đăng nhập.
  • Banner quảng cáo Pop-up mà không chiếm nhiều diện tích màn hình

Hơn nữa, trong cuộc đối thoại giữa Google với người sử dụng có câu hỏi:

Về nội dung Pop-up (Quảng cáo) thì, liệu có khả năng nội dung ẩn bên trong nó lại được Googlebot ưu tiên ko ?

Về phía Google đã trả lời là:「Chính xác là có khả năng đó」, như vậy thì việc hiển thị quảng cáo dù là = Pop-up hay Modal cũng là không nên.

Cài đặt XML Sitemap & Đăng ký RSS Feed

Công việc này đã được Google hướng dẫn rất chi tiết tại link sau:
Best practices for XML sitemaps & RSS/Atom feeds

RSS, Atom Register và PubSubHubbub(PuSH)

Được sử dụng như Sitemap, có format tương tự RSS và Atom trong RSS Reader.。

★ Lợi ích khi đăng ký Feed

  • Chỉ URL được cập nhật gần đây nhất được đăng ký.
  • Tần suất Crawl cao hơn Sitemap thông thường

Việc thông báo cho Google các Page được create/update gần đây nhất là một phương pháp sử dụng Feed có tần suất Crawl cao hơn một cách hiệu quả.

★ Thực hiện index theo thời gian thực dựa vào PubSubHubbub (PuSH)

Một cách để thực hiện index realtime khác đó là: Sử dụng phương thức PubSubHubbub (hay còn gọi là PuSH) giúp thông báo tới Google các thay đổi tại thời điểm mà các trang được update.

Danh sách các repository thực hiện việc implement PuSH được viết trên nhiều ngôn ngữ lập trình

Trường hợp code bằng PHP, có thể sử dụng file được Download từ thư viện sau đây:
pubsubhubbub-php-master/library/publisher.php

require_once './publisher.php' ;
$publisher = new Publisher('http://pubsubhubbub.appspot.com/');
$publisher->publish_update('http://example.com/article/1');

Đăng ký Sitemap

★ HTML Sitemap

  • Sitemap cho người sử dụng truy cập trang web
  • Thường xuyên quản lý để tránh các liên kết lỗi
  • Việc phân loại sẵn các Category giúp cải thiện khả năng sử dụng

★ XML Sitemap

Việc tạo sẵn một Sitemap có định dạng XML chính là công cụ đắc lực, trợ giúp Search Engine index website của bạn
Dưới đây là các loại Sitemap:

Loại File XML Vai trò
sitemap.xml Mô tả cấu trúc website, bao gồm cả mobile sitemap
movie.xml Hiển thị các nội dung video trong tìm kiếm
image.xml Hiển thị các nội dung ảnh trong tìm kiếm
news.xml Khai báo các tệp tin được gửi tới Google News
  • Với mỗi file XML được cài đặt chính xác, góp phần xúc tiến việc index website của bạn
  • Tuy nhiên nếu crawler không visit, chúng ta cần thực hiện cải thiện lại Sitemap đã tạo trước đó
  • Trên SP site việc giới hạn quyền truy cập webiste mobile trên device = .htaccess có thể khiến Search Engine Bot không vô được, vì vậy hãy cho phép Googlebot-Mobile có quyền truy cập.

Trong thực tế, đối với việc create/submit Sitemap chúng ta có thể tham khảo thêm tại link Build and submit a sitemap , có hướng dẫn chi tiết các loại tool giúp tạo và test sitemap, rất tiện lợi.

★ Video, Image Sitemap

Việc Crawler thu thập thông tin tìm kiếm liên quan tới Video và Ảnh là tương đối khó khăn, do đó chúng ta cần sử dụng Sitemap chuyên dụng có chứa thông tin cho Video và Image.
Về cách create thì bạn có thể tạo file XML chỉ chứa các video và ảnh mới tạo hoặc bổ sung chúng vào 1 file XML đã tồn tại đều ok, tuy nhiên hãy thiết lập một sitemap chứa nhiều thông tin.
Sitemap Protocol : Video extension, Title, Duration, Description

Hơn nữa, bằng cách sử dụng Video Sitemap, khi tiến hành tìm kiếm Video lẫn Image trong Search Engine, Video có thể được tìm thấy trong kết quả.
Ví dụ file movie.xml như sau:

xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"

Khi vận hành 1 EC site (Website thương mại điện tử) sử dụng Image Sitemap, doanh nghiệp có thể thu hút và tiếp cận được đối tượng người dùng tìm kiếm sản phẩm muốn mua bằng ảnh trên máy tìm kiếm.

Những điều cần lưu ý khi sử dụng tag HTML

【Title】

Trong SEO, thẻ Title là một trong số những thẻ tag có tầm ảnh hưởng nhất, Trong 1 page chỉ được có 1 thẻ title trong head tag.
index.html

<head>
    <title>Page title</title>
</head>
  • Nếu trong thẻ title có từ khóa tìm kiếm của user sẽ được bôi đậm trên kết quả tìm kiếm
  • Mỗi Page nên có 1 thẻ title với nội dung khác nhau
  • Trên kết quả tìm kiếm của Search Engine sẽ chỉ hiển thị tối đa ~32 ký tự trong nội dung của thẻ title
  • Nếu trong thẻ title có chứa các từ khóa không cần thiết sẽ làm giảm trọng số của từ khóa mong muốn được tìm kiếm
  • Nên lựa chọn nội dung của thẻ title sao cho dựa vào đó có thể đoán được phần nào nội dung của web page

Cần lưu ý rằng trên Search Engine sẽ chỉ hiển thị khoảng 32 ký tự cho tiêu đề (title) của 1 website, và thậm chí là 24 ký tự khi người dùng tìm kiếm trên thiết bị di dộng.
Nếu đặt tiêu đề cho page không liên quan tới nội dung của page sẽ làm giảm lượng người dùng truy cập, dẫn tới rank website bị giảm. Cho dù người dùng có truy cập vào nhưng do nội dung chính và tiêu đề không giống nhau, họ sẽ mau chóng rời đi -> tỷ lệ bounce rate sẽ ngày càng tăng.

【Description】

Trước tiên khi thiết lập Description, nội dung hiển thị trên search engine sẽ thay đổi tại đây:

Việc thêm mô tả cho nội dung mà người dùng mong muốn tìm kiếm, góp phần làm tăng tỷ lệ click rate trên search result.
Tuy nhiên nếu xét về mức độ ảnh hưởng về ranking trong thứ hạng xuất hiện trên Search Engine thì có vẻ là không lớn lắm.

Hơn nữa ở thời điểm hiện tại dù không có mô tả rõ ràng cho page thì Google cũng hiện thị Description mà nó tự động tạo ra cho web page.

Dựa vào các mô tả mà Google tự động sinh ra cho trang web, với các trường hợp đưa ra Description phán đoán chính xác thông tin trên website:

  • Khuyến khích để Google tự động tạo description cho web page
  • Các page khác nhau phải có nội dung khác nhau
  • Nội dung description cần nhất quán với title tag
  • Trên search engine chỉ hiển thị khoảng 124 ký tự cho phần description
  • Khi tìm kiếm bằng thiết bị di động thì chỉ hiển thị khoảng 80 ký tự cho phần description
  • Không bắt buộc văn phong phải chính xác tuy nhiên nội dung của tag phải rõ ràng, chuẩn xác.

Bạn có thể sử dụng tool sau để đánh giá description trên 1 web page: http://seolaboratory.jp/description/

【h1】

Do việc lạm dụng thẻ h1 quá nhiều dẫn tới Google đã hạ chỉ số đánh giá của nó, tuy nhiên do vẫn còn xuất hiện trên kết quả tìm kiếm, nên đối với SEO vẫn còn khá quan trọng.

  • Mỗi page chỉ nên có 1 thẻ h1
  • Mặc dù Google có công bố chính thức rằng có thể thiết lập nhiều thẻ h1, tuy nhiên nếu làm vậy sẽ gây khó khăn cho việc nhận biết chủ đề của nội dung web page
  • Có thể thiết thể ảnh bên trong thẻ tag h1

/iphone6/?color="white"

<h1>
  <img src="/images/iphone6_white.jpg" alt="Danh sách bao da cho điện thoại iPhone 6 được nữ giới ưa chuộm" />
</h1>

Với cách đặt ảnh như trên thì nó cũng được nhận diện như 1 phần của h1 tag, do đó hãy mô tả chính xác ảnh bằng cách thêm nội dung vào thuộc tính alt (văn bản thay thế).

★ Keyword truyền tải bởi TDH (Title Description H1)

Nếu bạn đặt từ khóa mình muốn SEO trong tất cả các thẻ TDH(Title Description H1)sẽ là cách đầu tiên giúp Google nhận biết chính xác từ khóa cần SEO.
Do đó, cần xem xét 3 thẻ trên có chứa từ khóa mình cần lên top không?

Lưu ý với thẻ【img】và thuộc tính 【alt】

Bằng cách sử dụng thuộc tính alt mô tả nội dung trong ảnh và video, thì người khiếm thị (Sử dụng tính năng đọc văn bản) hoặc người dùng có tốc độ mạng internet chậm cũng có thể dễ dàng nhận được thông tin về website của bạn, điều này được Google đánh giá rất cao.

Tham khảo source code bên dưới về Google Search Console
Nguồn: https://support.google.com/webmasters/answer/114016?hl=vi

  • Cách sử dụng không tốt thẻ img với thuộc tínhalt
<img src="puppy.jpg" alt=""/>

<img src="puppy.jpg" alt="puppy dog baby 
dog pup pups puppies doggies pups litter puppies dog retriever 
 labrador wolfhound setter pointer puppy jack russell terrier 
puppies dog food cheap dogfood puppy food"/>

Việc nhồi nhét quá nhiều từ khóa vào thuộc tính alt dẫn tới việc bị google nhận diện thành Spam content.

  • Cách sử dụng tối ưu thẻ img với thuộc tínhalt
<img src="puppy.jpg" alt="puppy"/>

<img src="puppy.jpg" alt="Dalmatian puppy playing fetch">

Nếu có thể thì tốt nhất hãy mô tả bằng câu văn thay vì chỉ sử dụng 1 từ khóa cho các img tag.

★ Các hạng mục khác được khuyến khi khi sử dụng thẻ 【img】 (Không bắt buộc)

  • Thống nhất file name và nội dung thuộc tính alt
  • Có thể thiết lập nội dung trong alt mà không có khoảng trắng
  • Cố gắng thiết lập mô tả cho ảnh sao cho gần với nội dung trong bức ảnh đó nhất có thể
  • Các ảnh tương tự nhau thì nên để trong cùng 1 thư mục host
  • Nếu một ảnh giống nhau được sử dụng ở nhiều nơi, thì hãy mô tả thật chi tiết ảnh đó trên website của mình, khi đó Google sẽ nhận diện ảnh của site bạn là original image, và hiển thị trên search result !

★ Khả năng index và thu thập dữ liệu ở cùng thời điểm

【Khả năng thu thập dữ liệu】
Để crawler của GoogleBot dễ dàng thu thập dữ liệu, chúng ta cần

  • Cấu trúc, sử dụng thẻ HTML phải đúng chuẩn
  • Với các page có nội dung liên quan cần có liên kết tới nhau, để đảm bảo khả năng crawler trải dài trên toàn bộ website

【Khả năng index – đánh chỉ mục tìm kiếm】
Nếu đã chuẩn bị sẵn các thuộc tính alt cho ảnh, âm thanh, video trên website của mình thì khi GoogleBot crawl sẽ index được chính xác nội dung của chúng.

【a】tag

Hãy thiết lập chuẩn xác anchor link (text), việc này sẽ giúp truyền tải thông tin tới Google dễ dàng hơn.

Các implement có thể ảnh hưởng tới khả năng crawler

  • Sử dụng javascript để di chuyển tới link cần vô (Google có khả năng nhận biết điều đó)
  • Tìm kiếm bên trong website bằng cách gửi form
  • Link content sử dụng FLASH

【rel=”next” or “prev”】

Khi thiết lập Pagination cho website cần chỉ định thuộc tính rel với giá trị next hoặc prev

★ rel=”prev/next” được xếp hạng ưu tiên hơn rel=”canonical”

Ví dụ vể rel="canonical" cho mọi người dễ hiểu

<link rel="canonical" href="http://example.com/wordpress/seo-plugin/">

Cho dù bạn có để link trên các page 2, 3, 4 về page 1 bằng thuộc tính canonical, thì nextprev vẫn được đánh giá ưu tiên hơn canonical, do đó với các URL không có parameter giống nhau như bên dưới sẽ không được tính là nextprev.

  • Ví dụ chưa tối ưu
http://example.com/iphone7?page=1
http://example.com/iphone7?color=red&page=2
http://example.com/iphone7?page=3
http://example.com/iphone7?page=4
  • Ví dụ tối ưu: được tính là nextprev
// page=
http://example.com/iphone7?color=red&page=1
http://example.com/iphone7?color=red&page=2
http://example.com/iphone7?color=red&page=3
http://example.com/iphone7?color=red&page=4

// viết tắt p=
http://example.com/foo.html
http://example.com/foo.html?p=2
http://example.com/foo.html?p=3

// Sử dụng URL path thay thế cho param page
http://example.com/foo/1/
http://example.com/foo/2/
http://example.com/foo/3/

★ Các điểm cần lưu ý

  • 1 page chỉ được phép có 1 next và 1 prev
  • Absolute path thì ngon hơn Relative path URL (Không bắt buộc)
  • Trường hợp hiển thị kết quả tìm kiếm của 1 page có sử dụng điều kiện filter, thì ở trong trang điều kiện đó cũng cần bổ sung thuốc tính nextprev
  • Nếu bạn không muốn hiển thị một page trên kết quả tìm kiếm, hãy học cách sử dụng canonical

【rel=”nofollow”】

Với các target link có gắn thuộc tính rel="nofollow" sẽ không được search engine visit. Thuộc tính này xuất hiện ở thẻ meta và thẻ a.
Hơn nữa, khi GoogleBot visit target link, nó cũng tính toán độ tin cậy của các target link trên website và đánh giá thứ hạng site đó.

  • Các bảng tin và ô comment có thể được người dùng nhập
  • Liên kết tới bookmark site
  • Liên kết tới ranking site
  • Liên kết khi nhận được đánh giá bằng tiền
  • powerd by... link

★ Các liên kết có thể gây ảnh hướng xấu tới website cần lưu ý

  • Các link mà người dùng không nhìn thấy, bị ẩn đi cũng như không click được
  • Liên kết qua lại bằng các trang web hỗ trợ liên kết lẫn nhau
  • Các liên kết đến các trang web được Google xác định là có mã nguồn độc hại

Sử dụng【robots.txt】để không bị crawl thừa

Nếu không muốn search engin crawl trong những trường hợp dưới đây, hãy thiết lập file robot.txt

  • Các web page có chất lượng thấp, các web page không muốn xuất hiện trên kết quả tìm kiếm

File robots.txt được đặt ở thư mục gốc (root directory) của website, Các Bot search engine sẽ tự động đọc và lấy ra.

Ví dụ về nội dung file robots.txt

User-Agent: *
Disallow: /*/matome/
Disallow: /ajax/*.json
Disallow: /image/
Disallow: /search

Hơn nữa Google cũng hỗ trợ tool kiểm tra file robots.txt : Google robots.txt Tester

【rel=”noindex”】

Hãy sử dụng nó khi bạn có chủ ý muốn 1 page nào đó trên website của mình không xuất hiện trên kết quả tìm kiếm của Google.

★ Điểm khác biệt với robots.txt

Sử dụng robots.txt đồng nghĩa với việc không cho Bot Search Enginer thu thập dữ liệu cũng như xếp hạng page đó.

Trong khi sử dụng noindex thì sau một thời điểm nào đó khi link tới website của bạn được share nhiều trên mạng xã hội, thì SEO rank vẫn còn và link tới web page đó vẫn được xếp hạng.

★ Mục đích chính của việc sử dụng “noindex”

  • Với các page chất lượng thấp, nếu có gắn thuộc tính noindex sẽ ko bị xếp hạng thấp website
  • Support các page chưa được setting trong robots.txt cho tới thời điểm hiện tại
  • 404 Page (Thiết lập ở các page trả về status lỗi 404)

Cách thức setting:

<meta name=”robots” content=”noindex”>

★ Cách kiểm tra tình trạng index của một website

Có thể dùng Google Search Console – Index Status
image

Hiển thị Rich snippets

Rich Snippets là đoạn thông tin đặc biệt dùng để hiển thị các thông tin thêm có trong những bài viết đặc biệt (bài đánh giá, sản phẩm, ứng dụng, công thức nấu ăn, địa chỉ công ty..v.v..) trên các máy tìm kiếm (Google, Yahoo, Bing) nhằm cung cấp thêm những thông tin giá trị đến người tìm kiếm giúp họ xác định kết quả tìm kiếm mà họ đang cần. Nhìn vào kết quả tìm kiếm sau, ta thấy có một điều rất đặc biệt: Xuất hiện ảnh thumbnail trong kết quả :v

Rich Snippets có 10 loại phổ biến sau:

  • Author
  • Breadcrumbs
  • Event
  • Organizations
  • People
  • Products
  • Recipes
  • Review
  • Software Application
  • Facebook Share

Việc sử dụng các markup bằng cấu trúc được công bố trên schema.org sẽ làm tăng khả năng hiển thị rich snippet trên kết quả tìm kiếm của google.
Hiện tại thì rich snippet không ảnh hưởng tới rank của 1 website, tuy nhiên có thể ảnh hưởng tới thứ hạng trong kết quả tìm kiếm: Google Webmaster Central office-hours hangout

Ví dụ về 1 page có hiển thị snippets

<section itemscope itemtype="http://schema.org/Game">
    <h1>Monster Hunter Game Series</h1>
    <span itemprop="name">Monster Hunter Double Cross</span>
    <p itemprop="description">Latest Monhan Series with 6 large main Monsters</p>
    <div itemprop="author" itemscope itemtype="http://schema.org/Corporation">
    <p itemprop="name">CONAMI</p>
    <p itemprop="email">example@conamikan.jp</p>
    </div>
</section>

Những lưu ý về URL (Đường dẫn)

【Soft 404】

Tình trang một page có status=200 nhưng nội dung page đó lại cho biết URL này không tồn tại được gọi là soft 404

Chi tiết thêm về lỗi này bạn có thể tham khảo tại đây: https://support.google.com/webmasters/answer/181708?hl=vi

Sử dụng Google Search Console, để dễ dàng confirm lại các page dính lỗi soft 404

Gần đây Google Bot có khả năng phân biệt được lỗi soft 404, nên sẽ ko có hình phạt nào được áp dụng với site dính lỗi này.

  • Trả về status code = 404 khi có lỗi trong CakePHP
throw new NotFoundException();

Ngoài ra, bạn có thể tìm hiểu thêm về lỗi soft 404 ở đây: https://www.suzukikenichi.com/blog/does-google-penalize-your-site-for-having-soft-404/

Chuẩn hóa URL

Việc hiển thị 1 web page có nội dung giống nhau nhưng với nhiều URL khác nhau trên trình duyệt xảy ra khá phổ biến. Tuy nhiên, nếu việc này xảy ra với Google search engine thì có thể website của bạn sẽ bị áp dụng các hình phạt làm giảm thứ hạng tìm kiếm. Chính vì lẽ đó chúng ta cần chuẩn hóa lại URL.

★ Các lợi ích có được khi quy chuẩn hóa đường dẫn

Giả sử: Việc url một website có chứa www và ko chưa www được coi là các page khác nhau
Vấn đề: Lúc này việc đánh giá rank cho website bị phân tán giữa các link có và ko có www
Hướng giải quyết: Có thể chuyển hướng (301 redirect) các page có www sang page ko có www

★ 301 Redirect

  • Wiki: List of HTTP status codes
  • Khi thay đổi tên miền/url, hãy sử dụng chuyển hướng 301 sang đường dẫn mới
  • Từ sau khi thiết lập 301 Redirect, có thể mất tới một tháng đẻ Bot Search crawl lại website

★ Ví dụ sử dụng 301 Redirect

  • Sử dụng 301 Redirect trong việc có và không có www trên URL
  • Loại bỏ việc thêm index.html vào sau URL
  • Trường hợp Pagination /search/?page=1 và /search/ hiển thị nội dung giống nhau
  • Trường hợp có và ko có dấu slash (/) sau URL. Ex: /search/ và /search

Lưu ý khi code: tùy vào chức năng của trình duyệt web, nếu thực hiện điều hướng 301 từ 1 URL tới 1 URL nhất định thì việc di chuyển page này sẽ được lưu vào cache cho tới khi trình duyệt xóa nó đi.

【Canonical】

Cùng một nội dung tương tự nhau (Có thể là 1 bài viết được chia làm nhiều phần), thì không chỉ người dùng mà Google Bot cũng muốn biết bài viết nào là bài viết gốc, câu trả lời cho vấn đề này chính là thuộc tính rel=”canonical”.

Mặt khác chắc hẳn bạn cũng gặp phải trường hợp Single Page và Search Page có chứa 1 lượng lớn nội dung trùng lặp. Nhờ việc thiết lập canonical cho 1 page, mà ta có thể ngăn ngừa được việc Google đánh tụt thứ hạng tìm kiếm từ nội dung bị trùng lặp

  • Ví dụ khi website có 2 phiên bản cho Desktop và Mobile:
<head>
  ...
  <link rel="canonical" href="http://www.example.com/" />
  ...
</head>

Ngoài canonical, còn có thể sử dụng đồng thời với alternate được giải thích chi tiết bên dưới.

★ Ví dụ về sử dụng Canonical

  • Trên kết quả tìm kiếm xuất hiện nhiều page có content giống nhau
  • Mobile page và Desktop page có nội dung tương tự nhau
  • Thiết lập URL để Google Analytics tiến hành đo lường các thông số
  • Khi công khai cùng 1 nội dung trên nhiều website
  • Trường hợp không sử dụng 301 redirect
  • Trường hợp sử dụng mirror site để giảm tải cho web/detect DDOS. (Tuyên nhiên việc này ko được khuyến khích sử dụng vì dễ bị nhận diện là spam)

【Alternate】

Thẻ alternate được khuyến khích sử dụng khi bạn có :

  • Một phiên bản website được phiên dịch hoàn toàn sang một ngôn ngữ khác
  • 2 trang với cấu trúc, nội dung tương tự nhau và chỉ có một vài điểm nhấn khác biệt về ngôn ngữ trong nội dung

Ví dụ:

  • Website example.com
<head>
  ...
  <link rel="alternate" href="http://sp.example.com/" />
  ...
</head>
  • Khi sử dụng alternate, chúng ta thông báo cho Bot biết website cho smart phone là sp.example.com.
  • Khi sử dụng canonical, chúng ta thông báo cho Bot biết phiên bản website chính thức của hệ thống là example.com
  • Website sp.example.com
<head>
  ...
  <link rel="canonical" href="http://example.com/" />
  ...
</head>

canonical dùng để thông báo với Search Engine đâu là page gốc (original page). Có thể ví như quan hệ n:1
alternate trở thành quan hệ 1:1 khi cùng tham chiếu tới canonicalalternate

Thuộc tính canonicalalternate trên website https://ferret-plus.com/1426 đã giúp Bot Search Engine biết được phiên bản nào là website dành cho thiết bị di động.

Cloaking

Cloaking là sự che đậy hay che dấu một cái gì đó. Trong kỹ thuật SEO thì cloaking ám chỉ hành động của webmaster che dấu bot của search engine như Google crawl các nội dung mà người dùng nhìn thấy, đồng thời đề xuất cho các cậu Bot nhìn thấy các nội dung được Onpage optimize tốt nhằm mục đích đạt được các vị trí cao trên Search Engine.

  • Việc tồn tại các thông tin trên website mà hiển thị giữa GoogleBot và người sử dụng khác biệt nhau sẽ ảnh hưởng tới thứ hạng hiển thị của website trên kết quả tìm kiếm. (Website có hành vi này sẽ bị google áp dụng các hình phạt)
  • Website khi truy cập = PC hiện ra thông báo「Hãy truy cập bằng smart phone」, dù cho khi User-Agent là smart phone truy cập có hiển thị chính xác đi chăng nữa cũng rất có thể bị Google hiểu là Cloaking ???
  • Website ở tình trạng bị hack cũng có thể bị đưa vào trạng thái Cloaking, hãy thường xuyên quan sát log để tìm ra các hành động khả nghi và tiến hành deploy lại nếu cần.

Đánh giá độ ổn định của URL

Các bộ máy tìm kiếm có tiêu chí để xếp hạng URL là: URL đã cung cấp thông tin cho người sử dụng trong một thời gian dài bao lâu?.
Do đó khi bạn thay đổi URL, sử dụng 301 Redirect thì cũng ko có gì đảm bảo là toàn bộ ranking của URL trên site cũ sẽ được chuyển hết sang URL site mới.

★ Các hạng mục cần kiểm tra khi thiết kế URL

  • Có chứa ext của file như .php hay không ? Việc này sẽ gây ảnh hưởng nếu chuyển framework ví dụ từ CakePHP sang Rails chẳng hạn.
  • Có thể dùng dấu hoặc _ trong URL, tuy nhiên Google khuyến khích sử dụng dấu để phân tách từ khóa
  • Toàn bộ ký tự trong URL phải được viết thường
  • URL dài cũng không vấn đề (Sẽ giải thích sau)
  • URL không nên chia quá nhiều cấp, nằm sâu trong nhiều directory
  • Chứa từ khóa thì càng tốt (Có thể chứa tiếng Nhật)
  • URL không die cho dù sau này có áp dùng nhiều thay đổi SEO đi chăng nữa
  • Không sinh ra duplicated content

★ Đảm bảo việc thiết kế URL không sinh ra nội dung trùng lặp

Web Page bên dưới sinh ra nội dung trùng lặp, dó đó kiểu thiết kế URL này không được khuyến khích
Ví dụ:Anime Home Page

  • Hero list page
  • All characters list page

Khi đó giả sử ta có nhân vật tên là “yamada”, khi đó nội dung 2 trang sau là giống nhau và đều mô tả về “yamada”

  • heros/yamada.html
  • characters/yamada.html

Cùng 1 nội dung nhưng lại khác URL là một thiết kế tồi và bị xếp vào duplicated content.

URL dài cũng không vấn đề

Theo Google công bố thì độ dài của URL có thể ngắn hoặc dài tùy ý

Độ dài của URL thì không ảnh hưởng tới ranking
Tuy nhiên cần đủ để nhận diện được URL

Mặc dù không ảnh hưởng tới SEO, tuy nhiên trình duyệt IE chỉ support URL có độ dài tối đa 2083 ký tự, nên hãy setting URL length <= 2083

★ Các khuyến khích về URL:

  • Vì URL là thứ hiển thị trên kết quả search, nên hãy chọn các từ đơn trong URL có liên quan tới nội dung bài viết
  • Khi URL có chứa từ ngữ trùng với từ khóa mà user search thì sẽ được bôi đậm trên kết quả
  • Search engine sử dụng dấu “” để tách từ, nên URL cũng nên sử dụng dấu “” để ngăn cách các từ khóa trong nó.

Mặt khác việc sử dụng quá nhiều GET parameter như ?color=2 trong URL có thể khiến URL khó nhớ, dễ nhầm lẫn, và khó chia sẻ. Dẫn tới việc truy cập phải URL không chính xác nếu không đủ parameter.

Cấu trúc liên kết cần được chú trọng hơn cấu trúc thư mục

Chúng ta có 2 đường dẫn sau:

https://viblo.asia/cau-truc-duong-dan-nao-tot-cho-seo-file-name-hay-thu-muc.html
https://viblo.asia/seo/seo-onpage/cau-truc-duong-dan-nao-tot-cho-seo-file-name-hay-thu-muc.html

Như bạn đã biết, hai đường dẫn trên đều là 2 đường dẫn tối ưu cho SEO. Đường dẫn thứ nhất là đường dẫn kiểu file name và đường dẫn thứ hai là đường dẫn theo kiểu thư mục. Câu hỏi đặt ra ở đây là đường dẫn nào tốt hơn?

★ Nếu cấu trúc thư mục quá sâu có thể khiến Bot ko crawl được

Tham khảo link : https://support.google.com/webmasters/answer/156184?hl=vi
Google Bot sẽ crawl theo thứ tự từ nông tới sâu, dó đó URL ở các cấp sâu mà không được liên kết tới bởi page nào trong site có thể rơi vào tình trạng được crawl chậm và không được đánh index.
Với tư cách là developer, bạn đừng quên tạo các link trong site internal liên kết tới các page quan trọng của site.

Lưu ý: Việc tạo cấu trúc thư mục đơn giản chỉ giúp cho Google Bot crawl dễ dàng hơn chứ không ảnh hưởng tới thứ hạng trên Search Result.

★ Cấu trúc liên kết ảnh hưởng tới SEO

Cấu trúc liên kết được tóm gọn trong câu sau: “Khi bạn click vào liên kết bao nhiêu lần cũng vẫn access được page đó”.

Cấu trúc link nếu vượt quá 5 cấp có thể khiến Google index chậm. Về cơ bản chỉ nên setting dưới 4 cấp đổ lại.

Tham khảo: http://s-supporter.hatenablog.jp/entry/seo-difference-of-the-hierarchy#ディレクトリ階層とリンク階層の違い

Lưu ý khi thêm Parameter vào URL

Theo kỹ sư John Muelle từ Google thì việc thêm params vào URL của các dynamic page để dễ dàng thay đổi nội dung được khuyến khích.

Just wanted to add that from Google’s point of view, the clean, parameterized URL is generally preferred to any unnecessary URL-rewriting. If you want a nice-looking URL-line in search, use breadcrumb markup instead.

Tuy nhiên trên kết quả search thì với những page động sử dụng params để thay đổi nội dung cần thiết lập thêm Canonical để tránh xảy ra hiện tượng duplicated content.

Dùng GET params sẽ làm giảm index

Việc sử dụng quá nhiều GET params có thể làm khả năng index giảm đi, do đó cần tránh thêm quá nhiều param là URL quá dài, hoặc thực hiển chuyển đổi url động sang url tĩnh với param ngắn hơn.

★ Chuyển đối URL tĩnh

Việc chuyển đổi URL động sang tĩnh có thể hiểu đơn giản như sau: loại bỏ bớt GET params, chuyển nó vào path của URL

Ví dụ:
Ta có 1 URL khá dài với 3 GET params

https://phocase.jp/iphone7/?color=3&material=3&category=cute

Ta sẽ đưa category vào path của URL, lúc này số lượng params chỉ còn là 2

https://phocase.jp/iphone7/cute/?color=3&material=3

★ Các điểm cần lưu ý khi chuyển đổi sang URL tĩnh

  • Loại bỏ các params không cần thiết
  • Không quản lý param theo session ID
  • Thực hiển chuyển đổi các params có thẻ đưa vào URL path
  • Không nên đưa quá nhiều param vào URL path dẫn tới URL quá dài, giảm khả năng index cũng như crawl
  • URL càng có ý nghĩa càng tốt

★ Các thức đơn giản để thực chuyển đổi tĩnh

Để chuyển đổi sang URL tĩnh có thể implement lại routing của system, tuy nhiên cách đơn giản nhất là thiết lập lại file .htaccess

RewriteEngine On

RewriteRule http://phocase.jp/([0-9]+)/$ http://phocase.jp/?color=$1 [L,NC]

How To Create Temporary and Permanent Redirects with Apache and Nginx

Các điểm cần lưu ý với Site content

Theo nguồn tin chính thức từ Google thì việc 1 website có quá nhiều page không được chú trọng vào nội dung sẽ được coi là 1 website vô nghĩa, chỉ nên tập trung vào 1 số lượng page có nội dung được chú trọng thay vì tạo ra hàng loạt các page có nội dung nghèo nàn.

★ Site ranking

  • Thông tin chỉ được tồn tại/sở hữu duy nhất bởi website
  • Có chứ nhiều nội dung dễ hiểu như ảnh và video
  • Mô tả thông tin chi tiết, rõ ràng và dễ hiểu

Khi implement các page động thì số lượng page được index sẽ tăng lên, do đó cần xác định trước số lượng tối đa page sẽ được sinh ra.

★ Cách thức đối ứng

Tồn tại nội dung hữu ích với First View không?

Khi truy cập 1 website mà ko thực hiện scroll xuống dưới, thì phạm vi người dùng quan sát được trên màn hình lúc này được gọi là First view

Về cơ bản First view có kích thước khoảng 500×950px thì cần lưu ý những điểm sau:

★ Các điểm cần lưu ý

  • Không setting external link
  • Setting keyword cho SEO vừa phải
  • Thiết lập alt cho ảnh, và tên file ảnh phải có liên quan tới nội dung bức ảnh

Các công cụ mà tác giả đang sử dụng

Nguồn: blog.topdevn.vn via viblo.asia

Developer trong lĩnh vực E-commerce cần những tố chất gì?

Xuất phát từ lĩnh vực thương mại điện tử, công ty Exocomets (Thủy Lâm Ngân) tuy mới thành lập nhưng đã mang trong mình tham vọng trở thành sàn giao dịch B2B dành cho các doanh nghiệp Việt với hệ thống hiệu quả, hiện đại, bảo mật và thân thiện. CEO của Exocomets đã có cuộc gặp gỡ thân mật với TopDev để cùng trao đổi, chia sẻ những quan điểm cá nhân về lập trình viên Việt Nam nói chung và tầm nhìn đối với riêng công ty Exocomets.

1/ Chào anh, anh có thể giới thiệu sơ về đội ngũ công ty hiện nay?

Exocomets hiện có bộ máy nhân sự chính và đang tuyển dụng thêm các vị trí nhân sự còn lại.  Chủ yếu đang tìm kiếm vị trí web developer.

2/ Theo anh thì thị trường E-commerce có thực sự bão hòa khi đang ngày càng nhiều công ty gia nhập vào cuộc chơi?

Thị trường E-commerce Việt Nam rất tiềm năng với các công ty lớn ở nước ngoài và ở Việt Nam gia nhập ngành, tạo nên nhiều cơ hội và thách thức. Công ty E-commerce phải có nguồn vốn lớn, kĩ thuật tốt, dịch vụ khách hàng hiệu quả nếu không bị loại bỏ khỏi cuộc chơi.

Các bạn dev phải có trách nhiệm xây dựng 1 hệ thống chất lượng, sáng tạo, tiện ích cho người dùng. Hầu hết các trang E-commerce đều khá giống nhau có thể là vì 90% công nghệ đều giống nhau. Nhưng điều quan trọng nhất là phải quan tâm đến người dùng cuối.

3/ Theo anh thì các bạn lập trình viên trong lĩnh vực E-commerce có cần những kiến thức riêng/ công nghê riêng so với các lĩnh vực khác không?

Ngoài lập trình chuyên môn, thì khả năng giao tiếp với các phòng ban cũng là điều rất quan trọng. Tất nhiên đây phải là khả năng lập luận theo ngôn ngữ business, chứ không dừng lại ở ngôn ngữ code.

Ngoài ra họ cần rèn luyện thêm kĩ năng quản lý dự án, kiến trúc hệ thống để hiểu được tổng quát bức tranh cụ thể là mình đang ở vị trí nào, hiểu tiến độ, mục tiêu dự án thì mới có thêm hứng thú, đam mê trong công việc. Ví dụ những bạn muốn tìm tòi về E-commerce, trước tiên cần học và nắm bắt thật chắc những kiến thức về cơ sở dữ liệu để có thể phát triển nền tảng này.

4/ Nhận định chung của anh về chất lượng của web developer tại Việt Nam như thế nào?

Trình độ chuyên môn các bạn ấy giỏi, luôn muốn học hỏi những ngôn ngữ mới, những kiến thức mới trong lĩnh vực IT. Nhưng còn yếu trong chuyên môn sâu, cứ 1-2 năm lại nhảy qua những ngôn ngữ khác.

Để giỏi được 1 lĩnh vực nào đó, cần có ít nhất 3 năm rèn luyện trong ngôn ngữ đó. Cũng như học Tiếng Anh 1-2 năm có thể biết về cơ bản nhưng nếu 2 năm sau chuyển sang tiếng Nhật thì không thể hiểu sâu được.

Điều này có điểm lợi là biết nhiều thứ nhưng điểm yếu là thiếu chuyên môn, hiểu chưa sâu và sẽ gặp rắc rối khi gặp hệ thống lớn.

Ngoài ra, developer cần rèn luyện thêm ở Tiếng Anh ở mức độ trung bình khá trở lên, để giao tiếp được với các đối tác nước ngoài, đọc tài liệu nước ngoài… như vậy, các bạn mới có thể hội nhập với thế giới.

4/ Có nhiều người cho rằng dev Việt tuy chuyên môn tốt nhưng chưa có quy trình làm việc đúng & đa phần công ty phải đem về đào tạo lại…

Điều này không hoàn toàn thuộc về các dev, mà trách nhiệm phụ thuộc vào các nhà lãnh đạo trong đội ngũ IT. Những nhà lãnh đạo cần thiết lập quy trình, cần có business flow, phương pháp quản trị…

5/ Exocomets có xây dựng phương pháp công nghê chung nào khi làm sản phẩm hay phụ thuộc vào yêu cầu từ phía khách hàng?

Với kinh nghiệm và kiến thức đã có của đội ngũ lãnh đạo, Exocomets ưu tiên triển khai 3 phương pháp quản trị và điều hành bộ máy CNTTlà TOGAF-9(The Opening Group Architecture Framework), PRINCE2 và ITIL (Information Technology Infrustructure Library) – phương pháp quản trị hệ thống cùng đội ngũ phân tích, mang đến những giải pháp lưu loát hỗ trợ đội ngũ quản lý cách sử dụng công cụ công nghệ hiệu quả.

6/ Mục tiêu, lộ trình phát triển của 1 lập trình viên tại Exocommets là như thế nào?

Trong quá trình tuyển dụng, EXOCOMETS nhận thấy rằng tố chất quan trọng nhất của một developer là tinh thần ham học hỏi và đam mê giải quyết tận gốc vấn đề. Chúng tôi cũng hiểu rằng, bất cứ nhân tố quan trọng nào cũng cần môi trường thích hợp để phát triển và học hỏi. Vì thế, khi làm việc tại EXOCOMETS, sau 2 tháng hòa nhập với văn hóa công ty, các bạn sẽ được tham gia vào những buổi training và workshop để trau dồi và nâng cao kiến thức kỹ năng.

7/ Anh có thể chia sẻ thêm về văn hóa công ty không?

Văn hóa công ty nằm trong giá trị cốt lõi mà Exocomet sẽ xây dựng, đó chính là PIRI thể hiện tinh thần PASSION- niềm đam mê, INNOVATION – thể hiện môi trường thoải mái đóng góp ý kiến, sáng tạo, RESPONSIBLE – trách nhiệm với bản thân, với thành viên trong công ty, trách nhiệm với khách hàng và INTEGRITY: trung thưc, chính trực.

Exocomets muốn tạo môi trường làm việc thoải mái, mỗi buổi sáng lại có nguồn hứng đóng góp cho công ty, không quá thân cũng không thể quá xa lạ. Đặc biệt Exocomets sẽ là 1 công ty mà tất cả các thành viên đều có cơ hội phát triển.

Chia sẻ thêm từ các bạn nhân viên Exocomets thì môi trường giữa nhân viên với sếp sẽ tùy theo giai đoạn. Khi làm việc cần có khoảng cách để các bạn làm việc hiệu quả hơn. Ngoài giờ làm việc thì vui vẻ với nhau, tạo cảm hứng cho mỗi ngày làm việc.

Tham khảo thêm các vị trí tuyển dụng ngành cntt cho SV hấp dẫn nhất tại đây

Học lập trình và làm việc tại Nhật – cơ hội “vàng ngọc” cho những ai theo đuổi con đường thăng tiến trong lĩnh vực IT

Nhật Bản từ lâu được biết đến là một trong các nước dẫn đầu thế giới về lĩnh vực khoa học và công nghệ. Và đội ngũ nhân sự lớn chính là một chìa khóa để phát triển cho nền tảng này. Để đáp ứng được nhu cầu của thị trường, Nhật Bản hiện đang hợp tác với rất nhiều quốc gia khác để giải quyết các vấn đề về nguồn nhân lực, trong đó không thể không nhắc đến Việt Nam.

Với dự báo năm 2020, Nhật Bản sẽ có thể thiếu hụt khoảng 50.000 nhân lực trong lĩnh vực IT (Dự báo của Bộ Kinh tế Công thương Nhật Bản – METI), do đó họ luôn không ngừng phải bổ sung nguồn nhân lực từ các nước khác, và Việt Nam chính là đối tác lớn thứ 2 của Nhật Bản trong lĩnh vực gia công phần mềm (vượt cả Ấn Độ đến 13,7%).

Trong thời điểm hiện tại, nguồn nhân lực lập trình tại Việt Nam được phía Nhật Bản đánh giá có chất lượng rất tốt. Chính sự nhiệt huyết, tận tâm trong công việc và khả năng ứng biến cao mà trình độ kỹ thuật của đội ngũ lập trình tại Việt Nam có thể sánh ngang với những lập trình nước Nhật. Theo lời của Tổng Giám đốc Tập đoàn Nissen, ông Nobuyuki Ichiba khẳng định: “Những kỹ sư Việt Nam khi nghe khách hàng nói cũng cần hiểu chính xác điều họ muốn. Kỹ sư Việt không chỉ giỏi về kỹ thuật mà còn có cảm nhận tinh tế, nếu kết hợp được hai phẩm chất này và thêm phán đoán của bản thân thì các bạn trẻ sẽ rất thành công”.

Liệu bạn có muốn mở rộng con đường sự nghiệp lập trình của mình tại Nhật? Chắc chắn đây sẽ là cơ hội “vàng ngọc” mang lại cho bạn không ít kinh nghiệm quý giá cũng như mức thu nhập “không hề ít”.

Nếu bạn có khoảng 2 năm kinh nghiệm làm việc trong lĩnh vực C++ thì đừng bỏ qua một trong những cơ hội được làm việc tại Nhật với mức thu nhập mỗi năm có thể lên đến 43,000USD: Game Developer (C++).

Bên cạnh đó, bạn sẽ còn nhận được nhiều đãi ngộ cực hấp dẫn “không nỡ chối từ”:

  • Lương theo tháng: $2000 – $3500
  • Lương theo năm: 3,000,000~6,000,000 JPY/ năm (27,000 ~ 43,000 USD/năm)
  • Nhân viên chính thức được tăng lương 2 lần/năm và thưởng 1 lần/năm.
  • Hỗ trợ chi phí đi lại tại Nhật.
  • Hỗ trợ bảo hiểm tại Nhật.
  • Nghỉ 2 ngày/ tuần và các ngày nghỉ lễ của Nhật.
  • Các kì nghỉ khác của Nhật như tuần lễ vàng, lễ Obon hè, lễ Tết dương lịch.
  • Làm thêm giờ và làm thêm ngày nghỉ bạn còn sẽ được tính thêm lương

Tấm vé này đã sẵn sàng dành cho bạn

Nhanh tay click ứng tuyển để không bỏ lỡ cơ hội!

Mô tả công việc:

  • Chế tác game hướng đến thị trường tiêu thụ cá nhân như Switch, PS4, PS3, PS, Vita…
  • Các dự án chính:
  1. Lập trình trong phát triển giao diện điều khiển game.
  2. Chế tác game trên PC.
  3. Chế tác game trực tuyến.
  4. Lập trình các ứng dụng xã hội, chế tác các công cụ lập trình.

*** Địa điểm làm việc: Tsukishima Chuo-ku, Tokyo 104-0052 (NHẬT BẢN)

YÊU CẦU CHÍNH:

Có ít nhất 2 năm kinh nghiệm làm C++ (không cần trong mảng game).

***Ưu tiên:

  • Có kinh nghiệm lập trình với LAMP.
  • Có kinh nghiệm chế tác game bằng Unreal Engine.
  • Có kinh nghiệm làm việc trong công ty chế tác game của Nhật .

YÊU CẦU CHUNG:

  • Tốt nghiệp đại học trở lên.
  • Ngoại ngữ: Tiếng Nhật tương đương N3 (Có thể giao tiếp tốt).
  • Độ tuổi: từ 23 đến 35.

Bắt đầu mở rộng con đường sự nghiệp lập trình ngay từ hôm nay!

Facebook làm được. Tại sao chúng ta lại không?

Tôi không đồng tình với những người không chuyên về lĩnh vực khoa học, công nghệ khi họ cho rằng, chuyện gì mà người khác làm được thì bản thân mình cũng làm được, như Facebook chẳng hạn. Nghe có vẻ hợp lý nhưng thực ra lại phi thực tế. Tại sao vậy?

Họ sở hữu dữ liệu

Như tôi đã thảo luận trong bài viết gần đây nhất về APIs, các công ty lớn như Facebook sở hữu toàn bộ các dữ liệu độc quyền. API mà họ có cho phép bạn truy cập một số thông tin, nhưng đó chỉ là những thông tin công ty muốn bạn truy cập. Biểu đồ bạn bè của Facebook rất có giá trị đối với công ty của họ, nhưng họ chỉ tiết lộ một phần thông qua API.

Ví dụ: Facebook cho phép bạn có được danh sách bạn bè của người dùng nếu họ cũng là người dùng của bạn. Bạn không thể truy cập vào những người chưa từng sử dụng ứng dụng. Ví dụ Spotify sẽ hiển thị âm nhạc mà bạn bè bạn đang nghe, nhưng Spotify không biết thông tin gì về những người không phải là bạn của bạn. Điều này ngăn cản bạn thực hiện một số tính năng mà chỉ riêng Facebook mới làm được.

Họ sở hữu các Platform

Nếu sản phẩm của bạn hoạt động trong environment của một công ty khác, chẳng hạn như hệ điều hành Android của Google, iWatch của Apple hoặc Alexa của Amazon, thì bạn chỉ có thể làm những gì công ty đó cho phép làm.

Gần đây tôi đã xây dựng một ứng dụng Alexa để tìm hiểu về nền tảng mới của Amazon. Tôi nhận ra Alexa ràng buộc các developer khá chặt chẽ, chúng tôi không được quyền truy cập nhiều tính năng mạnh mẽ mà Alexa sử dụng cho các built-in skills. Ví dụ: người dùng phải gọi ứng dụng bằng cách nói, “Alexa, yêu cầu [tên ứng dụng] …” thay vì chỉ nói về những gì bạn muốn. Tôi có thể hỏi “Alexa, thời tiết hôm nay như thế nào?” Bởi vì thời tiết là điều mà Amazon đã xây dựng trong các platform mà họ sở hữu, nhưng nếu tôi đang xây dựng một ứng dụng tương tự, người dùng sẽ phải gọi nó bằng cách nói “Alexa, hỏi ứng dụng Awesomest Weather của Adam thời tiết hôm nay như thế nào?”

Một số công ty lại lựa chọn các giải pháp sáng tạo. Snapchat không sở hữu iOS hoặc Android và app developers từ những nền tảng này không thể ngăn cản người dùng chụp màn hình. Có vẻ như đây là một vấn đề cơ bản với một ứng dung nổi tiếng sở hữu các bài posts mang tính tạm thời. Thay vào đó, Snapchat đã sử dụng khả năng nhận biết tình huống khi người dùng chụp ảnh màn hình, từ đó xây dựng cơ chế cảnh báo người dùng nhằm hạn chế thao tác chụp ảnh màn hình này.

Họ có hàng ngàn kỹ sư

Giả như bỏ qua các yếu tố kĩ thuật, thì đội ngũ chỉ có 3 kỹ sư của bạn cũng không thể cạnh tranh được với các ông lớn như Facebook. Các team nhỏ tuy hoạt động linh hoạt nhưng đối với một số thử thách kỹ thuật có quy mô lớn như Google Maps, bạn thực sự cần sở hữu một đội ngũ đủ để hoàn thành các dự án tầm cỡ. 

Họ có nhiều tiền

Nguồn tài nguyên máy tính (computing resources) đang dần rẻ hơn, và các dịch vụ lưu trữ đám mây như AWS hỗ trợ việc thuê các thiết bị phần cứng 1 cách dễ dàng. Tuy nhiên, một số tasks – đặc biệt là các tác vụ xử lý dữ liệu lớn – sẽ tiêu tốn của các công ty nhỏ khá nhiều tiền. Trong những trường hợp này, kỹ sư của bạn phải có khả năng tinh giảm những con số với chi phí ước lượng cụ thể, để bạn đưa ra được những quyết định tiếp theo.

Họ sở hữu bằng sáng chế

Tôi chưa gặp nhiều vấn đề về bằng sáng chế trong công việc của mình, nhưng có một số trường hợp, các kỹ sư nhưng không được phép thực hiện vài thao tác kĩ thuật vì lý do sáng chế. Bằng sáng chế phần mềm là một chủ đề nhạy cảm, khi nhiều chuyên gia phần mềm nhận định rằng chúng được trao cấp một cách quá tùy tiện. Thậm chí nhiều công ty lớn, kể cả những công ty sản xuất vũ khí cũng được cấp bằng sáng chế, và một số đã hứa sẽ chỉ sử dụng bằng sáng chế để dự phòng. Vì một số bằng sáng chế có quy định rất lỏng lẻo, rất nhiều công ty đang vi phạm các bằng sáng chế mà họ thậm chí không biết. Lời khuyên tốt nhất là bạn nên nghiên cứu xem liệu ứng dụng của mình có bị ảnh hưởng một chút nào đó từ các công ty lớn sở hữu bằng sáng chế có liên quan hay không.

Nguồn: topdev via hackernoon.com

Thuật toán – cánh cửa bước vào thời đại công nghiệp 4.0

Các thuật toán đang giữ vai trò trung tâm trong cuộc cách mạng công nghiệp 4.0. Giải thích một cách ngắn gọn, thuật toán là chìa khóa để tăng năng suất của nhân lực.

Thị trường cần nhưng đang thiếu

Hoàng, một lái xe Grab, đã chuyển từ một hãng taxi trong nước sang lái Grab vì: không có cảm giác “về nhì” – chữ mà cánh tài xế dùng để chỉ việc đón hụt khách. Thuật toán cài đặt trên máy chủ điều hành của Grab tìm cách kết nối giữa tài xế và khách gần nhất, giúp cho tổng quãng đường di chuyển của toàn hệ thống giảm xuống. Trong khi hiệu suất vận tải của taxi truyền thống chỉ cỡ 40%, taxi di chuyển 100km nhưng chỉ thực sự chở khách 40km, thì với Grab con số này là trên 75%, thuật toán đã giúp tăng 87% năng suất của tài xế.

Năm 2011, một nhóm các bạn trẻ Việt Nam đã phát triển một thuật toán nén dữ liệu video đủ tốt để phát theo chuẩn HD qua đường truyền 3G, công ty VP9 với các sản phẩm dùng phần cứng nén video ra đời, với các sản phẩm: đầu phát truyền hình internet, camera giám sát, truyền hình trực tuyến,… năm 2017, công ty đặt mục tiêu doanh số 2.000 tỉ VNĐ.

Trong lĩnh vực quảng cáo trực tuyến, VCCorp vận hành hiệu quả hệ thống Admicro của họ dựa trên thuật toán phân tích nội dung văn bản và phân loại người dùng. Các doanh nghiệp công nghệ có tiếng như Viettel, FPT, CMC cũng tuyển dùng hàng nghìn nhân lực để xây dựng các thuật toán xử lý dữ liệu và trí tuệ nhân tạo xử lý các vấn đề của họ và khách hàng.

Xét về quy mô thị trường lao động, nhu cầu nhân lực có trình độ thuật toán ở Việt Nam là khá lớn, nhưng việc đầu tư cho dạy và học thuật toán dường như chưa có sự phát triển tương xứng; các giáo trình môn học thuật toán vẫn không có nhiều thay đổi so với hàng chục năm trước.

Những sân chơi thúc đẩy phong trào học thuật toán bị đóng khung trong khuôn khổ nhà trường, chủ yếu là các cuộc thi lập trình hàng năm để lấy thành tích về cho nhà trường. Kết thúc cuộc thi, thí sinh ít có cơ hội sử dụng và phát triển những kĩ năng thuật toán đã được học.

Tầm nhìn của những người trong cuộc

Nhiều doanh nghiệp đã chủ động bắt tay vào giải quyết vấn đề này bằng cách thúc đẩy những sân chơi của riêng họ, gần đây nhất phải kể đến cuộc thi Lập trình Quốc tế Samsung – SCPC 2017 – một sân chơi mở dành cho tất cả các sinh viên đang theo học tại các trường đại học, học viện trên toàn quốc. Không những thế, khi kết thúc cuộc thi, thí sinh lại có thể tiếp tục được hỗ trợ, cấp học bổng và đào tạo nâng cao để thêm hoàn thiện năng lực lập trình thuật toán – tấm bằng quan trọng cho nhân lực của kỉ nguyên cách mạng công nghiệp 4.0.

Sự kiện Thuật Toán – Tế bào gốc của AI, Machine Learning & Blockchain
quy tụ các chuyên gia hàng đầu các siêu sao thuật toán từng dẫn dắt đội tuyển tham dự cuộc thi Thuật Toán Chung kết thế giới ACM-ICPC World Finals danh giá của giới lập trình.

Phát biểu tại lễ phát động cuộc thi này, ông Huh Chang Wan – Phó Tổng Giám đốc Samsung Electronics Việt Nam nhấn mạnh: “Từ năm 2015, Samsung Điện tử đã tổ chức cuộc thi lập trình Samsung Collegiate Programming Cup tại Hàn Quốc. Năm nay, lần đầu tiên cuộc thi mang đến những cơ hội cho sinh viên Việt Nam và sinh viên Ấn Độ cùng đến thi tài tại vòng chung kết diễn ra tại Hàn Quốc. Chúng tôi mong muốn tạo bước đệm để những tài năng trẻ trong lĩnh vực công nghệ thông tin phát huy năng lực cũng như khẳng định vị thế của Việt Nam trên thị trường lao động quốc tế”.

Với SCPC 2017, sinh viên Viêt Nam có cơ hội được tham gia sân chơi quốc tế để tiếp cận, tìm hiểu và trang bị thêm các kỹ năng về lập trình, giải quyết thuật toán, xây dựng ý tưởng, tư duy logic, đồng thời ứng dụng kiến thức lập trình vào cuộc sống, bắt kịp xu thế của cuộc cách mạng công nghiệp lần thứ 4.

Tầm nhìn của lãnh đạo Samsung về lập trình thuật toán tương đồng với suy nghĩ của nhiều CEO các công ty công nghệ; như ông Nguyễn Mạnh Hùng, tổng giám đốc Viettel đã từng mong muốn “xây dựng Việt Nam thành dân tộc lập trình với 90 triệu dân”; hay là Bill Gates, thậm chí còn làm một video kêu gọi thế hệ trẻ học lập trình.

Dù có vẻ mơ hồ, nhưng các thuật toán tác động to lớn đến cuộc sống nhân loại hơn suy nghĩ của đa số mọi người.

Ít ai biết, Internet, bản chất là một thuật toán định tuyến gói tin được phác thảo từ năm 1978. Nếu không có các thuật toán nén dữ liệu, chúng ta không thể thoải mái nghe nhạc hay xem video trực tuyến. Và nếu không có thuật toán lựa chọn các bài viết phù hợp, trang facebook của bạn sẽ tràn ngập những bài viết vô bổ hoặc quảng cáo không đâu.

Thị trường đang rất cần những lập trình viên có năng lực thuật toán, và những người trẻ Việt Nam đang rất cần những cơ hội được cọ sát, giao lưu trong lĩnh vực này.

Đến với sự kiện Topdev Techtalk “Algorithms: Tế bào gốc của AI, Machine Learning, Blockchain…và con đường sự nghiệp của bạn”, bạn sẽ được nghe chia sẻ từ chính các siêu sao thuật toán đã dẫn dắt đội tuyển tham dự cuộc thi Thuật Toán Chung kết thế giới ACM-ICPC World Finals danh giá của giới lập trình:

  • Diễn giả Nhân Nguyễn – Cựu kỹ sư Google đồng thời là nhà đầu tư thiên thần của hơn 10 Tech startups
  • Diễn giả Phạm Nguyễn Sơn Tùng – Founder BigOCoding, trrường dạy thuật toán chuyên sâu số 1 hiện nay
  • Khách mời đặc biệt

Cùng với các diễn giả khách mời khác sẽ đem đến cho cộng đồng một bức tranh toàn cảnh về vai trò của Algorithms đến tương lai ngành công nghệ, cách bắt đầu và đào sâu Algorithms!

  • Thời gian – Địa điểm:
    – Liberty Central SaiGon Citypoint Hotel – 59 Pasteur, Q.1, TP.HCM ngày 24/6/2017
    – Tại Hà Nội ngày 2/7/2017
  • Thông tin chi tiết: https://www.facebook.com/events/1962398150705652/
  • Mọi thắc mắc và thông tin tài trợ/ hợp tác vui lòng liên hệ:
    Ms. Ngọc Đỗ – SĐT: 08 6273 3497 | 0944 685 243 – Email: ngoc.do@applancer.net

Nguồn: topdev via Dantri.com.vn

Sự nghiệp thăng trầm của cựu thủ lĩnh Yahoo

Trước khi làm CEO của Yahoo và bán công ty này cho Verizon sau 5 năm, Marissa Mayer có sự nghiệp đầy tiếng vang tại thung lũng Silicon…

Business Insider cho biết Marissa Mayer sinh năm 1975 tại thị trấn Wausau, Wisconsin, Mỹ, trong gia đình có bố là kỹ sư và mẹ là giáo viên.

Ở trường, Mayer sớm chứng tỏ năng khiếu trong môn toán và khoa học nhưng lại là học sinh khá rụt rè và hướng nội.

Sau khi tốt nghiệp trung học, Mayer nộp hồ sơ vào 10 trường đại học và đều được nhận, trong đó gồm các trường danh tiếng như Harvard, Yale và Stanford. Bà đã chọn Đại học Stanford nhưng với ước mơ ban đầu là trở thành bác sĩ.

Tuy nhiên, mục tiêu cuộc đời của Mayer thay đổi khi bà tham gia lớp khoa học máy tính. Mayer đã chuyển sang ngành Symbolic Systems (SSP) tập trung vào máy tính và tư duy. Một số cựu học sinh trường Stanford theo học ngành này gồm có Reid Hoffman (LinkedIn), Scott Forstall (Apple) và Mike Krieger (Instagram).

Sau khi tốt nghiệp đại học, Mayer nhận được tới 12 lời đề nghị việc làm, trong đó có Google, khi có mới là một công ty khởi nghiệp nhỏ.

Thời điểm đó, theo tính toán của mình, Mayer cho rằng khả năng tồn tại của Google chỉ là 2%. Tuy nhiên, sau đó, ấn tượng với những người làm việc tại Google cùng những điều có thể học được ở đó, Mayer quyết định đầu quân cho công ty này và đã cống hiến ở đây suốt 13 năm.

Trong 2 năm đầu tại Google, Mayer thường làm việc 100 giờ mỗi tuần, đồng thời giảng dạy tại trường đại học Stanford.

Sau đó, bà nhanh chóng thăng tiến. Khởi đầu là nhân viên bán thời gian của đội phát triển giao diện người dùng, bà nhanh chóng trở thành quản lý sản phẩm. Năm 2003, Mayer phụ trách mảng phát triển sản phẩm và người dùng của Google, bao gồm công cụ tìm kiếm.

Năm 2005, bà được bổ nhiệm làm phó chủ tịch phụ trách sản phẩm công cụ tìm kiếm và trải nghiệm người dùng của Google.

Mayer từng có thời gian ngắn bí mật hẹn hò với người đồng sáng lập Google, Larry Page. Mối quan hệ của họ được mô tả là “hai người trầm lặng âm thầm hẹn hò”.

Tuy nhiên, phong cách quản lý chi tiết và dựa trên số liệu của Mayer khiến nhiều người bất mãn. Một số đó là Amit Singhal, người đứng sau các thuật toán của công cụ tìm kiếm này. Ông này tới gặp trực tiếp Larry Page và đề nghị loại Mayer khỏi đội công cụ tìm kiếm.

Cuối cùng, Singhal lại là người rời Google và sang làm việc cho công ty khởi nghiệp Uber.

Còn Mayer chuyển sang quản lý đội Google Maps và phát triển sản phẩm tại thị trường Mỹ. Dù vẫn là lãnh đạo cấp cao nhưng nhiều người coi việc điều chuyển đó là “giáng chức” bởi bà không còn phụ trách công cụ tìm kiếm – sản phẩm quan trọng nhất của Google.
Năm 2011, Mayer chính thức rời Google và nhận được lời mời làm CEO của hội đồng quản trị Yahoo. Một số người cũng được cân nhắc cho vị trí này gồm Nikesh Arora, Giám đốc Kinh doanh của Google và Eddy Cue, Phó chủ tịch phụ trách dịch vụ và phần mềm của Apple.

Dù một số người phản đối việc tuyển dụng Mayer, cho rằng bà không có nhiều kinh nghiệm quản lý tài chính của một công ty và thiên về phát triển sản phẩm hơn là một CEO quản lý vận hành. Tuy nhiên, cuối cùng, bà vẫn được bầu làm CEO mới của Yahoo.

Mayer chính thức trở thành CEO Yahoo vào tháng 7/2012 và được kỳ vọng mang lại làn gió mới, vực dậy hãng công nghệ khổng lồ đang trên bờ vực sụp đổ.

Bà nhanh chóng cơ cấu lại bộ máy lãnh đạo của Yahoo và thay thế bằng người của mình. Tháng 8/2013, một năm sau khi Mayer lên làm CEO, cổ phiếu Yahoo tăng từ 15,74 USD/cổ phiếu lên khoảng 28 USD.

Thành công đó một phần là nhờ số cổ phần Yahoo nắm giữ tại Alibaba. Mayer càng yên ổn hơn khi hãng thương mại điện tử khổng lồ của Trung Quốc thực hiện IPO (niêm yết cổ phiếu lần đầu) vào năm 2014.

Dù vậy, Mayer cũng được công nhận đã giúp cải thiện đáng kể hoạt động của Yahoo, từ thiết kế sản phẩm, lượng người dùng cho tới các ứng dụng cốt lõi. Một số người còn cho rằng bà đã thay đổi văn hóa tại Yahoo và khơi lại nguồn hứng khởi tại công ty này.

Tuy nhiên, doanh thu ở các mảng kinh doanh cốt lõi của Yahoo không có dấu hiệu cải thiện.

Chưa kể, Mayer mất đi nhiều lãnh đạo chủ chốt như Giám đốc Marketing (CMO) Kathy Savitt và Giám đốc Kỹ thuật số (CDO) Jackie Reses. Nhiều người cũng tỏ ra hoài nghi chiến lược thâu tóm của Mayer khi chi gần 3 tỷ USD mua lại các công ty khởi nghiệp như Tumblr và Polyvore.

Đầu năm 2016, xuất hiện lời đồn đoán cho rằng nhiều công ty từ Comcast, Disney, AT&T… đang dòm ngó thâu tóm Yahoo. Tháng 7 năm đó, Verizon chính thức công bố thương vụ mua lại công ty này với giá 4,83 tỷ USD.

Sau thương vụ này, mảng kinh doanh cốt lõi của Yahoo sẽ hợp nhất với công ty AOL của Verizon để thành lập công ty mới có tên “Oath”. Yahoo sẽ giữ lại số cổ phần tại Alibaba và Yahoo Nhật Bản, để gộp thành một công ty độc lập có “Altaba”.

Cuối năm 2016, lỗ hổng bảo mật khiến Yahoo bị tấn công trên quy mô lớn gây ảnh hưởng tới 1 tỷ người dùng. Vụ việc này giúp Verizon giảm giá thương vụ mua lại Yahoo xuống còn 4,48 tỷ USD.

Ngày 13/6, Yahoo hoàn tất thương vụ bán mình cho Verizon và bà Mayer cũng chính thức rời khỏi công ty này, kết thúc 5 năm thất bại.

Đừng dựa dẫm vào StackOverflow, nó sẽ chỉ khiến mọi thứ tệ hơn thôi

Vào thuở sơ khai, Programmer đã tạo ra code và Documentation. Khi đó, Documentation vốn rất mơ hồ, chứa đựng hiểu biết về functions, đã được cất dấu khỏi các developer mới tập tõm bước vào nghề.

Và Programmer cất tiếng nói – “Hãy tạo ra nhiều code hơn”. Thế là, code sinh sôi nảy nở, một số quá tốt chúng liền tiến hòa thành Framework.

Như vậy đấy thưa quí ông quí bà, con trai và con gái, người ngoài hành lẫn siêu anh hùng, đó là cách mà các phần mềm ra đời. Chúng như những đứa trẻ sơ sinh, lớn lên nhờ vào bàn tay chăm sóc của các developer. Và nếu như có lúc bạn cảm thấy mình không đủ khả năng thì hãy cầu cứu đến StackOverflow, ngài sẽ ban cho bạn mọi thứ để trở thành một developer thật thụ.  

Thật không may, là chúng ta cũng trở nên quá phụ thuộc vào StackOverflow. Từ junior đến senior developer, programmer, coder, bất cứ ngành nghề gì đều có sự hiện diện của StackOverflow. Vì một số lí do nào đó mà giờ để xin việc liên quan đến IT cũng yêu cầu bạn phải có tài khoản hoạt động trên StackOverlow.

Aura thần thánh

Gần như là mọi người nhân sự mà tôi quen biết, đặc biệt là bên Linkedln, đều tin rằng một developer giỏi khi họ có đóng góp liên quan tới code trên StackOverflow. Chẳng khác gì việc có được danh hiệu khen thưởng danh giá chả thua gì bằng đại học từ MIT hay Harvard vậy.

Cây đũa phép “kinh nghiệm”

Giờ đây việc bạn có thể trả lời và đóng góp trên StackOverflow còn được dùng như thước đo đánh giá kinh nghiệm. Không cần biết là liệu câu hỏi đó củ chuối thế nào? hay việc có hàng trăm câu trả lời tùy theo sự khác nhau trong thông tin được cung cấp. Miễn là có đóng góp là bạn đã được xem là một developer kinh nghiệm đầy mình rồi.

“Vương miệng xã hội”

“Tôi là người có đóng góp thuộc hàng top của StackOverflow đây!” – hắn nói khi tỏ vẻ “khiêm tốn” chấp nhận sự chào đón nồng nhiệt từ khắp mọi công ty công nghệ trên thế giới. Mãi cho đến khi mọi chuyện vỡ lẽ ra, và hắn chẳng khác gì một ông vua trần như nhộng, chả biết gì về IT ngoài những thông tin vụn vặt mà bạn luôn đọc trên báo lá cải. Và thế là hắn trở thành trò cười cho thiên hạ.

Những mẫu chuyện trên có thể khiến bạn phì cười. Nhưng trên hết, nó như một hồi chuông báo động, cho ta thấy sự điên rồ khi phải làm trong một ngành công nghiệp mà việc chấp nhận giá trị ảo, không thiết thực lại trở nên ngày càng phổ biến hơn. Càng nực cười hơn khi nhiều người còn quả quyết rằng StackOverflow sẽ tồn tại và phát triển rực rỡ hơn 20 năm nữa. Chẳng phải công nghệ đã từng dạy chúng ta rằng đừng bao giờ tin vào những giả thiết khi vẫn chưa có bằng chứng chắc chắn? Liệu ta đã quên rằng ngay cả các ông trùm công nghệ như Amazon vẫn gặp thất bại hay một trang website, mạng xã hội vẫn có thể biến mất một cách đột ngột? Có mấy ai từng nhớ tới cái thời huy hoàng của AltaVista hay Yahoo? Vậy mà giờ đây, một lần nữa chúng ta lại khuyến khích thế hệ trẻ tiếp tục phụ thuộc vào StackOverflow. Trong khi lại dè bỉu nhưng developer có hướng đi khác như tự học trên các diễn đàn khác hoặc là cả việc mua sách về đọc.

Giờ đây bạn phải lên StackOverflow, tham gia và đóng góp thì mới được công nhận là một developer giỏi. Đó là một điều vô cùng điên rồ.  

Có người từng nói “Đường xuống địa ngục luôn bắt đầu với lời hay ý đẹp”. Sự thật là, mặc dù có nhiều thành viên bẩn tính, vẫn có rất nhiều StackOverflow user là người tốt, sẵn sàng cống hiến thời gian của họ để giúp đỡ người khác. Họ cũng là những chuyên gia hàng đầu, không chỉ có nhiều năm kinh nghiệm mà còn rất am hiểu thế giới lập trình. Tuy nhiên, đó cũng là nguyên nhân dẫn đến vấn đề nhức nhối tại StackOverflow. Nó tồn tại là bởi vì sự thất bại của người thầy khi không thể chỉ dạy cho học sinh, sự yếu kém của các programmer khi không thể cho ra những documentation chất lượng.

Là một lập trình viên, chúng ta luôn quên mất rằng cái thật sự đáng giá của một ứng dụng là quá trình suy nghĩ, chất xám đổ vào nó chứ không là những dòng code. Thế nhưng chúng ta đã tự lơ đãng, bỏ bê đi việc viết ra những documentation thật sự hay và có ích.

Điều thật sự đáng buồn khi chúng ta có hàng tỷ tỷ framework, hàng trăm ngôn ngữ lập trình, không kể xiết số lượng library và plugin, thế nhưng khi nhắc đến documentation thì liệu bạn có thể liệt kê ra hơn số đầu ngón tay hay không?

Có thể đây là một ý kiến trái chiều nhưng StackOverflow thật sự không giải quyết được vấn đề thật sự, và càng không nên được xem như một chuẩn để đánh giá một developer. Nó là một biểu hiện của đại dịch đang lan tràn trong thế giới IT. StackOverflow chăm đút, bón cơm quá kĩ cho các developer, khiến họ mất đi khả năng tự giải quyết những vấn đề dù là nhỏ nhặt nhất. Đó là một sự thật phũ phàng khi có đến hơn một nữa số người dùng trên Stack Overflow mang danh nghĩa developer mà lại không thể giải thích code của chính họ chứ nói chi đến việc nhắc đến quá trình suy nghĩ, đưa ra ý tưởng cho ứng dụng mà họ đang phát triển. Tất cả là do sự nghèo nàn trong chất lượng của documentation khiến cho các developer phải tìm kiếm sự giúp đỡ.

Khoa học đã chứng mình chúng ta nhớ lâu khi bỏ nhiều công sức để có được thông tin đó, nếu không thì cũng như bụi đứng trước gió mà thôi. Để trở thành một developer, chúng ta cần khả năng suy luận, giải quyết vấn đề và đưa ra được giải pháp xác đáng.

Vì thế, tôi tin rằng documendation nên và phải được xem như một phần quan trọng để quyết định chất lượng của phần mềm.

Nguồn: blog.topdev.vn via hackernoon

Tham khảo việc làm IT intern trên TopDev

Bí quyết kiếm $80,000 hàng tháng từ ứng dụng trên Apple Store

Tại sự kiện đình đám WWDC, Apple cho biết họ đã trả cho các developer với khoảng tiền cực khủng, lên tới 70 tỉ đô (tiền chi cho nằm ngoái chiếm khoảng 30%). Đó là mức tăng rất lớn khiến chúng tôi vô cùng ngạc nhiên bởi người dùng đâu có chi nhiều cho ứng dụng đến vậy. Bản thân tò mò muốn biết được thu nhập khủng đó đến từ đâu, tôi đã vào App Store để kiểm tra các top ứng dụng.

Bước 1: Chạy theo đồng tiền

Khi tôi vào xem các ứng dụng trong mục Productivity, một điều dễ nhận thấy là hầu hết chúng đều là sản phẩm của các ông lớn công nghệ đình đám như Dropbox, Evernote, và Microsoft. Thế nhưng đứng ở vị trí thứ 10 lại là một app với tên gọi là “Mobile protection :Clean & Security VPN”.

Bởi cái tên nghe quá củ chuối lại chữ in hoa in thường không nhất quyết cũng như ngữ pháp quá tệ, tôi thầm nghĩ hẳn là thuật toán của Apple bị lỗi rồi. Điều đáng kinh ngạc là khi dùng Sensor Tower để kiểm tra ứng dụng, tôi hoàn toàn bị shock với con số lên tới $80,000 hàng tháng. Giờ thì tôi thật sự tò mò về nó.

Khi vào xem thử developer là ai thì ứng dụng chỉ hiện ra duy nhất một dòng “Ngan Vo Thi Thuy”. Chờ đã! Vậy là VPN service này được làm bởi một cá nhân duy nhất mà không cần đến sự trợ giúp từ các ông lớn, tập đoàn công ty công nghệ ư? Cực kì nguy hiểm. Như bạn đã biết, VPN ám chỉ việc route toàn bộ lượng internet traffic của bạn thông qua một nhóm thứ ba (3rd party). Nói cách khác, trong trường hợp này, một người hoàn toàn xa lạ, với trình độ ngữ pháp cực kì tệ, cũng như không hề có hợp tác với bất cứ công ty nào, muốn co quyền truy cập vào toàn bộ internet traffic của bạn.

Một điều đáng sợ khác nằm ở thông tin về ứng dụng này:

Theo như hình trên thì “Mobile protection :Clean & Security VPN” có đầy đủ tính năng – bao gồm kể cả “dupplicate” contacts và “Quick & Full Scan Internet Security”. Nghe đúng là ảo diệu.

Càng đáng ngờ hơn là khi nhìn vào đám review đầy 5 sao.

Tôi tự hỏi cái app này đã sống được bao lâu rồi? Theo Sensor Tower thì nó nằm trong top 20 từ ngày 20 tháng 4 (tức là tới hơn 2 tháng trời)

Bước 2: Lừa đảo người dùng

Tò mò vì sao mà cái ứng dụng này lại lên top được, tôi thử donwload về, và sau đây là lúc tôi mở app lên lần đầu tiên.

Đúng rồi đấy, bạn không hề nhầm đâu. Cái ứng dụng này đòi bạn phải cho phép nó truy cập vào danh sách liên lạc để quét contact trước. Tất nhiên là tôi đâu có điên mà cho phép nên bấm vào từ chối. Ngay sau đó, ứng dụng báo động rằng điện thoại của tôi đang gặp nguy hiểm. Rồi bảo là phải dùng Quick và Full Scan để đảm bảo an toàn internet cho tôi.

Khi bấm vào “Device Analyze” thì ứng dụng hiện ra lượng memory và storage còn trống. Một tính năng đúng chuẩn vô dụng.  Còn nếu vào Quick Scan and Full Scan thì lại cho thấy “Your contact is cleaned. No dupplicated found.”

Ôi trời, không phải dupplicates mà là duplicates.

Sau khi bấm vào “Secure Internet” ngay lập tức app đưa ra lời mời gọi chơi game… bắn bong bóng. Dù tôi chả làm gì để được “thưởng” thế nên tạm thời tôi từ chối và quay về lại mục “Secure Internet”.

Tất nhiên là tôi chấp nhận dùng thử, hàng “FREE TRIAL” mà.

Touch ID? “Full Virus, Malware scanner”? Tôi chắc rằng việc một app scan tìm virus từ dữ liệu điện thoải của tôi là bất khả thi bởi những ứng dụng như sandboxed vậy.

Đã thế còn “You will pay $99.99 for a 7-day subscription”. Nói cách khác tôi sẽ phải trả tới $100 hàng tuần để cho một kẻ lừa đảo được quyền truy cập vào lượng internet traffic của mình.

Bước 3: Lãi ròng tăng theo thời gian

Giờ thì tôi đã hiểu vì sao cái app này lại kiếm được tới hơn $80,000 một tháng. Với cái mức phí $400 hàng tháng thì chỉ cần 200 người bị lừa đã đủ để nó đạt chỉ tiêu rùi. Và Apple thì sẽ thu phí 30%, tức là $288,000 chỉ từ app này.

Bạn có thể cho rằng ai mà lại đi download cái app này rồi lại sẵn tiền móc hầu bao ra nữa chứ.

Có thể là bạn và tôi điều không click vào mấy cái ad rẻ tiền vậy nhưng đừng quên rằng Google Ad vẫn cán mốc tới $700 tỉ năm nay. “Mobile protection :Clean & Security VPN”  nằm trong top 10 app nổi tiếng nhất của mục free productivity ứng dụng với hơn 50,000 lượt download chỉ trong tháng tư.

Như vậy 200 người trả tiền chỉ chiếm 0,4%, vốn rất dễ đạt được với con số hơn 50000 lượt donwload. Và bạn cũng nên tính đến việc rất nhiều người dùng mù về công nghệ, vô tình (cố tình) trả phí cho cái “free trial” này.

Dù vậy, đến 50000 lượt download thì hẳn App Search Optimization của nó phải rất tốt:

Ngay lập tức hiện ra là “Protection for iPhone — Mobile Security VPN”. Nó vốn là một app khác nhưng điều khá hay là nó lại là In-App Purchase, xếp hạng #33 cho Top Grossing trong mục Business.

Hóa ra bọn lừa đảo này lợi dụng tính năng App Store Search Ads product, bởi nó chưa có filter cũng như sàn lọc ads. Hóa ra các ứng dụng này vốn có thể gọi là ads của chính chúng, với quảng cáo chèo kéo sử dụng app này trong app khác. Ngoài ra cách đặt tên chuối mà tôi đã nhắc đến phía trên cũng để phục vụ cho mục đích tạo keyword để tăng khả năng hiển thị trong mục search.

Làm cách nào để ngăn chặn chúng: Điều bạn có thể làm

  • Hãy chỉ người thân và bạn bè (không chuyên về IT và công nghệ) cách kiểm tra và tắt subscription. Còn nếu nó quá tệ nữa thì hãy cố gắng bắt hoàn tiền lại.
  • Report mấy cái ứng dụng lừa đảo. Cứ chọn mục “Feedback and Concerns” hoặc “Report a Fraud Concern”.
  • Share bài viết này để Apple và người quen của bạn đọc được

Làm cách nào để ngăn chặn chúng: Điều Apple có thể làm

Nhiều người cho rằng Apple đã biết về chúng nhưng hẳn là họ không nghĩ là vấn đề đó đáng lo đến mức tự tay mình phải vào cuộc hoặc là họ thấy có lợi nên cũng nhắm mắt cho qua. Dù sao đi nữa, thì tôi vẫn nêu ra một số phương pháp khả thi cho hãng:

Diệt trừ bọn lừa đảo và hoàn tiền lại cho người dùng: Cái này thì quá rõ ràng rùi. Chỉ việc thuê người làm việc dò và loại mấy cái app này ra. Việc này có thể mất thời gian nhưng không hề khó bởi mấy ứng dụng lừa đảo quá trắng trợn và rõ ràng, rất dễ để nhận ra.

Cải thiện UI trên Touch ID Subscriptions: Hãy khiến cho việc ấn vào để thực hiện giao dịch kéo dài trong 5 giây. Ngoài ra, việc review cũng nên phải được kiểm tra và chỉ hiện thỉ những review hữu ích.

Thắt chặt và kiểm tra các Review của Subscriptions: Qua việc trên, ta có thể nhận ra review giả là một trong những nguyên nhân khiến những ứng dụng này nổi lên nhanh đến vậy.

Thêm tính năng hủy subscription khi xóa app: Nhiều người dùng sao khi bị lừa cho biết dù họ đã xóa app nhưng vẫn phải trả tiền hàng tháng do chưa hủy subscription. Thiết nghĩ đây cũng là một tính năng rất cần thiết mà Apple nên có.

Quá trình hủy subscription dễ dàng hơn: Việc hủy subscription yêu cầu người dùng phải trải qua tới 9 bước. Thật sự là quá nhiều và không cần thiết.

Cải thiện Search Ads: Một trong những nguyên nhân chính khiến cho những cái app lừa đảo này vẫn sống khỏe là do hệ thồng search ads của Apple vẫn còn quá trẻ, người dùng không thể phân biệt được đâu là app và đâu là Ad. Vì thế tính năng chống lừa đảo, phân tích xác định xem những ad bị nghi ngờ có dấu hiệu lừa đảo là rất quan trọng.

Hãy vào cuộc: Nếu apple thật sự bắt tay vào trừng trị những kẻ lừa đảo này thì tin rằng việc những ứng dụng trên sẽ biến mất rất nhanh. Tuy vậy, tôi đặt giải pháp này ở cuối là bởi vì rất ít khả năng Apple sẽ làm vậy. Đó là bởi việc làm những app này không hề tốn nhiều công sức, và việc tệ nhất chỉ là bị xóa tài khoản thứ mà còn dễ làm hơn nữa. Việc kiện tụng và phạt thì lại khá tốn kém đối với Apple bởi số lượng những kẻ lừa đảo là quá nhiều.

Lời kết

Là một developer, niềm tự hào của tôi là khi tạo ra được những ứng dụng có giá trị cho người dùng. Không những thế, các app tốt là kết quả từ design, engineering, sale cũng như hàng trăm giờ làm việc cống hiến.

Vì thế mà việc có nhiều kẻ lợi dụng lập trình để tạo ra những app lừa đảo này thật sự khiến tôi đau lòng.

Nếu bất cứ ai tại Apple đọc được những dòng này, xin hãy làm điều gì đó để ngăn chặn chúng lại

Nguồn: Techtalk via Medium

Thuật toán – Tế bào gốc của AI, Machine Learning, Blockchain và con đường sự nghiệp của bạn!

Chắc hẳn bạn đã biết:

  • Những ứng dụng giao tiếp với robot, dịch tự động, tra cứu thông minh, thống kê dự đoán…ra đời với những thuật toán phức tạp bên trong
  • Thuật toán tốt sẽ tối ưu performance làm server tiết kiệm RAM và CPU để phục vụ nhiều user hơn.
  • Thuật toán tốt sẽ làm ứng dụng di động của bạn đỡ ngốn pin, mượt và tốn ít thời gian phát triển
  • Dù bạn có thành thạo 10 ngôn ngữ lập trình, nhiều framework và công nghệ, nhưng tư duy thuật toán kém bạn sẽ mất cơ hội ngay từ vòng loại ở các công ty công nghệ lớn
  • Những bài toán lớn như Zalo/Whatsapp phục vụ hàng chục triệu người dùng nhưng tốn rấ ít tài nguyên
  • Bài toán crowdsourcing kết hợp xử lý ngôn ngữ tự nhiên giúp Google Translate dịch ngày càng hay.
  • Các bài toán về AI, Machine Learning, Blockchain…những công nghệ mà nhân loại đang trên đường hướng đến đều không thể vắng mặt những kỹ sư thông thạo thuật toán.

Chính vì vậy, thuật toán được xem như là nền tảng cần có của mọi lập trình viên, bất kể ngôn ngữ lập trình và nền tảng nào. Tuy nhiên, cộng đồng IT vẫn được chia làm hai luồng trái chiều khi nhắc về thuật toán như sau:

  • Thần thánh hoá thuật toán: Muốn lập trình giỏi phải giỏi thuật toán. Các công ty công nghệ lớn phỏng vấn về tư duy thuật toán trước khi quan tâm đến các kỹ năng khác mà?
  • Coi thường thuật toán: Chỉ cần căn bản đủ làm việc thôi, viết giao diện, if/ else/ continue/ while/ for là đủ rồi cần gì cao siêu?

Liệu điều này có đúng?

Đến với sự kiện Topdev Techtalk “Algorithms: Tế bào gốc của AI, Machine Learning, Blockchain…và con đường sự nghiệp của bạn”, bạn sẽ được nghe chia sẻ từ chính các siêu sao thuật toán đã dẫn dắt đội tuyển tham dự cuộc thi Thuật Toán Chung kết thế giới ACM-ICPC World Finals danh giá của giới lập trình:

  • Diễn giả Nhân Nguyễn – Cựu kỹ sư Google đồng thời là nhà đầu tư thiên thần của hơn 10 Tech startups
  • Diễn giả Phạm Nguyễn Sơn Tùng – Founder BigOCoding, trrường dạy thuật toán chuyên sâu số 1 hiện nay
  • Khách mời đặc biệt

Cùng với các diễn giả khách mời khác sẽ đem đến cho cộng đồng một bức tranh toàn cảnh về vai trò của Algorithms đến tương lai ngành công nghệ, cách bắt đầu và đào sâu Algorithms!

  • Thời gian – Địa điểm:
    – Liberty Central SaiGon Citypoint Hotel – 59 Pasteur, Q.1, TP.HCM ngày 24/6/2017
    – Tại Hà Nội ngày 2/7/2017
  • Thông tin chi tiết: https://www.facebook.com/events/1962398150705652/
  • Mọi thắc mắc và thông tin tài trợ/ hợp tác vui lòng liên hệ:
    Ms. Ngọc Đỗ – SĐT: 08 6273 3497 | 0944 685 243 – Email: ngoc.do@applancer.net