Search This Blog

2011-01-28

Stacks ..

2011-01-24

I am the king of the universe ... Template Generator ... so f..cking what ...



START ===== TemplateGenerator.0.1.0.cmd
@echo off  
ECHO %0 > %0.log
ECHO %0.error.log >%0.error.log
 
set BaseDir=%cd%
echo BaseDir is %BaseDir%  1>>%0.log 2>>%0.error.log
ECHO.
 
 
set ExcelFileToParse="%BaseDir%\input\configs.xls"
echo ExcelFileToParse is %ExcelFileToParse%  1>>%0.log 2>>%0.error.log
echo.
 
 
set InputDir=%BaseDir%\input
echo InputDir is %InputDir%  1>>%0.log 2>>%0.error.log
echo.
 
 
::CONFIGURE THE CURRENT DIRECTORY AS THE OUTPUT DIR
set OutputDir=%BaseDir%\output
echo OutputDir is %Outputdir%  1>>%0.log 2>>%0.error.log
echo.
 
::set PerlScript=parseExcelToCsv.pl
set PerlScript="%BaseDir%\TemplateGenerator.0.1.0.pl"
echo PerlScript is %PerlScript%  1>>%0.log 2>>%0.error.log
ECHO.
 
::This is the ASCII number of the token delimiter to use in the csv file
set TokenDelimiterAsciiNumber=44
echo TokenDelimiterAsciiNumber is %TokenDelimiterAsciiNumber%  1>>%0.log 2>>%0.error.log
 
 
::This is the ASCII number of the token delimiter to use in the csv file
set RowEndAsciiNumber=13
echo RowEndAsciiNumber is %RowEndAsciiNumber% %RowEndAsciiNumber% 1>>%0.log 2>>%0.error.log
 
 
echo Action !!!  1>>%0.log 2>>%0.error.log
echo perl %PerlScript% %ExcelFileToParse% %OutputDir% %TokenDelimiterAsciiNumber% %RowEndAsciiNumber% %InputDir% 1>>%0.log 2>>%0.error.log
perl %PerlScript% %ExcelFileToParse% %OutputDir% %TokenDelimiterAsciiNumber% %RowEndAsciiNumber%   %InputDir% 1>>%0.log 2>>%0.error.log
 
::UNCOMMENT TO OPEN THE ERROR LOG AND THE RUN LOG FILES 
::%0.error.log
::%0.log
 
::debug pause
 
::SLEEP FOR 3 SECONDS
for /l %%i in (1,-1,0) do CLS&ECHO DONE !!! %%i&ping localhost -n 2 >NUL&CLS
END ================== TemplateGenerator.0.1.0.cmd
. 
START ===== TemplateGenerator.0.1.0.pl
use Spreadsheet::ParseExcel;
use strict;
 
package TemplateGenerator ; 
 
 
sub  main {
 
my $ExcelFileToParse = "$ARGV[0]" ; 
my $OutputDir="$ARGV[1]" ;
my $delimiter = chr($ARGV[2]);
my $rowEnd = chr($ARGV[3]);
my $InputDir = "$ARGV[4]" ;
 
my @arrayTemplateFiles = () ; 
my $arrayTemplateFiles = readDirGetArrayOfFiles ($InputDir); 
@arrayTemplateFiles = @$arrayTemplateFiles ; #dereference
 
 
# - foreach template file 
foreach my $templateFile (@arrayTemplateFiles ) {
print "working on  \$templateFile is $templateFile\n";
my $FileToPrint = buildFileToPrint ( $templateFile  , $OutputDir ) ; 
my $StrTemplateFile = readFileReturnString ( "$InputDir/$templateFile" ) ; 
ParseExcel ( $ExcelFileToParse  , $delimiter , $rowEnd, $StrTemplateFile , $FileToPrint) ; 
# -- parseExcel
# --- foreach row of the Excel file , read template file into strWork
# ---- foreach column in row - Find and Replace Col title from strWork
# ---- writeGeneratedFile with strWork
 
}    #eof foreach template file
 
} #eof sub main 
 
sub readDirGetArrayOfFiles     {
 
my $InputDir = shift ; 
# create a list of all *.pl files in
# the current directory
opendir(DIR, "$InputDir");
my @files = grep(/\.tmpl$/,readdir(DIR));
closedir(DIR);
 
# print all the filenames in our array
foreach my $templateFile (@files) {
print "\$templateFile is $templateFile\n";
}
 
return \@files; 
 
} #eof main
 
 
 
sub buildFileToPrint 
{
my $FileToPrint = shift ; 
my $OutputDir = shift ; 
 
$FileToPrint =~m/^.*(\\|\/)(.*)/; #  strip the remote path and keep the filename
$FileToPrint =~ s/^(.*)(\.)(.*)/$1/ ;     #strip the file extension
$FileToPrint =~ s/^.*(\\|\/)(.*)/$2/ ;                                 # strip the remote path and keep the filename
$FileToPrint = "$OutputDir/$FileToPrint"  ;        
return $FileToPrint ; 
} #eof sub BuildFileToPrint 
 
 
sub ParseExcel {
 
my $ExcelFileToParse = shift ; 
my $delimiter = shift ; 
my $rowEnd = shift ; 
my $strTemplate = shift ; 
my $FileTemplate = shift ; 
 
 
 
my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->Parse("$ExcelFileToParse");
 
 
#foreach my $oWkS (@{$oBook->{Worksheet}}) {
foreach my $worksheet (@{$workbook->{Worksheet}}) {
#for my $worksheet ( $workbook->worksheets() ) {
 
my $RowMin = $worksheet->{MinRow} ; 
my $RowMax= $worksheet->{MaxRow} ; 
 
 
#    my ( $RowMin, $RowMax) = $worksheet->row_range();
#    my ( $col_min, $col_max ) = $worksheet->col_range();
 
for my $row ( ($RowMin + 1) .. $RowMax) {
my $strToReturn = $strTemplate ; 
my $FileToPrint = $FileTemplate ; 
my $col_min = $worksheet->{MinCol} ; 
my $col_max = $worksheet->{MaxCol} ; 
for my $col ( ($col_min + 1) .. $col_max ) {
 
my $cell = $worksheet->{Cells}[$row][$col]  ; 
next unless $cell;
 
print " Row, Col    = ($row, $col)\n";
print " Value = ", $cell->Value() ;                #The Value
my $cellValueToReplace = $worksheet->{Cells}[$RowMin][$col]  ; 
print "\$cellValueToReplace is $cellValueToReplace \n" ; 
my $StrToReplace  = '¤' . $cellValueToReplace->Value() . '¤' ;  
print "\$StrToReplace is $StrToReplace  \n" ; 
my $StrValueToReplaceWith = $cell->Value() ;
print " \$StrValueToReplaceWith  is $StrValueToReplaceWith  \n" ; 
$strToReturn =~ s/$StrToReplace/$StrValueToReplaceWith/g ; 
$FileToPrint =~ s/$StrToReplace/$StrValueToReplaceWith/g ; 
#print "\$strToReturn is $strToReturn \n" ; 
#$strToReturn .=  $cell->Value() . $delimiter       ;                #The Value
#print "Unformatted = ", $cell->Unformatted(), "\n";
}
chop ($strToReturn) ; #remove the latest delimiter
$strToReturn .= $rowEnd ;     #end the row    
print "\$FileToPrint  is $FileToPrint " ; 
printToFile ( $FileToPrint , $strToReturn ) ; 
} #eof row
} #eof worksheet
 
} #eof sub
 
 
sub printToFile {
 
my $FileOutput = shift ; 
my $StringToPrint = shift ; 
#READ ALL ROWS OF A FILE TO ALIST 
open (FILEOUTPUT, ">$FileOutput") || 
print "could not open the \$FileOutput $FileOutput!\n"; 
print  FILEOUTPUT $StringToPrint ; 
close FILEOUTPUT ;
 
#debug $strToReturn .=  $StringToPrint; 
 
}
# =========================================== eof sub printToFile
 
sub trim    
{
$_[0]=~s/^\s+//;
$_[0]=~s/\s+$//;
return $_[0];
}
 
 
sub readFileReturnString {
my $fileToRead = shift ; 
print " readFileReturnString \$fileToRead is $fileToRead \n" ; 
my $string = (); 
{
local $/=undef;
open FILE, "$fileToRead " or print "Couldn't open \$fileToRead $fileToRead : $!";
$string = <FILE>;
close FILE;
}
return $string ; 
} #eof sub readFileReturnString 
 
 
 
# =========================================== eof sub trim 
# Action !!!
main();
 
 
1 ; 
 
__END__ 
END ================== TemplateGenerator.0.1.0.pl
. 
START ===== TemplateGenerator.0.1.0.ReadMe.txt
This Instruction assumess  that use the following dir to extract the project 
BaseDir=E:\perl\sfw\csv
 
if you do not simply find E:\perl\sfw\csv and replace it with <<YourExtractDir>> in this document 
 
- Install strawberry perl from here: http://strawberryperl.com/ , add the folder containing the dmake.exe and perl.exe to your path 
- to install the OLE::Storage_Lite go to E:\Perl\sfw\csv\lib\OLE-Storage_Lite-0.19\OLE-Storage_Lite-0.19
run the following commands : 
perl Makefile.PL
dmake
dmake test
dmake install    
dmake clean     
 
- To install the SpreadSheet::ParseExcel module go to : 
cd E:\perl\sfw\csv\lib\Spreadsheet-ParseExcel-0.2603
run the following commands: 
perl Makefile.PL
dmake
dmake test
dmake install    
dmake clean     
 
- Now you have all the prerequisites to run the script :
- double click the E:\Perl\sfw\csv\parseExcelToCsv.2.0.cmd file if nothing happens check its contents ... 
 
 
 
 
 
END ================== TemplateGenerator.0.1.0.ReadMe.txt

how-to read dir into array of files in Perl

use strict ;


sub main {
my @arrayTemplateFiles = () ;
my $arrayTemplateFiles = readDirGetArrayOfFiles ();
@arrayTemplateFiles = @$arrayTemplateFiles ; #dereference


# print all the filenames in our array
foreach my $templateFile (@arrayTemplateFiles ) {
print "2 \$templateFile is $templateFile\n";
} #foreach

} #eof main

sub readDirGetArrayOfFiles {

# create a list of all *.pl files in
# the current directory
opendir(DIR, ".");
my @files = grep(/\.pl$/,readdir(DIR));
closedir(DIR);

# print all the filenames in our array
foreach my $templateFile (@files) {
print "\$templateFile is $templateFile\n";
}

return \@files;

} #eof main


#Action !!!
main();

2011-01-23

SVN Cheat Sheet

echo how-to to get help for svn
svn help

echo get help for the "import" command of svn
svn help import

echo checkout a project
svn checkout https://minconsole.svn.codeplex.com/svn YordanGeorgiev pass

echo import the project
svn import . https://minconsole.svn.codeplex.com/svn -m " Revision log message"

echo add all the files from the current dir recursively
svn add *

2011-01-11

how-to get stored procedure and user defined funtions metadata in MSSQL 2008



SELECT SCHEMA_NAME(SCHEMA_ID) AS [Schema], 
SO.name AS [ObjectName],
SO.Type_Desc AS [ObjectType (UDF/SP)],
P.parameter_id AS [ParameterID],
P.name AS [ParameterName],
TYPE_NAME(P.user_type_id) AS [ParametDataType],
P.max_length AS [ParameterMaxBytes],
P.is_output AS [IsOutPutParameter]
FROM sys.objects AS SO
INNER JOIN sys.parameters AS P 
ON SO.OBJECT_ID = P.OBJECT_ID
WHERE SO.OBJECT_ID IN ( SELECT OBJECT_ID 
FROM sys.objects
WHERE TYPE IN ('P','FN'))
ORDER BY [Schema], SO.name, P.parameter_id

2011-01-09

A nice way to generate a default ini file path from the file path of the executing process in C#



/// <summary>
/// Creates a default inifile in a format hostName.processName.ini , in the same directory where the 
/// </summary>
/// <returns>the file path to the init file in a string </returns>
public static string CreateProcessDefaultIniFile()
{
string strIniFilePath = String.Empty;
string strPathToExe = Environment.GetCommandLineArgs()[0];
string extension = Path.GetExtension(strPathToExe);
//string filename = Path.GetFileName(strPathToExe);
string strBaseDir = Path.GetDirectoryName(strPathToExe);
string strMachineName = System.Environment.MachineName;
string fileNameNoExtension = Path.GetFileNameWithoutExtension(strPathToExe);
//now build the default ini file path 
strIniFilePath = strBaseDir + @"\" + strMachineName + "." + fileNameNoExtension + ".ini";
 
return strIniFilePath;
} //eof method 

2011-01-04

Release management flow chart

They say a picture is worth 1000 words ... this picture has also couple of words ...

I am probably re-inventing the wheel, however this IS a simplified version of that wheel ...

2011-01-03

release management definitions

source:http://buildmeister.com/articles/software_release_management_best_practices

Term Definition
RFC (Request for Change) A high-level change request that captures the detail of a change that is to be made to a new or existing application. RFCs are usually decomposed down to lower level work requests or tasks for software development.
CAB (Change Advisory Board) The collection of stakeholders who review all RFCs at specific intervals to assess whether they should be implemented, assign priorities and allocated them to a Release.
Release A stable, executable version of a product  intended for deployment to testing and production.
Release Package A logical container that defines the set of RFCs and Deployment Units (sometimes called Release Units) that are to be included in a Release. It also includes metadata such as the type of release (see Release Type) and its planned dates (see Release Calendar).
Release Type The type of release that is to be implemented, i.e. Major, Minor, Emergency. Each Release Type will usually have a different workflow.
Release Policy An organisations published policy that determines under which circumstances different Release Types should be used as well as the standard set of milestones that selecting a particular Release Type implies in the Release Calendar.
Release Calendar A set of published milestones that details when Releases are planned to transition through the different development, test and production phases.
Baseline A snapshot of the exact versions of Configuration Items, including executables, libraries, configuration files and documentation that are to be deployed.
Build An operational version of a product or part of a product. Not all builds are released but builds are typically carried to transform inputs (source code) into executed and installable Deployment Units.
Deployment Unit A physical, self-contained, installable release of an application.

2011-01-01

a simple for loop in qt console



#include <QtCore/QCoreApplication>
#include<QDebug>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qWarning("Program START =======================================================") ;

    for(int i=0;i<10;i++)
    {
        qWarning(QString::number(i).toUtf8() ) ;

    } //eof for


    qWarning("Program END =======================================================") ;

    return a.exec();
    a.exit(0);
} //eof main

Cool programs , utilities and programming environments for Windows, most of which free ( revised )


Cool programs , utilities and programming environments for Windows, most of which free ( revised )

Opera - simply the best browser on the planet
SysInternals Suite
Firefox
Safari -
Google Chrome
strawberry perl for Windows (with dmake for modules )
Active Perl
izarc - the best zipper
Process Explorer - shows resources usage per running process on Windows
Google Earth
Picasa - the best free picture viewer , organizer
Mozilla Thunderbird
Textpad - the best text editor for Windows
smstoolpack - create CRUD for sql server
GreenShot
Open diff - tool for comparing sql server 2005 databases
Skype - the best client for Internet and Video Telephony
NSIS - the best open source Windows installer maker
And the time plugin
Gears -- edit online documents offline
Free youtube to ipod converter -- get mp4 files easily to your phone
Defragler - Disk Defragment utility
DvdDecrypter - the best DVD free ripper
ImgBurner - burn ISO images - freeware
ArsClip remembers your clibboard stuff - Hint , Ctrl + Shift + Z , 2
colorpic - Color to hex utility
Expresso - a GUI tool for building and verifying Regular Expressions
a flv file player
Python - for cool scripts and programming
STARUML - the best open source UML editor
Infrarecorder - free CD / DVD burner
Paint.Net - freeware image editor
putty
winscp
Multiline Search and Replace utility program
Google Gears - use Gmail offline
HijackThis
tortoise svn - a stable gui and command line to subversion for Windows
slik svn - the command line tools for svn for windows
Data Recovery - recover Shift + del removed programs
Windows Sysinternal utilities
Cmdow is a Win32 commandline utility for NT4/2000/XP/2003 that allows windows to be listed, moved, resized, renamed, hidden/unhidden, disabled/enabled, minimized, maximized, restored, activated/inactivated, closed, killed and more.
Grep , FGrep and Egrep for windows (remember the dll's also )
Less for Windows ( remember the dll's also )
7-zip
Rise Editor - Entity Relationship Diagram tool
Adobe Acrobat
Virtual Clone Drive - Map ISO files
svn client and server
Doxygen - code documentation utility
Qt - Nokia's Development Platform
Dia - control flow chars freeware software
AudioGrabber - the best mp3 ripper
AutoHotKey - GUI automating

Labels

perl (41) Cheat Sheet (25) how-to (24) windows (14) sql server 2008 (13) linux (12) oracle (12) sql (12) Unix (11) cmd windows batch (10) mssql (10) cmd (9) script (9) textpad (9) netezza (8) sql server 2005 (8) cygwin (7) meta data mssql (7) metadata (7) bash (6) code generation (6) Informatica (5) cheatsheet (5) energy (5) tsql (5) utilities (5) excel (4) future (4) generic (4) git cheat sheet (4) html (4) perl modules (4) programs (4) settings (4) sh (4) shortcuts (4) поуки (4) принципи (4) Focus Fusion (3) Solaris (3) cool programs (3) development (3) economy (3) example (3) freeware (3) fusion (3) logging (3) morphus (3) mssql 2005 (3) nuclear (3) nz (3) parse (3) python (3) sftp (3) sofware development (3) source (3) sqlplus (3) table (3) vim (3) .Net (2) C# (2) China (2) GUI (2) Google (2) GoogleCL (2) Solaris Unix (2) architecture (2) ascii (2) awk (2) batch (2) cas (2) chrome extensions (2) code2html (2) columns (2) configuration (2) conversion (2) duplicates (2) excel shortcuts (2) export (2) file (2) free programs (2) informatica sql repository (2) linux cheat sheet (2) mssql 2008 (2) mysql (2) next big future (2) nsis (2) nz netezza cheat sheet (2) nzsql (2) ora (2) prediction (2) publish (2) release management (2) report (2) security (2) single-click (2) sqlserver 2005 (2) sqlserver 2008 (2) src (2) ssh (2) template (2) tools (2) vba (2) video (2) xlt (2) xml (2) youtube videos (2) *nix (1) .vimrc (1) .virmrc vim settings configs (1) BSD license (1) Bulgaria (1) Dallas (1) Database role (1) Dense plasma focus (1) Deployment (1) ERP (1) ExcelToHtml (1) GD (1) GDP (1) HP-UX (1) Hosting (1) IDEA (1) INC (1) IT general (1) ITIL management bullshit-management (1) IZarc (1) Java Web Start (1) JavaScript anchor html jquery (1) Khan Academy (1) LINUX UNIX BASH AND CYGWIN TIPS AND TRICKS (1) Linux Unix rpm cpio build install configure (1) Linux git source build .configure make (1) ListBox (1) MIT HYDROGEN VIRUS (1) OO (1) Obama (1) PowerShell (1) Run-time (1) SDL (1) SIWA (1) SOX (1) Scala (1) Services (1) Stacks (1) SubSonic (1) TED (1) abstractions (1) ansible hosts linux bash (1) ansible linux deployment how-to (1) ansible yum pip python (1) apache (1) apache 2.2 (1) application life cycle (1) architecture input output (1) archive (1) arguments (1) avatar (1) aws cheat sheet cli (1) aws cli (1) aws cli amazon cheat sheet (1) aws elb (1) backup (1) bash Linux open-ssh ssh ssh_server ssh_client public-private key authentication (1) bash perl search and replace (1) bash stub (1) bin (1) biofuels (1) biology (1) books (1) browser (1) bubblesort (1) bugs (1) build (1) byte (1) cas_sql_dev (1) chennai (1) chrome (1) class (1) claut (1) cmdow (1) code generation sqlserver (1) command (1) command line (1) conf (1) confluence (1) console (1) convert (1) cool programs windows free freeware (1) copy paste (1) copy-paste (1) csv (1) ctags (1) current local time (1) cygwin X11 port-forwarding mintty xclock Linux Unix X (1) cygwin bash how-to tips_n_tricks (1) cygwin conf how-to (1) data (1) data types (1) db2 cheat sheet (1) db2 starter ibm bash Linux (1) debt (1) diagram (1) dictionaries (1) digital (1) disk (1) disk space (1) documentation (1) dos (1) dubai (1) e-cars (1) electric cars (1) electricity (1) emulate (1) errors (1) exponents (1) export workflow (1) extract (1) fast export (1) fexp (1) file extension (1) file permissions (1) findtag (1) firewall (1) for loop (1) freaky (1) functions (1) fusion research (1) german (1) git gitlab issues handling system (1) google cli (1) google code (1) google command line interface (1) gpg (1) ha (1) head (1) helsinki (1) history (1) hop or flop (1) host-independant (1) how-to Windows cmd time date datetime (1) ibm db2 cognos installation example db deployment provisioning (1) ideas (1) image (1) informatica oracle sql (1) informatica repo sql workflows sessions file source dir (1) informatica source files etl (1) install (1) isg-pub issue-tracker architecture (1) it management best practices (1) java (1) jump to (1) keyboard shortcuts (1) ksh (1) level (1) linkedin (1) linux bash ansible hosts (1) linux bash commands (1) linux bash how-to shell expansion (1) linux bash shell grep xargs (1) linux bash tips and t ricks (1) linux bash unix cygwin cheatsheet (1) linux bash user accounts password (1) linux bash xargs space (1) linux cheat-sheet (1) linux cheatsheet cheat-sheet revised how-to (1) linux how-to non-root vim (1) linux ssh hosts parallel subshell bash oneliner (1) london (1) make (1) me (1) metacolumn (1) metadata functions (1) metaphonre (1) method (1) model (1) movie (1) multithreaded (1) mysql cheat sheet (1) mysql how-to table datatypes (1) n900 (1) nano (1) neteza (1) netezza bash linux nps (1) netezza nps (1) netezza nps nzsql (1) netezza nz Linux bash (1) netezza nz bash linux (1) netezza nz nzsql sql (1) netezza nzsql database db sizes (1) non-password (1) nord pol (1) nps backup nzsql schema (1) number formatting (1) nz db size (1) nz table count rows (1) nzsql date timestamp compare bigint to_date to_char now (1) on-lier (1) one-liners (1) one-to-many (1) oneliners (1) open (1) open source (1) openrowset (1) openssl (1) oracle PL/SQL (1) oracle Perl perl (1) oracle installation usability (1) oracle number formatting format-model ora-sql oracle (1) oracle templates create table (1) oracle trigger generic autoincrement (1) oracle vbox virtual box cheat sheet (1) oracle virtual box cheat sheet (1) outlook (1) parser (1) password (1) paths (1) perl @INC compile-time run-time (1) perl disk usage administration Linux Unix (1) perl modules configuration management (1) permissions (1) php (1) picasa (1) platform (1) postgreSQL how-to (1) powerShell cmd cygwin mintty.exe terminal (1) ppm (1) predictions (1) prices (1) principles (1) productivity (1) project (1) prompt (1) proxy account (1) public private key (1) publishing (1) putty (1) qt (1) read file (1) registry (1) relationship (1) repository (1) rm (1) scala ScalaFmt (1) scp (1) scripts (1) scsi (1) search and replace (1) sed (1) sendEmail (1) sh stub (1) shortcuts Windows sql developer Oracle (1) sidebar (1) silicon (1) smells (1) smtp (1) software development (1) software procurement (1) sofware (1) sort (1) sql script (1) sql_dev (1) sqlcmd (1) sqlite (1) sqlite3 (1) sshd (1) sshd cygwin (1) stackoverflow (1) stored procedure (1) stub (1) stupidity (1) subroutines (1) svn (1) sysinternals (1) system design (1) tail (1) tar (1) temp table (1) templates (1) teradata (1) terminal (1) test (1) testing (1) theory (1) thorium (1) time (1) tip (1) title (1) tmux .tmux.conf configuration (1) tmux efficiency bash (1) tool (1) ui code prototyping tips and tricks (1) umask Linux Unix bash file permissions chmod (1) url (1) urls (1) user (1) utility (1) utils (1) vb (1) vbox virtual box cheat sheet (1) vim perl regex bash search for string (1) vim recursively hacks (1) vim starter (1) vim-cheat-sheet vim cheat-sheet (1) vimeo (1) visual stuio (1) warsaw (1) wiki (1) wikipedia (1) window (1) windows 7 (1) windows 8 (1) windows programs (1) windows reinstall (1) windows utility batch perl space Windows::Clipboard (1) wisdoms (1) workflow (1) worth-reading (1) wrapper (1) xp_cmdshell (1) xslt (1) youtube (1)

Blog Archive

Translate with Google Translate

My Blog List