Xem Nhiều 3/2023 #️ Viết Ứng Dụng Di Động Một Cách Dễ Dàng Với Ionic Framework # Top 10 Trend | Tvzoneplus.com

Xem Nhiều 3/2023 # Viết Ứng Dụng Di Động Một Cách Dễ Dàng Với Ionic Framework # Top 10 Trend

Cập nhật thông tin chi tiết về Viết Ứng Dụng Di Động Một Cách Dễ Dàng Với Ionic Framework mới nhất trên website Tvzoneplus.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.

Như mình đã giới thiệu ở một số bài viết trước, lập trình ứng dụng di động đang là một lĩnh vực khá hot mà các lập trình viên nên quan tâm. Theo cách truyền thống (hoặc khi viết native app), bạn cần phải học Java, Objective-C, C# để viết ứng dụng cho Android, iOS, Windows-Phone.

Tuy nhiên, nếu viết ứng dụng theo hướng hybrid app, sử dụng một số framework như Cordova, Phonegap, … bạn có thể viết 1 ứng dụng hoàn toàn bằng HTML, CSS và Javascript, chạy được trên cả iOS, Android và Window Phone. Các bạn web developer có thể dễ dàng nhảy qua mảng mobile mà không cần tốn quá nhiều công sức để học ngôn ngữ mới.

Trong phạm vi bài viết này, mình sẽ hướng dẫn các bạn tạo, viết và chạy ứng dụng trực tiếp trên di động một cách nhanh và đơn giản với IonicFramework – một framework xây dựng dựa trên AngularJS và Cordova. Ưu điểm của IonicFramework là:

Cài đặt rất nhanh và nhẹ. Thay vì phải tải IDE như Android Studio, Xcode cùng với bộ SDK nặng nề, ta chỉ cần tải NodeJS và dùng command prompt để cài ionic và cordova, rất nhanh và tiện lợi. Ta có thể dùng Notepad++ hoặc Sublime Text để code.

Chỉ cần biết HTML, CSS, JS và AngularJS. Nếu muốn thêm 1 số chức năng như rung, camera, chỉ cần bỏ 5p để xem API ngCordova là làm được ngay.

Tích hợp sẵn IonicViewer, cho phép ta test app vừa viết ngay trên di động, không cần cắm dây hay kết nối phức tạp (Việc debug thì còn hơi phức tạp đôi chút…). Kết hợp với Phonegap Build, ta có thể xuất file apk ngay và luôn.

1. Cài đặt Ionic

Sau khi cài xong, bạn mở cửa sổ console lên, nhập vào:

npm install -g cordova ionic

Chờ khoảng 10p, việc cài đặt đã xong rồi đấy. Rất nhanh gọn lẹ phải không nào, chúng ta có thể bắt đầu viết ứng dụng rồi.

2. Tạo ứng dụng đầu tiên

ionic start sampleApp tabs

Để chạy thử, ta chỉ cần cd vào thư mục sampleApp, gõ câu lệnh ” ionic serve” để chạy thử ứng dụng trên nền web.

3. Chỉnh sửa ứng dụng

Toàn bộ code của ứng dụng sẽ nằm trong thư mục sampleApp/www. Trông quen quá nhỉ, chỉ có HTML, CSS, Javascript thôi. Mình khuyên các bạn nên dùng Sublime Text để mở toàn bộ thư mục, dễ chỉnh sửa hơn.

4. Chạy ứng dụng trên di động

Tiếp tục ở cửa sổ console thần thánh, ta sử dụng câu lệnh sau để upload app lên server của ionic.

Nếu là lần đầu, bạn cần phải tạo một tài khoản và đăng nhập. Ở các lần sau ionic sẽ tự nhớ các thông tin này, bạn chỉ cần sửa app và bấm ionic upload thôi.

Ngoài ra, nếu muốn build ứng dụng thành file apk để đăng lên mạng, đưa bạn bè, bạn có 2 lựa chọn:

Cài Đặt Mail Server Dễ Dàng Với Mail

Hôm trước mình có hướng dẫn các bạn cách cài đặt một Mail Server với iRedMail, tuy nhiên cách đó vẫn hơi phức tạp. Hôm nay mình sẽ giới thiệu một cách mới, cài đặt Mail Server dễ dàng hơn với Mail-in-a-Box.

Để bảo mật cho server, Mail-in-a-Box sử dụng Fail2ban và SSL certificate (self-signed). Nó cũng tự cấu hình UFW firewall và chỉ mở những port cần thiết. Ngoài ra, để chống spam, Mail-in-a-Box sử dụng các tính năng bảo mật như graylisting, SPF, DKIM, DMARC, opportunistic TLS, strong ciphers, HSTS, và DNSSEC (với DANE TLSA).

Mail-in-a-Box được thiết kế để xử lý SMTP, IMAP/POP, spam filtering, webmail, và thậm chí tự quản lý DNS, bạn sẽ không cần phải cấu hình SPF, DKIM bằng tay nữa. Tuy nhiên, không phải nhà cung cấp domain nào cũng hỗ trợ tạo Nameserver record nên mình sẽ không hướng dẫn trong bài này.

Mục tiêu cuối cùng: tạo được Mail Server hoạt động độc lập với domain chính chúng tôi sử dụng subdomain chúng tôi Email có dạng account@pibox.vn.

1. Deploy VPS ở Vultr

Để cài được Mail-in-a-Box, bạn cần sử dụng hệ điều hành Ubuntu 14.04 x86-64, trong bài này mình sử dụng VPS ở Vultr. VPS cần ít nhất 768 MB RAM, tốt nhất nên là 1GB.

Email tên miền mình sử dụng vẫn là chúng tôi , tên miền mới tinh nên khả năng cao email gửi đi sẽ bị vào Spam. Mình sẽ dùng tên miền này để tìm cách đảm bảo email gửi đi vào được Inbox. DNS quản lý ở CloudFlare.

– Để nhận được mail, bạn hãy tạo record MX với name là pibox.vn, Server: mail.pibox.vn và Priority mặc định 1

– Ngoài ra, để xác nhận chính xác mail được gửi đi từ server, bạn cần thêm một record SPF nữa. Record type: TXT, Name: pibox.vn với Content: v=spf1 ip4:IP_ADDRESS -all

Kết quả tương tự như hình bên dưới:

Thay đổi hostname

Đảm bảo hostname của VPS được chuyển thành pibox.vn.

hostname -F /etc/hostname

Thay đổi tiếp trong file hosts

nano /etc/hosts

Thêm một dòng chứa IP nếu chưa có, ví dụ của mình:

45.63.59.104 mail.pibox.vn root@pibox:~# hostname pibox.vn

2. Cài đặt Mail-in-a-Box

Script cài đặt Mail-in-a-Box sẽ tự động cài toàn bộ những package cần thiết. Chúng ta chỉ cần chạy duy nhất một lệnh đơn giản:

Bạn sẽ nhận được một thông báo giới thiệu về Mail-in-a-Box như sau, nhấn Enter để tiếp tục.

Okay. I'm about to set up admin@pibox.com for you. This account will also have access to the box's control panel. password:

Nếu không có vấn đề gì xảy ra, cuối cùng bạn sẽ nhận được thông báo như bên dưới:

mail user added updated DNS: pibox.vn web updated alias added ----------------------------------------------- Your Mail-in-a-Box is running. Please log in to the control panel for further instructions at: https://45.63.59.104/admin You will be alerted that the website has an invalid certificate. Check that the certificate fingerprint matches: A5:31:33:99:80:61:D3:F0:DC:F2:B6:35:44:C7:1B:AF:98:8C:05:84 Then you can confirm the security exception and continue.

3. Cấu hình Mail-in-a-Box

Bây giờ các bạn có thể truy cập vào trang quản lý Mail-in-a-Box có dạng http://ip_address/admin, login sử dụng tài khoản và password như đã nhập trong bước trước.

Bởi vì server sử dụng chứng chỉ self-signed, nên bạn sẽ nhận được cảnh báo warning như bên dưới, hãy nhấn Advanced, rồi Proceed.

System: cấu hình và quản lý hệ thống

Mail: thêm/sửa/xóa account và các thông tin IMAP/SMTP/Exchange/ActiveSync

Contacts/Calendar: thông số cấu hình để synchronize trên các thiết bị di động hoặc ứng dụng

Web: nội dung khi truy cập mail.pibox.vn

Version: phiên bản hiện tại và kiểm tra nâng cấp

Việc cần làm đầu tiên là vào menu System, chọn External DNS để Mail-in-a-Box kiểm tra tình trạng hiện tại và đưa ra các thông số cấu hình domain. Bước này rất quan trọng do chúng ta không sử dụng chức năng quản lý DNS của Mail-in-a-Box, không thực hiện thì email gửi đi sẽ bị vào SPAM.

Các thông tin đưa ra như bên dưới:

Lưu ý: có thể mất một khoảng thời gian để DNS được cập nhật xong, lúc này kết quả mới chính xác nhất. Đừng vội lo lắng khi email của bạn bị rơi vào SPAM.

4. Truy cập Webmail và gửi Email

Sau khi cấu hình các bản ghi cho tên miền, các bạn truy cập link https://mail.pibox.vn/mail để vào hòm mail. Giao diện Roundcube quen thuộc sẽ xuất hiện:

Để email không bị coi là Spam cần lưu ý:

Cấu hình đầy đủ SPF record, DKIM record cho tên miền.

VPS cần cấu hình hostname chuẩn, nhớ restart lại VPS để check lại một lần nữa trước khi cài đặt tiếp.

VPS cần cấu hình Reverse DNS chuẩn. Thường mất vài tiếng đến cả ngày mới update xong rDNS nên bạn cần kiên nhẫn.

Với mỗi tài khoản mail, cần phải có Display Name. Cài đặt trong phần Settings/Identities/Display Name. Nên tạo tài khoản mới để test sendmail, đừng dùng tài khoản postmaster/admin.

Cuối cùng cần đảm bảo IP của bạn không bị liệt vào danh sách blacklist: http://mxtoolbox.com/blacklists.aspx

5. Kết quả

Cuối cùng, mình đã cài đặt thành công một Mail Server với Mail-in-a-Box. Đặc biệt Mail Server hoạt động độc lập với Web Server.

Đường link để đăng nhập có dạng http://mail.pibox.vn; email có dạng account@pibox.vn. Tất nhiên bạn sẽ tạo được không giới hạn số tài khoản với Mail-in-a-Box.

Lưu ý: mình không khuyến khích các bạn tự cài đặt một Mail Server, nên sử dụng các dịch vụ trung gian cho email để đảm bảo hệ thống hoạt động ổn định, ví dụ như:

Nếu muốn gửi email marketing, mời bạn tham khảo 2 nhà cung cấp nổi tiếng hiện nay là GetResponse và .

Cách Bật Mở Sử Dụng Nfc Trên Mọi Iphone Dễ Dàng Nhất

Cách bật sử dụng NFC trên mọi iPhone dễ dàng nhất hướng dẫn cách bật mở NFC trên iPhone 6s Plus, bật NFC trên iPhone 7 Plus, bật NFC trên iPhone 8, bật NFC trên iPhone 8 Plus, iPhone X, iPhone XS, iPhone XS Max và iPhone XR.

NFC là một trong những điều khoản mà Apple đưa ra với mọi iPhone mới. Tuy nhiên, nhiều người dùng vẫn không biết ý nghĩa của nó và cách sử dụng nó.

Chức năng có thể được giải thích nhanh chóng: NFC là công nghệ vô tuyến cho phép truyền dữ liệu giữa các thiết bị trong một khoảng cách ngắn – tối đa là 1,6 in – và do đó tương tự như công nghệ Bluetooth nổi tiếng.

Với NFC, chỉ một lượng nhỏ dữ liệu được ghi trên thẻ điện tử (còn gọi là thẻ NFC) được gắn vào các đối tượng vật lý có thể được chuyển sang điện thoại thông minh.

Do việc trao đổi dữ liệu thành công đòi hỏi sự gần gũi ngay lập tức của máy phát và máy thu, NFC đặc biệt an toàn vì việc theo dõi thiết bị khó khăn hơn.

Mặc dù các điện thoại thông minh hỗ trợ NFC đầu tiên được phát hành vào năm 2008 nhưng Apple chỉ bắt đầu trang bị cho tất cả các mẫu iPhone mới hơn một mô-đun NFC kể từ iPhone 6.

Các mẫu iPhone có chip NFC là: iPhone 6, iPhone 6 Plus, iPhone 6s , iPhone 6s Plus, iPhone SE, iPhone 7, iPhone 7 Plus, iPhone 8, iPhone 8 Plus, iPhone X, iPhone XS, iPhone XS Max và iPhone XR.

Tuy nhiên, thẻ NFC chỉ có thể được đọc kể từ iPhone 7, các mẫu cũ hơn không hỗ trợ chức năng này.

Trong một thời gian dài, NFC được phê duyệt hỗ trợ sử dụng dịch vụ thanh toán di động của riêng Apple Apple. Trong các cửa hàng hỗ trợ công nghệ, iPhone hỗ trợ NFC sau đó được giữ đơn giản cho cảm biến hoặc thiết bị đầu cuối EC để hoàn tất quy trình thanh toán.

Do Apple Pay không phải lúc nào cũng có sẵn ở tất cả các quốc gia, nên khả năng chức năng trên iPhone cho đến nay vẫn còn hạn chế.

Tuy nhiên, khuôn khổ NFC Core của NFC được Apple giới thiệu vào mùa thu 2017 đánh dấu một bước ngoặt về mặt NFC trên iPhone. Apple đã mở chức năng NFC trên iPhone cho các nhà phát triển ứng dụng.

Tất cả các mẫu iPhone từ iPhone 7 trở đi đều có thể đọc thẻ NFC bằng ứng dụng đọc NFC.

Kết hợp với một ứng dụng như vậy, người dùng có thể quét thẻ NFC bằng iPhone của họ, ví dụ: để có thêm thông tin về các sản phẩm cụ thể trong siêu thị hoặc để có được thông tin về các vật trưng bày trong bảo tàng. Khi hoạt động, ứng dụng sẽ hiển thị bảng quét nếu có thẻ cần quét.

Trên iPhone XS (Max) và iPhone XR, thẻ NFC có thể được quét mà không cần phải khởi động ứng dụng đọc NFC trước. “Background Tag Reading” (như Apple gọi nó) xảy ra tự động bất cứ khi nào màn hình iPhone được chiếu sáng. Khi thẻ được phát hiện, một thông báo sẽ xuất hiện trên màn hình nhắc người dùng mở mục trong ứng dụng đọc NFC tương ứng.

Tuy nhiên, thẻ NFC phải chứa URL. Nếu nội dung không phải là URL sẽ được đọc, trước tiên, ứng dụng đọc NFC vẫn phải được mở.

Tuy nhiên, Apple không cho phép các nhà phát triển hoặc người dùng gắn nhãn thẻ NFC với nội dung của riêng họ.

Chỉ các ứng dụng đơn giản như đọc văn bản, URL hoặc liên kết thiết bị NFC với iPhone mới có thể. Tuy nhiên, nhờ việc Apple mở chức năng NFC, ngày càng có nhiều ứng dụng hỗ trợ chức năng này trên iPhone trong tương lai.

Mặc dù iPhone 6 đã có chip NFC, nhưng chỉ những iPhone mới hơn có ít nhất iOS 11, chẳng hạn như iPhone 7, iPhone 8 hoặc iPhone X, sẽ được hưởng lợi từ NFC Core NFC và các ứng dụng có thể.

Để sử dụng NFC trên iPhone, bạn cần có ứng dụng đọc NFC phù hợp. Trong App Store, bạn có thể tải xuống ứng dụng NFC Reader hoặc bất kỳ ứng dụng NFC nào khác miễn phí cho iPhone.

Ứng dụng hỗ trợ đọc thẻ NFC trên iPhone 7, iPhone 7 Plus, iPhone 8, iPhone 8 Plus, iPhone X, iPhone XS và iPhone XS Max.

Part 1: Tính Toán Khoảng Cách Levenshtein Nhanh Và Dễ Dàng Với Cây Tiền Tố

Khái niệm cơ bản Levenshtein distance: Khoảng cách Levenshtein. Trie: Cây tiền tố

Nếu bạn có một website riêng và có một hàm tìm kiếm, bạn sẽ dễ dàng nhận ra phần lớn các vấn đề phiền toái gây ra là các dữ liệu nhập vào để tìm kiếm. Có quá nhiều những tìm kiếm với những từ không tồn tại, cái này có thể là lỗi người dùng, tuy nhiên người dùng nào mà lại không mong một chút kỳ diệu gì đó cho quá trình tìm kiếm, nhưng việc nhận ra người dùng có phải tìm từ này không khi gõ sai chính tả chẳng hạn. Công việc này tính ra cũng không có gì là xa lạ, một số từ điển và thậm chí một số search engine (Như Bing hay Google) cũng đã gợi ý các từ khi người dùng gõ sai chính tả. Việc làm này kỳ diệu này thường được thực hiện bằng một công cụ gọi gọi là Khoảng cách Levenshtein. Trong tài liệu này, tôi sẽ so sánh hai cách để tìm kiếm các từ thích hợp trong một từ điển lớn. Tôi sẽ miêu tả tôi đã sử dụng nó như thế nào ở trang chúng tôi nó có thể không chính xác, như với một tìm kiếm trên 2.6 triệu từ để phát âm với mỗi request, không sử dụng cache, trên cái máy chủ “siêu mạnh” của tôi. Phần này lưu ý là Steve đã vui tính gọi con Acer Aspire One của mình là cái máy chủ “siêu mạnh”:

Phần cứng: 1.6 GHz Atom processor (with hyperthreading) 512 MB memory 8 GB SSD Wifi, etherne VGA ports 3 USB ports and 2 SD card slots (?!) Phần mềm: OS: Ubuntu 9.04 Webserver: Apache2 đã tối giản hóa

Giải thuật:

Hàm tính khoảng cách Levenshtein nhận 2 tham số là 2 từ và trả về khoảng cách giữa chúng. Nó là một thuật toán với độ phức tạo O(N*M) với N là độ dài từ đầu, và M là độ dài chữ còn lại. Nếu cụ thể muốn biết nó làm việc như thế nào bạn có thể xem trên Wikipedia.

smhanov@ubuntu1004:~$ ./method1.py goober 1 ('goober', 0) ('goobers', 1) ('gooier', 1) Search took 4.5575 s

Đoạn code:

#!/usr/bin/python #By Steve Hanov, 2011. Released to the public domain import time import sys DICTIONARY = "/usr/share/dict/words"; TARGET = sys.argv[1] MAX_COST = int(sys.argv[2]) # read dictionary file words = open(DICTIONARY, "rt").read().split(); # for brevity, we omit transposing two characters. Only inserts, # removals, and substitutions are considered here. def levenshtein( word1, word2 ): columns = len(word1) + 1 rows = len(word2) + 1 # build first row currentRow = [0] for column in xrange( 1, columns ): currentRow.append( currentRow[column - 1] + 1 ) for row in xrange( 1, rows ): previousRow = currentRow currentRow = [ previousRow[0] + 1 ] for column in xrange( 1, columns ): insertCost = currentRow[column - 1] + 1 deleteCost = previousRow[column] + 1 if word1[column - 1] != word2[row - 1]: replaceCost = previousRow[ column - 1 ] + 1 else: replaceCost = previousRow[ column - 1 ] currentRow.append( min( insertCost, deleteCost, replaceCost ) ) return currentRow[-1] def search( word, maxCost ): results = [] for word in words: cost = levenshtein( TARGET, word ) if cost <= maxCost: results.append( (word, cost) ) return results start = time.time() results = search( TARGET, MAX_COST ) end = time.time() for result in results: print result print "Search took %g s" % (end - start)

Với mỗi so sánh, chúng sẽ xây dựng một bảng kích thước NxM.

Cải tiến

Chúng ta hãy xem kết quả chạy với cụm (cat, kate).

k a t e

0 1 2 3 4

c 1 1 2 3 4

a 2 2 1 2 3

t 3 3 2 1 2

Đoạn code trên sẽ chạy tốt cụm từ (cat, kate). Tuy nhiên, nếu từ cat tiếp tục mở rộng phần sau của nó ra như trở thành từ cats thì sao?

k a t e

0 1 2 3 4

c 1 1 2 3 4

a 2 2 1 2 3

t 3 3 2 1 2

s 4 4 3 2 2

Việc trên chỉ làm thay đổi hàng cuối trong bảng. Chúng ta có thể tránh việc xử lý một lượng tính toán lớn bằng cách không lặp lại các tính toán trùng lặp như bên trên. Cấu trúc cây tiền tố (Trie) là một sự lựa chọn hoàn hảo để giải quyết vấn đề này. Cây tiền tố là một cây rất lớn, tại đó mỗi nút thể hiện một phần hoặc một từ trọn vẹn. Ở đây nó là một thể hiện của các từ sau: cat, cats, catacomb, and catacombs. Các nút thể hiện một từ rõ ràng tại các nút màu đen.

Với một cây tiền tối, tất cảc các thành phần cùng tiền tố sẽ được thu gọn vào cùng một nhánh của cây, chúng ta có thể sắp xếp chúng một cách tối ưu rồi xử lý chúng chỉ trong 1 lần duy nhất. Đây là code Python làm việc trên:

#!/usr/bin/python #By Steve Hanov, 2011. Released to the public domain import time import sys DICTIONARY = "/usr/share/dict/words"; TARGET = sys.argv[1] MAX_COST = int(sys.argv[2]) # Keep some interesting statistics NodeCount = 0 WordCount = 0 # The Trie data structure keeps a set of words, organized with one node for # each letter. Each node has a branch for each letter that may follow it in the # set of words. class TrieNode: def __init__(self): chúng tôi = None self.children = {} global NodeCount NodeCount += 1 def insert( self, word ): node = self for letter in word: if letter not in node.children: node.children[letter] = TrieNode() node = node.children[letter] chúng tôi = word # read dictionary file into a trie trie = TrieNode() for word in open(DICTIONARY, "rt").read().split(): WordCount += 1 trie.insert( word ) print "Read %d words into %d nodes" % (WordCount, NodeCount) # The search function returns a list of all words that are less than the given # maximum distance from the target word def search( word, maxCost ): # build first row currentRow = range( len(word) + 1 ) results = [] # recursively search each branch of the trie for letter in trie.children: searchRecursive( trie.children[letter], letter, word, currentRow, results, maxCost ) return results # This recursive helper is used by the search function above. It assumes that # the previousRow has been filled in already. def searchRecursive( node, letter, word, previousRow, results, maxCost ): columns = len( word ) + 1 currentRow = [ previousRow[0] + 1 ] # Build one row for the letter, with a column for each letter in the target # word, plus one for the empty string at column 0 for column in xrange( 1, columns ): insertCost = currentRow[column - 1] + 1 deleteCost = previousRow[column] + 1 if word[column - 1] != letter: replaceCost = previousRow[ column - 1 ] + 1 else: replaceCost = previousRow[ column - 1 ] currentRow.append( min( insertCost, deleteCost, replaceCost ) ) # maximum cost, and there is a word in this trie node, then add it. if currentRow[-1] <= maxCost and chúng tôi != None: results.append( (node.word, currentRow[-1] ) ) # if any entries in the row are less than the maximum cost, then # recursively search each branch of the trie if min( currentRow ) <= maxCost: for letter in node.children: searchRecursive( node.children[letter], letter, word, currentRow, results, maxCost ) start = time.time() results = search( TARGET, MAX_COST ) end = time.time() for result in results: print result print "Search took %g s" % (end - start)

Đây là kết quả:

smhanov@ubuntu1004:~$ ./method1.py goober 1 Read 98568 words into 225893 nodes ('goober', 0) ('goobers', 1) ('gooier', 1) Search took 0.0141618 s

Tiết kiệm bộ nhớ ?

Xây dựng một cây tiền tố sẽ tốt rất nhiều bộ nhớ. Trong Phần2, tôi sẽ nói rõ làm thể nào để xây dựng một MA-FSA (hay DAWG) để chứa những thông tin tương tự tuy nhiên nhỏ gọn hơn.

RhymeBrain

Trong tháng 12, tôi nhận thấy Google đã phát hành N-grams data, một danh sách các từ được scan từ các cuốn sách của Google Book. Tôi đã thêm tất cả vào RhymeBrain, kích thước từ điển của tôi tăng từ 260,000 lên 2.6 triệu từ, và vấn đề tối ưu hiệu xuất xuất hiện.

Tôi đã lưu tất cả các từ trong một cây tiền tố, lập chỉ mục cách phát âm. Tuy vậy, để tìm kiếm trên nó, tong lần khởi tạo tôi sử sử dụng một cách nhanh và đê tiện đó quét các từ có thể phát âm. Sau đó tôi đã lấy một danh sách lớn và chạy nó một lượt sử dụng hàm Levenshtein để tính  RhymeRankTM . Người dùng có thể chỉ thấy 50 mục từ của danh sách.

Sau khi suy nghĩ sâu hơn, tôi nhận thấy rằng hàm Levenshtein có thể còn mở rộng hiểu quả hơn, như tôi nói ở bên trên. Dĩ nhiên, tôi có thể đã có thể nhận ra sớm hơn nếu tôi đã đọc nhiều bài viết học thuật hơn về vấn đề này, chúng đã mô tả chính xác phương pháp này.

Với một giải thuật mới, truy vấn tốn thời gian từ 19 đến 50ms với cả những từ dài, nhưng phần tốt đẹp nhất của nó mà tôi không cần quan tâm tới 2 việc nhanh và đầy đủ, đó là việc hiệu xuất là đồng nhất cho mỗi truy vấn với 2.6 triệu từ trên cái datacenter 1GHz Acer Aspire One của tôi.

Bạn đang xem bài viết Viết Ứng Dụng Di Động Một Cách Dễ Dàng Với Ionic Framework trên website Tvzoneplus.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!