Đôi khi bạn cần hỗ trợ "ai đó" từ xa, có thể bạn sẽ cần:
12/03/2012
Công cụ điều khiển máy tính từ xa
Đôi khi bạn cần hỗ trợ "ai đó" từ xa, có thể bạn sẽ cần:
20/06/2011
CTY mới
Mai đi làm ngày đầu tiên ở cty mới sau 3 năm cày cuốc freelance và mở cty chưa đủ tài ...
Lại làm thuê kiếm bia uống...
15/06/2011
Paging - pager helper class c#
//định nghĩa class chia trang thường dùng
public class Pager
{
public Pager(
int totalItems,
int currentPage = 1,
int pageSize = 10,
int maxPages = 10)
{
// calculate total pages
var totalPages = (int)Math.Ceiling((decimal)totalItems / (decimal)pageSize);
// ensure current page isn't out of range
if (currentPage < 1)
{
currentPage = 1;
}
else if (currentPage > totalPages)
{
currentPage = totalPages;
}
int startPage, endPage;
if (totalPages <= maxPages)
{
// total pages less than max so show all pages
startPage = 1;
endPage = totalPages;
}
else
{
// total pages more than max so calculate start and end pages
var maxPagesBeforeCurrentPage = (int)Math.Floor((decimal)maxPages / (decimal)2);
var maxPagesAfterCurrentPage = (int)Math.Ceiling((decimal)maxPages / (decimal)2) - 1;
if (currentPage <= maxPagesBeforeCurrentPage)
{
// current page near the start
startPage = 1;
endPage = maxPages;
}
else if (currentPage + maxPagesAfterCurrentPage >= totalPages)
{
// current page near the end
startPage = totalPages - maxPages + 1;
endPage = totalPages;
}
else
{
// current page somewhere in the middle
startPage = currentPage - maxPagesBeforeCurrentPage;
endPage = currentPage + maxPagesAfterCurrentPage;
}
}
// calculate start and end item indexes
var startIndex = (currentPage - 1) * pageSize;
var endIndex = Math.Min(startIndex + pageSize - 1, totalItems - 1);
// create an array of pages that can be looped over
var pages = Enumerable.Range(startPage, (endPage + 1) - startPage);
// update object instance with all pager properties required by the view
TotalItems = totalItems;
CurrentPage = currentPage;
PageSize = pageSize;
TotalPages = totalPages;
StartPage = startPage;
EndPage = endPage;
StartIndex = startIndex;
EndIndex = endIndex;
Pages = pages;
}
public int TotalItems { get; private set; }
public int CurrentPage { get; private set; }
public int PageSize { get; private set; }
public int TotalPages { get; private set; }
public int StartPage { get; private set; }
public int EndPage { get; private set; }
public int StartIndex { get; private set; }
public int EndIndex { get; private set; }
public IEnumerable<int> Pages { get; private set; }
}
//cách dùng trong mvc razor view
//css boostrap mặc định
if (pager != null && pager.Pages.Any())
{
<nav class="table-responsive">
<ul class="pagination justify-content-center d-flex flex-wrap">
@if (pager.CurrentPage > 1)
{
<li class="page-item">
<a class="page-link" href="@Url.Action("Index", "Home")">Trang đầu</a>
</li>
<li class="page-item">
<a class="page-link" href="@Url.Action("Index", "Home")?p=@(pager.CurrentPage - 1)">Trước</a>
</li>
}
@foreach (var p in pager.Pages)
{
<li class="page-item @(p == pager.CurrentPage ? "active" : "")">
<a class="page-link" href="@Url.Action("Index", "Home")?p=@p">@p</a>
</li>
}
@if (pager.CurrentPage < pager.TotalPages)
{
<li class="page-item">
<a class="page-link" href="@Url.Action("Index", "Home")?p=@(pager.CurrentPage + 1)">Tiếp</a>
</li>
<li class="page-item">
<a class="page-link" href="@Url.Action("Index", "Home")?p=@(pager.TotalPages)">Trang cuối</a>
</li>
}
</ul>
</nav>
}
02/02/2010
Dùng HtmlAgilityPack bóc tách nội dung trang web với c#
HtmlAgilityPack là thư viện rất rất mạnh
bạn có thể bóc tách nội dung 1 trang web (1url) bất kỳ rất rất dễ nhé
Đoạn code sau làm ví dụ:
======================================
string url = "https://www.tuandev.com/2010/01/su-dung-task-trong-c.html";
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument htmlDoc = web.Load(url);
//tới đây bạn có 1 htmlDoc hoàn chỉnh rồi
//bạn có thể lấy nội dung trong từng style class như sau
//bằng cách chọn nhiều node SelectNodes hoặc 1 node SelectSingleNode
var title = htmlDoc.DocumentNode.SelectNodes("//h3[contains(@class, 'post-title')]");
if(title == null)
{
//do somethings
}
else{
//do somethings
}
[Happy coding]
25/01/2010
Sử dụng task trong c#
Đôi khi cần load 1 loạt xử lý tương tự nhau, ví dụ map 1 danh sách object A thành danh sách B
thay vì vòng lặp tuần tự, ta có thể dùng multi task để giảm thời gian hoàn thành tiến trình như sau:
//using System.Threading.Tasks;
List<objectDTO> objectDTOs = new List<objectDTO>();
try
{
//Lấy danh sách objects từ cơ sở dữ liệu
List<object> objects = await unitOfWork.objects.Getobjects(20);
//Danh sách không có item nào, hoàn thành tiến trình
if (objects == null || !objects.Any())
{
return objectDTOs;
}
//khởi tạo danh sách task bằng với danh sách objects
Task<objectDTO>[] taskArray = new Task<objectDTO>[objects.Count];
for (int i = 0; i < objects.Count; i++)
{
object item = objects[i];
//sử dụng hàm MapObjectToDTO(item) để thực hiện tiến trình map base object to DTO object
taskArray[i] = Task.Factory.StartNew(() => MapObjectToDTO(item));
}
//chờ toàn bộ task chạy xong
Task.WaitAll();
//đưa kết quả vào danh sách trả về
for (int x = 0; x < taskArray.Length; x++)
{
if (taskArray[x].Result != null)
{
objectDTOs.Add(taskArray[x].Result);
}
}
}
catch(Exception ex)
{
//xử lý exception
}
return objectDTOs;
03/12/2009
Lắp bóng Led, thử và sai
1 ngày đẹp trời thay bóng đèn led cho bóng huỳnh quang cũ mờ
mua cái led 1.2m mang về, tháo bóng huỳnh quang cũ ra và đè cái led mới zô
....
mở công tắc, đèn sáng .. 1 lúc chớp chớp và ngủm kèm thêm mùi khét khét
=> tèo rồi, lý do ko kiểm tra cái tăng phô 😂
Cách xử lý:
1) tháo vỏ hộp máng đèn
2) nhìn zô quả tăng phô
3) xác định dây từ nguồn vào và dây 2 đầu máng đèn nối zô tăng phô
4) căng thẳng chỗ này, cắt 2 dây mỗi 2 đầu máng ra và đấu lại với nhau
(trong hình trên là 2 sợi trắng)
5) đấu 2 đầu dây ở bước (4) vào 2 đầu dây nguồn từ công tắc vào nhau
(trong hình trên là 2 sợi đỏ)
6) kiểm tra lại các điểm đấu nối dây điện và ... mở lại công tắc .. bingo .. waahooo... đèn sáng và không khét lẹt 👌
09/11/2009
Javascript format number
Format số nhanh trong javascript
ví dụ: 1000000 => 1,000,000
dùng pattern như sau:
function formatNumber(num) {
return num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
}
Đăng ký tên miền, hosting, máy chủ, thiết kế lập trình website theo yêu cầu
Chính thức trở thành đơn vị cung cấp dịch vụ đăng ký tên miền quốc tế, tên miền Việt Nam hosting, máy chủ, cloud hosting, cloud server, ema...