<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7154303160504228360</id><updated>2024-11-08T07:03:41.136-08:00</updated><category term="scripting"/><category term="powershell"/><category term="windows"/><category term="active directory"/><category term="sccm"/><category term="vbs"/><category term="bash"/><category term="ccv"/><category term="multi touch"/><category term="raspbmc"/><category term="android"/><category term="blogger"/><category term="dhcp"/><category term="goggles"/><category term="google"/><category term="nuigroup"/><category term="processing"/><category term="prowl"/><category term="raspberrypi"/><category term="security"/><category term="syntaxhighlighter"/><category term="ubiquiti"/><title type='text'>techpppp</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-8161998609771962461</id><published>2016-09-29T02:27:00.000-07:00</published><updated>2016-09-29T02:27:27.060-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="active directory"/><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>Checking for Active Directory password filters</title><content type='html'>As Microsoft puts it, &quot;Password filters provide a way for you to implement password policy and change notification.&quot;

The other day , I read hackers were registering password filters to catch user passwords, following the revelation of the &lt;a href=&quot;https://securelist.com/analysis/publications/75533/faq-the-projectsauron-apt/&quot;&gt;Project Sauron APT&lt;/a&gt; .

Therefore, I had to check if any malicious password filters were installed on my domain controllers.

One line of Powershell is enough :-)

&lt;pre class=&quot;brush: powershell&quot;&gt;$lsa=Get-ADDomainController -Filter * | %{Invoke-Command -ComputerName $_.Hostname {ls HKLM:\SYS
TEM\CurrentControlSet\Control\Lsa}}&lt;/pre&gt;

Now check the $lsa object for &quot;Notification Packages&quot;
For example, you can pipe it to &lt;a href=&quot;https://technet.microsoft.com/en-us/library/hh849920.aspx&quot;&gt;Out-GridView&lt;/a&gt; and use the search field.

More info on registering password filters registration :
https://msdn.microsoft.com/en-us/library/windows/desktop/ms721766(v=vs.85).aspx</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/8161998609771962461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2016/09/checking-for-active-directory-password.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/8161998609771962461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/8161998609771962461'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2016/09/checking-for-active-directory-password.html' title='Checking for Active Directory password filters'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-1080010186244703301</id><published>2015-02-01T09:33:00.002-08:00</published><updated>2015-02-01T09:34:46.921-08:00</updated><title type='text'>iPhone not syncing after Exchange 2013 migration</title><content type='html'>My customer was doing a migration from Microsoft Exchange Server 2010 to 2013.&lt;br /&gt;
The first step was to setup the &lt;a href=&quot;http://exchangeserverpro.com/exchange-server-2010-2013-migration-preparing-co-existence/&quot; target=&quot;_blank&quot;&gt;coexistence&lt;/a&gt; between the old and the new environment.&lt;br /&gt;
&lt;br /&gt;
When the coexistence went live, some users reported they were constantly being prompted for their password on their iPhones.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Root cause&lt;/b&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Tahoma, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12.8127994537354px;&quot;&gt;the Active Sync device (in this case iPhone) is not specifying the Active Directory domain.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Workarounds&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Recreate the Exchange account on the iPhone solved the problem, setting the domain&lt;/li&gt;
&lt;li&gt;Set the &quot;domain&quot; field to the name of your Active Directory domain on the iPhone&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
see the Apple support page for screenshots &lt;a href=&quot;http://support.apple.com/en-us/HT201729&quot;&gt;http://support.apple.com/en-us/HT201729&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Solution&lt;/b&gt;&lt;br /&gt;
Specify a default domain on the IIS servers of the Exchange CAS&lt;br /&gt;
&lt;a href=&quot;http://msexchangeguru.com/2013/08/06/e2013mobiledomain/&quot;&gt;http://msexchangeguru.com/2013/08/06/e2013mobiledomain/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Validate solution&lt;/b&gt;&lt;br /&gt;
Finally, we wanted to check if EAS devices were successfully syncing (=that the problem was gone).&lt;br /&gt;
&lt;br /&gt;
The below (long) command will give you the difference between the last attempt to sync mail and the last succesful attempt.You should &lt;a href=&quot;http://www.computerperformance.co.uk/powershell/powershell_pipeline.htm&quot; target=&quot;_blank&quot;&gt;pipe&lt;/a&gt; this to &lt;a href=&quot;https://technet.microsoft.com/en-us/library/ee176825.aspx&quot; target=&quot;_blank&quot;&gt;Export-csv&lt;/a&gt;&amp;nbsp;in order to import it into Excel for analysis, sort by the &quot;SyncdiffHours&quot; field to get an idea if any issues are remaining.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;
Get-Mailbox -Filter * -ResultSize Unlimited | %{Get-MobileDeviceStatistics -Mailbox $_}
| select Identity,DeviceModel,LastSyncAttemptTime,LastSuccessSync,@{n=&quot;SyncdiffHours&quot;;e={(New-TimeSpan -start $_.LastSy
ncAttemptTime -End $_.LastSuccessSync).Hours}}
&lt;/pre&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/1080010186244703301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2015/02/iphone-not-syncing-after-exchange-2013.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/1080010186244703301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/1080010186244703301'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2015/02/iphone-not-syncing-after-exchange-2013.html' title='iPhone not syncing after Exchange 2013 migration'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-552023770929064090</id><published>2014-08-11T10:05:00.001-07:00</published><updated>2014-08-11T10:05:26.202-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="active directory"/><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><title type='text'>Powershell - check if members of a group are members of another group</title><content type='html'>&lt;div&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;
import-module activedirectory

foreach ($u in Get-ADGroupMember -Identity &quot;Users&quot;)
{
  if(-not (Get-ADPrincipalGroupMembership $u| ?{$_.Name -eq &quot;Domain Users&quot;})){write-host $u &quot; is missing from Domain Users&quot;}  

}
&lt;/pre&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/552023770929064090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2014/08/powershell-check-if-members-of-group.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/552023770929064090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/552023770929064090'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2014/08/powershell-check-if-members-of-group.html' title='Powershell - check if members of a group are members of another group'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-6192726365303006887</id><published>2014-07-31T05:38:00.001-07:00</published><updated>2014-07-31T05:41:08.312-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="active directory"/><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Poor man&#39;s IP to to Username, using Powershell &amp; Domain Controller logs</title><content type='html'>This customer had many offices and needed to get rid of Windows XP machines.&lt;div&gt;
Due to the lack of inventory and computer management, we were unable to know who were the people behind them!&lt;/div&gt;
&lt;div&gt;
Ping and remote access were shut off from the host so we couldn&#39;t gather information via WMI.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
But the &lt;a href=&quot;http://blogs.technet.com/b/askds/archive/2009/04/15/the-lastlogontimestamp-attribute-what-it-was-designed-for-and-how-it-works.aspx&quot; target=&quot;_blank&quot;&gt;LastLogonTimeStamp&lt;/a&gt; was being updated for these computers which led us to believe they were still in use.&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;The solution I came up with :&lt;/b&gt; &lt;span style=&quot;background-color: yellow;&quot;&gt;if someone was still using these XP machines, they were authenticating against the domain controllers, and a &quot;logon event&quot; was created with the source ip and the username.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Once you load the quick and dirty function called &quot;Get-UserName-for_PC-by-DC-events (silly name sorry), run these 2 commands to get some results&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;
Import-module ActiveDirectory
Get-ADComputer -Filter {Enabled -eq $true -and operatingsystem -like &#39;*xp*&#39;} -Properties IPv4Address | %{Get-UserName-for-PC-by-DC-events -DCname &quot;DC01&quot; -Ip $_.IPv4Address}&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
7/31/2014 1:18:33 PM &amp;nbsp;-- &amp;nbsp;john.doe at this address --&amp;gt; &amp;nbsp;10.26.1.15 &amp;nbsp;using &amp;nbsp;Kerberos&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A nice enhancement would be to query all domain controllers.&lt;/div&gt;
&lt;div&gt;
Finally, your mileage may vary depending on how big your security logs are, how often they rotate and how often these XP users log on (you could run a scheduled task)&lt;/div&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;
Function Get-UserName-for-PC-by-DC-events
{
  param(
        [Parameter(Mandatory=$True)]
        [string]$DCname,
        [Parameter(Mandatory=$True)]
        [string]$Ip
       )
    $xpathfilter = &#39;Event[System[EventID=4624] and EventData[Data[@Name=&quot;IpAddress&quot;]=&quot;&#39;+$ip+&#39;&quot;]]&#39;

    Foreach ($event in get-winevent -ComputerName $DCname -LogName Security -FilterXPath $xpathfilter -MaxEvents 1)
    {
        Write-host $event.TimeCreated &quot; -- &quot; $event.Properties[5].Value &quot;at this address --&gt; &quot; $event.Properties[18].Value &quot; using &quot; $event.Properties[9].Value

    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/6192726365303006887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2014/07/poor-mans-ip-to-to-username-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/6192726365303006887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/6192726365303006887'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2014/07/poor-mans-ip-to-to-username-using.html' title='Poor man&#39;s IP to to Username, using Powershell &amp; Domain Controller logs'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-4499938550445011718</id><published>2014-07-16T07:34:00.001-07:00</published><updated>2014-07-16T07:49:43.354-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bash"/><category scheme="http://www.blogger.com/atom/ns#" term="dhcp"/><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>DCHP server migration from Debian to Windows Server 2008</title><content type='html'>My customer wanted to migrate DHCP server function from
Debian Wheezy 7.50 running ISC-DHCP to Windows Server 2008.&lt;br /&gt;
The task can broken in 6 parts&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;parse dhcpd.conf on the DHCP server (Linux)&lt;/li&gt;
&lt;li&gt;import the parsed file to your *new* DHCP server&lt;/li&gt;
&lt;li&gt;setup DHCP role on *new*server&lt;/li&gt;
&lt;li&gt;run a script on the *new* DHCP server which creates scopes,pools and reservations (Windows) according to the parsed file.&lt;/li&gt;
&lt;li&gt;manually rename the scopes to &quot;friendly&quot; names&lt;/li&gt;
&lt;li&gt;manually set the server,scope and/or reservation options and scope lease times&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;Parse dhcpd.conf&lt;/b&gt;&lt;br /&gt;
get this great AWK parser onto the Debian box&amp;nbsp;&lt;a href=&quot;https://gist.github.com/mattpascoe/4039747&quot;&gt;https://gist.github.com/mattpascoe/4039747&lt;/a&gt;&lt;br /&gt;
make it executable&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
chmod&amp;nbsp;+x dhcpparse.awk&lt;/div&gt;
parse the file&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
cat /etc/dhcp/dhcpd.conf | dhcpparse.awk &amp;gt; dhcp-config.txt&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Import the parsed file to your Windows Server&lt;/b&gt;&lt;br /&gt;
have a look at it to remove errors.&lt;br /&gt;
&lt;b&gt;Setup DHCP role on Windows Server&lt;/b&gt;&lt;br /&gt;
skipping this part as it&#39;s pretty self explanatory&lt;br /&gt;
&lt;b&gt;Run script&lt;/b&gt;&lt;br /&gt;
You will need &lt;a href=&quot;http://gallery.technet.microsoft.com/scriptcenter/05b1d766-25a6-45cd-a0f1-8741ff6c04ec&quot; target=&quot;_blank&quot;&gt;this Powershell &lt;u&gt;module&lt;/u&gt;&lt;/a&gt;&amp;nbsp;, referred to as &quot;Microsoft.DHCP.Powershell.Admin.psm1&quot; in the script. If Window Server is version 2012 R2 , I guess you can use the &lt;a href=&quot;http://technet.microsoft.com/en-us/library/jj590751.aspx&quot; target=&quot;_blank&quot;&gt;DHCP server cmdlets from Microsoft&lt;/a&gt; instead.&lt;br /&gt;
You will also need to make a Powershell module -which is a combination of &lt;a href=&quot;http://stackoverflow.com/questions/8365537/checking-for-a-range-in-powershell&quot; target=&quot;_blank&quot;&gt;this&lt;/a&gt; function and &lt;a href=&quot;http://gallery.technet.microsoft.com/scriptcenter/List-the-IP-addresses-in-a-60c5bb6b&quot; target=&quot;_blank&quot;&gt;this&lt;/a&gt; function. Just add one function under the other and put the line &quot;export-modulemember IsIpAddressInRange,Get-IPrange&quot;. This module is referred as &quot;IPutil.psm1&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;Import-Module .\Microsoft.DHCP.Powershell.Admin.psm1

Import-Module .\IPutil.psm1



#Group by line types

$subnets = Select-String -Pattern &#39;subnet&#39; -Path .\dhcp-config.txt |%{$_.Line}

$pools = Select-String -Pattern &#39;pool&#39; -Path .\dhcp-config.txt | %{$_.Line}

$hosts = Select-string -Pattern ‘host’ -path &amp;nbsp;.\dhcp-config.txt |%{$_.Line}



#Create scopes

$scopes = $subnets |%{$l=$_.Split(&#39;,&#39;); New-DHCPScope -Server $env:COMPUTERNAME -Address $l[1] -SubnetMask $l[2] -Name $l[3]}





foreach ($scope in $scopes)

{

&amp;nbsp; &amp;nbsp; # generate all the IP addresses in this scope

&amp;nbsp; &amp;nbsp; $ips=Get-IPrange -ip $scope.Address -mask $scope.SubnetMask

&amp;nbsp; &amp;nbsp; # Create pools

&amp;nbsp; &amp;nbsp; Write-host &quot;Creating pool(s) for &quot; $scope.Address

&amp;nbsp; &amp;nbsp; foreach ($line in $pools)

&amp;nbsp; &amp;nbsp; {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if($ips -contains $line.split(&#39;,&#39;)[1])

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Add-DhcpIPRange -scope $scope -startaddress $line.split(&#39;,&#39;)[1] -endaddress $line.split(&#39;,&#39;)[2]

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; # Create reservations

&amp;nbsp; &amp;nbsp; Write-host &quot;Creating reservation(s) for &quot; $scope.Address

&amp;nbsp; &amp;nbsp; foreach ($line in $hosts)

&amp;nbsp; &amp;nbsp; {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if($ips -contains $line.split(&#39;,&#39;)[1])

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; New-DHCPReservation -scope $scope -IPAddress $line.split(&#39;,&#39;)[1] -MACAddress $line.split(&#39;,&#39;)[2] -Description $line.split(&#39;,&#39;)[4]

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }

&amp;nbsp; &amp;nbsp; }

}

Write-host “You should now rename the scopes to friendly names”

Write-host “You should manually set options and lease times&quot;&lt;/pre&gt;
&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/4499938550445011718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2014/07/dchp-server-migration-from-debian-to.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/4499938550445011718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/4499938550445011718'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2014/07/dchp-server-migration-from-debian-to.html' title='DCHP server migration from Debian to Windows Server 2008'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-497385784793007851</id><published>2014-02-02T13:08:00.000-08:00</published><updated>2014-02-02T13:23:30.205-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="bash"/><category scheme="http://www.blogger.com/atom/ns#" term="prowl"/><category scheme="http://www.blogger.com/atom/ns#" term="raspberrypi"/><category scheme="http://www.blogger.com/atom/ns#" term="raspbmc"/><title type='text'>Wifi break-in notifier</title><content type='html'>&lt;h2&gt;
Intro&lt;/h2&gt;
You&#39;ve grown paranoid of people who could be stealing your Wifi ?&lt;br /&gt;
You have the securest form of Wifi encryption ... still wouldn&#39;t you like to know STRAIGHT AWAY if someone managed to crack into your network?&lt;br /&gt;
Here&#39;s a home baked solution ( not suitable for work ) your mileage may vary depending on your Wifi access point.&lt;br /&gt;
&lt;h2&gt;
Concept&lt;/h2&gt;
Every 5 minutes, a script checks your Wifi access point for unknown Wifi devices.&lt;br /&gt;
If one of these devices isn&#39;t included in a list of Wifi devices you defined, you get an alert on your iPad/iPhone every day until you add it to your list of known Wifi devices.&lt;br /&gt;
&lt;h2&gt;
Requirements&lt;/h2&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi running RaspBMC, powered on &amp;amp; connected to your Wifi 24/7&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.prowlapp.com/&quot; target=&quot;_blank&quot;&gt;Prowl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Prowl &lt;a href=&quot;https://www.prowlapp.com/api_settings.php&quot; target=&quot;_blank&quot;&gt;API key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;iOS device - iPhone/iPad&lt;/li&gt;
&lt;li&gt;understanding of &lt;a href=&quot;http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html&quot; target=&quot;_blank&quot;&gt;Bash/shell scripting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;you need to make a list of your wifi devices as &lt;a href=&quot;http://en.wikipedia.org/wiki/Comma-separated_values&quot; target=&quot;_blank&quot;&gt;csv&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
To add devices to this list, use this command&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;echo &quot;device_owner;device_name;00:23:68:BE:E7:62&quot; &amp;gt;&amp;gt; known_wifi_devices.csv&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
You need to understand how to get MAC addresses from your modem/router - i have a Zhone router with &lt;a href=&quot;https://www.adamo.es/&quot; target=&quot;_blank&quot;&gt;Adamo&lt;/a&gt;, not much I can help you with here, you need to master &lt;a href=&quot;http://www.computerhope.com/unix/curl.htm&quot;&gt;curl &lt;/a&gt;and &lt;a href=&quot;https://www.digitalocean.com/community/articles/using-grep-regular-expressions-to-search-for-text-patterns-in-linux&quot;&gt;grep &lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
The script&lt;/h2&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;nano rogue_devices.sh&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;# check if all Wifi devices on the router are known MAC addresses

# if unknown, send a notification via Prowl

# run this as &quot;cron job&quot;

APIKEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



#get the list of MAC addresses from the webpage of my Wifi access point.

html=$(curl -u user:user http://192.168.1.1/wlstationlist.cmd)

echo &quot;$html&quot; | grep -o -E &#39;([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}&#39;| while read mac

do

# check if MAC address is known

&amp;nbsp;if grep -i -q $mac /home/pi/known_wifi_devices.csv; then

&amp;nbsp; echo &quot;OK - $mac is known wifi device&quot;

&amp;nbsp;else

&amp;nbsp; #if station in logfile in the last day, just log it.

&amp;nbsp; if grep -E &quot;^$(/bin/date +&quot;%a %b %d&quot;)..............$(/bin/date &amp;nbsp;+&quot;%Y&quot;)&quot; -q /var/log/rogue_wifi_monitor; then

&amp;nbsp; &amp;nbsp;echo &quot;$(/bin/date +&quot;%a %b %d %T %Z %Y&quot;) --- $mac is not a known Wifi device on this network&quot; | tee -a /var/log/rogue_wifi_monitor

&amp;nbsp; else # log it and notify via Prowl

&amp;nbsp; &amp;nbsp;echo &quot;$(/bin/date +&quot;%a %b %d %T %Z %Y&quot;) --- $mac is not a known Wifi device on this network, admin notified&quot; | tee -a &amp;nbsp;/var/log/rogue_wifi_monitor

&amp;nbsp; &amp;nbsp;curl https://api.prowlapp.com/publicapi/add \

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-F apikey=$APIKEY \

&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-F application=&quot;XBMC Rpi&quot; \

&amp;nbsp; &amp;nbsp; &amp;nbsp; -F event=&quot;Rogue Wifi device detected&quot; \

&amp;nbsp; &amp;nbsp; &amp;nbsp; -F description=&quot;MAC Address $mac is unknown !&quot;

&amp;nbsp; fi

&amp;nbsp;fi

done

&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
Configure cron&lt;/h2&gt;
Configure Cron for the script to run every 5 minutes.&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;crontab -e&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;*/5 * * * * /home/pi/rogue_devices.sh&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
If you&#39;re curious about what &#39;cron&#39; does, I recommend &lt;a href=&quot;http://www.debian-administration.org/articles/56&quot;&gt;this tutorial&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;
Enable cron&lt;/h2&gt;
Since &lt;a href=&quot;http://www.raspbmc.com/wiki/user/frequently-asked-questions/&quot;&gt;cron is disabled in RaspBMC&lt;/a&gt;, you must enable it.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;nano .xbmc/userdata/addon_data/script.raspbmc.settings/settings.xml&lt;/pre&gt;
&lt;br /&gt;
change sys.service.cron to &quot;true&quot;&lt;br /&gt;
&lt;br /&gt;
Start cron&lt;br /&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;service cron start&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Possible improvements&lt;/h2&gt;
rotate or truncate log file&lt;br /&gt;
log when Wifi device is recognized after being added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;background-color: yellow;&quot;&gt;Post your questions in the comments :-)&lt;/span&gt;&lt;/h3&gt;
&lt;br&gt;
&lt;iframe src=&quot;http://rcm-na.amazon-adsystem.com/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=techpppp-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;ref=tf_til&amp;asins=B00B97Y4BO&quot; style=&quot;width:120px;height:240px;&quot; scrolling=&quot;no&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/497385784793007851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2014/02/find-people-stealing-your-wifi-need.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/497385784793007851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/497385784793007851'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2014/02/find-people-stealing-your-wifi-need.html' title='Wifi break-in notifier'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-8439957580244909540</id><published>2013-10-28T14:48:00.000-07:00</published><updated>2013-10-29T14:21:59.208-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="raspbmc"/><title type='text'>Raspbmc - control XBMC over VNC</title><content type='html'>&lt;br /&gt;
I switched my media center from Windows XP to &lt;a href=&quot;http://www.raspbmc.com/&quot;&gt;Raspbmc&lt;/a&gt; 10 months ago.&lt;br /&gt;
As &lt;a href=&quot;http://www.raspbmc.com/about/&quot;&gt;advertised&lt;/a&gt;&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;background-color: #dbdbdb; font-family: Arial, Helvetica, Georgia, sans-serif; font-size: 14px; line-height: 22px;&quot;&gt;Raspbmc is a minimal Linux distribution based on Debian that brings XBMC to your Raspberry Pi. This device has an excellent form factor and enough power to handle media playback, making it an ideal component in a low HTPC setup, yet delivering the same XBMC experience that can be enjoyed on much more costly platforms.&lt;/span&gt;&lt;/blockquote&gt;
The switch from double clicking a movie and navigating folders in Windows XP to pure media center &amp;nbsp;system XBMC is a major shift ! Although in the long run, XBMC is just &quot;better&quot;, there are so many concepts to grasp, and I won&#39;t even mention the fact that it&#39;s all on Linux &amp;nbsp;:-) (if you&#39;re not familiar with it)&lt;br /&gt;
&lt;br /&gt;
Since I use my media center on a &lt;u&gt;projector&lt;/u&gt;, I need quick access to &amp;nbsp;XBMC without turning on the projector every time (whereas people using it with TV don&#39;t have this dilemma)&lt;br /&gt;
My wishes were fulfilled with Raspbmc&#39;s &quot;&lt;a href=&quot;http://www.raspbmc.com/2013/07/raspbmcs-july-update/&quot;&gt;July Update&lt;/a&gt;&quot; as it includes a &lt;a href=&quot;http://en.wikipedia.org/wiki/Virtual_Network_Computing&quot;&gt;VNC&lt;/a&gt; server&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Setup your Raspberry Pi&lt;/b&gt;&lt;br /&gt;
Create the vncserver script&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: #efefef; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;nano vncserver&lt;/span&gt;&lt;/div&gt;
Paste the script of &quot;Hiro Protagonist&quot; from his post&amp;nbsp;&lt;a href=&quot;http://forum.stmlabs.com/showthread.php?tid=10384&amp;amp;pid=79991#pid79991&quot;&gt;#3&lt;/a&gt;&amp;nbsp;(the script in post #1 didn&#39;t work for me)&lt;br /&gt;
Make it executable&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: #efefef; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;chmod +x vncserver&lt;/span&gt;&lt;/div&gt;
Move it&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: #efefef; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;sudo mv vncserver /usr/local/sbin&lt;/span&gt;&lt;/div&gt;
You can now start the&amp;nbsp;VNC server&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: #efefef; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;vncserver start&lt;/span&gt;&lt;/div&gt;
If you want to check if it&#39;s running, check if vnc_dispmanx has the default VNC port open (5900)&lt;br /&gt;
&lt;div style=&quot;background-color: #13773e; color: #fff0a5; font-family: Courier;&quot;&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;pi@raspbmc:~$ sudo netstat -lnptu |grep vnc&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #13773e; color: #fff0a5; font-family: Courier;&quot;&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;tcp&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; 0 0.0.0.0:5900&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.0.0.0:* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LISTEN&amp;nbsp; &amp;nbsp; &amp;nbsp; 3687/vnc_dispmanx&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;background-color: #13773e; color: #fff0a5; font-family: Courier;&quot;&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;tcp6 &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; 0 :::5900 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; :::*&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LISTEN&amp;nbsp; &amp;nbsp; &amp;nbsp; 3687/vnc_dispmanx&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
When you&#39;re done, you should turn it off, as it&#39;s quite CPU hungry&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: #efefef; font-family: Verdana, Arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;vncserver stop&lt;/span&gt;&lt;/div&gt;
&lt;b&gt;Connecting with VNC viewer&lt;/b&gt;&lt;br /&gt;
Unsucessful&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;from my iPad - using PocketCloud remote desktop&lt;/li&gt;
&lt;li&gt;from my Mac - using screen sharing (see&amp;nbsp;http://www.tech-recipes.com/rx/2837/ from quick instructions) ... this crashed the VNC service and &quot;Screen sharing&quot; never times out.&lt;/li&gt;
&lt;/ul&gt;
Successful&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;from my Mac - using &lt;a href=&quot;http://www.realvnc.com/download/viewer/&quot;&gt;RealVNC viewer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;didn&#39;t try from Windows 7 - guessing it would work fine with RealVNC&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdQpU5OPvbycNzR6X694-U_RWWumZPxbZi1hA4uja_HeAWa26p05sK8KqCEEvIVRA7kD5V1A4cMFmac1MEIVa_x7l8VHIvE-qDO6ZowS_0u56bNTjvmJN1ggPCpRuLOouMgnl9gmMu5xc/s1600/VNC_on_rpi.tiff&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdQpU5OPvbycNzR6X694-U_RWWumZPxbZi1hA4uja_HeAWa26p05sK8KqCEEvIVRA7kD5V1A4cMFmac1MEIVa_x7l8VHIvE-qDO6ZowS_0u56bNTjvmJN1ggPCpRuLOouMgnl9gmMu5xc/s1600/VNC_on_rpi.tiff&quot; height=&quot;212&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;
Although the performance is appalling, it&#39;s very useful to play around settings, and of course you&#39;re not going to watch a movie through VNC :-)&lt;br /&gt;
&lt;br /&gt;
Don&#39;t have a &lt;a href=&quot;http://www.amazon.com/gp/product/B009SQQF9C/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B009SQQF9C&amp;amp;linkCode=as2&amp;amp;tag=techpppp-20&quot;&gt;Raspberry Pi&lt;/a&gt; ? It&#39;s a bargain for a media center, I highly recommend and you get to learn Linux on the way.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/8439957580244909540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2013/10/raspbmc-control-xbmc-over-vnc.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/8439957580244909540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/8439957580244909540'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2013/10/raspbmc-control-xbmc-over-vnc.html' title='Raspbmc - control XBMC over VNC'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikdQpU5OPvbycNzR6X694-U_RWWumZPxbZi1hA4uja_HeAWa26p05sK8KqCEEvIVRA7kD5V1A4cMFmac1MEIVa_x7l8VHIvE-qDO6ZowS_0u56bNTjvmJN1ggPCpRuLOouMgnl9gmMu5xc/s72-c/VNC_on_rpi.tiff" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-4951674628346231745</id><published>2011-12-01T05:43:00.001-08:00</published><updated>2011-12-01T08:15:58.660-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>PowerShell - count folders in folders</title><content type='html'>Counting the number of files in a directory is easy&lt;br /&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;(dir).Count
&lt;/pre&gt;
Here&#39;s a more complex example that I will break down, like a tutorial. Unlike the previous example&lt;link&gt;&lt;/link&gt;, this is taking advantage of the object oriented nature of PowerShell. You should understand &lt;a href=&quot;http://technet.microsoft.com/en-us/library/dd347624.aspx&quot;&gt;about_pipelines&lt;/a&gt;&amp;nbsp;before you continue reading&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The problem&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
An invoice scanning system uploads files to a file server. The directory structure is the following.&lt;br /&gt;
\\server\files\&amp;lt;country_code-invoices&amp;gt;\&amp;lt;date&amp;gt;\&amp;lt;invoice_id&amp;gt;&amp;lt;/invoice_id&amp;gt;&amp;lt;/date&amp;gt;&amp;lt;/country_code-invoices&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here&#39;s an German invoice folder scanned on December 1st 2011&lt;br /&gt;
\\server\files\DE-invoices\2011-12-01\2ad52000-32d5-4d72-925a-98ac442d2381&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;The question is&lt;/u&gt; : &quot;How many invoices have been created every day by country ?&quot; . The output has to be a table to be analyzed with Excel.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;u&gt;The proposed solution&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Get all the country folders&lt;br /&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;dir \\server\files\*-invoices&lt;/pre&gt;
For each (&lt;a href=&quot;http://social.technet.microsoft.com/Forums/eu/winserverpowershell/thread/816d1763-6d9e-4c03-b2dd-2fe13507ca88&quot;&gt;% is the operator&lt;/a&gt;) country folder ($_ is the pipeline object), display only its name&lt;br /&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;dir \\server\files\*-invoices&amp;nbsp;| %{$_.Name}
#&lt;/pre&gt;
Display the date folders for each country&lt;br /&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;dir \\server\files\*-invoices&amp;nbsp;| %{dir $_}
#&lt;/pre&gt;
We&#39;ll store the country name in $country, to use it later as we bring it up the pipeline.&lt;br /&gt;
&lt;pre class=&quot;brush: powershell&quot;&gt;dir \\server\files\*-invoices&amp;nbsp;| %{$country=$_.Name}
#&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Now it&#39;s getting a bit tricky.We&#39;ll put a pipeline inside a pipeline!&lt;br /&gt;
Because we need to process each date folder in each country folder.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;For Each country folder display its name&lt;/li&gt;
&lt;li&gt;For Each date folder in a country folder display its name&lt;/li&gt;
&lt;li&gt;For Each date folder, count the number of folders it contains&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Display the country name and the date folder&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: powershell; toolbar: false;&quot;&gt;dir \\server\files\*-invoices&amp;nbsp;| %{$country=$_.Name;dir $_ |%{Write-Host $country $_.Name}}
#&lt;/pre&gt;
outputs&lt;br /&gt;
DE-invoices 2011-12-01&lt;br /&gt;
DE-invoices 2011-11-30&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
Display the folder count&lt;br /&gt;
&lt;pre class=&quot;brush: powershell; toolbar: false;&quot;&gt;dir \\server\files\*-invoices&amp;nbsp;| %{$country=$_.Name;dir $_ |%{Write-Host $country $_.Name (dir $_).count}}
#&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
outputs&lt;br /&gt;
&lt;br /&gt;
DE-invoices 2011-12-01 5&lt;br /&gt;
DE-invoices 2011-11-30 18&lt;br /&gt;
etc..&lt;br /&gt;
&lt;br /&gt;
The result can now be imported as CSV file ,using the space character as the separator.&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/4951674628346231745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2011/12/counting-number-of-files-in-directory.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/4951674628346231745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/4951674628346231745'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2011/12/counting-number-of-files-in-directory.html' title='PowerShell - count folders in folders'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-4520103284147309114</id><published>2011-11-16T01:52:00.001-08:00</published><updated>2011-11-16T02:58:42.876-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="powershell"/><title type='text'>Windows PowerShell : consolidate log files</title><content type='html'>I&#39;m using Windows PowerShell more and more every day, here&#39;s a simple example.&lt;br /&gt;
&lt;br /&gt;
The task is to consolidate several csv files.&lt;br /&gt;
With command prompt&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
copy/b SoftDistribution*.csv Consolidated_logs.csv&lt;/div&gt;
&lt;br /&gt;
With Powershell, use&amp;nbsp;&lt;a href=&quot;http://technet.microsoft.com/en-us/library/ee176843.aspx&quot;&gt;Get-Content&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;http://technet.microsoft.com/en-us/library/ee156791.aspx&quot;&gt;Add-Content&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Get-Content SoftDistribution*.csv | Add-Content Consolidated_logs.csv&lt;/div&gt;
&lt;br /&gt;
Now we have used a &quot;text-based&quot; approach in both cases.&lt;br /&gt;
In case you have headers in the .csv file, and you just want to filter out some fields of the CSV file, it will get very complicated with the command prompt.&lt;br /&gt;
That&#39;s when you have to take a more &quot;object-oriented&quot; approach with PowerShell : check out this &lt;a href=&quot;http://blogs.technet.com/b/heyscriptingguy/archive/2011/10/31/use-powershell-to-append-csv-files-easily.aspx&quot;&gt;article &lt;/a&gt;from Microsoft&#39;s Scripting Guy, which addresses this particular issue.&lt;br /&gt;
&lt;br /&gt;
Since you can use COM and .Net objects in PowerShell, the possibilities are endless! So instead of developing a VBScript for a task we&#39;ll run one time only (not a batch), I use PowerShell interactively.</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/4520103284147309114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2011/11/windows-powershell-consolidate-log.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/4520103284147309114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/4520103284147309114'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2011/11/windows-powershell-consolidate-log.html' title='Windows PowerShell : consolidate log files'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-534147318725794078</id><published>2011-07-04T02:41:00.000-07:00</published><updated>2011-07-04T02:47:10.080-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="windows"/><title type='text'>Microsoft Windows - delete a local user profile whose account is missing from AD</title><content type='html'>Here&#39;s a post on how I helped my helpdesk colleagues to solve a strange problem. &lt;br /&gt;
&lt;br /&gt;
John Doe&#39;s user account was deleted from Active Directory (he left the company over a year ago), but we could not delete his local profile on a Windows Server 2003:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;through the user profiles control panel, it is not present&lt;/li&gt;
&lt;li&gt;deleting the folder in &quot;c:\documents and settings&quot; said ntuser.dat is in use&lt;/li&gt;
&lt;li&gt;The &quot;User Profile Deletion Utility&quot; (delprof) from &lt;a href=&quot;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=17657&quot;&gt;Windows Server 2003 Resource Kit Tools&lt;/a&gt; doesn&#39;t find this profile either.&lt;/li&gt;
&lt;/ul&gt;I checked with &quot;&lt;a href=&quot;http://technet.microsoft.com/en-us/sysinternals/bb896653&quot;&gt;Process Explorer&lt;/a&gt;&quot; and saw his ntuser.dat was loaded.&lt;br /&gt;
&lt;br /&gt;
NTUSER.DAT is a file containing the user&#39;s &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms724877%28v=vs.85%29.aspx&quot;&gt;registry hive&lt;/a&gt;. it is loaded in the machine-wide registry under HKEY_USERS.&lt;br /&gt;
&lt;br /&gt;
So we need to unload this user&#39;s registry hive, in order to delete his profile in &quot;c:\document and settings&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCPbfCIKfJUzlDHkuo1J10qpIWPCBw_ZoSi89nyS0dMy7OTMPc3SIvXRpfnaC9tNwIc9ov-P83mBcqQsjrGV63ctGt5bacbzNiXP8yQTqyApZqN735kdKTDC8kjfVIQDKiDejBGQTulepi/s1600/unload-hive.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCPbfCIKfJUzlDHkuo1J10qpIWPCBw_ZoSi89nyS0dMy7OTMPc3SIvXRpfnaC9tNwIc9ov-P83mBcqQsjrGV63ctGt5bacbzNiXP8yQTqyApZqN735kdKTDC8kjfVIQDKiDejBGQTulepi/s320/unload-hive.png&quot; width=&quot;224&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
You need to find out which SID (the S-1-5-21 ..etc) correspond to this user&lt;br /&gt;
So check the loaded hives in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist&lt;br /&gt;
&lt;br /&gt;
Then go back to HKEY_USERS , select the SID and go to file &amp;gt; unload hive.&lt;br /&gt;
You should now be able to delete his profile in &quot;c:\documents and settings&quot;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/534147318725794078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2011/07/microsoft-windows-delete-local-user.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/534147318725794078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/534147318725794078'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2011/07/microsoft-windows-delete-local-user.html' title='Microsoft Windows - delete a local user profile whose account is missing from AD'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCPbfCIKfJUzlDHkuo1J10qpIWPCBw_ZoSi89nyS0dMy7OTMPc3SIvXRpfnaC9tNwIc9ov-P83mBcqQsjrGV63ctGt5bacbzNiXP8yQTqyApZqN735kdKTDC8kjfVIQDKiDejBGQTulepi/s72-c/unload-hive.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-5095903525081810206</id><published>2011-05-26T07:21:00.000-07:00</published><updated>2011-10-04T06:00:03.229-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sccm"/><title type='text'>SCCM Metering query</title><content type='html'>&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;b&gt;UPDATE 04/10/2011&lt;/b&gt;: the main query (&quot;query_metering_data&quot;) has been changed, so that it even displays computers with no metering data&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In a multinational company,you have to be ready for a software audit.&lt;br /&gt;
&lt;br /&gt;
The people in charge of license control go mad when they realise you have 500 computers with Microsoft Visio Professional, when you are licensed for only 450 copies !&lt;br /&gt;
Then you have to find 50 users which have it installed but don&#39;t need it. If you ask them , they will all say they use it every day :-)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://technet.microsoft.com/en-us/library/bb694169.aspx&quot;&gt;Software Metering in Configuration Manager&lt;/a&gt; is extensively covered on the web, so I will spare you the introduction.&lt;br /&gt;
&lt;br /&gt;
Using SCCM, I wanted to uninstall unused software on PCs&amp;nbsp; automatically, based on Software Metering data.&lt;br /&gt;
This can be done and is covered in forums, but my customer wanted to first check who was scheduled for removal. Imagine if you uninstalled Microsoft Project Standard from the laptop of the vice president of IT !&lt;br /&gt;
&lt;br /&gt;
I developped a VB.NET application which is centered around a DataGridView, the data source being the SCCM SQL database server. Here&#39;s an overview.&lt;br /&gt;
&lt;br /&gt;
First, list all the metering rules&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: vb&quot;&gt;Dim query_rules As String = &quot;select productname from v_MeterRuleInstallBase&quot; &amp;amp; _
&amp;nbsp; &quot; GROUP BY productname ORDER BY productname&quot;

&lt;/pre&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicocNNE0Awh6NWO_jmuZr8IoAcFhox-fRtmKH6fHWE0MhiB3r4qmc5727EhoBds0Oz_8dayFVKp5jXzrHwzxaPnlfY-Knt7LsS3-hUsML56T7GLDPcPTaCpHGfoudQwsDCXH6IfOomhv9c/s1600/meter-rules.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;192&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicocNNE0Awh6NWO_jmuZr8IoAcFhox-fRtmKH6fHWE0MhiB3r4qmc5727EhoBds0Oz_8dayFVKp5jXzrHwzxaPnlfY-Knt7LsS3-hUsML56T7GLDPcPTaCpHGfoudQwsDCXH6IfOomhv9c/s320/meter-rules.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;Double clicking a metering rule displays the metering data for this metering rule, for the collection specified.&lt;br /&gt;
Now here&#39;s the core of this : the SQL query to make sense of the metering data.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: vb&quot;&gt;Dim query_metering_data = &quot;select sys.Name0 AS Name,sys.User_Name0,mru.MeteredFileID,mru.ResourceId,MAX(TimeKey) As TimeKey, MAX(LastUsage) AS &#39;LastUsage&#39; , MAX(lastseen.LastHWScan) AS &#39;Last hardware scan&#39;,sf.FilePath&quot; &amp;amp; _
            &quot; from v_MeterRuleInstallBase mru&quot; &amp;amp; _
            &quot; LEFT JOIN v_MonthlyUsageSummary mus ON (mru.MeteredFileID = mus.FileID AND mru.ResourceID = mus.ResourceID)&quot; &amp;amp; _
            &quot; JOIN v_r_system sys ON mru.ResourceID = sys.ResourceID&quot; &amp;amp; _
            &quot; JOIN v_GS_WORKSTATION_STATUS lastseen ON mru.ResourceID = lastseen.ResourceID&quot; &amp;amp; _
            &quot; JOIN v_fullcollectionmembership m ON mru.ResourceID = m.ResourceID&quot; &amp;amp; _
            &quot; JOIN v_GS_Softwarefile sf ON m.ResourceID = sf.ResourceID AND mru.meteredFileID = sf.FileID&quot; &amp;amp; _
            &quot; WHERE mru.ProductName = &#39;&quot; &amp;amp; Metering_rule &amp;amp; &quot;&#39;&quot; &amp;amp; _
            &quot; AND m.CollectionID = &#39;&quot; &amp;amp; TextBox_CollectionID.Text &amp;amp; &quot;&#39;&quot; &amp;amp; _
            &quot; GROUP BY sys.Name0,sys.User_Name0,mru.MeteredFileID,mru.ResourceID,sf.FilePath&quot; &amp;amp; _
            &quot; ORDER BY sys.Name0&quot;
&lt;/pre&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZsh5P6xyhi0mli1mOl346BbBIJ8C_k_OdTyH5UIP4HgIK0bIVFuk7EYgU934_3gKm4QRPj5dHu_FqyFMLvHp7YN0AlT8LqS7Db2TGWsMz7q6YQXd8059yEo0Hsx1wCXl34RTF0XjtLL-t/s1600/meter_data.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZsh5P6xyhi0mli1mOl346BbBIJ8C_k_OdTyH5UIP4HgIK0bIVFuk7EYgU934_3gKm4QRPj5dHu_FqyFMLvHp7YN0AlT8LqS7Db2TGWsMz7q6YQXd8059yEo0Hsx1wCXl34RTF0XjtLL-t/s640/meter_data.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;I&#39;ve added a right click menu to remove false positives (like the $PatchCache$ path ). The list can be sorted by any column desired.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Ensuring the last hardware scan is recent tells you the client looks OK&lt;/li&gt;
&lt;li&gt;The FilePath is helpful, we found people using portable applications run from USB stick were metered!&lt;/li&gt;
&lt;li&gt;Sort by &quot;Last Usage&quot; to find who has not used it the metered software for a long time. &lt;/li&gt;
&lt;li&gt;The desired cells can be copied to excel, or directly as Comma Separated Values with the &quot;Copy to clipboard as CSV&quot;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
My customer uses a list of computers as a CSV file, to assign an uninstall program. This required another tool (which is not covered in this post).</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/5095903525081810206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2011/05/sccm-metering-query.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/5095903525081810206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/5095903525081810206'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2011/05/sccm-metering-query.html' title='SCCM Metering query'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicocNNE0Awh6NWO_jmuZr8IoAcFhox-fRtmKH6fHWE0MhiB3r4qmc5727EhoBds0Oz_8dayFVKp5jXzrHwzxaPnlfY-Knt7LsS3-hUsML56T7GLDPcPTaCpHGfoudQwsDCXH6IfOomhv9c/s72-c/meter-rules.PNG" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-6956336930046776815</id><published>2011-01-04T08:02:00.000-08:00</published><updated>2011-01-04T08:02:26.819-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sccm"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="vbs"/><title type='text'>SCCM Package replication status gadget for Windows 7 Sidebar</title><content type='html'>Making sure your packages are replicating correctly in your SMS hierarchy is important.&lt;br /&gt;
Sometimes, you even want to know as soon as possible when a package has been replicated!&lt;br /&gt;
This has been useful when a new office is being build far away, and I want to inform the fields technicians on site when&amp;nbsp;they&#39;ll be allowed to&amp;nbsp;push out software.&lt;br /&gt;
&lt;br /&gt;
Therefore, I present the &quot;PackageStatusDetailSummarizer&quot; gadget for Windows 7 Sidebar!&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://sites.google.com/site/techpppp/PackageStatusDetailSummarizer.Gadget.zip&quot;&gt;&amp;gt;&amp;gt;DOWNLOAD&amp;lt;&amp;lt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It&#39;s like&amp;nbsp; the &quot;Package Status&quot; view in the &quot;Configuration Manager Console&quot;, just neater in a gadget :-)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz77JU3k7CaCJW1dmqxVM0iQ9VqI04xrxlzW90_WmLQWGMzz5PGJ2_vkqcQE_xnI2plsToOkkjkXk-P_tnqjKqfjv9hJhasDMLpkHBNaN4TPrILq00Mw2ByI5xnDrvhL7T-wIGVk7ugCVs/s1600/gadget_view.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; n4=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz77JU3k7CaCJW1dmqxVM0iQ9VqI04xrxlzW90_WmLQWGMzz5PGJ2_vkqcQE_xnI2plsToOkkjkXk-P_tnqjKqfjv9hJhasDMLpkHBNaN4TPrILq00Mw2ByI5xnDrvhL7T-wIGVk7ugCVs/s320/gadget_view.PNG&quot; width=&quot;209&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
Inspiration from&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&quot;Software Updates&quot; gadget of the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/cc302783.aspx&quot;&gt;Configuration Manager SDK Samples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The WMI class &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa508728.aspx&quot;&gt;SMS_PackageStatusDetailSummarizer&lt;/a&gt; from the SMS SDK&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa965850(v=vs.85).aspx&quot;&gt;Windows Sidebar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ff486366(v=vs.85).aspx&quot;&gt;Windows Sidebar Object Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
To install in Windows 7:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;drop the folder &quot;PackageStatusDetailSummarizer.Gadget&quot; in %userprofile%\appdata\Local\Microsoft\Windows Sidebar&lt;/li&gt;
&lt;li&gt;right click on your desktop, choose &quot;Gadgets&quot;, you should see it in the list &lt;/li&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2dxmqEpsNKhSqxrpXL5pe7yEfeRYsS3RmUK6Q1V2xC0wsve3ZDeffPOUBFUEJS5su5wbKQohAEdxLREnEJEZcrMrmPPwkTpg0AG9DVPkeSLe1xMeOkmlFr_WFNUEfMOmvLA4SzsJNiBbt/s1600/gadget_list.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; n4=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2dxmqEpsNKhSqxrpXL5pe7yEfeRYsS3RmUK6Q1V2xC0wsve3ZDeffPOUBFUEJS5su5wbKQohAEdxLREnEJEZcrMrmPPwkTpg0AG9DVPkeSLe1xMeOkmlFr_WFNUEfMOmvLA4SzsJNiBbt/s320/gadget_list.PNG&quot; width=&quot;246&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;right click, &quot;install&quot;&lt;/li&gt;
&lt;li style=&quot;border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;&quot;&gt;configure by setting the options, just like a normal gadget&lt;/li&gt;
&lt;li&gt;Be careful with the refresh interval in the options, if you set it to low you can hurt your site&#39;s performance.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
If you want to customize it,just close the gadget and edit the files in the folder you have copied (see the &quot;Windows Sidebar&quot; link)&lt;br /&gt;
The possibilites are endless : check the deployment of packages,advertisements, software updates, site health etc..</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/6956336930046776815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2011/01/sccm-package-replication-status-gadget.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/6956336930046776815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/6956336930046776815'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2011/01/sccm-package-replication-status-gadget.html' title='SCCM Package replication status gadget for Windows 7 Sidebar'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz77JU3k7CaCJW1dmqxVM0iQ9VqI04xrxlzW90_WmLQWGMzz5PGJ2_vkqcQE_xnI2plsToOkkjkXk-P_tnqjKqfjv9hJhasDMLpkHBNaN4TPrILq00Mw2ByI5xnDrvhL7T-wIGVk7ugCVs/s72-c/gadget_view.PNG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-8743965587230844105</id><published>2010-10-01T09:51:00.000-07:00</published><updated>2010-10-01T09:51:45.839-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ccv"/><category scheme="http://www.blogger.com/atom/ns#" term="multi touch"/><title type='text'>Testing Aixiz lasers</title><content type='html'>I bought some infrared lasser from &lt;a href=&quot;http://www.aixiz.com/&quot;&gt;Aixiz&lt;/a&gt; to build an interactive multitouch surface.&lt;br /&gt;
To avoid any damage to my eyes, I was wearing &lt;a href=&quot;http://www.dragonlasers.com/catalog/Laser-Glasses-Infrared-IR-protection-740-1100nm-p-16438.html&quot;&gt;Infrared protection glasses&lt;/a&gt; from &lt;a href=&quot;http://www.dragonlasers.com/&quot;&gt;Dragon Lasers&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now, the thing that I hadn&#39;t planned was how to power the lasers :-)&lt;br /&gt;
As they are rated at 3.2VDC, drawing approximately 30ma of current, this seems something my &lt;a href=&quot;http://www.arduino.cc/en/Main/ArduinoBoardDuemilanove&quot;&gt;Arduino Duemilanovae&lt;/a&gt; could do.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://arduino.cc/en/uploads/Main/ArduinoDuemilanove.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;230&quot; src=&quot;http://arduino.cc/en/uploads/Main/ArduinoDuemilanove.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Connect the Arduino to the USB port of the computer&lt;/li&gt;
&lt;li&gt;Connect an infared camera to the computer ( here using a modified PS3eye with a 850nm filter - same wavelength as the lasers)&lt;/li&gt;
&lt;li&gt;Position the camera, and launch a viewer (here using the CL-Eye Test from&lt;a href=&quot;http://codelaboratories.com/downloads/&quot;&gt; Code Laboratories&lt;/a&gt;&amp;nbsp;)&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;Put the protection glasses on, close all doors &amp;amp; windows &amp;nbsp;to the room you&#39;re in (and you are alone right!)&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Hook up a laser to the Arduino: red cable on the &quot;3v3&quot; , black cable on &quot;Gnd&quot;&lt;/li&gt;
&lt;li&gt;You should now see the laser beaming (or not) through the viewer&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
Repeat for all the lasers you ordered to make sure they are all working properly...and give a good feedback to Aixiz if you bought your lasers from &lt;a href=&quot;http://stores.ebay.es/AixiZ-Service-and-International-LLC&quot;&gt;their eBay store&lt;/a&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQdGBn8a68mCaL3EXENojBtRxIKkKt5diO_VD4tpFjBdQYnme3LhlHUs9YLBGA9DZ8f8_7AdyvD_iiZ-dD_4t3YBeVaGaUtnyHXfEU-FmodNx1zf65ACk7Ry9h9qGg5x-03CSGV6eFgBFo/s1600/arduino-laser-ps3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQdGBn8a68mCaL3EXENojBtRxIKkKt5diO_VD4tpFjBdQYnme3LhlHUs9YLBGA9DZ8f8_7AdyvD_iiZ-dD_4t3YBeVaGaUtnyHXfEU-FmodNx1zf65ACk7Ry9h9qGg5x-03CSGV6eFgBFo/s320/arduino-laser-ps3.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
You can see a bit of the laser in this picture because a picture camera will see infrared (whereas your eyes cannot).&lt;br /&gt;
Now I have to find something to power 4 lasers at the same time (something I&#39;m not sure the Arduino can do)</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/8743965587230844105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2010/10/testing-aixiz-lasers.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/8743965587230844105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/8743965587230844105'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2010/10/testing-aixiz-lasers.html' title='Testing Aixiz lasers'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQdGBn8a68mCaL3EXENojBtRxIKkKt5diO_VD4tpFjBdQYnme3LhlHUs9YLBGA9DZ8f8_7AdyvD_iiZ-dD_4t3YBeVaGaUtnyHXfEU-FmodNx1zf65ACk7Ry9h9qGg5x-03CSGV6eFgBFo/s72-c/arduino-laser-ps3.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-6904508058604741242</id><published>2010-09-15T09:24:00.000-07:00</published><updated>2010-09-15T09:24:48.377-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="goggles"/><category scheme="http://www.blogger.com/atom/ns#" term="google"/><category scheme="http://www.blogger.com/atom/ns#" term="ubiquiti"/><title type='text'>Google Goggles: What&#39;s this thing with no name on it?</title><content type='html'>Every time I came home, I wondered what was this thing nailed to the wall in the hall of my building.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.roquetaswireless.com/tienda/images/img.asp.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;http://www.roquetaswireless.com/tienda/images/img.asp.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;I couldn&#39;t anything written on it either. And I didn&#39;t want to take it off to read the back of it.&lt;br /&gt;
All I could make out of it was this logo on it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter &quot;&lt;a href=&quot;http://www.google.com/mobile/goggles/#text&quot;&gt;Google Goggles&lt;/a&gt;&quot;&lt;br /&gt;
Install it on your Android phone, then snap a picture with Google Goggles.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.google.com/mobile/images/labs/goggles/goggles_scanLogo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;126&quot; src=&quot;http://www.google.com/mobile/images/labs/goggles/goggles_scanLogo.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
That&#39;s how I found out that this was some kind of &lt;a href=&quot;http://www.roquetaswireless.com/tienda/Wireless-5-Ghz/AP-Bridge-CPE-Ubiquiti-NanoStation-2&quot;&gt;Ubiquiti Wifi bridge&lt;/a&gt;. Just by taking a picture of the logo.&lt;br /&gt;
I opened a maintenance closet in the staircase, and found a Power-over-ethernet module to power this device, along with an ethernet cable running one floor up.&lt;br /&gt;
Someone running a big wifi network around here ;-)</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/6904508058604741242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2010/09/google-goggles-whats-this-thing-with-no.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/6904508058604741242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/6904508058604741242'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2010/09/google-goggles-whats-this-thing-with-no.html' title='Google Goggles: What&#39;s this thing with no name on it?'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-1228163073115738527</id><published>2010-09-14T09:32:00.000-07:00</published><updated>2011-05-26T07:43:14.546-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sccm"/><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="vbs"/><title type='text'>SCCM : converting programs to Windows 7</title><content type='html'>This is a VBS program I wrote for a customer, who has a SCCM 2007 R2 environment.&lt;br /&gt;
&lt;br /&gt;
They had over 400 programs in various packages, and they weren&#39;t sure if all of them would run under Windows 7.&lt;br /&gt;
&lt;div style=&quot;border: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;Visually, we had to make sure this box was ticked.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFeIvv3AOLvSmN2YGTkkCKwr5hgHRoajud20x93vozz4jR8-77mXB3KiL49na67vVuR_9E7HnhxyvQ9daAh6-JTzyhc-ydZrOeswyG0JuBJTO7IWXxpdwiofTdV_CkzX-hE2XHb1iHXph3/s1600/program-win7-sccm.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; qx=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFeIvv3AOLvSmN2YGTkkCKwr5hgHRoajud20x93vozz4jR8-77mXB3KiL49na67vVuR_9E7HnhxyvQ9daAh6-JTzyhc-ydZrOeswyG0JuBJTO7IWXxpdwiofTdV_CkzX-hE2XHb1iHXph3/s320/program-win7-sccm.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;border: medium none;&quot;&gt;After a little digging in the &lt;a href=&quot;http://www.microsoft.com/downloads/en/details.aspx?familyid=064a995f-ef13-4200-81ad-e3af6218edcc&amp;amp;displaylang=en&quot;&gt;SCCM SDK&lt;/a&gt; (link), and a &lt;a href=&quot;http://myitforum.com/cs2/blogs/sjames/archive/2009/09/18/modifying-program-flags-using-vbscript.aspx&quot;&gt;script from Stuart James&lt;/a&gt;, the following will go through ALL programs in ALL packages. If a program is not set to &quot;Run on all platforms&quot;, we add that it can run on &quot;All x86 Windows 7&quot;&lt;/div&gt;&lt;div style=&quot;border: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;border: medium none;&quot;&gt;It outputs changes with comma separated values (csv) so you can send this to a file and dress it up nice in Excel for your boss :-)&lt;/div&gt;&lt;div style=&quot;border: medium none;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;pre class=&quot;brush: vb&quot;&gt;&#39;===================================== 
&#39;SetRunFromTS - Sets all programs to be able to run in Windows 7 x86
&#39;Author: Patrick Paumier / Stuart James 
&#39; 
&#39;Requirements: Change line 22 to connect to your site server
&#39; 
&#39;Usage: CScript xxx.vbs or double click 
&#39;===================================== 


&#39;Check we&#39;re using CScript and if not then relaunch 
If &quot;CSCRIPT.EXE&quot; &amp;lt;&amp;gt; UCase(Right(WScript.Fullname, 11)) Then 
Set WshShell = WScript.CreateObject(&quot;WScript.Shell&quot;) 
WshShell.Run &quot;CSCRIPT.EXE /nologo &quot; &amp;amp; WScript.ScriptFullName 
Wscript.Quit 
End If 

&#39; Setup a connection to the local provider. 
Set swbemLocator = CreateObject(&quot;WbemScripting.SWbemLocator&quot;) 
Set swbemServices= swbemLocator.ConnectServer(&quot;MY-SCCM-SERVER&quot;, &quot;root\sms&quot;) 
Set providerLoc = swbemServices.InstancesOf(&quot;SMS_ProviderLocation&quot;) 

For Each Location In providerLoc 
If location.ProviderForLocalSite = True Then 
Set swbemServices = swbemLocator.ConnectServer(Location.Machine, &quot;root\sms\site_&quot; + Location.SiteCode) 
Exit For 
End If 
Next 

&#39;Main call 
QueryPrograms swbemServices 

Sub QueryPrograms(connection) 

On Error Resume next 

Dim programs 
&#39;Dim program 
&#39; Run the query. 
Set programs = connection.ExecQuery(&quot;Select * From SMS_Program WHERE PackageID=&#39;TDE0024F&#39;&quot;) 

If Err.Number&amp;lt;&amp;gt;0 Then 
Wscript.Echo &quot;Couldn&#39;t get programs&quot; 
Wscript.Quit 
End If 
For Each program In programs 
ModifyProgram connection,program.PackageID, program.ProgramName 
Next 
If programs.Count=0 Then 
Wscript.Echo &quot;No packages found&quot; 
End If 

End Sub 

Sub ModifyProgram (connection, existingPackageID, existingProgramName) 

&#39; Build a query to get the specified package. 
packageQuery = &quot;SMS_Package.PackageID=&#39;&quot; &amp;amp; existingPackageID &amp;amp; &quot;&#39;&quot; 

&#39; Run the query to get the package. 
Set package = connection.Get(packageQuery) 
&#39; Output package name and ID. 
wscript.echo VBCrLf &#39;New Line
Wscript.StdOut.Write package.PackageID &amp;amp; &quot;,&quot; &#39;Package ID
Wscript.StdOut.Write package.Name &amp;amp; &quot;,&quot; &#39;Package Name
&#39; Build a query to get the programs for the package. 
programQuery = &quot;SELECT * FROM SMS_Program WHERE PackageID=&#39;&quot; &amp;amp; existingPackageID &amp;amp; &quot;&#39;&quot; 
&#39; Run the query to get the programs. 
Set allProgramsForPackage = connection.ExecQuery(programQuery, , wbemFlagForwardOnly Or wbemFlagReturnImmediately) 
&#39;The query returns a collection of program objects that needs to be enumerated. 
For Each program In allProgramsForPackage                
If program.ProgramName = existingProgramName Then 
&#39;Get all program object properties (in this case we specifically need some lazy properties).
programPath = program.Put_
Set program = connection.Get(programPath) 

&#39; Output the program name 
Wscript.StdOut.Write program.ProgramName &amp;amp; &quot;,&quot; &#39; Program Name
Wscript.StdOut.Write program.ProgramFlags &amp;amp; &quot;,&quot; &#39;Program Flags

If program.ProgramFlags AND 2^27 Then
Wscript.StdOut.Write &quot;OK for all platforms&quot;
Else
&#39; RUN_ON_SPECIFIED_PLATFORMS is set.
Win7OK = FALSE
For Each myOS in program.SupportedOperatingSystems
osver = Left(myOS.MinVersion,3)
If osver=&quot;6.1&quot; And myOS.Platform=&quot;I386&quot; Then
Wscript.StdOut.Write &quot;OK for Windows 7&quot; &#39; Name: &quot; &amp;amp; myOS.Name &amp;amp; &quot; MinVersion: &quot;&amp;amp; myOS.MinVersion &amp;amp; &quot; MaxVersion: &quot; &amp;amp; myOS.MaxVersion &amp;amp; &quot; Platform: &quot; &amp;amp; myOS.Platform
Win7OK = TRUE
Exit For
End If
Next
If Win7OK = FALSE Then
&#39;Add Windows 7 32bit platform
&#39; Create 
Set tempSupportedPlatform = connection.Get(&quot;SMS_OS_Details&quot;).SpawnInstance_
&#39; Populate tempSupportedPlatform values.    
tempSupportedPlatform.MaxVersion = &quot;6.10.9999.9999&quot;
tempSupportedPlatform.MinVersion = &quot;6.10.0000.0&quot;
tempSupportedPlatform.Name       = &quot;Win NT&quot;
tempSupportedPlatform.Platform   = &quot;I386&quot;

&#39; Get the array of supported operating systems.
tempSupportedPlatformsArray = program.SupportedOperatingSystems   

&#39; Add the new supported platform values (object) to the temporary array.
ReDim Preserve tempSupportedPlatformsArray (Ubound(tempSupportedPlatformsArray) + 1)
Set tempSupportedPlatformsArray(Ubound(tempSupportedPlatformsArray)) = tempSupportedPlatform

&#39; Replace the SupportedOperatingSystems object array with the new updated array.
program.SupportedOperatingSystems = tempSupportedPlatformsArray

&#39; Save the program.
program.Put_

&#39; Output success message.

Wscript.StdOut.Write &quot;Added Win7&quot;
End If
End If
End If        
Next 
End Sub 
&lt;/pre&gt;&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/1228163073115738527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2010/09/sccm-converting-programs-to-windows-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/1228163073115738527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/1228163073115738527'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2010/09/sccm-converting-programs-to-windows-7.html' title='SCCM : converting programs to Windows 7'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFeIvv3AOLvSmN2YGTkkCKwr5hgHRoajud20x93vozz4jR8-77mXB3KiL49na67vVuR_9E7HnhxyvQ9daAh6-JTzyhc-ydZrOeswyG0JuBJTO7IWXxpdwiofTdV_CkzX-hE2XHb1iHXph3/s72-c/program-win7-sccm.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-3561465824881336764</id><published>2010-09-11T13:15:00.000-07:00</published><updated>2010-09-15T09:41:03.622-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="blogger"/><category scheme="http://www.blogger.com/atom/ns#" term="syntaxhighlighter"/><title type='text'>SyntaxHighlighter with Blogger</title><content type='html'>I&#39;ve been away from Blogger for a while, and I&#39;m happy it got some new templates.&lt;br /&gt;
I&#39;ve implemented a syntax highlighter to better view code, it&#39;s called &lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/&quot;&gt;SyntaxHighlighter&lt;/a&gt;.&lt;br /&gt;
Here are the steps to use it on Blogger&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Download SyntaxHighlighter to your computer&lt;/li&gt;
&lt;li&gt;Create a &quot;&lt;a href=&quot;https://sites.google.com/&quot;&gt;Google Site&lt;/a&gt;&quot; if you don&#39;t have one yet&lt;/li&gt;
&lt;li&gt;Create a &quot;File Cabinet&quot; page&lt;/li&gt;
&lt;li&gt;Upload the &quot;shcore.js&quot;, the css files and the brushes (=code highlights for specific languages) as described in the SyntaxHighlighter &lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/manual/installation.html&quot;&gt;installation &lt;/a&gt;notes&lt;/li&gt;
&lt;li&gt;Edit your Blogger template, link the js files and css in  to the files you&#39;ve uploaded (copy the link from &quot;Download&quot; on the file cabinet)&lt;/li&gt;
&lt;li&gt;&lt;script&gt;
ues) and css files (with &lt;link&gt; ), from the File Cabinet page you created (copy the &quot;download&quot; link without the arguments added by Google&lt;/li&gt;
&lt;li&gt;Choose you method for highlighting code, I use the &lt;pre&gt; method (for the moment) 
&lt;/li&gt;
&lt;/ol&gt;&lt;/script&gt;Use the &#39;pre&#39; method as described in the installation notes  &lt;/li&gt;
&lt;li&gt;Don&#39;t forget the inclusion of &lt;code class=&quot;html plain&quot;&gt;SyntaxHighlighter.all()&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/3561465824881336764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2010/09/syntaxhighlighter-with-blogger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/3561465824881336764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/3561465824881336764'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2010/09/syntaxhighlighter-with-blogger.html' title='SyntaxHighlighter with Blogger'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-2533793629323894165</id><published>2010-01-27T13:04:00.000-08:00</published><updated>2010-09-15T09:41:46.400-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="scripting"/><category scheme="http://www.blogger.com/atom/ns#" term="vbs"/><title type='text'></title><content type='html'>As part of a job interview, I was asked to program a VB script.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;The goal was to:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-style: italic;&quot;&gt;&quot;Disable LAN,WAN,Bluetooth devices as soon as any user (except shopAdmin) makes a login to the Computer (VB).&lt;br /&gt;
Hint this is only possible with the extra software piece called Devcon&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;How do I start?&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;search on the internet to see if someone else did it. If I judge it&#39;s well done, why reinvent what has already been invented?&lt;/li&gt;
&lt;li&gt; search in my scripts if I&#39;ve already done it or part of it. Most likely, I will reuse generic scripts I made.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
In this case, the &quot;hint&quot; meant that since a command line program would be used, some string parsing would be involved. A few Google searches turned up some ideas but nothing as complete as what was requested.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: vb&quot;&gt;&#39;Assuming devcon is the WINDOWS folder
&#39;Assuming the logged on user has the right to disable devices.

LANadapter = &quot;Broadcom Loca Network Adapter&quot;
BTadapter = &quot;BT adapter&quot;
WLANadapter = &quot;Dell Wireless 1470 Dual Band WLAN Mini-PCI Card&quot;

Set objShell = WScript.CreateObject(&quot;WScript.Shell&quot;)

Set objNet = CreateObject(&quot;WScript.NetWork&quot;)

If Not objNet.UserName = &quot;shopAdmin&quot; Then
Set objExecObject = objShell.Exec(&quot;cmd /c devcon listclass Net&quot;)

Do While Not objExecObject.StdOut.AtEndOfStream

strText = objExecObject.StdOut.ReadLine()

If Instr(strText,LANadapter)&amp;gt;0 Then
ID = Split(strText,&quot;\&quot;,3)
Set objExecObject = objShell.Exec(&quot;cmd /c devcon.exe disable &quot; &amp;amp; ID(0) &amp;amp; &quot;\&quot; &amp;amp; ID(1) )
WScript.Echo &quot;LAN disabled&quot;

ElseIf Instr(strText,BTadapter )&amp;gt;0 Then
ID = Split(strText,&quot;\&quot;,3)
Set objExecObject = objShell.Exec(&quot;cmd /c devcon.exe disable &quot; &amp;amp; ID(0) &amp;amp; &quot;\&quot; &amp;amp; ID(1) )
WScript.Echo &quot;Bluetooth disabled&quot;

ElseIf Instr(strText,WLANadapter)&amp;gt;0 Then
ID = Split(strText,&quot;\&quot;,3)
Set objExecObject = objShell.Exec(&quot;cmd /c devcon.exe disable &quot; &amp;amp; ID(0) &amp;amp; &quot;\&quot; &amp;amp; ID(1) )
WScript.Echo &quot;WLAN disabled&quot;
End If

Loop
End If
&lt;/pre&gt;&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/2533793629323894165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2010/01/as-part-of-job-interview-i-was-asked-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/2533793629323894165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/2533793629323894165'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2010/01/as-part-of-job-interview-i-was-asked-to.html' title=''/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-172017731198317727</id><published>2009-10-26T16:24:00.000-07:00</published><updated>2010-09-15T09:38:58.374-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ccv"/><category scheme="http://www.blogger.com/atom/ns#" term="multi touch"/><category scheme="http://www.blogger.com/atom/ns#" term="nuigroup"/><title type='text'>Multi touch table - MT Crayon Physics</title><content type='html'>I&#39;ve been building a multi touch table as a side project for a year. Since I haven&#39;t had a job for a few months, I found the time to bring this to near completion !&lt;br /&gt;
&lt;br /&gt;
For the technical details&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;what you are seeing is &lt;a href=&quot;http://www.multitouch-barcelona.com/?p=90&quot;&gt;MTCrayonphysics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;the physical setup is &lt;a href=&quot;http://wiki.nuigroup.com/Diffused_Illumination&quot;&gt;&quot;Rear Diffused Illumination&quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;blob tracking is &lt;a href=&quot;http://ccv.nuigroup.com/&quot;&gt;Community Core Vision 1.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/WW3k8AeoAIE&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/WW3k8AeoAIE&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
I&#39;d like to thank the &lt;a href=&quot;http://www.nuigroup.com/&quot;&gt;NUI Group&lt;/a&gt; community for all their valuable tips.</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/172017731198317727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2009/10/multi-touch-table-mt-crayon-physics.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/172017731198317727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/172017731198317727'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2009/10/multi-touch-table-mt-crayon-physics.html' title='Multi touch table - MT Crayon Physics'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-1544114948103699963</id><published>2009-09-29T07:51:00.000-07:00</published><updated>2010-09-15T09:45:11.691-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="processing"/><title type='text'>A simple application with Processing</title><content type='html'>I am a big fan of &lt;a href=&quot;http://processing.org/&quot;&gt;Processing&lt;/a&gt; . I will show you a simple application I programmed with it.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgol6GN0CByuJUf2d1fylH36rYV7abxQeX5wldKQHBf1ViOwTr74QNRRYe6eE2nmEnXrDn444B633Nys5AxagRnxqOxsaDtkMCGPw19OHI-_eh4f_VnFFZT_app_pWxxkTX14hLU0kwIV_c/s1600-h/blogger+post1.JPG&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5389254644389669074&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgol6GN0CByuJUf2d1fylH36rYV7abxQeX5wldKQHBf1ViOwTr74QNRRYe6eE2nmEnXrDn444B633Nys5AxagRnxqOxsaDtkMCGPw19OHI-_eh4f_VnFFZT_app_pWxxkTX14hLU0kwIV_c/s320/blogger+post1.JPG&quot; style=&quot;cursor: pointer; height: 243px; margin: 0pt 0pt 10px 10px; width: 480px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
As described by the website, it is:&lt;br /&gt;
&lt;span style=&quot;color: #33ff33;&quot;&gt;Processing is an open source programming language and environment for          people who want to program images, animation, and interactions. It is used by          students, artists, designers, researchers, and hobbyists for          learning, prototyping, and production. It is created to teach fundamentals          of computer programming within a visual context and to serve as a software          sketchbook and professional production tool. Processing is an alternative to          proprietary software tools in the same domain.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
If you don&#39;t know how to program, this is a great way to learn, as you can &lt;span style=&quot;font-weight: bold;&quot;&gt;get quick, gratifying results&lt;/span&gt;. The latter is very important.&lt;br /&gt;
A lot of people give up making their own programs because of the considerable amount of time and things they have to learn before creating something.&lt;br /&gt;
&lt;br /&gt;
If you already know how to program, but you don&#39;t practice at work, it will feel great to walk in familiar shoes ! As it&#39;s based on Java, you can forget the nightmares you had with other languages like C (pointers..arrr my head hurts!).&lt;br /&gt;
I mastered Object Oriented Programming, thanks to Processing ! Also I understood a lot more about computer animation, graphics, how they are rendered...and then you can start doing your own.&lt;br /&gt;
You can move on to faster or more complete development environment once you feel confortable. Because, truth be told, the C language is much faster than Processing/Java.&lt;br /&gt;
&lt;br /&gt;
Enough ranting, here is my program, followed by step by step explanations.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: js&quot;&gt;String path1,path2;
PImage p1,p2;

void setup(){
size(640,480);
String path1 = selectInput();
p1 = loadImage(path1,&quot;jpg&quot;);
p1.resize(width,height);
image(p1,0,0);

String path2 = selectInput();
p2 = loadImage(path2,&quot;jpg&quot;);
p2.resize(width,height);
}
void draw(){
if (mousePressed ==true &amp;amp;&amp;amp; (mouseButton == LEFT)){
copy(p2,mouseX,mouseY,20,20,mouseX,mouseY,20,20);
}
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
You should download Processing, unzip it,launch it, then paste the code into it.&lt;br /&gt;
Just hit the play button. You will be asked twice for a file. Choose two different pictures, JPG format. Click around the picture, drag...&lt;br /&gt;
You will then understand what this application is about!&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red; font-size: 130%;&quot;&gt;Step by step&lt;/span&gt;&lt;br /&gt;
First, you need the variables to play with: 2 pieces of text (&quot;String&quot;) to hold the path to the images, and 2 images (&quot;PImage&quot;) to hold the images themselves.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: js&quot;&gt;
String path1,path2;
PImage p1,p2;&lt;/pre&gt;&lt;br /&gt;
In Processing, you get your stuff ready in the &quot;void setup()&quot; section, before everything starts happening in the &quot;void draw()&quot; section. Note that they are delimited by brackets.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;u&gt;size&lt;/u&gt; sets the size of the application to 640 pixels by 480 pixels.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;selectInput&lt;/u&gt; calls the dialog to choose a file and stores its path in &quot;path1&quot;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;loadImage&lt;/u&gt; loads the image into memory, into the &quot;p1&quot; PImage variable.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;resize&lt;/u&gt; set the size of the &quot;p1&quot; Pimage to the &quot;width&quot; and &quot;height&quot; of the application - we stated these previously with size(). Otherwise, the image you&#39;ve chosen with selectInput might be too big or too small.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;image&lt;/u&gt; displays &quot;p1&quot; inside the application window.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
We do the same thing for the second picture..but we keep it into memory without displaying it. Yes, you have noticed we are not using image() on this one !&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: js&quot;&gt;
void setup(){
size(640,480);
String path1 = selectInput();
p1 = loadImage(path1,&quot;jpg&quot;);
p1.resize(width,height);
image(p1,0,0);

String path2 = selectInput();
p2 = loadImage(path2,&quot;jpg&quot;);
p2.resize(width,height);
}&lt;/pre&gt;&lt;br /&gt;
Now the action starts. The code in &quot;void draw()&quot; is run 60 times per second! This rate is called 60 FPS - frames per second.&lt;br /&gt;
So what am I doing for EACH FRAME?&lt;br /&gt;
I&#39;m checking &lt;u&gt;if&lt;/u&gt; it&#39;s &lt;u&gt;true&lt;/u&gt; that the mouse button is pressed, and if it&#39;s the &lt;u&gt;LEFT&lt;/u&gt; mouse button.&lt;br /&gt;
In this case, I&#39;ll call the &quot;copy()&quot; function. Let&#39;s detail this just after the code.&lt;br /&gt;
&lt;pre class=&quot;brush: js&quot;&gt;
void draw(){
if (mousePressed ==true &amp;amp;&amp;amp; (mouseButton == LEFT)){
copy(p2,mouseX,mouseY,20,20,mouseX,mouseY,20,20);
}
}&lt;/pre&gt;&lt;br /&gt;
From the &lt;a href=&quot;http://processing.org/reference/copy_.html&quot;&gt;reference&lt;/a&gt; :&lt;br /&gt;
&lt;span style=&quot;color: #33ff33;&quot;&gt;&quot;[..]copies a region of pixels from an image used as the srcImg parameter into the display window.[..]&quot;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So, I am copying a part of the second image(&quot;p2&quot;). Actually, I am copying from the same place you clicked - mouseX and mouseY represent the coordinates of the click.&lt;br /&gt;
And the size of the block being copied is 20 pixels by 20 pixels.&lt;br /&gt;
After copying the bit I wanted, I&#39;m &quot;pasting&quot; it at the same coordinates, the same size.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: js&quot;&gt;
copy(p2,mouseX,mouseY,20,20,mouseX,mouseY,20,20);&lt;/pre&gt;&lt;br /&gt;
Think this one thoroughly, keep the application open with the code and the reference.....concentrate !&lt;br /&gt;
This line might be the hardest to grasp for newbies, but if you understood this, your imagination can now run wild !&lt;br /&gt;
If you want to go further or have an easier start,&lt;br /&gt;
do have a look at the Processing website, the reference always comes with examples, or you can go through the tutorials.&lt;br /&gt;
More advanced libraries can help you achieve anything : music,3D, animation, movie editing, real time video editing, playing with network and the web, etc, etc....&lt;br /&gt;
&lt;br /&gt;
Or you can just peek at the Exhibition or the eye candy at &lt;a href=&quot;http://openprocessing.org/&quot;&gt;OpenProcessing&lt;/a&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/1544114948103699963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2009/09/simple-game-with-processing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/1544114948103699963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/1544114948103699963'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2009/09/simple-game-with-processing.html' title='A simple application with Processing'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgol6GN0CByuJUf2d1fylH36rYV7abxQeX5wldKQHBf1ViOwTr74QNRRYe6eE2nmEnXrDn444B633Nys5AxagRnxqOxsaDtkMCGPw19OHI-_eh4f_VnFFZT_app_pWxxkTX14hLU0kwIV_c/s72-c/blogger+post1.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7154303160504228360.post-7892575392922141339</id><published>2009-03-29T16:46:00.000-07:00</published><updated>2009-03-30T08:22:59.222-07:00</updated><title type='text'>Starting with Blogger</title><content type='html'>I started this to make eventually a diary of these little experiments in coding and systems.&lt;br /&gt;These are mostly in Microsoft Windows environments, as this is what I use at work.&lt;br /&gt;&lt;br /&gt;First I had to customize the Blogger template&lt;br /&gt;&lt;a href=&quot;http://bguide.blogspot.com/2008/02/three-column-templates-explained.html&quot;&gt;http://bguide.blogspot.com/2008/02/three-column-templates-explained.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I had to test my HTML changes in real time to test quickly&lt;br /&gt;&lt;a href=&quot;http://htmledit.squarefree.com/&quot;&gt;http://htmledit.squarefree.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Color names for CSS were needed too&lt;br /&gt;&lt;a href=&quot;http://www.w3schools.com/css/css_colornames.asp&quot;&gt;http://www.w3schools.com/css/css_colornames.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Escape HTML . I needed to post HTML code samples without Blogger interpreting them&lt;br /&gt;http://www.accessify.com/tools-and-wizards/developer-tools/quick-escape/</content><link rel='replies' type='application/atom+xml' href='http://techpppp.blogspot.com/feeds/7892575392922141339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techpppp.blogspot.com/2009/03/starting-with-blogger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/7892575392922141339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7154303160504228360/posts/default/7892575392922141339'/><link rel='alternate' type='text/html' href='http://techpppp.blogspot.com/2009/03/starting-with-blogger.html' title='Starting with Blogger'/><author><name>techpppp</name><uri>http://www.blogger.com/profile/03860397535349407531</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>