In administrator/components/com_media/models/list.php line 154 add

case 'pdf':
if (strpos($_SERVER['REQUEST_URI'],"imagesList")) {
$images[] = $tmp;
} else {
$docs[] = $tmp;
}

In administrator/components/com_media/assets/popup-imagemanager.js and components/com_media/assets/popup-imagemanager.js line 120 add

if (url.match('.pdf'+"$")=='.pdf') {
if (alt == '' && url.lastIndexOf("/")>1) {
alt = url.substr(url.lastIndexOf("/") + 1); }
if (title == '') { extra = 'title="'+title+'" '; }
tag = "<a href=\""+url+"\" "+extra+">"+alt+"</a>";
}

In plugins\editors\tinymce\jscripts\tiny_mce\themes\advanced\link.htm line 48 add

<tr><td colspan="2">Note: To upload a PDF file and link to it you can use the Image link below the editor.</td></tr>
 
To add the site title to the page title on every page, in the template's index.php file add this after the head:
<?php
$document =& JFactory::getDocument();
$document->setTitle($mainframe->getCfg('sitename') . " - " . $document->title);
?>

Configure.php is the template for the print popup. To get the print popup to work in IE edit components/com_content/helpers/icon.php and replace the $attribs['onlick'] line with this:

if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),"msie") > 0) {
   $attribs['target'] = '_blank';
  } else {
   $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;";
  }

To get MooTools to load on every page after <jdoc:include type="head" /> add <?php JHTML::_(;behaviour.mootools');?> in the template index.php file.  If you don't do this and you use mootools in your template you may get javascript errors on pages with forms.
 
To add links to your SQL Server Reporting Services reports right click on the tex box, select Properties and go to the Navigation tab.  In the Hyperlink action section at the bottom select the Jump to URL option and add some javascript similar to this:

="javascript:void(window.location.href='/somewebpage.aspx?id=" + Fields!SomeField.Value + "')"

You can of course use window.open as well to open the page in a new windows, and you may want to change the text colour to show that is it a link.
 
I originally tried this using a sub-query like:

SELECT Users.UserName, Items.ItemName FROM Users INNER JOIN Items WHERE Items.UserID = Users.UserID WHERE ItemID = (SELECT TOP 1 ItemID FROM Items WHERE UserID=Users.UserID ORDER BY Items.ItemDate DESC)

This worked but was prohibitively slow (the full query took 24 minutes).  I found a much more efficient way to do it was like this:

SELECT Users.UserName, Items.ItemName FROM Users INNER JOIN (SELECT UserID, MAX(ItemDate) AS ItemDate FROM Items GROUP BY UserID) AS UserItemDate ON UserItemDate.UserID = Users.UserID INNER JOIN Items ON Item.UserID = Users.UserID AND Item.ItemDate = UserItemDate.ItemDate

This produced the same results much faster (21 seconds).  In my case I actually made the UserItemDate query a view as I had to use it a couple of times.  Note however that it can return multiple items for a user if they have the same date.
 
To concatenate mpeg videos use
copy /b "movie1.mpg" + "movie2.mpg" movie_cat.mpg
in windows or
cat movie1.mpg movie2.mpg > movie_cat.mpg
in linux.  Then use ffmpeg or winff to convert the concatenated file again to get all the header information right.

To add a commonly used video conversion to the right-click on windows open regedit and add a new key called Convert (or whatever you want the option in the right-click menu to be called) to the shell folder of the source file type in HKEY_LOCAL_MACHINE\SOFTWARE\Classes, for example VLC.mod. Then to that add a key called command and give it a value like "C:\Program Files\WinFF\convert.bat" "%1".  In the bat file you can have your ffmpeg conversion like ffmpeg.exe -a %1 <options> %1.mpg to conver filename.mod to filename.mod.mpg.  You can get option ideas from WinFF by looking at Edit - Presets.
 
 
 
This is sweet, this makes long text in fixed width drop down lists (or HTML selects) wrap to the next line.  It's all done client side so you can still use data sources to populate your list first.  Works in FF, IE8 and IE7.  In your code behind add an onclick event to your drop down list like this:

ddl.Attributes.Add("onclick", "DDexpand(this);");

Then add this to the bottom of your page:

<
ul id="ddexpanded" style="display:none; position:absolute; width:430px; border:1px solid black; background-color:White; font-family:Arial; font-size:smaller; list-style-type:none; padding-left:0px; margin-left:1px; cursor:default;">

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

<li style="padding-left:2px;" onmouseover="this.style.backgroundColor='lightblue'" onmouseout="this.style.backgroundColor=''"></li>

</ul>

<script type="text/javascript">
document.onclick = click;
//close the drop down if you've click anywhere else
function click(e) {
var ul = document.getElementById("ddexpanded");
if (!e) var e = window.event;
var clicked = e.srcElement || e.target;
if (clicked.tagName != "SELECT")
if (ul.style.display == "") ul.style.display = "none";
}

//expand the drop down list when it is clicked
function DDexpand(ddl) {
//move the new list to under the drop down
var yoffset = (navigator.appVersion.indexOf("MSIE 7")>0) ? 26 : 6;
var ul = document.getElementById("ddexpanded");
ul.style.top = getY(ddl) + yoffset +
"px";
ul.style.left = getX(ddl) +
"px";

//set the list elements to the drop down elements and set onclick to select the item
//ul.getElementsByTagName is required because firefox adds rubbish to ul.childNodes
var lis = ul.getElementsByTagName("li");
for (i=0; i<ddl.options.length; i++)
{
//innerHTML required becuase firefox does not do innerText
lis[i].innerHTML = ddl.options[i].text;
lis[i].style.display =
"";"";
if (ddl.options[i].selected) lis[i].style.backgroundColor='lightblue';
//switch required because ddl.options[i] uses the final value of i, not the current value
switch (i) {
case 0: lis[i].onclick = function() { ddl.options[0].selected = true; }; break;
case 1: lis[i].onclick = function() { ddl.options[1].selected = true; }; break;
case 2: lis[i].onclick = function() { ddl.options[2].selected = true; }; break;
case 3: lis[i].onclick = function() { ddl.options[3].selected = true; }; break;
case 4: lis[i].onclick = function() { ddl.options[4].selected = true; }; break;
case 5: lis[i].onclick = function() { ddl.options[5].selected = true; }; break;
case 6: lis[i].onclick = function() { ddl.options[6].selected = true; }; break;
case 7: lis[i].onclick = function() { ddl.options[7].selected = true; }; break;
case 8: lis[i].onclick = function() { ddl.options[8].selected = true; }; break;
case 9: lis[i].onclick = function() { ddl.options[9].selected = true; }; break;
}
}

//hide unused list elements
for (i=ddl.options.length; i<lis.length; i++)
{
lis[i].innerHTML =
"";
lis[i].style.display =
"none";
}

//show the drop down list
if (ul.style.display == "") {
ul.style.display =
"none";
}
else {
ul.style.display =
"";
}

//close the normal drop down, do this last so if something breaks the normal drop down still works
ddl.blur();
}

//get element Y position
function getY( oElement )
{
var iReturnValue = 0;
while( oElement != null ) {
iReturnValue = iReturnValue + oElement.offsetTop;
oElement = oElement.offsetParent;
}
return iReturnValue;
}

//get element X position
function getX( oElement )
{
var iReturnValue = 0;
while( oElement != null ) {
iReturnValue = iReturnValue + oElement.offsetLeft;
oElement = oElement.offsetParent;
}
return iReturnValue;
}
</script>
 
SELECT t.name AS table_name,
SCHEMA_NAME(schema_id)ASschema_name,
c.name AS column_name
FROMsys.tablesAS t
INNERJOINsys.columns c ON t.OBJECT_ID= c.OBJECT_ID
WHERE c.name LIKE'%ProgramID%'
ORDERBYschema_name, table_name;
 
To update the table styles available when creating new reports in SQL Server Reporting Services via the report wizard, edit this file:
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\Business Intelligence Wizards\Reports\Styles\en\StyleTemplates.xml.

To create a customised report template, for example adding a company logo or background, edit this file or add another .rdl next to it:
C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\ProjectItems\ReportProject\Report.rdl
 
One of the annoying things about DataGrids and other .NET data controls is that they dissapear when they contain no data.  There is the EmptyDataTemplate but that does not show your table headers and footers.  There are a few solutions around like overriding the GridView control to add a new attribute, but I have found a simpler way. 

If you can change your datasource to always append a blank data row on the end so it always contains data, you can hid that row as it is data bound, leaving the header and footer showing.  I did this by using the SQL UNION keyword in my SelectCommand to return a row with empty values and an ID of 0.  Then in the GridView RowDataBound event you can set the row visibility to 0.
 
SelectCommand="SELECT SomeID, SomeData FROM SomeTable UNION SELECT 0 AS SomeID, null AS SomeData ORDER BY SomeData"

protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
DataRowView dr = (DataRowView)
e.Row.DataItem;
if (e.Row.RowType == DataControlRowType.DataRow && dr["SomeID"].ToString() == "0"
)
e.Row.Visible = false;
}

I have also used the same idea with FormView controls so that I can use the same form for handling inserts and updates rather than having to duplicate them in the InsertItemTemplate and EditItemTemplate tags.