Thursday, June 9, 2011

Understanding ASP.NET Dynamic Compilation

In order for your Web application to service requests, ASP.NET must first parse and compile the code of your Web application into one or more assemblies. When the code is compiled, it is translated into a language-independent and CPU-independent representation called Microsoft Intermediate Language (MSIL). At run time, MSIL runs in the context of the .NET Framework, which translates MSIL into CPU-specific instructions for the processor on the computer running the application.
ASP.NET dynamic compilation enables you to modify your source code without having to explicitly compile your code before you deploy your Web application. If you modify a source file, ASP.NET automatically recompiles the file and updates all linked resources. The IIS server does not have to be restarted for the changes to take effect unless the section has been changed.
You can extend the ASP.NET build system by creating custom build providers for new file types that are called during compilation.
By default, ASP.NET Web pages and code files are compiled dynamically when users first request a resource, such as an ASP.NET page (.aspx file), from a Web site. After pages and code files have been compiled the first time, the compiled resources are cached, so that subsequent requests to the same page are extremely efficient.
ASP.NET supports the dynamic compilation of ASP.NET pages (.aspx files), ASP.NET Web services (.asmx files), ASP.NET HTTP handlers (.ashx files) and ASP.NET application files (Global.asax), as well as other files, such as source code and class files. For more information about ASP.NET file types, see ASP.NET Web Project File Types. For more information about the ASP.NET compilation process, see the "Compilation Life Cycle" section of ASP.NET Application Life Cycle Overview for IIS 5.0 and 6.0.
Any changes to a dynamically compiled file will automatically invalidate the file's cached compiled assembly and trigger recompilation of all affected resources. The next time a request to the code is made, ASP.NET recognizes that the code has changed and recompiles the affected resources of the Web application. This system enables you to quickly develop applications with a minimum of compilation processing overhead. (Note that depending on the change to the resources, the result can range from recompiling a single page to recompiling the whole Web site.)
When the first request is made to an application, ASP.NET compiles files in a specific order. The first items to be compiled are referred to as the top-level items. After the first request, the top-level items are recompiled only if a dependency changes.
Top-level items include the App_GlobalResources folder, the App_WebResources folder, profile properties, the App_Code folder, and the Global.asax file. After the top-level items are compiled, ASP.NET compiles additional items. These items include the App_LocalResources folder, individual ASP.NET pages (.aspx files), ASP.NET user controls (.ascx files), ASP.NET HTTP Handlers (.ashx files), and ASP.NET HTTP modules (.asmx files), as well as themes, master pages, and other source files.
For more information, see ASP.NET Web Project Folder Structure and the "Compilation Life Cycle" section of ASP.NET Application Life Cycle Overview for IIS 5.0 and 6.0.
When your code is compiled, the resulting assemblies are cached in a folder on the server. This folder requires appropriate permissions so that your code compiles and runs correctly. You can configure both the compilation folder location and the permissions under which your code compiles and operates.

Compilation Folder Location

By default, when you compile a Web application the compiled code is placed in the Temporary ASP.NET Files folder. This folder is a subdirectory of the location where you installed the .NET framework. Typically, the location is the following:
%SystemRoot%\Microsoft.NET\Framework\versionNumber\Temporary ASP.NET Files

Compilation Folder Required Permissions

The .NET installation process creates the Temporary ASP.NET Files folder and assigns access permissions to the ASP.NET local user account, which has the high-trust permissions needed to access your compiled code. If you modify your configuration or account settings, you must make sure that the account you use has high-trust permissions to the Temporary ASP.NET Files folder. For additional details, see How to: Run the Worker Process Under a User Account.

Compilation Folder Configurability

ASP.NET creates a discrete subfolder under the Temporary ASP.NET File folder for each application. You can configure the root location using the tempDirectory attribute of the compilation section of the configuration file. This optional attribute enables you to specify the directory to use for temporary file storage during compilation. The default is an empty string (""). In the case of an empty string, and if the current process has the required access permissions, the files are stored in the following directory:
%FrameworkInstallLocation%\Temporary ASP.NET Files
For more information, see compilation Element (ASP.NET Settings Schema) and the TempDirectory property of the CompilationSection.
ASP.NET 2.0 supports multiple programming languages in the same Web application. In the App_Code directory, you can specify a subfolder for each language, such as C# and Visual Basic. ASP.NET will create a separate assembly for each subfolder. For more information, see Shared Code Folders in ASP.NET Web Projects and Walkthrough: Using Multiple Programming Languages in a Web Site Project.
By default, when any change is made to a top-level file in a Web site, the whole site is recompiled. Top-level files include the global.asax file and all files in the bin and App_Code folders. It is safest to recompile everything when one of these files changes because other files in the site, such as .aspx and .ascx files, may reference the objects created by code in top-level files.
While recompiling everything works fine for most applications, it could cause a very large application to be unavailable for long periods of time even when minor changes have been made to it. If the application is large enough, it could be unavailable for five to ten minutes or more after a change is made.
If you want to be able to change top-level files without causing the whole site to be recompiled, you can set the optimizeCompilations attribute of the compilation element in the Web.config file to true. If optimizeCompilations is true, when you change a top-level file only the affected files are recompiled. This saves time but can cause run-time errors depending on the type of changes you make to a top-level file.
The following kinds of changes are generally safe:
  • Changing a method implementation. Because the signature is not changed, pages compiled against the old version can call the method without throwing an exception.
  • Adding new methods or properties. Because these did not previously exist, no already-compiled pages will reference them, and no exceptions will be thrown.
  • Adding a CLR attribute to an existing member. This is a typical Dynamic Data scenario where you add attributes like DisplayName to properties. Because CLR attributes are discovered at runtime through reflection, existing pages do not have to be recompiled.
The following kinds of changes may cause run-time exceptions:
  • Renaming or deleting methods or properties. If the affected member is referenced by an already-compiled page, an exception will be thrown.
  • Changing the signature of a method, or the type of a property. If the affected member is referenced by an already-compiled page, an exception will be thrown. Some signature changes would not cause compile or run-time errors if the whole site is recompiled. For example, the code Response.Write(ClassA.MethodA() in an .aspx page will compile and run fine whether MethodA returns an int or a short. But if the .aspx page is already compiled and you change the return type of MethodA from int to short without recompiling, a runtime exception will be thrown because the compiled code expects the int signature.
If you want to use the optimizeCompilations attribute to minimize dynamic compilation time, you should carefully review each change you make to top-level files in your site, and if a particular change is not safe, temporarily remove the optimizeCompilations attribute or set it to false.
There are certain capabilities that dynamic compilation does not offer. Dynamic compilation can mean slower initial response time for users, because pages and code files must be compiled the first time they are requested. This may be an issue particularly on large sites that are updated frequently. Dynamic compilation does not offer a means to identify compile-time bugs before users access a site. Also, dynamic compilation does not provide the ability to create a compiled version of the site that can be deployed to a production server without source code. If any of these issues are concerns for your Web applications, you can precompile your Web site. For details information, see ASP.NET Precompilation Overview.

Friday, February 11, 2011

Linksys WRT54G wireless connect but no internet

http://www.anetforums.com/posts.aspx?ThreadIndex=29469

Friday, January 7, 2011

Fix Windows Media Player Cannot Stream and Play File Because Specified Protocol Is Not Supported

When user tries to stream and listen or watch audio or video from Microsoft Windows Media Services, or clicks on a hyper-link starts with mms:// syntax, Windows Media Player (WMP) may give the following error message:
Windows Media Player cannot play the file because the specified protocol is not supported. If you typed a URL in the Open URL dialog box, try using a different transport protocol (for example, “http:” or “rtsp:”).

In addition, user may also encounter the following symptoms:
  • When you click the Network tab of the Windows Media Player Options menu, nothing happens.
  • On the Windows Media Player Network tab, the “Streaming proxy settings” protocol listing is empty.
The error does not happen or occur when user plays back the media or content that is stored on a local hard disk drive or connected external mass storage device via USB or FireWire.
The problem is caused by either the wmnetmgr.dll file (located in C:\Windows\System32) is unregistered, the wmsdkns.xml file is corrupted or has incorrect permissions.
To fix the issue, use one of the following resolution methods:
Method 1
Register the wmnetmgr.dll file by using an account that is in the Administrators group. At an elevated command prompt, run the following command.:
regsvr32 wmnetmgr.dll
Method 2
Make sure that (and add in the right if necessary) the user account that is using Windows Media Player has Modify permissions for the wmsdkns.xml file, using the file properties Security tab.
Note: In Windows Vista, the file is located in the C:\Users\Username\AppData\Local\Microsoft\Windows Media\11.0 folder. In Windows XP, the file is located in the C:\Documents and Settings\UserName\Local Settings\Application Data\Microsoft\Windows Media\11.0 folder.
Method 3
Delete the wmsdkns.xml file. Windows Media Player will re-create the wmsdkns.xml file upon deletion.
Note: In Windows Vista, the file is located in the C:\Users\Username\AppData\Local\Microsoft\Windows Media\11.0 folder. In Windows XP, the file is located in the C:\Documents and Settings\UserName\Local Settings\Application Data\Microsoft\Windows Media\11.0 folder.
Another possible reason for the error because the file type association for URL:MMS protocol has not be assigned properly. Here’s the fix for Windows Media Player does not handle URL:MMS stream protocol.

What does the @ symbol do in PHP?

QUESTION
========

Can someone explain thise line of code to me, I cannot find a refernece in
the manual to using the @ symbol.

$this->Record = @pg_fetch_array($this->Query_ID, $this->Row++);


ANSWER
======

Adding the "@" symbol in front of any function call will suppress any
PHP-generated error messages from that function call. In general, this is
used to prevent users from seeing nasty error messages when you have
coded something incorrectly.

That means that if that function generates a non-fatal error (warning) it
will not display the warning message in your HTML, rather just return false
and let the program cope with it.


an @ symbol in front of the mysql_query function. Many functions, including mysql_query, automatically display ugly error messages when they fail. Placing the @ symbol (also known as the error suppression operator) in front of the function name tells the function to fail silently, and allows us to display our own, friendlier error message.

Source(s):

http://www.sitepoint.com/article/publishing-mysql-data-web
  • 4 years ago

php mysql data access class

http://scripts.ringsworld.com/quote-display/trotator/ez-sql.php.html


  
// ==================================================================
  //  Author: Justin Vincent (justin  visunet  ie)
  //  Web:  http://php.justinvincent.com
  //  Name:   ezSQL
  //  Desc:   Class to make it very easy to deal with mySQL database connections.
  //
  // !! IMPORTANT !!
  //
  //  Please send me a mail telling me what you think of ezSQL
  //  and what your using it for!! Cheers. [ justin  visunet  ie ]
  //
  // ==================================================================

// user database settings
  
define("EZSQL_DB_USER",  "");
  
define("EZSQL_DB_PASSWORD",  "");
  
define("EZSQL_DB_NAME",  "test");
  
define("EZSQL_DB_HOST",  ""); // end of user database settings

  // ==================================================================
  //  ezSQL Constants
  
define("EZSQL_VERSION", "1.18");
  
define("OBJECT", "OBJECT", true);
  
define("ARRAY_A", "ARRAY_A", true);
  
define("ARRAY_N", "ARRAY_N", true);
  
  
// ==================================================================
  //  The Main Class

  
class stp_db {

    var 
$debug_called;
    var 
$vardump_called;
    var 
$show_errors true;

    
// ==================================================================
    //  DB Constructor - connects to the server and selects a database

    
function stp_db($dbuser,  $dbpassword,  $dbname,  $dbhost)
    {

      
$this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);

      if ( ! 
$this->dbh )
      {
        
$this->print_error("
    Error establishing a database connection!
  1. Are you sure you have the correct user/password?
  2. Are you sure that you have typed the correct hostname?
  3. Are you sure that the database server is running?
"
);
      }


      
$this->select($dbname);

    }

    
// ==================================================================
    //  Select a DB (if another one needs to be selected)

    
function select($db)
    {
      if ( !@
mysql_select_db($db, $this->dbh))
      {
        
$this->print_error("
    Error selecting database $db!
  1. Are you sure it exists?
  2. Are you sure there is a valid database connection?
"
);
      }
    }

    
// ====================================================================
    //  Format a string correctly for safe insert under all PHP conditions
    
    
function escape($str)
    {
      return 
mysql_escape_string(stripslashes($str));       
    }

    
// ==================================================================
    //  Print SQL/DB error.

    
function print_error($str "")
    {
      
      
// All erros go to the global error array $EZSQL_ERROR..
      
global $EZSQL_ERROR;

      
// If no special error string then use mysql default..
      
if ( !$str $str mysql_error();
      
      
// Log this error to the global array..
      
$EZSQL_ERROR[] = array 
              (
                
"query" => $this->last_query,
                
"error_str"  => $str
              
);

      
// Is error output turned on or not..
      
if ( $this->show_errors )
      {
        
// If there is an error then take note of it
        
print "
";
        print 
"SQL/DB Error -- ";
        print 
"[$str]";
        print 
"
"
;
        
/*
        global $PHP_SELF;
        $sqllog = fopen('sqllog',  'a');
        fwrite($sqllog,  "\n\n----\n");
        fwrite($sqllog,  $this->last_query."\n");
        fwrite($sqllog,  $PHP_SELF."\n");
        fclose($sqllog);
        */
      
}
      else
      {
        return 
false
      }

    }

    
// ==================================================================
    //  Turn error handling on or off..

    
function show_errors()
    {
      
$this->show_errors true;
    }
    
    function 
hide_errors()
    {
      
$this->show_errors false;
    }

    
// ==================================================================
    //  Kill cached query results

    
function flush()
    {

      
// Get rid of these
      
$this->last_result null;
      
$this->col_info null;
      
$this->last_query null;

    }

    
// ==================================================================
    //  Basic Query - see docs for more detail

    
function query($query)
    {

      
// Flush cached values..
      
$this->flush();

      
// Log how the function was called
      
$this->func_call "\$db->query(\"$query\")";

      
// Keep track of the last query for debug..
      
$this->last_query $query;

      
// Perform the query via std mysql_query function..
      
$this->result mysql_query($query, $this->dbh);

      
// If there was an insert,  delete or update see how many rows were affected
      // (Also,  If there there was an insert take note of the insert_id
      
$query_type = array("insert", "delete", "update");

      
// loop through the above array
      
foreach ( $query_type as $word )
      {
        
// This is true if the query starts with insert,  delete or update
        
if ( preg_match("/$word /i", $query) )
        {
          
$this->rows_affected mysql_affected_rows();
          
          
// This gets the insert ID
          
if ( $word == "insert" )
          {
            
$this->insert_id mysql_insert_id($this->dbh);
          }
          
          
$this->result false;
        }
        
      }
   
      if ( 
mysql_error() )
      {

        
// If there is an error then take note of it..
        
$this->print_error();

      }
      else
      {

        
// In other words if this was a select statement..
        
if ( $this->result )
        {

          
// =======================================================
          // Take note of column info

          
$i=0;
          while (
$i < @mysql_num_fields($this->result))
          {
            
$this->col_info[$i] = @mysql_fetch_field($this->result);
            
$i++;
          }

          
// =======================================================
          // Store Query Results

          
$i=0;
          while ( 
$row = @mysql_fetch_object($this->result) )
          {

            
// Store relults as an objects within main array
            
$this->last_result[$i] = $row;

            
$i++;
          }

          
// Log number of rows the query returned
          
$this->num_rows $i;

          @
mysql_free_result($this->result);


          
// If there were results then return true for $db->query
          
if ( $i )
          {
            return 
true;
          }
          else
          {
            return 
false;
          }

        }
        else
        {
          
// Update insert etc. was good..
          
return true;
        }
      }
    }

    
// ==================================================================
    //  Get one variable from the DB - see docs for more detail

    
function get_var($query=null, $x=0, $y=0)
    {

      
// Log how the function was called
      
$this->func_call "\$db->get_var(\"$query\", $x, $y)";

      
// If there is a query then perform it if not then use cached results..
      
if ( $query )
      {
        
$this->query($query);
      }

      
// Extract var out of cached results based x, y vals
      
if ( $this->last_result[$y] )
      {
        
$values array_values(get_object_vars($this->last_result[$y]));
      }

      
// If there is a value return it else return null
      
return (isset($values[$x]) && $values[$x]!=='')?$values[$x]:null;
    }

    
// ==================================================================
    //  Get one row from the DB - see docs for more detail

    
function get_row($query=null, $output=OBJECT, $y=0)
    {

      
// Log how the function was called
      
$this->func_call "\$db->get_row(\"$query\", $output, $y)";

      
// If there is a query then perform it if not then use cached results..
      
if ( $query )
      {
        
$this->query($query);
      }

      
// If the output is an object then return object using the row offset..
      
if ( $output == OBJECT )
      {
        return 
$this->last_result[$y]?$this->last_result[$y]:null;
      }
      
// If the output is an associative array then return row as such..
      
elseif ( $output == ARRAY_A )
      {
        return 
$this->last_result[$y]?get_object_vars($this->last_result[$y]):null;
      }
      
// If the output is an numerical array then return row as such..
      
elseif ( $output == ARRAY_N )
      {
        return 
$this->last_result[$y]?array_values(get_object_vars($this->last_result[$y])):null;
      }
      
// If invalid output type was specified..
      
else
      {
        
$this->print_error(" \$db->get_row(string query,  output type,  int offset) -- Output type must be one of: OBJECT,  ARRAY_A,  ARRAY_N");
      }

    }

    
// ==================================================================
    //  Function to get 1 column from the cached result set based in X index
    // se docs for usage and info

    
function get_col($query=null, $x=0)
    {

      
// If there is a query then perform it if not then use cached results..
      
if ( $query )
      {
        
$this->query($query);
      }

      
// Extract the column values
      
for ( $i=0$i count($this->last_result); $i++ )
      {
        
$new_array[$i] = $this->get_var(null, $x, $i);
      }

      return 
$new_array;
    }

    
// ==================================================================
    // Return the the query as a result set - see docs for more details

    
function get_results($query=null,  $output OBJECT)
    {

      
// Log how the function was called
      
$this->func_call "\$db->get_results(\"$query\",  $output)";

      
// If there is a query then perform it if not then use cached results..
      
if ( $query )
      {
        
$this->query($query);
      }

      
// Send back array of objects. Each row is an object
      
if ( $output == OBJECT )
      {
        return 
$this->last_result;
      }
      elseif ( 
$output == ARRAY_A || $output == ARRAY_N )
      {
        if ( 
$this->last_result )
        {
          
$i=0;
          foreach( 
$this->last_result as $row )
          {

            
$new_array[$i] = get_object_vars($row);

            if ( 
$output == ARRAY_N )
            {
              
$new_array[$i] = array_values($new_array[$i]);
            }

            
$i++;
          }

          return 
$new_array;
        }
        else
        {
          return 
null;
        }
      }
    }


    
// ==================================================================
    // Function to get column meta data info pertaining to the last query
    // see docs for more info and usage

    
function get_col_info($info_type="name", $col_offset=-1)
    {

      if ( 
$this->col_info )
      {
        if ( 
$col_offset == -)
        {
          
$i=0;
          foreach(
$this->col_info as $col )
          {
            
$new_array[$i] = $col->{$info_type};
            
$i++;
          }
          return 
$new_array;
        }
        else
        {
          return 
$this->col_info[$col_offset]->{$info_type};
        }

      }

    }


    
// ==================================================================
    // Dumps the contents of any input variable to screen in a nicely
    // formatted and easy to understand way - any type: Object,  Var or Array

    
function vardump($mixed)
    {

      echo 
"
";
      echo 
"
";



      if ( ! $this->vardump_called )

      {

        echo "ezSQL (v".EZSQL_VERSION.") Variable Dump..\n\n";

      }



      $var_type gettype ($mixed);

      print_r(($mixed?$mixed:"No Value / False"));

      echo "\n\nType: " ucfirst($var_type) . "\n";

      echo "Last Query: ".($this->last_query?$this->last_query:"NULL")."\n";

      echo "Last Function Call: " . ($this->func_call?$this->func_call:"None")."\n";

      echo "Last Rows Returned: ".count($this->last_result)."\n";

      echo "
If ezSQL has helped you why not make a donation!?"
;
      echo 
"\n";

      
$this->vardump_called true;

    }

    
// Alias for the above function
    
function dumpvar($mixed)
    {
      
$this->vardump($mixed);
    }

    
// ==================================================================
    // Displays the last query string that was sent to the database & a
    // table listing results (if there were any).
    // (abstracted into a seperate file to save server overhead).

    
function debug()
    {

      echo 
"
";

      
// Only show ezSQL credits once..
      
if ( ! $this->debug_called )
      {
        echo 
"ezSQL (v".EZSQL_VERSION.") Debug..\n";
      }
      echo 
"Query -- ";
      echo 
"[$this->last_query]";

        echo 
"Query Result..";
        echo 
"
";

      if ( 
$this->col_info )
      {

        
// =====================================================
        // Results top rows

        
echo "";
        echo 
"(row)";


        for ( 
$i=0$i count($this->col_info); $i++ )
        {
          echo 
"{$this->col_info[$i]->type} {$this->col_info[$i]->max_length}
{$this->col_info[$i]->name}";
        }

        echo 
"";

        
// ======================================================
        // print main results

      
if ( $this->last_result )
      {

        
$i=0;
        foreach ( 
$this->get_results(null, ARRAY_N) as $one_row )
        {
          
$i++;
          echo 
"$i";

          foreach ( 
$one_row as $item )
          {
            echo 
"$item";
          }

          echo 
"";
        }

      } 
// if last result
      
else
      {
        echo 
".(count($this->col_info)+1).">No Results";
      }

      echo 
"";

      } 
// if col_info
      
else
      {
        echo 
"No Results";
      }

      echo 
"
If ezSQL has helped you why not make a donation!?"
;


      
$this->debug_called true;
    }


  function 
get_cache($query '',  $refresh_rate 600) {
    
$fname md5(strtolower($query));
    
$filename CACHE_PATH '/' $fname;

    global 
$cache_log;

    if (
file_exists($filename)) {
      
$cache_timestamp filemtime($filename);
      
$timediff time() - $cache_timestamp;
    } else {
      
$no_file 1;
    }

    if (
$no_file || $query && ($timediff $refresh_rate)) {
      
$results_array $this->get_results($query);

      if (!
mysql_error()) {
        
$array_s serialize($results_array);
        
$file fopen($filename, 'w');
        
fwrite($file,  $array_s);
        
fclose($file);
      }

      
$cache_log[] = "$fname
"
.htmlspecialchars($query)."";

      return 
$results_array;
    } else {
      
$flen filesize($filename);
      
$file fopen($filename,  'r');
      
$results_array fread($file,  $flen);
      
fclose($file);

      
$cache_log[] = "$fname
"
.htmlspecialchars($query)."";
      
      return 
unserialize($results_array);
    }
  }
}
$db = new stp_db(EZSQL_DB_USER,  EZSQL_DB_PASSWORD,  EZSQL_DB_NAME,  EZSQL_DB_HOST);
?>