^_^

Nếu hướng tới các vì sao thì ít nhất ta cũng sẽ đến được các tầng mây !

Subscribe to RSS feed

Sticky post

Luôn chờ em cúp máy trước...

Ngày ấy, khi cô gái và chàng trai yêu nhau thắm thiết. Mỗi lần gọi điện thoại, hai người chuyện trò tưởng chừng không bao giờ dứt. Cuối cuộc gọi, luôn là cô gái gác máy trước, sau khi đã cố nấn ná, không muốn nói lời tạm biệt, chàng trai lại từ từ cảm nhận hơi ấm còn vương lại của giọng nói trong không trung, và một nỗi buồn man mác, vẩn vương, lưu luyến.

Sau đó, hai người chia tay. Cô gái nhanh chóng có người yêu mới, một anh chàng đẹp trai, hào nhoáng. Cô gái thấy rất mãn nguyện, và cũng rất đắc ý. Nhưng rồi về sau, cô dần dần cảm thấy giữa hai người dường như thiêu thiếu một thứ gì đó, sự bất an đó khiến cho cô thấy như có một sự mất mát mơ hồ. Là điều gì vậy nhỉ? Cô cũng không rõ nữa. chỉ là khi hai người kết thúc cuộc gọi, cô gái cảm thấy khi mình chưa kịp nói xong một nửa câu “hẹn gặp lại”, thì đầu dây bên kia đã vang lên tiếng “cạch” cúp máy. Mỗi lúc như vậy, cô luôn cảm thấy cái âm thanh chói tai đó như đóng băng lại trong không trung, rồi xuyên vào trong màng nhĩ. Cô cảm thấy dường như người bạn trai mới giống như một cánh diều đứt dây, đôi tay yếu ớt của mình sẽ không thể níu giữ được sợi dây vô vọng đó.

Rồi cũng đến một ngày, hai người cãi nhau. Anh chàng đó chán nản, quay người bỏ đi. Cô gái không khóc, mà cảm thấy như được giải thoát.

Một hôm, cô gái chợt nhớ đến người yêu đầu tiên, bỗng thấy bùi ngùi: Chàng “ngốc” đợi nghe cô nói xong câu “Tạm biệt”. cảm xúc đó khiến cô nhấc máy. Giọng của chàng trai vẫn chân chất, bình thản như xưa. Cô gái thì chẳng thốt lên lời, luống cuống nói lời “Tạm biệt”.

Lần này cô không gác máy, một cảm xúc khó gọi thành tên khiến cô im lặng lắng nghe sự tĩnh lặng của đầu dây bên kia.

Chẳng biết bao lâu sau đó, đầu dây bên kia vọng đến tiếng của chàng trai: “Sao em không cúp máy?”. Tiếng của cô gái như khản lại “Tại sao lại muốn em cúp máy trước?” “Quen rồi”. chàng trai bình tĩnh nói, “Anh muốn em cúp máy trước, như vậy anh mới yên tâm”.

“Nhưng người cúp máy sau thường cảm thấy nuối tiếc, như vừa để vuột mất một điều gì”. Cô gái hơi run run giọng. “Vì vậy, anh thà nhận sự mất mát đó chỉ cần em vui là đủ”. Cô gái không kìm nổi mình, bật khóc, những giọt nước mắt nóng hổi thấm đẫm cả vùng kí ức yêu thuở nào. Cuối cùng, cô gái nhận ra rằng, người không đủ kiên nhẫn để nghe cô nói hết câu cuối cùng, không phải là người cả đời này cô mong đợi.

Hóa ra, tình yêu đôi khi thật giản đơn, chỉ một chút đợi chờ, đã có thể nói lên tất cả

Áo đỏ

Áo đỏ

Áo đỏ em đi giữa phố đông
Cây xanh như cũng ánh theo hồng
Em đi lửa cháy trong bao mắt
Anh đứng thành tro em biết không?

Yêu mình anh thôi

Một người nọ rất thích nhạc cổ điển, bạn gái anh ta đến chơi, anh ta hỏi:

- Em thích Mozart không?

- Em đã nói với anh bao nhiêu lần rồi, em chỉ yêu mỗi mình anh, vả lại em chẳng có người bạn nào họ Mô cả!
=))

Get row in gridview


    <script language="javascript">
    
    </script>

add thêm attribute beeb codebehind

        protected void RgdCNRole_ItemDataBound(object sender, GridItemEventArgs  e)
        {


            if ((e.Item.ItemType == GridItemType.Pager) ||
            (e.Item.ItemType == GridItemType.Header) ||
            (e.Item.ItemType == GridItemType.Footer))
            {
                return;
            }
            else
            {
                 //Page.RegisterStartupScript("changehiddenfield", String.Format("<script language=\"Javascript\">document.getElementById('" + this.hdfId.ClientID + "').value='{0}';</script>", e.Item.ItemIndex));
                 //Thêm sự kiện để thay đổi mày nền khi di chuyển con trỏ qua 1 dòng
                 e.Item.Attributes.Add("onmouseover", String.Format("javascript:DG_changeBackColor(this, true,'{0}','{1}');", e.Item.ItemIndex,this.hdfId.ClientID));
                 e.Item.Attributes.Add("onmouseout", "javascript:DG_changeBackColor(this,false);");
                //Page.RegisterStartupScript("changehiddenfield",String.Format( "<script language=\"Javascript\">document.getElementById('" + this.hdfId.ClientID + "').value='{0}';</script>",e.Item.ItemIndex));
            }

        }

Excute javascript from code behind asp

Một vài hàm quan trọng trong asp mà ta cần phải chú ý smile

((System.Web.UI.Page)HttpContext.Current.Handler).RegisterStartupScript("Status", "<script language=\"javascript\">alert('exception1--System.Web.UI.Page');</script>");

Page.RegisterStartupScript("test", "<script language=\"javascript\">alert('Page.RegisterStartupScript........');</script>");

Response.Write("<script language='javascript'>alert('Response.Writexxxxx....... !');</script>");

RadAjaxPanel1.ResponseScripts.Add("alert('RadAjaxPanel')");


Basic Chat Room Applycation in Csharp- Chương trình chat đơn giản

Có bạn đã nhờ mình viết demo đơn giản về chatRoom, bây giờ mới có tg smile
-Một demo cơ bản của lập trình socket
-Client gửi bản tin đến server, server broadcast bản tin đến tất cả các client trong Room.

Ý tưởng cơ bản :
-Server active lắng nghe ở một cổng, đợi client kết nối
-Mỗi khi client kết nối, một connection được tạo ra và lưu giữ lại vào list.
        // (3) Create a Socket for Each Client and add his Socket to The ArrayList 
        private static void AddClient(Socket sockClient)
        {
            Newclient = new SocketClient(sockClient);
            ClientsList.Add(Newclient);

            // client.Sock.RemoteEndPoint - " has joined the room"

            Byte[] byteDateLine = System.Text.Encoding.Unicode.GetBytes(" - Welcome to Our Room - ");
            Newclient.ReadOnlySocket.Send(byteDateLine, byteDateLine.Length, 0);
            Newclient.SetupRecieveCallback();
        }


-Mỗi khi nhận được bản tin từ client, server thực hiện broadcast bản tin tới tất cả các client trong danh sách các kết nối của nó.
        // (4) Send The Recieved Data to All Clients in The Room
        private static void OnRecievedData(IAsyncResult ar)
        {
            SocketClient client = (SocketClient)ar.AsyncState;
            byte[] aryRet = client.GetRecievedData(ar);

            if (aryRet.Length < 1)
            {
                // client.Sock.RemoteEndPoint - "has left the room"
                client.ReadOnlySocket.Close();
                ClientsList.Remove(client);
                return;
            }
            foreach (SocketClient clientSend in ClientsList)
            {
                try
                {
                    clientSend.ReadOnlySocket.Send(aryRet);
                }
                catch
                {
                    clientSend.ReadOnlySocket.Close();
                    ClientsList.Remove(client);
                    return;
                }
            }
            client.SetupRecieveCallback();
        }


-Ý tưởng cho việc phát triển sản phẩm chat hỗ trợ chát theo IDUser : lưu danh sách ID đăng kí,client gửi bản tin cho server thay vì cleartext thì đóng gói bản tin lại cho thêm các thông tin header (có thể là ID, IP,.. hoặc đơn giản chỉ là tag header ví dụ patterm dạng [ID]+Data), server bóc tách bản tin thay vì broadcast thì chỉ gửi cho kết nối nào trùng ID đó.
src demo :
http://www.mediafire.com/file/yumimzdmy2n/ChatRoomBasic.rar

--------------have fun && good luck !beer ---------------

TankAce update phiên bản đánh qua bluetooth

Phiên bản cũ http://my.opera.com/ThanhBinhBlog/blog/game-ban-tang-tankage-battlecity
Mình vừa viết thêm module hỗ trợ đánh đối kháng qua bluetooth cho game TankAce
Cấu trúc cơ bản (chưa có bluetooth có thể hình dung qua hình dưới )

-Mọi chức năng trước không thay đổi (bên trên smile)
-Hỗ trợ cho 2 người chơi qua bluetooth
-Game viết với mục đích học tập( awww whistle )
--------have fun ! :ym_coffee: ---------------
http://www.mediafire.com/file/0h0tz3m10z4/TankAce.rar

NHớ để lại comment nhé smile

Hồi ức SV BK-Miss BK


Get value from Telerik popup Form ASP.net


Cách Tạo popup trong ASP.net với Telerik lấy giá trị từ popup trả về mainForm

Trang chính *.jspx:
Ta sử dụng các hàm javascript sau:
    <script language="javascript" type="text/javascript" >

        //Hàm trả về kết quả từ popup được định nghĩa khi khai báo RadWindow
        function CloseMaLoaiDuToan(oWnd, args) {
            //get the transferred arguments
            var arg = args.get_argument();
            if (arg) {
                var maLoaiDuToan = arg.txtMaLoaiDuToan;
            //Cái ctl00_ContentPlaceHolder1_txtMaLoaiDT này là của TextBox 
             đã được biên dịch ra HTML rồi nên phải view suorce mới thấy đc (jscrpt củ chuối :p)
                document.getElementById("ctl00_ContentPlaceHolder1_txtMaLoaiDT").value = maLoaiDuToan;
            }
        }
        //Hàm gọi tới sự kiện mở popup khi click vào button
        function openMaLoaiDuToan() {
            var oWnd = radopen("popupLoaiDuToan.aspx", "RadWindow1");
        }
    </script> 
Ta khai báo các popup ở đây :
    <fieldset>
     <telerik:RadFormDecorator  ID="RadFormDecorator2" runat="server" Skin="Sunset" />
     <telerik:RadWindowManager  ID="RadWindowManager1" ShowContentDuringLoad="false" VisibleStatusbar="false"
        ReloadOnShow="true" runat="server" Skin="Sunset">
        <Windows>
            <telerik:RadWindow ID="RadWindow1"  Modal="true"  AutoSize="true" OnClientClose="CloseMaLoaiDuToan"
                NavigateUrl="popupPhongBan.aspx">
            </telerik:RadWindow>
        </Windows>
     </telerik:RadWindowManager>
   </div>
 </fieldset>

Sự kiện popup được gọi khi click vào button:
<asp:Button id="cmdMaLoaiDT" runat="server" Width="25px" Text="..." 
OnClientClick="javascript:openMaLoaiDuToan(); return false;" TabIndex="3">
</asp:Button></td>


//----------------------------------------------------------------------------
Tạo 1 trang jspx như bình thường cho popup
Trong file popup :
 *.jspx :
Ta sử dụng các hàm javascript sau (cho vào codeblock):
    <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
              <script  type="text/javascript" >
              //Hàm lấy giá trị của RadWinDow ta đang giữ
                  function GetRadWindow() {
                      var oWindow = null;
                      if (window.radWindow) oWindow = window.radWindow;
                      else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
                      return oWindow;
                  }

                  function AdjustRadWidow() {
                      setTimeout(function() { GetRadWindow().autoSize(true) }, 500);
                  }
             //Hamf trar vef gias trị cho form chinhs từ popup
                  function returnToParent(maLoaiDuToan) {
                      //create the argument that will be returned to the parent page
                      var oArg = new Object();
                      //biến này sẽ được trả về cho  txtmaloaidutoan của form chính
                      oArg.txtMaLoaiDuToan = maLoaiDuToan;
                      //get a reference to the current RadWindow
                      var oWnd = GetRadWindow();
                      //Close the RadWindow and send the argument to the parent page
                          oWnd.close(oArg);
                  }
    </script>

    </telerik:RadCodeBlock>


Giả sử ta muốn lấy giá trị của một record được bin trên 1 dòng của Grid ta làm như sau :
Tạo một cột là GridButtonColumn ButtonType="LinkButton" có thể cho thêm hình ảnh vào cho đẹp (:D)

         <telerik:RadGrid ID="grvLoaiDT" runat="server" OnItemDataBound="grvLoaiDT_ItemDataBound"
             AllowSorting="True" AutoGenerateColumns="False" GridLines="None"      
                 Skin="Sunset"  
                 ShowFooter="True"  
                 PageSize="10" AllowPaging="True" >
              <PagerStyle Mode="NextPrevAndNumeric" />
              <MasterTableView  width="100%" commanditemdisplay="Top" datakeynames="Id" 
              horizontalalign="NotSet" autogeneratecolumns="False">
              <RowIndicatorColumn>
              <HeaderStyle Width="20px"></HeaderStyle>
              </RowIndicatorColumn>

              <ExpandCollapseColumn>
              <HeaderStyle Width="20px"></HeaderStyle>
              </ExpandCollapseColumn>
              <Columns>
                  <telerik:GridButtonColumn UniqueName="BtnReturn" ButtonType="LinkButton" HeaderText="Chọn" 
                  Text="&lt;img src='/Images/apply.gif' border='0'&gt;" >
                  </telerik:GridButtonColumn>

                  <telerik:GridBoundColumn DataField="MaLoaiDuToan" HeaderText="Mã Loại" 
                       UniqueName="MaLoaiDuToan" >
                              
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn DataField="TenDuToan" HeaderText="Tên Loại Dự Toán" 
                       UniqueName="TenDuToan">
                    </telerik:GridBoundColumn>      
            </Columns>
            
            </MasterTableView>
            <ClientSettings EnableRowHoverStyle="true">
               <Selecting AllowRowSelect="True" />
            </ClientSettings>
            
         </telerik:RadGrid> 

Ta nhúng mã script vào linkButton trong file codebehide *.cs của popup như sau để gọi sự kiện click và trả về giá trị cho mainForm:

        protected void grvLoaiDT_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem)
            {
                GridDataItem item = (GridDataItem)e.Item;
                LinkButton lnkbtn = (LinkButton)item["BtnReturn"].Controls[0];

               //Lấy giá trị của dòng mà bạn muốn và truyền vào returnToParent 
                String maLoaiDuToan = (e.Item as GridDataItem)["MaLoaiDuToan"].Text;
                lnkbtn.Attributes.Add("onClick", "return returnToParent('" + maLoaiDuToan + "')");
                
            }
        } 

------------------------Have fun & Good Luck ! :D------------------------------------------
  
 

Cấu trúc cơ bản của 1 PE file -PE file structure by diagram

Đang định tìm hiểu về REA and ... công sức một ngày đọc về PE cũng được một ít p hay thật


------------------have fun ! && Good luck !--------------------------