Thứ Năm, 10 tháng 8, 2017

Ajax async

How do I update the returnHtml variable from within the anonymous success function?
function getPrice(productId, storeId) {
    var returnHtml = '';

    jQuery.ajax({
        url: "/includes/unit.jsp?" + params,
        cache: false,
        dataType: "html",
        success: function(html){
            returnHtml = html;
        }
    });

    return returnHtml;
}
Answer:
That's the wrong approach. The first A in AJAX is Asynchronous. That function returns before the AJAX call returns (or at least it can). So this isn't an issue of scope. It's an issue of ordering. There are only two options:
  1. Make the AJAX call synchronous (not recommended) with the async: false option (default is true); or
  2. Change your way of thinking. Instead of returning HTML from the function you need to passin a callback to be called when the AJAX call succeeds.
As an example of (2):
function findPrice(productId, storeId, callback) {
    jQuery.ajax({
        url: "/includes/unit.jsp?" + params,
        cache: false,
        dataType: "html",
        success: function(html) {
            callback(productId, storeId, html);
        }
    });
}

function receivePrice(productId, storeId, html) {
    alert("Product " + productId + " for storeId " + storeId + " received HTML " + html);
}

findPrice(23, 334, receive_price);
Read More »

IQueryable vs IEnumerable

This is a nice video on my Facebook page which demonstrates how these interfaces differ , worth a watch.
Below goes a long descriptive answer for it.
The first important point to remember is IQueryable interface inherits from IEnumerable, so whatever IEnumerable can do, IQueryable can also do.
enter image description here
There are many differences but let us discuss about the one big difference which makes the biggest difference. IEnumerable interface is useful when your collection is loaded using LINQ or Entity framework and you want to apply filter on the collection.
Consider the below simple code which uses IEnumerable with entity framework. It’s using a Wherefilter to get records whose EmpId is 2.
EmpEntities ent = new EmpEntities();
IEnumerable<Employee> emp = ent.Employees; 
IEnumerable<Employee> temp = emp.Where(x => x.Empid == 2).ToList<Employee>();
This where filter is executed on the client side where the IEnumerable code is. In other words all the data is fetched from the database and then at the client its scans and gets the record with EmpId is 2.
enter image description here
But now see the below code we have changed IEnumerable to IQueryable. It creates a SQL Query at the server side and only necessary data is sent to the client side.
EmpEntities ent = new EmpEntities();
IQueryable<Employee> emp = ent.Employees;
IQueryable<Employee> temp =  emp.Where(x => x.Empid == 2).ToList<Employee>();
enter image description here
So the difference between IQueryable and IEnumerable is about where the filter logic is executed. One executes on the client side and the other executes on the database.
So if you working with only in-memory data collection IEnumerable is a good choice but if you want to query data collection which is connected with database `IQueryable is a better choice as it reduces network traffic and uses the power of SQL language.
Read More »

Chủ Nhật, 6 tháng 8, 2017

What is SET NOCOUNT ON?

  • When SET NOCOUNT is ON, the count (indicating the number of rows affected by a Transact-SQL statement) is not returned. When SET NOCOUNT is OFF, the count is returned. It is used with any SELECT, INSERT, UPDATE, DELETE statement.
  • The setting of SET NOCOUNT is set at execute or run time and not at parse time.
  • SET NOCOUNT ON improves stored procedure (SP) performance.
  • Syntax: SET NOCOUNT { ON | OFF }
Example of SET NOCOUNT ON:
enter image description here
Example of SET NOCOUNT OFF:
enter image description here
Read More »

Thứ Tư, 28 tháng 6, 2017

“Chỉ có kẻ ngốc mới cố gắng kiếm tiền hàng ngày từ chứng khoán” – Bài học từ trader huyền thoại Jessive Livermore


Jesse Lauriston Livermore nổi danh là một trong các nhà kinh doanh vĩ đại của thế kỷ 20. Chỉ một số ít người có khả năng kiếm được lợi nhuận lớn, hoặc mất tất cả, nhanh như Livermore. Được biết đến như một “con bạc trẻ liều lĩnh” bởi cách ông ta dám đầu cơ một lượng lớn cổ phiếu hoặc hàng hóa, Livermore đã sống theo đúng cách thức kinh doanh của mình – tiến hết sức lực về phía trước.
Ông ta cũng rất nổi tiếng đối với giới nữ vì vẻ bề ngoài bảnh trai và cách sống hào nhoáng trong giàu sang của mình. Mặc dù thời đại của ông đã qua nhưng những trader đời sau vẫn luôn coi ông là một tượng đài học tập, và những bài học của ông để lại vẫn có ý nghĩa cho đến tận ngày nay.
Sau đây là những bài học của ông mà thế hệ sau nên học hỏi:
Dòng tiền liên tục đổ vào thị trường, hằng ngày luôn có kẻ mua người bán tuy nhiên không phải lúc nào bạn cũng có thể kiếm được tiền mỗi ngày. Chỉ có kẻ ngốc mới cố gắng kiếm tiền hàng ngày hàng tuần từ chứng khoán.
Mọi thứ ngoài bản chất tốt vẫn còn mang tính thời điểm. Có thời điểm bạn không thể kiếm được tiền hoặc có thể mất tiền, do vậy đừng cố gắng kiếm tiền mọi thời gian trong đầu tư bởi có thể bạn sẽ bị khánh kiệt. Tài khoản đầu tư thực chất cũng như một cổ phiếu, và một ví dụ điển hình là cổ phiếu VNM mặc dù đi lên liên tục trong gần 10 năm nay nhưng có những lúc nó vẫn phải chững lại hoặc suy giảm trong ngắn hạn.
Đừng cố đoán trước xu hướng của thị trường cho tới khi những dấu hiệu từ hệ thống giao dịch của bạn xác nhận điều đấy. Trâu chậm đôi khi vẫn uống được nước trong!
Đôi khi có những nhà đầu tư tự hỏi tại sao nếu đã tăng thì không mua sớm hơn vì được giá rẻ hơn, tuy nhiên đầu tư thực chất cũng là 1 trò chơi xác xuất và khi thị trường đưa ra những tín hiệu chắc chắn phù hợp với hệ thống giao dịch khả năng thắng của bạn mới cao, đồng nghĩa với việc rủi ro của bạn giảm xuống so với việc bạn tham gia thị trường quá sớm.
Chuyển động thực sự của thị trường cần thời gian để hoàn thành, không phải dừng lại trong một ngày.
Nhiều nhà đầu tư luôn tự hỏi tại sao nhiều khi tin tốt cho thị trường ra nhưng thị trường vẫn không chạy, sở dĩ có điều này bởi bản thân cổ phiếu hay thị trường đều phải có giai đoạn tích lũy và phải hoàn thiện thì giá mới chuyển động theo chiều hướng phù hợp với điều kiện ở thời điểm đấy. Do vậy nếu không có lòng kiên nhẫn chờ đợi biến động thực sự của thị trường xảy ra, rất có thể nhà đầu tư sẽ lâm vào trạng thái mua đỉnh bán đáy ngắn hạn do chán nản.
Suy nghĩ không tạo ra tiền, chỉ có lòng kiên nhẫn mới tạo ra tiền.
Để kiếm được tiền cần chờ đợi những biến động thực sự từ thị trường diễn ra, do vậy việc bạn suy nghĩ rằng thị trường sẽ lên hay xuống sẽ chẳng giúp bạn kiếm ra tiền nếu bạn không đủ kiên nhẫn đợi những tín hiệu chắc chắn từ hệ thống giao dịch của mình,
Dù bạn có giỏi đến đâu, thua lỗ luôn tồn tại trong quá trình đầu tư
Như ở mục 1 đã đề cập, có những giai đoạn bạn sẽ không kiếm được tiền hoặc là mất tiền và bạn phải chấp nhận điều đó. Thua lỗ ở đây là chi phí cho quá trình kiếm lợi nhuận, việc bạn cần làm là tối thiểu chi phí đấy.
Luôn có một kế hoạch trước khi giao dịch.
Cảm xúc luôn là kẻ thù trong việc trading, để hạn chế được cảm xúc có lẽ bạn cần có 1 kế hoạch trước khi giao dịch và kỷ luật cao để làm theo kế hoạch. Có như vậy mới tránh được những giao dịch mang tính cảm tính và hạn chế được thua lỗ trong quá trình đầu tư.
Read More »

Thứ Sáu, 23 tháng 12, 2016

Tôi đã ngừng ý định giúp đỡ người khác, và tôi khuyên bạn cũng nên như thế!

Đây là những lời của CamMi Phạm, một blogger thành công, người đặt ra các quy tắc về giúp đỡ mọi người trong cuộc sống.

Mẹ tôi dạy tôi rằng: "Đừng bao giờ cố gắng đưa ra lời khuyên hay cố gắng giúp đỡ bất cứ ai khi mà họ yêu cầu." Tôi đã luôn nghĩ rằng có lẽ mẹ tôi hơi vô tâm hoặc thuộc tuýp người lạnh lùng. Nhưng khi trưởng thành, tôi bắt đầu nhận ra rằng bà đã đúng. Mẹ tôi là một trong những người tốt bụng nhất trên đời, ít nhất là đối với tôi.
Xã hội luôn luôn nhấn mạnh về sự cần thiết trong việc giúp đỡ mọi người. Và tôi cũng luôn tâm niệm rằng bản thân sẽ làm tốt điều đó!
Ai đó nói với bạn rằng bạn nên giúp đỡ người khác vô điều kiện, kể cả khi họ không mong đợi. Tất nhiên là sự tử tế có thể thay đổi cuộc sống của một người trong nhiều trường hợp. Tuy nhiên, bất cứ sự việc nào cũng đều có hai mặt của nó.
Không phải mọi thứ đều xấu. Tương tự như vậy, không phải mọi thứ đều tốt. Nghĩa là việc giúp đỡ mọi người không phải là điều tồi tệ, và chẳng phải lúc nào cũng là điều tuyệt vời. Dưới đây là những lý do tại sao tôi dừng lại việc giúp đỡ tất cả mọi người, và tôi khuyên bạn cũng nên như thế:
1. Đừng giúp đỡ người không xứng đáng nhận sự trợ giúp từ bạn
"Khi bạn trưởng thành, bạn sẽ phát hiện ra rằng bạn có hai bàn tay, một là để giúp đỡ chính mình, và một là để giúp đỡ những người khác." - (Sam Levenson) 
Trong quá khứ, khá nhiều lần người ta mời tôi đi uống cà phê chỉ để "tận dụng chất xám của tôi". Nếu đó là một người giàu có, với số tiền đáng mơ ước trong các tài khoản ngân hàng, vậy mà họ vẫn muốn "tận dụng" não bộ của tôi một cách free (miễn phí) thì rõ là không thể chấp nhận được. Thậm chí, họ còn không bận tâm trả tiền cà phê cho tôi. 
“Tôi đã ngừng ý định giúp đỡ người khác, và tôi khuyên bạn cũng nên như thế!” - Ảnh 1.
Họ không hiểu rằng tôi cũng có một gia đình để nuôi, có những hóa đơn cần chi trả hàng tháng, và có cả những khoản nợ đã đến kỳ thanh toán. Họ không nhận ra rằng để dành thời gian cho việc đi cà phê với họ, tôi sẽ phải bù lại khoảng thời gian đã mất đó và làm việc tới tận 2 giờ sáng.
Nếu họ không nghĩ rằng thời gian của tôi là có giá trị, thì tôi cũng sẽ không dành thời gian cho họ! Cho nên, nếu ai đó không quan tâm tới bạn, thì bạn không cần phải giúp đỡ họ. Bởi vì họ không xứng đáng nhận được sự giúp đỡ đó.
Bây giờ khi một ai đó cần sự giúp đỡ, tôi sẽ đưa ra một mức giá được cho là phù hợp với đôi bên. Điều này nghe có vẻ hơi "thực dụng", nhưng ít ra cũng sẽ làm cho cuộc sống của tôi dễ dàng hơn và tôi hạnh phúc hơn khi biết sự giúp đỡ của mình được ghi nhận bằng một giá trị cụ thể nào đó. Cũng chính vì vậy mà mọi người sẽ suy nghĩ nghiêm túc hơn trước khi họ quyết định yêu cầu điều gì đó từ tôi. Nếu ai đó không thể đủ khả năng để chi trả, tôi thường cung cấp cho họ những sự lựa chọn phù hợp hơn.
Mọi người sẽ luôn luôn cố gắng để khai thác bạn nếu bạn cho phép họ. Nhưng thực tế là bạn không có thời gian để giúp đỡ tất cả mọi người, vậy nên hãy chỉ giúp những người xứng đáng được giúp đỡ từ bạn mà thôi. Và tôi có hai quy tắc dành cho bạn:
Quy tắc 1: Không bao giờ cung cấp bất cứ thứ gì miễn phí.
Quy tắc 2: Không bao giờ quên quy tắc 1.
Hãy nhớ rằng, người đầu tiên bạn cần phải giúp đỡ là CHÍNH BẠN! Nếu giúp mọi người không làm cho bạn cảm thấy vui vẻ và thoải mái, thì đơn giản là bạn không cần phải làm điều đó.
Đôi khi bạn cần phải là ích kỷ và đặt mình quan trọng hơn bất cứ ai. Bỏ qua những gì xã hội đang thúc giục bạn làm đi, vì xã hội không hề chịu trách nhiệm cho cuộc sống của bạn. Bạn nghèo đói hay giàu sang, xã hội cũng mặc kệ!
2. Đừng giúp đỡ người không đánh giá cao sự trợ giúp của bạn
Nhược điểm lớn nhất của tôi là tôi luôn muốn giúp đỡ mọi người. Tôi giúp mọi người kể cả khi không biết họ có yêu cầu hay không. Nhưng bạn không bao giờ biết khi nào lòng tốt ấy có thể làm tổn thương đến bạn.
Một khách hàng cũ của tôi đang gặp trục trặc trong việc kinh doanh. Tôi cùng các chiến hữu trong team của mình đã dành một vài ngày phân tích tất cả các dữ liệu để tìm ra những vấn đề tồn tại.
Đó không phải là công việc của chúng tôi và chúng tôi cũng không hề yêu cầu họ chi trả cho điều đó. Chúng tôi chỉ làm vì chúng tôi quan tâm đến sự thành công của khách hàng. Team của tôi đã tìm thấy một số vấn đề nghiêm trọng với mô hình kinh doanh và chiến lược của vị khách hàng đó. Nhưng khi chúng tôi nêu ra các vấn đề, vị khách hàng đã nổi giận. 
“Tôi đã ngừng ý định giúp đỡ người khác, và tôi khuyên bạn cũng nên như thế!” - Ảnh 2.
Chúng tôi đã làm điều đó xuất phát từ lòng tốt, và khi chúng tôi nói với khách hàng những gì họ không muốn nghe, lập tức, chúng tôi bị chỉ trích hoặc ghét bỏ. Chỉ vì chúng tôi đã cho ý kiến ​​chuyên môn của mình.
Cách dễ nhất để biến bạn bè của bạn thành kẻ thù là cung cấp cho họ những lời khuyên mà họ không muốn nghe.
Khi tôi muốn giúp đỡ một người nào đó, nghĩa là tôi thực sự mong muốn làm điều đó. Nhưng nhiều khi, mọi người không sẵn sàng chấp nhận sự giúp đỡ của tôi. Cũng dễ hiểu. Bởi tất cả mọi thứ đều cần có thời gian để thay đổi và hầu hết mọi người đều không dễ dàng đối mặt với những sự thật tiêu cực.
Vì vậy mà tôi khuyên bạn không nên cung cấp lời khuyên khi mọi người chưa sẵn sàng tiếp nhận nó. Rất có thể vào một ngày nào đó, họ sẽ trở nên cáu kỉnh và đổ lỗi ngược lại cho bạn chỉ vì công việc của họ không đạt được kết quả như mong đợi.
Đó cũng là lý do mà tôi chẳng bao giờ nhận giúp đỡ một ai nữa khi mà cảm thấy họ có vẻ không thật sự tôn trọng lòng tốt và sự nhiệt thành của tôi. Và ít ra thì như thế cũng có nghĩa là tôi sẽ có nhiều thời gian hơn cho bản thân mình.
3. Đừng giúp đỡ người khác nếu bạn không đủ khả năng
Đây là một trong những điều quan trọng nhất. Giúp đỡ một ai đó khi bạn không đủ khả năng là điều vô cùng tồi tệ. Tôi đã làm điều này rất nhiều lần, và đến ngày hôm nay tôi vẫn hối tiếc vì đã làm điều đó.
Một vài năm trước, cha mẹ tôi đi nước ngoài và yêu cầu tôi chăm sóc ngôi nhà của họ, tôi đã gặp khó khăn trong việc chăm sóc cây cảnh. Có khi tôi tưới chúng quá đẫm, nhưng cũng có khi tôi để chúng khô hạn. 
“Tôi đã ngừng ý định giúp đỡ người khác, và tôi khuyên bạn cũng nên như thế!” - Ảnh 3.
Một tháng sau khi cha mẹ tôi trở lại, tất cả các cây đều đã chết. Nếu tôi không nhận lời với họ, có lẽ một người sành sỏi về chăm sóc cây cảnh sẽ được thuê để làm điều đó. Và như vậy thì đám cây cảnh của cha tôi sẽ không bị chết thê thảm. Sau lần ấy, cho tới tận bây giờ, cha tôi đã không yêu cầu tôi chăm sóc cây cảnh thêm một lần nào nữa. 
Hãy nhớ, sự nhiệt tình cộng với sự ngu dốt chính là sự phá hoại!
Cung cấp sự trợ giúp khi bạn không thể làm tốt công việc sẽ là lợi bất cập hại. Bạn sẽ khiến cho mọi người bỏ lỡ cơ hội để tìm sự giúp đỡ khác tốt hơn. Và lòng tốt của bạn cũng có thể làm tổn thương người khác, trong một số trường hợp. Một trong những cách dễ nhất để tiêu diệt một mối quan hệ là cố gắng trao đi sự giúp đỡ vượt quá khả năng của mình.
Vậy nên, đừng quá dễ dàng gật đầu trước khi nhận một yêu cầu trợ giúp nào. Hãy suy nghĩ thật kỹ! Bởi một hành động ngẫu nhiên của sự tử tế có thể thay đổi cuộc sống của một ai đó, nhưng nó cũng có thể phá hủy cuộc sống của một ai đó.
Read More »