<

Docstoc Launches One Click Large Document Transfer

Keywords: , , , , , , , ,

DocstocDocument sharing service Docstoc is out with a potentially major upgrade today. The new functionality is called OneClick and allows you to share documents via email no matter how large the files are. I’ve embedded a video that describes the service below. OneClick is a simple desktop widget that you select when you have large documents to share. After the documents are uploaded to Docstoc, the OneClick application opens your default email application and puts the links directly into the email. It’s really simple to use.

Adam Ostrow notes that this new utility will help drive user adoption of Docstoc and I completely agree - this is why I noted that it’s a major upgrade above. Not only will this drive user adoption, it will also help Docstoc to increase their keyword rich content index. While it appears that documents uploaded with OneClick show as private by default, Docstoc would be smart to push users to change the privacy settings on their next login.

The only filetypes that are supported with Docstoc’s OneClick are .doc, .pdf, .xls, .ppt. This may limit the tool’s functionality as other large file email replacement tools like YouSendIt allow you to send any file type. Will the casual user know when to use DocStoc and when not to? Mark Hendrickson has the same concerns regarding file type. Frankly they should allow any file type to be uploaded and just show the files as a list rather than showing them in the Docstoc player. That’d be hot.

The document sharing battle between Scribd and Docstoc is great to watch as it’s forcing both to continue to innovate and that’s a good thing for all of us. Check out our interview with Docstoc CEO Jason Nazar.

Partner Links
Manage your finances online with Geezeo
Web Jobs
CenterNetworks LinkedIn Business Group
CenterNetworks Facebook Fan Page
Check out SmugMug for a free trial

Document sharing service Docstoc is out with a potentially major upgrade today. The new functionality is called OneClick and allows you to share documents via email no matter how large the files are. I've embedded a video that describes the service below. OneClick is a simple desktop widget that you select when you have large documents to share. After the documents are uploaded to Docstoc, the OneClick application opens your default email application and puts the links directly into the email. It's really simple to ... Read More

5 Awesome Apps To Make Things Easier On A USB Drive

Keywords: , , , , , , , , , , , , , , , , ,

We all love our USB drives, don’t we? You should probably be using some portable apps on your USB drive – if not, check out our huge list of portable applications for your USB drive here.
In this post, I want to cover a few apps that will make managing your USB drive easier. In essence, […]

We all love our USB drives, don’t we? You should probably be using some portable apps on your USB drive – if not, check out our huge list of portable applications for your USB drive here. In this post, I want to cover a few apps that will make managing your USB drive easier. In essence, I’ll talk about tools that can be used to make things easier if you’ve got a USB drive – not about apps that work from your drive. So ... Read More

The Best free Backup Software for your PC

Keywords: , , , , , , , , , , , , , , , , ,

Losing your valuable files as a result of a hard drive failure, virus attack or even accidental file deletion can be very devastating. Whether it’s your photos, giant music collection, important documents - data loss is always costly and stressful. Hard drives always crash, it’s just a matter of time, therefore DO regular backups. Especially […]

Losing your valuable files as a result of a hard drive failure, virus attack or even accidental file deletion can be very devastating. Whether it’s your photos, giant music collection, important documents - data loss is always costly and stressful. Hard drives always crash, it’s just a matter of time, therefore DO regular backups. Especially when there are so many free backup software options that can run regular backups automatically. Just set it once to run scheduled backups every week or so ... Read More

Cool Websites and Tools (edition #147)

Keywords: , , , , , , , , , , , , , , , ,

Check out some of the latest makeuseof discoveries. All listed websites are FREE (or come with a decent free account option). No trials or buy-to-use craplets. For even more app reviews subscribe to makeuseof directory. Want to submit your application to MakeUseOf directory ? See how here.

(1) Acrobat - Now Acrobat.com offers 5 useful applications […]

Check out some of the latest makeuseof discoveries. All listed websites are FREE (or come with a decent free account option). No trials or buy-to-use craplets. For even more app reviews subscribe to makeuseof directory. Want to submit your application to MakeUseOf directory ? See how here. (1) Acrobat - Now Acrobat.com offers 5 useful applications in one suite: online word processor, web conferencing application, online PDF converter, online document sharing and file storage. Read more: Acrobat - 5 in 1 Online Office ... Read More

Web Development Helper Utility

Keywords: , , , , ,

Some of you who attended my recent Innovation Days and MSDN Sessions have asked for the URL for the Web Development Helper utility that I used during my demos.

Shamelessly, I am posting the link for download (shame, since it is not something I wrote and rather used an existing tool).

Well, you can download the same from http://projects.nikhilk.net/WebDevHelper/Default.aspx

The main site is http://www.nikhilk.net/ and you can find tons of useful information in this site.  Nikhil is the Principal Architect in the US Developer Division and one whom we all admire for this sheer brilliance.

A good way to restart my blog postings isnt it

Cheers !!!


Some of you who attended my recent Innovation Days and MSDN Sessions have asked for the URL for the Web Development Helper utility that I used during my demos. Shamelessly, I am posting the link for download (shame, since it is not something I wrote and rather used an existing tool). Well, you can download the same from http://projects.nikhilk.net/WebDevHelper/Default.aspx The main site is http://www.nikhilk.net/ and you can find tons of useful information in this site.  Nikhil is the Principal Architect in the US Developer ... Read More

Controlling the battery

Keywords: , , ,
A variation of this code works on many devices for controlling/reporting battery voltage.  Also allows setting and getting of the threshold values

// NOTE: assumes power is on (not sleep).#include #include “utility.h”   #include “adc.h”#include “battery.h”#include “delay.h”#include “db.h”

// The number of samples per reading.#define BAT_NUM_SAMPLES 16

// Maximum value we allow per reading. Used to ensure we// do not rollover the U16. This value is based on the// maximum value we expect to see, fresh batteries should// give ~4.5v add .5v margin. HW divides the battery level by 2 so,// 5v/2 = 2.5v : 2.5v/3.0ref*1023 = 852.5 ~ 853#define BAT_SUM_READ_MAX (853)

// Holds the battery threshold valuesstatic U16 raw_reading[BAT_NUM_READS][BAT_NUM_SAMPLES];static Bat_Raw_Sum raw_sum;

static Bat_Level bat_lowest_level;static bool thresholds_valid( void );

/* FUNCTION NAME: battery_init                              *//* DESCRIPTION: Initializes the battery module variables    *//* and performs a read of the battery. Returns the battery  *//* level (Bat_Level).                                       */Bat_Level battery_init( void ){    Bat_Level bat_reading;

    // Initialize the driver    adc_init();

    // wipe the local vars    memset( (void*)(&raw_reading[0][0]), 0, sizeof(raw_reading) );    memset( (void*)(&raw_sum), 0, sizeof(raw_sum) );

    // Assume that the battery is good    bat_lowest_level = BAT_GOOD;

    // Perform the battery reading    bat_reading = battery_read_level();

    return( bat_reading );}

/************************************************************//* FUNCTION NAME: battery_read_level                        *//* DESCRIPTION: Reads the battery voltage. Readings are     *//* performed to eliminate any 60hz noise. Performs 16       *//* readings at ~1ms interval (summed) and repeats this 4    *//* times with ~9ms between the sets of 16.                  *//* This entire process should take ~100ms.                  *//*                                                          *//* Sums up the 4 sets and compares to the threshold values  *//* to determine the battery level. Returns the level as     *//* an enum type, the lowest level read since cold start.    *//*                                                          *//* To get the raw readings from the last call to this func  *//* call battery_get_sums()                                  *//*                                                          *//* FUNCTION STATUS:                                         *//******** USED GLOBAL, EEPROM, CODECHIP, IO VARIABLES *******//* Name                 Type                    Usage       *//* raw_reading          U16[][]                 IN/OUT      *//* raw_sum              U16[]                   IN/OUT      *//************************************************************/Bat_Level battery_read_level( void ){    U8 read_num;    U8 sample_num;    TIME_MS clk_start;    U16 bat_sum;    Bat_Level ret_level;    bool error;

    // Initialize our vars    bat_sum = 0;    memset( (void*)(&raw_reading[0][0]), 0, sizeof(raw_reading) );    memset( (void*)(&raw_sum), 0, sizeof(raw_sum) );

    // throw out the first reading    (void)adc_read( ADC_CH0, &bat_sum );

    // Get our tick count used to verify our sampling window    clk_start = delay_get_time_ms();

    // Perform the readings    error = False;    for( read_num=0; (read_num < BAT_NUM_READS) && !error; read_num++ )    {        // samples are read ~1ms apart to give uniform samples across 1 60hz cycle        for( sample_num=0; (sample_num < BAT_NUM_SAMPLES) && !error; sample_num++ )        {            (void)adc_read( ADC_CH0, &raw_reading[read_num][sample_num] );

            // Check the reading to see if it is valid            if( raw_reading[read_num][sample_num] < BAT_SUM_READ_MAX )            {                raw_sum.reading[read_num] += raw_reading[read_num][sample_num];                delay_ms( 1 );            }            else            {                // Bad sample flag the error                error = True;                ret_level = BAT_SAMPLE_ERROR;            }        }        // Delay 9ms (~1/2 cycle of 60hz)        delay_ms( 9 );    }

    if( !error )    {        // Check our sample time. Ideally this will be        // 100ms ( 4 samples * 1.5cyc * 1/60 = 100ms)        // give a little wiggle room. (98ms = 61.22hz - 102ms = 58.82hz)        bat_sum = (U16)(delay_elapsed_ms( clk_start ));        if( (bat_sum < 98) || (bat_sum > 102) )        {            error = True;            ret_level = BAT_SAMPLE_ERROR;        }    }

    // Verify the thresholds    if( !error && thresholds_valid() )    {        // Sum up the readings        bat_sum = 0;        for( read_num=0; read_num


A variation of this code works on many devices for controlling/reporting battery voltage. Also allows setting and getting of the threshold values// NOTE: assumes power is on (not sleep).#include #include "utility.h" #include "adc.h"#include "battery.h"#include "delay.h"#include "db.h"// The number of samples per reading.#define BAT_NUM_SAMPLES 16// Maximum value we allow per reading. Used to ensure we// do not rollover the U16. This value is based on the// maximum value we expect to see, fresh batteries should// give ~4.5v add .5v margin. ... Read More

The Planet CEO Provides Update; Will Be Days Before Full Recovery

Keywords: , , , , , , , , ,

The PlanetYesterday we were tracking a fire that occured at one of The Planet’s datacenters. Check our previous coverage to read the prior updates along with many customer comments that really are quite negative. Below is an update from The Planet CEO. You might also check this thread on TheHosting News where a discussion of power reductions, air conditioning systems and an award that The Planet won for their data center.

From The Planet CEO Douglas Erwin:

As previously committed, I would like to provide an update on where we stand following yesterday’s explosion in our H1 data center. First, I would like to extend my sincere thanks for your patience during the past 28 hours. We are acutely aware that uptime is critical to your business, and you have my personal commitment that The Planet team will continue to work around the clock to restore your service.

As you have read, we have begun receiving some of the equipment required to start repairs. While no customer servers have been damaged or lost, we have new information that damage to our H1 data center is worse than initially expected. Three walls of the electrical equipment room on the first floor blew several feet from their original position, and the underground cabling that powers the first floor of H1 was destroyed.

There is some good news, however. We have found a way to get power to Phase 2 (upstairs, second floor) of the data center and to restore network connectivity. We will be powering up the air conditioning system and other necessary equipment within the next few hours. Once these systems are tested, we will begin bringing the 6,000 servers online. It will take four to five hours to get them all running.

We have brought in additional support from Dallas to have more hands and eyes on site to help with any servers that may experience problems. The call center has also brought in double staff to handle the increase in tickets we’re expecting. Hopefully by sunrise tomorrow Phase 2 will be well on its way to full production.

Let me next address Phase 1 (first floor) of the data center and the affected 3,000 servers. The news is not as good, and we were not as lucky. The damage there was far more extensive, and we have a bigger challenge that will require a two-step process. For the first step, we have designed a temporary method that we believe will bring power back to those servers sometime tomorrow evening, but the solution will be temporary. We will use a generator to supply power through next weekend when the necessary gear will be delivered to permanently restore normal utility power and our battery backup system. During the upcoming week, we will be working with those customers to resolve issues.

We know this may not be a satisfactory solution for you and your business but at this time, it is the best we can do.

We understand that you will be due service credits based on our Service Level Agreement. We will proactively begin providing those following the restoration of service, which is our number priority, so please bear with us until this has been completed.

I recognize that this is not all good news. I can only assure you we will continue to utilize every means possible to fully restore service.

I plan to have an audio update tomorrow evening.

Until then,

Douglas J. Erwin
Chairman & Chief Executive Officer

Partner Links
Manage your finances online with Geezeo
Web Jobs
CenterNetworks LinkedIn Business Group
CenterNetworks Facebook Fan Page
Check out SmugMug for a free trial

Yesterday we were tracking a fire that occured at one of The Planet's datacenters. Check our previous coverage to read the prior updates along with many customer comments that really are quite negative. Below is an update from The Planet CEO. You might also check this thread on TheHosting News where a discussion of power reductions, air conditioning systems and an award that The Planet won for their data center. From The Planet CEO Douglas Erwin: As previously committed, I would like to provide ... Read More

Simplified Database Management in Spring-based Hibernate Unit Tests

Keywords: ,

The basic idea is that the setUp method of your unit test calls the SchemaExport utility to wipe out the existing tables and recreate them.

The basic idea is that the setUp method of your unit test calls the SchemaExport utility to wipe out the existing tables and recreate them. Read More

Free Port Analyzers - Defeat Spyware And Botware

Keywords: , , , , , , , , , , , , , , , , , , ,

Windows XP has a command line utility which will help you determine if you have spyware or botware running on your system. Netstat displays protocol statistics and current TCP/IP connections.
I use this utility as a test, to ensure that the anti-malware tools and firewall running on my systems are functioning correctly, and that there are […]

Windows XP has a command line utility which will help you determine if you have spyware or botware running on your system. Netstat displays protocol statistics and current TCP/IP connections. I use this utility as a test, to ensure that the anti-malware tools and firewall running on my systems are functioning correctly, and that there are no open outgoing connections to the internet that I am not aware of. How to use Netstat: You should close all open programs before you begin the following process, ... Read More

Command the Installation and Deployment

Keywords: , , , , , , , , , , ,

Install IIS, ASP.NET, .NET Framework 3.5, SQL Server 2005 Express /w Reporting Services, a Web Application, create the Web Application database, and Deploy Report files using a batch script… Possible?  Yes!!!

I often like to explore possibility and this was my challenge. So here’s what I did…

I knew I wanted to have a batch file to start the installation and get everything installed, but I wasn’t quite sure how to accomplish such a feat. So after some Google searches I started to put the batch script together. Here is what I found:

IIS and ASP.NET magic command: sysocmgr /i /u
http://support.microsoft.com/kb/222444

.NET Framework 3.5 magic command: dotnetfx35.exe /qb /norestart
http://msdn.microsoft.com/en-us/library/cc160716.aspx

SQL Server 2005 magic command: SQLEXPR_ADV.exe /qb /settings
http://msdn.microsoft.com/en-us/library/ms144259.aspx

Deploy Report .rdl files magic command: rs.exe -i -s
http://msdn.microsoft.com/en-us/library/ms160854.aspx

Virtual Directory created programmatically using .NET:

System.EnterpriseServices.Internal.IISVirtualRoot
System.EnterpriseServices.Internal.IISVirtualRoot.Create()

Web Application Deployment magic command: xcopy /C /E /H /R /Y

Create the Web Application Database magic command: osql -E -S -i

Extras

Modify SQL Server 2005 Surface Area Configuration magic command: sac in -F -DE -BS -N
http://msdn.microsoft.com/en-us/library/ms162800.aspx

 

 

Using the commands above I was able to deploy all of the required components for my ASP.NET Web Application. This seems to work well for Windows XP and Windows Server 2003.

This is great if you have a clean installation of XP or Server 2003 with the latest services packs and windows installer 3.1. However if the installation has other services running on it or other installations of SQL Server, more care will need to be taken into the creation of the this script and the answer files that support it. For example, by default SQL Server installs to C:\Program Files\Microsoft SQL Server\MSSQL.#\…. If there are other instances of SQL Server installed, then you’ll need to know what the exact installation path is. As an added side effect of running this from a batch command, the environment variables for SQL installation locations are not set until after SQL Server is installed. Similar problems appear with the deployment location for the web app and there are no checks to determine if the components are already installed.

Another important caveat is that batch scripts, when starting an external program, do not automatically wait for the program to finish before continuing. For that problem I added some delay loops that look for the application name in the computers running programs list and ping localhost as a delay between checks.

Now that we know this works, but requires a bit more diligence if the circumstances are not perfect, lets look at exactly what I did.

First, I install IIS using sysocmgr.exe and I pass it 2 parameters

/i:%windir%\inf\sysoc.inf  // this is required
/u:”%CD%\iis\iis_install.txt” // This is the path to my answer file that tells sysocmgr what to install.

That iis_install.txt simply contains tags set to on or off and the file looks like this:
[Components]
aspnet=on
iis_asp=on
iis_serversideincludes=on
iis_common=on
iis_www=on
iis_inetmer=on
fp_extensions=on
iis_doc=on

 

Second, I install the .NET Framework 3.5 using the switches:

/qb  // Shows the progress, but does not require user input.
/norestart // Keeps the computer from reboot after installation.

 

Third, I installed SQL Server 2005 Express /w Advanced Services passing 2 parameters:

/qb // Shows the progress, but does not require user input
/settings “%CD%\SQL\sql_install.ini” // This is the path to the answer file that tells SQLEXPR_ADV.exe what I want to install.

That sql_install.ini file looks like this:
[Options]
INSTANCENAME=SQLExpress
ADDLOCAL=SQL_Engine,SQL_Data_Files,SQL_SSMSEE,RS_Server,RS_Web_Interface,Client_Components,Connectivity
SQLAUTOSTART=1
AGAUTOSTART=1
RSAUTOSTART=1
SECURITYMODE=SQL
SAPWD=password
RSCONFIGURATION=Default
RSSQLLOCAL=1
DISABLENETWORKPROTOCOLS=0

Fourth, I modified the install SQL Surface Area configuration using a previously exported configuration from my test deployment:

“%programfiles%\Microsoft SQL Server\90\Shared\sac.exe” in “%CD%\SQL\sqlsac.out” -F -DE -BS -N // This imports the configuration and the switches determine which components to import.

Fifth, I use osql to connect to the SQL Server instance and run my transact SQL script to create the database.

Sixth, I have to call my custom .NET Console application VirtualDirectoryInstaller.exe to create the folder in the wwwroot directory and create the virtual directory in IIS. For easy modification later I created an XML document that contains the parameters for the Create() method and the folder path. That source code looks like this:

XmlDocument xDoc = new XmlDocument();
xDoc.Load(”InstallPaths.xml”);

// Load the required information to create the Virtual directory
string folderPath = xDoc.SelectSingleNode(”//iisFolder”).Attributes[”value”].Value;
string virtualDirectory = xDoc.SelectSingleNode(”//iisVirtualDirectory”).Attributes[”value”].Value;
string iisRoot = xDoc.SelectSingleNode(”//iisDefaultSiteRoot”).Attributes[”value”].Value;

// Create the folder
System.IO.Directory.CreateDirectory(folderPath);

// Create the virtual Directory
System.EnterpriseServices.Internal.IISVirtualRoot vr = new System.EnterpriseServices.Internal.IISVirtualRoot();
string sError;
vr.Create(iisRoot, folderPath, virtualDirectory, out sError);
Console.WriteLine(sError.ToString());

 

Seventh, I used xcopy to deploy the web application to the virtual directory:
xcopy “WebApp\*” “C:\inetpub\wwwroot\WebApp\*” /C /E /H /R /Y

 

Eigth and finally, I create the required data source and deploy the report files using rs.exe utility that is install with Reporting Services, passing it 2 parameters:

-i “%CD%\Reports\ReportsDeploy.rss” // This is the path to my report deployment script, which is basically a VB.NET code file with a .rss extension.

-s
http://localhost/reportserver$sqlexpress // This is the path to the server where these reports should be deployed

That ReportsDeploy.rss file looks similiar to this:

‘=============================================================================
‘  File:      ReportsDeply.rss


‘ 1.3.1 Use the script to publish the reports to a report server.

‘       rs -i ReportsDeply.rss -s http://localhost/reportserver$sqlexpress

Dim definition As [Byte]() = Nothing
Dim warnings As Warning() = Nothing
Dim parentFolder As String = “”
Dim parentPath As String = “/” + parentFolder
Dim filePath As String = “WebAppReports\”

Public Sub Main()

    rs.Credentials = System.Net.CredentialCache.DefaultCredentials
    ‘Create the WebApp shared data sources
    CreateSampleDataSource(”dsWebApp”, “SQL”, “data source=(local)\SQLExpress;initial catalog=WebAppDatabase;User Id=webappusr;Password=password”)

    ‘Publish the reports
    PublishReport(”Report 1″)
    PublishReport(”Report 2″)
    PublishReport(”Report 3″)
    PublishReport(”Report 4″)
    PublishReport(”Report 5″)
End Sub

‘==================================================================

The CreateSampleDataSource() and PublishReport() functions are from the PublishSampleReports.rss, which you can either install with SQL Server installation or Reporting Services Samples from CodePlex here:
http://www.codeplex.com/SqlServerSamples#ssrs

And that is it. If you were ever wondering how you can install all of the necessary components for a Web application using the command line, here it is.

Below you will find the full batch script that makes it all happen.

**************************************
The Full Batch Script

**************************************

@echo # Installing IIS
sysocmgr /i:%windir%\inf\sysoc.inf /u:”%CD%\iis\iis_install.txt”

echo off
:loopIIS

tasklist | find /i “sysocmgr.exe” >nul

if %errorlevel% EQU 0 (
    ping 127.0.0.1 -n 3 >nul
    goto loopIIS
)
echo on

@echo # Installing .NET Framework 3.5
DotNet\dotNetFx35.exe /qb /norestart

echo off
:loopDOTNET

tasklist | find /i “dotnetfx35.exe” >nul

if %errorlevel% EQU 0 (
    ping 127.0.0.1 -n 3 >nul
    goto loopDOTNET
)
echo on

@echo # Installing SQL Server 2005 Express w/ Reporting Services
SQL\SQLEXPR_ADV.exe /settings “%CD%\SQL\sql_install.ini” /qb

echo off
:loopSQL

tasklist | find /i “setup.exe” >nul

if %errorlevel% EQU 0 (
    ping 127.0.0.1 -n 3 >nul
    goto loopSQL
)
echo on

@echo # Modify the Surface Area Configuration to allow remote connections
“%programfiles%\Microsoft SQL Server\90\Shared\sac.exe” in “%CD%\SQL\sqlsac.out” -F -DE -BS -N

@echo # Grant NT Authority\Network Service RSExecRole
“%programfiles%\Microsoft SQL Server\90\Tools\Binn\osql” -E -S .\SQLExpress -i “%CD%\DatabaseScripts\GrantNTAuthoritySQLRS.sql”

:loopNETWORKSERVICE

tasklist | find /i “osql.exe” >nul

if %errorlevel% EQU 0 (
    ping 127.0.0.1 -n 3 >nul
    goto loopNETWORKSERVICE
)

@echo # Installing Database
“%programfiles%\Microsoft SQL Server\90\Tools\Binn\osql” -E -S .\SQLExpress -i “%CD%\DatabaseScripts\install.sql”

:loopDATABASE

tasklist | find /i “osql.exe” >nul

if %errorlevel% EQU 0 (
    ping 127.0.0.1 -n 3 >nul
    goto loopDATABASE
)

@echo # Installing Application Files
@echo # Create the Virtual Directory in IIS
VirtualDirectoryInstaller.exe

echo off
:loopWebApp

tasklist | find /i “VirtualDirectoryInstaller.exe” >nul

if %errorlevel% EQU 0 (
    ping 127.0.0.1 -n 3 >nul
    goto loopWebApp
)
echo on

@echo # Copy the web application files to the new virtual directory
xcopy “WebApp\*” “C:\inetpub\wwwroot\WebApp\*” /C /E /H /R /Y

@echo # Deploy the Reports
“%programfiles%\Microsoft SQL Server\90\Tools\Binn\rs.exe” -i “%CD%\Reports\ReportsDeploy.rss” -s
http://localhost/reportserver$sqlexpress

@echo # Restart SQL Server for changes to take effect
net stop “SQL Server (SQLEXpress)” && net start “SQL Server (SQLExpress)”


Install IIS, ASP.NET, .NET Framework 3.5, SQL Server 2005 Express /w Reporting Services, a Web Application, create the Web Application database, and Deploy Report files using a batch script... Possible?  Yes!!! I often like to explore possibility and this was my challenge. So here's what I did... I knew I wanted to have a batch file to start the installation and get everything installed, but I wasn't quite sure how to accomplish such a feat. So after some Google searches I started to put ... Read More