Hiển thị các bài đăng có nhãn Thủ thuật. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Thủ thuật. Hiển thị tất cả bài đăng

Thứ Ba, 11 tháng 6, 2019

Xóa dấu tiếng việt bằng python, unaccent in python

s1 = u'ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíòóôõùúýĂăĐđĨĩŨũƠơƯưẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ'
s0 = u'AAAAEEEIIOOOOUUYaaaaeeeiioooouuyAaDdIiUuOoUuAaAaAaAaAaAaAaAaAaAaAaAaEeEeEeEeEeEeEeEeIiIiOoOoOoOoOoOoOoOoOoOoOoOoUuUuUuUuUuUuUuYyYyYyYy'
def remove_accents(input_str):
 s = ''
 print input_str.encode('utf-8')
 for c in input_str:
  if c in s1:
   s += s0[s1.index(c)]
  else:
   s += c
 return s


Nguồn: https://gist.githubusercontent.com/J2TEAM/9992744f15187ba51d46aecab21fd469/raw/85942b0406f565f4b02b3d899a1478dbbdccb575/remove_accents.py

Thứ Hai, 6 tháng 2, 2017

[Thủ thuật] Khắc phục lỗi JVM missing khi cài đặt JRE SERVER

Khi cấu hình JRE server xuất hiện lỗi "Missing server jvm" at "C:\Program Files\Java\jre7\bin\server\jvm­­.dll" thực hiện lần lượt các bước như sau:

Bước 1: khắc phục tình trạng missing server jvm.
_ Truy cập vào thư mục bin, tạo thư mục mới server nằm trong bin. 
_ Copy toàn bộ nội dung của thư mục bin/client sang thư mục bin/server vừa tạo

Bước 2: khắc phục tình trạng error occurred during initalization of VM nếu có
_ Cấu hình tham số -Xmx512m cho JVM, giảm giá trị 512m tương ứng với RAM

Thứ Năm, 28 tháng 7, 2016

Cải thiện hiệu năng tải nhiều lớp wms với Leaflet

**Note dành cho Leaflet version < 1.0.0
Trong quá trình phát triển các dự án WebGIS với yêu cầu phải hỗ trợ nhiều lớp dữ liệu nền từ GeoServer WMS (trên 25 lớp với yêu cầu bật tắt riêng, trong đó có 3 lớp bản đồ nền hành chính).
Tôi bắt gặp một bất cập của Leaflet như sau: Leaflet sử dụng kỹ thuật backbuffer nhằm giúp giao diện mượt hơn khi thay đổi zoom của bản đồ, tuy nhiên vấn đề này lại gây ra một hiệu ứng kèm theo là khi có nhiều lớp được bật, bản đồ tải khá chậm và hầu như không thể thực hiện được thao tác, do leaflet phải chờ kết thúc sự kiện zoom mới cho phép các thao tác liên quan thực hiện.
Bằng cách thử nhiệm thay đổi cách backbuffer hoạt động, website của tôi đã đạt những hiệu quả tích cực, chiến lược tải backbuffer như sau:
Các layer được chia thành 2 loại: 
          + Loại 1 là layer nền hành chính cần được sử dụng backbuffer để tránh hiện tượng nhấp nháy bản đồ khi zoom.
          + Loại 2 là các layer chuyên đề khác, đối với các layer này tôi chấp nhận việc các layer nhấp nháy, vì đã có các layer thuộc nhóm 1 đóng vai trò chống nhấp nháy.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
L.TileLayer.include({
    _prepareBgBuffer: function() {
        var front = this._tileContainer,
            bg = this._bgBuffer;
        // if foreground layer doesn't have many tiles but bg layer does,
        // keep the existing bg layer and just zoom it some more
        var bgLoaded = this._getLoadedTilesPercentage(bg),
            frontLoaded = this._getLoadedTilesPercentage(front);
        var addtional = (bgLoaded > 0.5 && frontLoaded < 0.5) || this.options._htjs_hidden_on_zoom;

        if (bg && addtional) {
            this._bgBuffer.style.visibility = 'visible';
            this._stopLoadingImages(front);
            front.style.visibility = 'hidden';
            return;      
        }
        // prepare the buffer to become the front tile pane
        bg.style.visibility = 'hidden';
        bg.style[L.DomUtil.TRANSFORM] = '';
        this._stopLoadingImages(bg);
        // switch out the current layer to be the new bg layer (and vice-versa)
        this._tileContainer = bg;
        bg = this._bgBuffer = front;
        //prevent bg buffer from clearing right after zoom
        clearTimeout(this._clearBgBufferTimer);
    },
});
/////////////////////////////////////////////////////////////////////////////////
Đoạn code phía trên nhằm thay thể hàm _prepareBgBuffer tại lớp L.TileLayer, đoạn code màu đó nhằm bổ sung thuộc tính TileLayer.options._htjs_hidden_on_zoom, bằng cách lựa chọn layer nào sẽ giữ vài trò làm mượt và các layer khác sẽ tập trung vào hiệu năng tải, từ đó giúp bản đồ được tải nhanh hơn và không ảnh hưởng đến cảm nhận của người dùng. 

Chúc các bạn thành công.

Thứ Hai, 18 tháng 7, 2016

Vấn đề đọc tập tin với tên unicode trong python

Trong một lần làm việc với các tập tin cùng ngôn ngữ python với mục tiêu liệt kê tất cả các tập tin trong thư mục, tôi đã gặp vấn đề như sau: đối với các tập tin có tên unicode như "Việt Nam.jpg" các hàm của module os không thể liệt kê được.

Vấn đề trên được fix đơn giản bằng cách khai báo rootdir với đặc tính unicode.

import os
rootdir = u'root_path'

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        print os.path.join(subdir, file)

Chúc các bạn thành công!

Thứ Hai, 20 tháng 6, 2016

Sử dụng Google Tiles với Leaflet - Chống lag lớp google khi đưa vào bản đồ.

Khi sử dụng Leaflet Google JS để sử dụng lớp bản đồ nền của google, chúng ta hay gặp một số vấn đề như sau:
1. Lớp nền google thường xuyên over lên các lớp khác, mặc dù được đặt index thấp hơn.
2. Lớp nền google có độ trễ với các layer khác như: wms, vector layers,... khi drag bản đồ hoặc zoom gây khó chịu tương tác.

Các khắc phục, truy vấn trực tiếp đường dẫn tiles của google, cài đặt bản đồ nền google như một tileLayer.

Thực hiện.

var layer = 'h'; //***
var googlelayer = L.tileLayer('http://{s}.google.com/vt/lyrs=' + layer + '&x={x}&y={y}&z={z}', {
        maxZoom: 24,
        subdomains: ['mt0', 'mt1', 'mt2', 'mt3']
});

với layer có thể gồm:
  • h = roads only
  • m = standard roadmap
  • p = terrain
  • r = somehow altered roadmap
  • s = satellite only
  • t = terrain only
  • y = hybrid
Hưởng thụ kết quả nhé :). Chúc các bạn thành công.

Thứ Năm, 10 tháng 3, 2016

[Thủ thuật] Chuyển đổi in hoa cho tiếng việt trong PHP - UPPERCASE VIETNAMESE IN PHP

Bài viết được viết sau khoảng 1 giờ vật lộn của tôi với vấn đề khá 'củ chuối' này, mong rằng có thể giúp được những bạn vô tình vướng phải vấn đề tương tự.

<?php

$input = 'lê võ hữu trí';

echo mb_strtoupper($input, 'UTF-8');

// Kết quả: LÊ VÕ HỮU TRÍ

?>