elkano.org Ads.txt file
<!doctype html>
<!--[if !IE]>
<html class="no-js non-ie" lang="en-US"> <![endif]-->
<!--[if IE 7 ]>
<html class="no-js ie7" lang="en-US"> <![endif]-->
<!--[if IE 8 ]>
<html class="no-js ie8" lang="en-US"> <![endif]-->
<!--[if IE 9 ]>
<html class="no-js ie9" lang="en-US"> <![endif]-->
<!--[if gt IE 9]><!-->
<html class="no-js" lang="en-US"> <!--<![endif]-->
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="stylesheet" href="https://elkano.org/blog/wp-content/plugins/wp-terminal/style/wp-terminal.css" type="text/css" media="screen" />
<title>Elkano.org Blog! – Blog about IT Technologies</title>
<meta name='robots' content='max-image-preview:large' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='dns-prefetch' href='//s.w.org' />
<link rel="alternate" type="application/rss+xml" title="Elkano.org Blog! » Feed" href="https://elkano.org/blog/feed/" />
<link rel="alternate" type="application/rss+xml" title="Elkano.org Blog! » Comments Feed" href="https://elkano.org/blog/comments/feed/" />
<!-- This site uses the Google Analytics by ExactMetrics plugin v7.1.0 - Using Analytics tracking - https://www.exactmetrics.com/ -->
<script src="//www.googletagmanager.com/gtag/js?id=UA-25294328-6" type="text/javascript" data-cfasync="false" async></script>
<script type="text/javascript" data-cfasync="false">
var em_version = '7.1.0';
var em_track_user = true;
var em_no_track_reason = '';
var disableStrs = [
'ga-disable-UA-25294328-6',
];
/* Function to detect opted out users */
function __gtagTrackerIsOptedOut() {
for ( var index = 0; index < disableStrs.length; index++ ) {
if ( document.cookie.indexOf( disableStrs[ index ] + '=true' ) > -1 ) {
return true;
}
}
return false;
}
/* Disable tracking if the opt-out cookie exists. */
if ( __gtagTrackerIsOptedOut() ) {
for ( var index = 0; index < disableStrs.length; index++ ) {
window[ disableStrs[ index ] ] = true;
}
}
/* Opt-out function */
function __gtagTrackerOptout() {
for ( var index = 0; index < disableStrs.length; index++ ) {
document.cookie = disableStrs[ index ] + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
window[ disableStrs[ index ] ] = true;
}
}
if ( 'undefined' === typeof gaOptout ) {
function gaOptout() {
__gtagTrackerOptout();
}
}
window.dataLayer = window.dataLayer || [];
window.ExactMetricsDualTracker = {
helpers: {},
trackers: {},
};
if ( em_track_user ) {
function __gtagDataLayer() {
dataLayer.push( arguments );
}
function __gtagTracker( type, name, parameters ) {
if ( type === 'event' ) {
parameters.send_to = exactmetrics_frontend.ua;
__gtagDataLayer.apply( null, arguments );
} else {
__gtagDataLayer.apply( null, arguments );
}
}
__gtagTracker( 'js', new Date() );
__gtagTracker( 'set', {
'developer_id.dNDMyYj' : true,
} );
__gtagTracker( 'config', 'UA-25294328-6', {"forceSSL":"true"} );
window.gtag = __gtagTracker; (
function () {
/* https://developers.google.com/analytics/devguides/collection/analyticsjs/ */
/* ga and __gaTracker compatibility shim. */
var noopfn = function () {
return null;
};
var newtracker = function () {
return new Tracker();
};
var Tracker = function () {
return null;
};
var p = Tracker.prototype;
p.get = noopfn;
p.set = noopfn;
p.send = function (){
var args = Array.prototype.slice.call(arguments);
args.unshift( 'send' );
__gaTracker.apply(null, args);
};
var __gaTracker = function () {
var len = arguments.length;
if ( len === 0 ) {
return;
}
var f = arguments[len - 1];
if ( typeof f !== 'object' || f === null || typeof f.hitCallback !== 'function' ) {
if ( 'send' === arguments[0] ) {
var hitConverted, hitObject = false, action;
if ( 'event' === arguments[1] ) {
if ( 'undefined' !== typeof arguments[3] ) {
hitObject = {
'eventAction': arguments[3],
'eventCategory': arguments[2],
'eventLabel': arguments[4],
'value': arguments[5] ? arguments[5] : 1,
}
}
}
if ( 'pageview' === arguments[1] ) {
if ( 'undefined' !== typeof arguments[2] ) {
hitObject = {
'eventAction': 'page_view',
'page_path' : arguments[2],
}
}
}
if ( typeof arguments[2] === 'object' ) {
hitObject = arguments[2];
}
if ( typeof arguments[5] === 'object' ) {
Object.assign( hitObject, arguments[5] );
}
if ( 'undefined' !== typeof arguments[1].hitType ) {
hitObject = arguments[1];
if ( 'pageview' === hitObject.hitType ) {
hitObject.eventAction = 'page_view';
}
}
if ( hitObject ) {
action = 'timing' === arguments[1].hitType ? 'timing_complete' : hitObject.eventAction;
hitConverted = mapArgs( hitObject );
__gtagTracker( 'event', action, hitConverted );
}
}
return;
}
function mapArgs( args ) {
var arg, hit = {};
var gaMap = {
'eventCategory': 'event_category',
'eventAction': 'event_action',
'eventLabel': 'event_label',
'eventValue': 'event_value',
'nonInteraction': 'non_interaction',
'timingCategory': 'event_category',
'timingVar': 'name',
'timingValue': 'value',
'timingLabel': 'event_label',
'page' : 'page_path',
'location' : 'page_location',
'title' : 'page_title',
};
for ( arg in args ) {
if ( ! ( ! args.hasOwnProperty(arg) || ! gaMap.hasOwnProperty(arg) ) ) {
hit[gaMap[arg]] = args[arg];
} else {
hit[arg] = args[arg];
}
}
return hit;
}
try {
f.hitCallback();
} catch ( ex ) {
}
};
__gaTracker.create = newtracker;
__gaTracker.getByName = newtracker;
__gaTracker.getAll = function () {
return [];
};
__gaTracker.remove = noopfn;
__gaTracker.loaded = true;
window['__gaTracker'] = __gaTracker;
}
)();
} else {
console.log( "" );
( function () {
function __gtagTracker() {
return null;
}
window['__gtagTracker'] = __gtagTracker;
window['gtag'] = __gtagTracker;
} )();
}
</script>
<!-- / Google Analytics by ExactMetrics -->
<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/elkano.org\/blog\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.8.10"}};
!function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([10084,65039,8205,55357,56613],[10084,65039,8203,55357,56613])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type="text/css">
img.wp-smiley,
img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 .07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='https://elkano.org/blog/wp-includes/css/dist/block-library/style.min.css?ver=5.8.10' type='text/css' media='all' />
<link rel='stylesheet' id='page-list-style-css' href='https://elkano.org/blog/wp-content/plugins/page-list/css/page-list.css?ver=5.2' type='text/css' media='all' />
<link rel='stylesheet' id='toc-screen-css' href='https://elkano.org/blog/wp-content/plugins/table-of-contents-plus/screen.min.css?ver=2106' type='text/css' media='all' />
<link rel='stylesheet' id='wordpress-popular-posts-css-css' href='https://elkano.org/blog/wp-content/plugins/wordpress-popular-posts/assets/css/wpp.css?ver=5.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='wp-syntax-css-css' href='https://elkano.org/blog/wp-content/plugins/wp-syntax/css/wp-syntax.css?ver=1.1' type='text/css' media='all' />
<link rel='stylesheet' id='sparkling-bootstrap-css' href='https://elkano.org/blog/wp-content/themes/sparkling/assets/css/bootstrap.min.css?ver=5.8.10' type='text/css' media='all' />
<link rel='stylesheet' id='sparkling-icons-css' href='https://elkano.org/blog/wp-content/themes/sparkling/assets/css/fontawesome-all.min.css?ver=5.1.1.' type='text/css' media='all' />
<link rel='stylesheet' id='sparkling-fonts-css' href='//fonts.googleapis.com/css?family=Open+Sans%3A400italic%2C400%2C600%2C700%7CRoboto+Slab%3A400%2C300%2C700&ver=5.8.10' type='text/css' media='all' />
<link rel='stylesheet' id='sparkling-style-css' href='https://elkano.org/blog/wp-content/themes/sparkling-child/style.css?ver=2.4.2' type='text/css' media='all' />
<link rel='stylesheet' id='cookie-notice-front-css' href='https://elkano.org/blog/wp-content/plugins/cookie-notice/includes/../css/front.min.css?ver=5.8.10' type='text/css' media='all' />
<link rel='stylesheet' id='enlighterjs-css' href='https://elkano.org/blog/wp-content/plugins/enlighter/cache/enlighterjs.min.css?ver=os63k/0ci962Cr9' type='text/css' media='all' />
<link rel='stylesheet' id='core3.0-css' href='https://elkano.org/blog/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0' type='text/css' media='all' />
<link rel='stylesheet' id='core-RDark3.0-css' href='https://elkano.org/blog/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shCoreRDark.css?ver=3.0' type='text/css' media='all' />
<link rel='stylesheet' id='theme-RDark3.0-css' href='https://elkano.org/blog/wp-content/plugins/wp-syntaxhighlighter/syntaxhighlighter3/styles/shThemeRDark.css?ver=3.0' type='text/css' media='all' />
<script type='text/javascript' id='exactmetrics-frontend-script-js-extra'>
/* <![CDATA[ */
var exactmetrics_frontend = {"js_events_tracking":"true","download_extensions":"zip,mp3,mpeg,pdf,docx,pptx,xlsx,rar","inbound_paths":"[{\"path\":\"\\\/go\\\/\",\"label\":\"affiliate\"},{\"path\":\"\\\/recommend\\\/\",\"label\":\"affiliate\"}]","home_url":"https:\/\/elkano.org\/blog","hash_tracking":"false","ua":"UA-25294328-6","v4_id":""};
/* ]]> */
</script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/plugins/google-analytics-dashboard-for-wp/assets/js/frontend-gtag.js?ver=7.1.0' id='exactmetrics-frontend-script-js'></script>
<script type='text/javascript' src='https://elkano.org/blog/wp-includes/js/jquery/jquery.min.js?ver=3.6.0' id='jquery-core-js'></script>
<script type='text/javascript' src='https://elkano.org/blog/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2' id='jquery-migrate-js'></script>
<script type='application/json' id='wpp-json'>
{"sampling_active":0,"sampling_rate":100,"ajax_url":"https:\/\/elkano.org\/blog\/wp-json\/wordpress-popular-posts\/v1\/popular-posts","api_url":"https:\/\/elkano.org\/blog\/wp-json\/wordpress-popular-posts","ID":0,"token":"58c76287ea","lang":0,"debug":1}
</script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/plugins/wordpress-popular-posts/assets/js/wpp.min.js?ver=5.4.2' id='wpp-js-js'></script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/themes/sparkling/assets/js/vendor/bootstrap.min.js?ver=5.8.10' id='sparkling-bootstrapjs-js'></script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/themes/sparkling/assets/js/functions.js?ver=20180503' id='sparkling-functions-js'></script>
<script type='text/javascript' id='cookie-notice-front-js-extra'>
/* <![CDATA[ */
var cnArgs = {"ajaxUrl":"https:\/\/elkano.org\/blog\/wp-admin\/admin-ajax.php","nonce":"0c3c9e7626","hideEffect":"fade","position":"bottom","onScroll":"0","onScrollOffset":"100","onClick":"0","cookieName":"cookie_notice_accepted","cookieTime":"2592000","cookieTimeRejected":"2592000","cookiePath":"\/blog\/","cookieDomain":"","redirection":"0","cache":"0","refuse":"0","revokeCookies":"0","revokeCookiesOpt":"automatic","secure":"1"};
/* ]]> */
</script>
<script async type='text/javascript' src='https://elkano.org/blog/wp-content/plugins/cookie-notice/includes/../js/front.min.js?ver=2.1.4' id='cookie-notice-front-js'></script>
<link rel="https://api.w.org/" href="https://elkano.org/blog/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://elkano.org/blog/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://elkano.org/blog/wp-includes/wlwmanifest.xml" />
<meta name="generator" content="WordPress 5.8.10" />
<style type="text/css">div#toc_container {width: 275px;}</style> <style>
@-webkit-keyframes bgslide {
from {
background-position-x: 0;
}
to {
background-position-x: -200%;
}
}
@keyframes bgslide {
from {
background-position-x: 0;
}
to {
background-position-x: -200%;
}
}
.wpp-widget-placeholder {
margin: 0 auto;
width: 60px;
height: 3px;
background: #dd3737;
background: -webkit-gradient(linear, left top, right top, from(#dd3737), color-stop(10%, #571313), to(#dd3737));
background: linear-gradient(90deg, #dd3737 0%, #571313 10%, #dd3737 100%);
background-size: 200% auto;
border-radius: 3px;
-webkit-animation: bgslide 1s infinite linear;
animation: bgslide 1s infinite linear;
}
</style>
<style type="text/css"></style><script type="text/javascript" src="https://elkano.org/blog/wp-content/plugins/si-captcha-for-wordpress/captcha/si_captcha.js?ver=1757475270"></script>
<!-- begin SI CAPTCHA Anti-Spam - login/register form style -->
<style type="text/css">
.si_captcha_small { width:175px; height:45px; padding-top:10px; padding-bottom:10px; }
.si_captcha_large { width:250px; height:60px; padding-top:10px; padding-bottom:10px; }
img#si_image_com { border-style:none; margin:0; padding-right:5px; float:left; }
img#si_image_reg { border-style:none; margin:0; padding-right:5px; float:left; }
img#si_image_log { border-style:none; margin:0; padding-right:5px; float:left; }
img#si_image_side_login { border-style:none; margin:0; padding-right:5px; float:left; }
img#si_image_checkout { border-style:none; margin:0; padding-right:5px; float:left; }
img#si_image_jetpack { border-style:none; margin:0; padding-right:5px; float:left; }
img#si_image_bbpress_topic { border-style:none; margin:0; padding-right:5px; float:left; }
.si_captcha_refresh { border-style:none; margin:0; vertical-align:bottom; }
div#si_captcha_input { display:block; padding-top:15px; padding-bottom:5px; }
label#si_captcha_code_label { margin:0; }
input#si_captcha_code_input { width:65px; }
p#si_captcha_code_p { clear: left; padding-top:10px; }
.si-captcha-jetpack-error { color:#DC3232; }
</style>
<!-- end SI CAPTCHA Anti-Spam - login/register form style -->
<style type="text/css">
.navbar > .container .navbar-brand {
color: #dadada;
}
</style>
</head>
<body class="home blog cookies-not-set">
<a class="sr-only sr-only-focusable" href="#content">Skip to main content</a>
<div id="page" class="hfeed site">
<header id="masthead" class="site-header" role="banner">
<nav class="navbar navbar-default " role="navigation">
<div class="container">
<div class="row">
<div class="site-navigation-inner col-sm-12">
<div class="navbar-header">
<button type="button" class="btn navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div id="logo">
<h1 class="site-name"> <a class="navbar-brand" href="https://elkano.org/blog/" title="Elkano.org Blog!" rel="home">Elkano.org Blog!</a>
</h1> </div><!-- end of #logo -->
</div>
<div class="collapse navbar-collapse navbar-ex1-collapse"><ul id="menu-primary-menu" class="nav navbar-nav"><li id="menu-item-1012" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1012"><a href="https://elkano.org">Home</a></li>
<li id="menu-item-1321" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1321"><a href="https://elkano.org/myip/">My IP</a></li>
</ul></div> <div class="wrap">
<div id="primary" class="content-area">
<main id="main_search" class="search-box" role="main">
<form role="search" method="get" class="form-search" action="https://elkano.org/blog/">
<div class="input-group">
<label class="screen-reader-text" for="s">Search for:</label>
<input type="text" class="form-control search-query" placeholder="Search…" value="" name="s" title="Search for:" />
<span class="input-group-btn">
<button type="submit" class="btn btn-default" name="submit" id="searchsubmit" value="Search"><span class="glyphicon glyphicon-search"></span></button>
</span>
</div>
</form>
</main><!-- #main -->
</div><!-- #primary -->
</div><!-- .wrap -->
</div>
</div>
</div>
</nav><!-- .site-navigation -->
</header><!-- #masthead -->
<div id="content" class="site-content">
<div class="top-section">
</div>
<div class="container main-content-area">
<div class="row full-width">
<div class="main-content-inner col-sm-12 col-md-8">
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<article id="post-1338" class="post-1338 post type-post status-publish format-standard hentry category-linux tag-data-warehouse tag-iaas tag-mysql tag-pyspark tag-redshift">
<div class="blog-item-wrap">
<a href="https://elkano.org/blog/small-company-data-warehouse/" title="The Small Company and the Data Warehouse" >
</a>
<div class="post-inner-content">
<header class="entry-header page-header">
<h2 class="entry-title"><a href="https://elkano.org/blog/small-company-data-warehouse/" rel="bookmark">The Small Company and the Data Warehouse</a></h2>
<div class="entry-meta">
<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://elkano.org/blog/small-company-data-warehouse/" rel="bookmark"><time class="entry-date published" datetime="2017-08-07T10:33:44+02:00">August 7, 2017</time><time class="updated" datetime="2018-06-29T10:22:19+02:00">June 29, 2018</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://elkano.org/blog/author/xelkano/">sysadmin</a></span></span> <span class="comments-link"><i class="fa fa-comments"></i><a href="https://elkano.org/blog/small-company-data-warehouse/#respond">Leave a comment</a></span>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>Once upon a time…….<br />
No, not that kind of story. There was a time no long ago when having a data warehouse meant either a large IT staff or hiring consultants and adding hardware. Then the work of keeping the warehouse updated, what if the hardware failed. The work went on and on.<br />
Today, thanks to cloud services like Amazon RedShift, any size company can utilize the benefits of a data warehouse. They take care of all the storage, all the headaches of worrying about natural disasters. All you have to handle is the data. Simple.</p>
<h2>Data, Simple?</h2>
<p>Well, yes data is a large part of your warehouse solution. Luckily there are tools available to help you load and maintain your data warehouse more easily than ever. Some even provide enhancements to make moving your data, say from <a href="https://www.alooma.com/integrations/mysql/redshift">MySQL to RedShift.</a></p>
<p>Let’s look at a common example. A small company wants to move their customer and inventory data into a data warehouse to perform analysis on company efficiency. The use a common CRM tool and a third-party inventory management system. However, both of these applications use a MySQL database for data storage. A large advantage to using MySQL is that many companies have created tools to work with this database. An advantage to being popular. And some users have also created data warehouses using MySQL.<br />
So, we want to upload our data. Not quite yet. As with any data warehouse there is some verification and transforming to be done before the loading begins.</p>
<p style="padding-left: 30px;">Extract: you want to audit your data, ensure you have removed any garbage data and that your customer and inventory records are up to date. Then you can export the data.<br />
Transform: you will need to transform your data to allow imports into the warehouse. You can use several languages to run the transformation commands, such as Python, Ruby, C# or Java. The exact transformations will depend upon your data and how compatible it may be with the warehouse in its native format.<br />
Load: insert your data into staging tables or the data warehouse tables. And now it is ready for analysis.</p>
<p>Basically, ETL code can be grouped into several categories:</p>
<p style="padding-left: 30px;">• Extract: select from original DB tables<br />
• Load: copy to stage target tables<br />
• Insert/Update: transform data in stage tables to data warehouse standards<br />
• Final Load: copy transformed data from stage tables to data warehouse tables.</p>
<h2>Example Time</h2>
<p>Here is a code example using the PySpark API from Apache Spark:</p>
<p>Database connections:</p>
<p># Define database connection parameters</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python">MYSQL_DRIVER_PATH = "/usr/local/spark/python/lib/mysql-connector-java-5.1.36-bin.jar"
MYSQL_USERNAME = '<USER_NAME >'
MYSQL_PASSWORD = '********'
MYSQL_CONNECTION_URL = "jdbc:mysql://localhost:3306/employees?user=" + MYSQL_USERNAME+"&password="+MYSQL_PASSWORD
</pre>
<p> </p>
<p>Transformation of data and tables:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Perform INNER JOIN on the two data frames on EMP_NO column
# As of Spark 1.4 you don't have to worry about duplicate column on join result
df_emp_sal_join = df_employees.join(df_salaries, "emp_no").select("emp_no", "birth_date", "first_name", "last_name", "gender", "hire_date", "salary", "from_date", "to_date")
# Adding a column 'year' to the data frame for partitioning the hive table
df_add_year = df_emp_sal_join.withColumn('year', F.year(df_emp_sal_join.to_date))
# Adding a load date column to the data frame
df_final = df_add_year.withColumn('Load_date', F.current_date())
df_final.repartition(10)
# Registering data frame as a temp table for SparkSQL
hive_ctx.registerDataFrameAsTable(df_final, "EMP_TEMP")
</pre>
<p> </p>
<p>Data Loading:</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python"># Inserting data into the Target table
hive_ctx.sql("INSERTWRITE TABLE EMPLOYEES.EMPLOYEE_DIM PARTITION (year, Load_date) \
SELECT EMP_NO, BIRTH_DATE, FIRST_NAME, LAST_NAME, GENDER, HIRE_DATE, \
SALARY, FROM_DATE, TO_DATE, year, Load_date FROM EMP_TEMP")
</pre>
<p>Code quoted from:</p>
<p><a href="https://dwtobigdata.wordpress.com/2015/09/29/etl-with-apache-spark/"> https://dwtobigdata.wordpress.com/2015/09/29/etl-with-apache-spark/</a></p>
<h2>To the Warehouse</h2>
<p>All this groomed data needs to be loaded into the appropriate tables in the data warehouse. In our scenario, the warehouse architecture is prepped with the outlook of comparing customer purchases to inventory movements. The architecture/environment/service that will make up the data warehouse is a large variable. There are plenty of options.<br />
• Use MySQL and create a data warehouse from a new instance.<br />
• Use a hardware/application data warehouse solution.<br />
• Use a hosted data warehouse.<br />
• Use a cloud-based data warehouse such as Amazon RedShift.<br />
Each option has advantages. The deciding factor is the needs of the business. If you have limited developer skills in house, then a managed solution will be easier and less frustrating. Cloud solutions are growing quickly due to the double benefit of scalable size and no hardware to maintain.<br />
What is it important to remember is the function of the data warehouse. Warehouses allow you to bring together logically related, but format disparate data and translate it into a cohesive data set. This collected data can then be analyzed from many perspectives to allow you to make informed business decisions. Looking at reports from separate systems does not provide the holistic view you can get from a data warehouse.</p>
<h2>End Result</h2>
<p>In the end, companies gain great insights from properly built and maintained data warehouses. With the plethora of solutions available today, data warehouses can now be used by any size business. Get the most out of all that data in your systems.<br />
Cloud based storage and Integration as a Service (IaaS) data warehouse solutions are growing because of the management advantages and ROI. Companies of every size use IaaS solutions for faster implementation and quick ROI. The advantages of flexible cloud-based services and open source applications such as MySQL are easily visible.<br />
Trying to keep up with technology developments is difficult for technology professionals, much less business owners with many demands on their time. If you are curious about cloud services including data warehouses, software as a service or integration as a service, the StratoScale team has compiled the <a href="https://wiki.stratoscale.com/">IaaS Wiki</a>. A growing collection of information from across the cloud and services world. If you have cloud questions, start by looking there.</p>
</div><!-- .entry-content -->
</div>
</div>
</article><!-- #post-## -->
<article id="post-1334" class="post-1334 post type-post status-publish format-standard hentry category-ceph category-linux tag-ceph tag-mkfs tag-osd tag-xfs">
<div class="blog-item-wrap">
<a href="https://elkano.org/blog/mkfs-xfs-open-devdevice-device-resource-busy/" title="mkfs.xfs: cannot open /dev/[device]: Device or resource busy" >
</a>
<div class="post-inner-content">
<header class="entry-header page-header">
<h2 class="entry-title"><a href="https://elkano.org/blog/mkfs-xfs-open-devdevice-device-resource-busy/" rel="bookmark">mkfs.xfs: cannot open /dev/[device]: Device or resource busy</a></h2>
<div class="entry-meta">
<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://elkano.org/blog/mkfs-xfs-open-devdevice-device-resource-busy/" rel="bookmark"><time class="entry-date published" datetime="2017-01-11T18:13:34+01:00">January 11, 2017</time><time class="updated" datetime="2017-01-11T18:13:34+01:00">January 11, 2017</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://elkano.org/blog/author/xelkano/">sysadmin</a></span></span> <span class="comments-link"><i class="fa fa-comments"></i><a href="https://elkano.org/blog/mkfs-xfs-open-devdevice-device-resource-busy/#comments">2 Comments</a></span>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>If you hit this error trying to format a partition after you have installed a new disk in your server:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
~# mkfs -t xfs -f -i size=2048 /dev/sdav2
mkfs.xfs: cannot open /dev/sdav2: Device or resource busy
</pre>
<p>Maybe you have multipath enabled and the new device has been detected. Run this command to see if multipath has detected it.</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
~# multipath -ll /dev/sdav
2796a30585a4b6e45 dm-12 ,
size=2.2T features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=0 status=active
| `- #:#:#:# sdav 66:48 active undef running
</pre>
<p>then to fix it, remove from multipath:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
~# multipath -f /dev/sdav
</pre>
<p>And finally you can format it without any problem:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
~# mkfs -t xfs -f -i size=2048 /dev/sdav2
meta-data=/dev/device isize=2048 agcount=4, agsize=3277258 blks
= sectsz=512 attr=2
data = bsize=4096 blocks=13109032, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
</pre>
</div><!-- .entry-content -->
</div>
</div>
</article><!-- #post-## -->
<article id="post-1332" class="post-1332 post type-post status-publish format-standard hentry category-kvm category-linux category-virtualization tag-lvm tag-parted tag-proxmox tag-resizepart">
<div class="blog-item-wrap">
<a href="https://elkano.org/blog/resize-vps-disk-automated/" title="Resize vps disk in an automated way" >
</a>
<div class="post-inner-content">
<header class="entry-header page-header">
<h2 class="entry-title"><a href="https://elkano.org/blog/resize-vps-disk-automated/" rel="bookmark">Resize vps disk in an automated way</a></h2>
<div class="entry-meta">
<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://elkano.org/blog/resize-vps-disk-automated/" rel="bookmark"><time class="entry-date published" datetime="2017-01-03T09:57:59+01:00">January 3, 2017</time><time class="updated" datetime="2017-01-03T09:57:59+01:00">January 3, 2017</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://elkano.org/blog/author/xelkano/">sysadmin</a></span></span> <span class="comments-link"><i class="fa fa-comments"></i><a href="https://elkano.org/blog/resize-vps-disk-automated/#respond">Leave a comment</a></span>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>This is the commands I run to resize automatically the VPS disks when I have resized the disk through Proxmox interface.</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
#!/bin/bash
# This is only needed if you use GPT type tables
echo "Fix" | /usr/local/sbin/parted ---pretend-input-tty /dev/sdb print
# Resize partition 1 using all the space
/usr/local/sbin/parted /dev/sdb resizepart 1 100%
# I use LVM so the physical volume must be resized first
pvresize /dev/sdb1
# Resize the logical volume using all space available
lvresize /dev/vgdata/home -l +100%FREE
# Finally notify file system to use all the space
resize2fs /dev/vgdata/home
</pre>
<p>Note: I use parted 3.2, if your distribution comes with an older one uninstall it and install it from <a href="http://ftp.gnu.org/gnu/parted/">sources</a></p>
</div><!-- .entry-content -->
</div>
</div>
</article><!-- #post-## -->
<article id="post-1329" class="post-1329 post type-post status-publish format-standard hentry category-linux tag-cnadmin tag-cnconfig tag-openldap tag-password tag-slapd">
<div class="blog-item-wrap">
<a href="https://elkano.org/blog/openldap-como-establecer-la-clave-de-root-del-esquema/" title="OpenLDAP – cómo establecer la clave de root del esquema" >
</a>
<div class="post-inner-content">
<header class="entry-header page-header">
<h2 class="entry-title"><a href="https://elkano.org/blog/openldap-como-establecer-la-clave-de-root-del-esquema/" rel="bookmark">OpenLDAP – cómo establecer la clave de root del esquema</a></h2>
<div class="entry-meta">
<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://elkano.org/blog/openldap-como-establecer-la-clave-de-root-del-esquema/" rel="bookmark"><time class="entry-date published" datetime="2016-12-13T14:45:26+01:00">December 13, 2016</time><time class="updated" datetime="2016-12-13T09:16:55+01:00">December 13, 2016</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://elkano.org/blog/author/xelkano/">sysadmin</a></span></span> <span class="comments-link"><i class="fa fa-comments"></i><a href="https://elkano.org/blog/openldap-como-establecer-la-clave-de-root-del-esquema/#comments">1 Comment</a></span>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>Si necesitamos establecer la clave del usuario admin bajo la rama config (<strong>cn=admin,cn=config</strong>) podemos seguir los siguientes pasos:</p>
<p>Crear un fichero ldif llamado <strong>rootpw_cnconfig.ldif</strong> con el siguiente contenido:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: NUEVACLAVE
</pre>
<p>Y ejecutar el siguiente comando:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
ldapmodify -Y EXTERNAL -H ldapi:/// -f rootpw_cnconfig.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
</pre>
<p>A partir de ahora ya podríamos usar la clave en los comandos de ldap de la siguiente forma si necesitamos realizar cambios en el esquema:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
ldapmodify -d "cn=admin,cn=config" -W -f fichero.ldif
</pre>
</div><!-- .entry-content -->
</div>
</div>
</article><!-- #post-## -->
<article id="post-1328" class="post-1328 post type-post status-publish format-standard hentry category-linux tag-index tag-openldap tag-slapd">
<div class="blog-item-wrap">
<a href="https://elkano.org/blog/como-anadir-indices-en-openldap/" title="Cómo añadir índices en OpenLDAP" >
</a>
<div class="post-inner-content">
<header class="entry-header page-header">
<h2 class="entry-title"><a href="https://elkano.org/blog/como-anadir-indices-en-openldap/" rel="bookmark">Cómo añadir índices en OpenLDAP</a></h2>
<div class="entry-meta">
<span class="posted-on"><i class="fa fa-calendar-alt"></i> <a href="https://elkano.org/blog/como-anadir-indices-en-openldap/" rel="bookmark"><time class="entry-date published" datetime="2016-12-12T20:57:15+01:00">December 12, 2016</time><time class="updated" datetime="2016-12-14T16:20:58+01:00">December 14, 2016</time></a></span><span class="byline"> <i class="fa fa-user"></i> <span class="author vcard"><a class="url fn n" href="https://elkano.org/blog/author/xelkano/">sysadmin</a></span></span> <span class="comments-link"><i class="fa fa-comments"></i><a href="https://elkano.org/blog/como-anadir-indices-en-openldap/#respond">Leave a comment</a></span>
</div><!-- .entry-meta -->
</header><!-- .entry-header -->
<div class="entry-content">
<p>Si encuentras en el log de OpenLDAP entradas de este tipo cuando se realizan búsquedas de los objetos significa que las búsquedas se realizan sobre un atributo que no tiene índice en LDAP:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
slapd[14318]: <= mdb_equality_candidates: (associatedDomain) not indexed
</pre>
<p>Estas búsquedas podrían ser bastante costosas si tenemos un LDAP con muchos datos por lo que si este tipo de búsquedas son muy frecuentes conviene añadir un índice al atributo. Para ello crearemos un fichero <strong>add-index.ldif</strong> con el siguiente contenido:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcDbIndex
olcDbIndex: associatedDomain eq
</pre>
<p>En este caso creamos un índice de tipo de <strong>eq</strong> como se puede observar en la última línea ya que las búsquedas son del tipo ‘associatedDomain=dominio’, pero existen otro tipo de índices dependiendo del tipo de búsqueda a realizar sobre el atributo:</p>
<blockquote><p><strong>pres</strong> should be used if use searches of the form ‘objectclass=person’ or ‘attribute=mail’ will be used.<br />
<strong>approx</strong> MUST be used if use searches of the form ‘sn~=person’ (a ‘sounds-like’ search) will be used.<br />
<strong>eq</strong> should be used if searches of the form ‘sn=smith’ will be used i.e no wildcards are included (uses the EQUALITY rule only).<br />
<strong>sub</strong> should be used if use searches of the form ‘sn=sm*’ i.e wildcards are included (uses the SUBSTR rule). This rule may be enhanced by a using subinitial (optimised for ‘sn=*s’), subany (optimised for ‘sn=*n*’) or subfinal (optimised for ‘sn=th*’). One or more sub parameters may be included.</p></blockquote>
<p>También podríamos combinar varios tipos de índices de esta forma:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
olcDbIndex: associatedDomain eq,sub
</pre>
<p>Una vez generado el fichero solo tenemos que ejecutar el siguiente comando e introducir la clave del usuario admin del esquema:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
$ ldapadd -h localhost -D "cn=admin,cn=config" -f add-index.ldif -W
Enter LDAP Password:
modifying entry "olcDatabase={1}mdb,cn=config"
</pre>
<p>Si no sabemos la clave del usuario <strong>cn=admin,cn=config</strong> podemos cambiar la contraseña tal como se explica en este post <a href="https://elkano.org/blog/openldap-como-establecer-la-clave-de-root-del-esquema/">Cambiar la clave de cn=admin,cn=config</a> o utilizar el siguiente comando que no requiere una autenticación explícita ya que se basa en la autenticación del propio usuario:</p>
<pre class="EnlighterJSRAW" data-enlighter-linenumbers="false" data-enlighter-theme="atomic">
ldapmodify -Y EXTERNAL -H ldapi:/// -f add-index.ldif
</pre>
</div><!-- .entry-content -->
</div>
</div>
</article><!-- #post-## -->
<nav class="navigation pagination" role="navigation" aria-label="Posts">
<h2 class="screen-reader-text">Posts navigation</h2>
<div class="nav-links"><span aria-current="page" class="page-numbers current">1</span>
<a class="page-numbers" href="https://elkano.org/blog/page/2/">2</a>
<span class="page-numbers dots">…</span>
<a class="page-numbers" href="https://elkano.org/blog/page/17/">17</a>
<a class="next page-numbers" href="https://elkano.org/blog/page/2/">Older posts <i class="fa fa-chevron-right"></i></a></div>
</nav>
</main><!-- #main -->
</div><!-- #primary -->
</div><!-- close .main-content-inner -->
<div id="secondary" class="widget-area col-sm-12 col-md-4" role="complementary">
<div class="well">
<aside id="search-3" class="widget widget_search">
<form role="search" method="get" class="form-search" action="https://elkano.org/blog/">
<div class="input-group">
<label class="screen-reader-text" for="s">Search for:</label>
<input type="text" class="form-control search-query" placeholder="Search…" value="" name="s" title="Search for:" />
<span class="input-group-btn">
<button type="submit" class="btn btn-default" name="submit" id="searchsubmit" value="Search"><span class="glyphicon glyphicon-search"></span></button>
</span>
</div>
</form>
</aside><aside id="text-4" class="widget widget_text"> <div class="textwidget"><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- rectangulo-mediano -->
<ins class="adsbygoogle"
style="display:inline-block;width:300px;height:250px"
data-ad-client="ca-pub-5929229267098406"
data-ad-slot="6135032019"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
</aside>
<aside id="recent-posts-3" class="widget widget_recent_entries">
<h3 class="widget-title">Recent Posts</h3>
<ul>
<li>
<a href="https://elkano.org/blog/small-company-data-warehouse/">The Small Company and the Data Warehouse</a>
</li>
<li>
<a href="https://elkano.org/blog/mkfs-xfs-open-devdevice-device-resource-busy/">mkfs.xfs: cannot open /dev/[device]: Device or resource busy</a>
</li>
<li>
<a href="https://elkano.org/blog/resize-vps-disk-automated/">Resize vps disk in an automated way</a>
</li>
<li>
<a href="https://elkano.org/blog/openldap-como-establecer-la-clave-de-root-del-esquema/">OpenLDAP – cómo establecer la clave de root del esquema</a>
</li>
<li>
<a href="https://elkano.org/blog/como-anadir-indices-en-openldap/">Cómo añadir índices en OpenLDAP</a>
</li>
</ul>
</aside><aside id="tag_cloud-3" class="widget widget_tag_cloud"><h3 class="widget-title">Tags</h3><div class="tagcloud"><a href="https://elkano.org/blog/tag/apache/" class="tag-cloud-link tag-link-63 tag-link-position-1" style="font-size: 11.230769230769pt;" aria-label="apache (2 items)">apache</a>
<a href="https://elkano.org/blog/tag/apache2/" class="tag-cloud-link tag-link-75 tag-link-position-2" style="font-size: 11.230769230769pt;" aria-label="apache2 (2 items)">apache2</a>
<a href="https://elkano.org/blog/tag/bacula/" class="tag-cloud-link tag-link-146 tag-link-position-3" style="font-size: 11.230769230769pt;" aria-label="Bacula (2 items)">Bacula</a>
<a href="https://elkano.org/blog/tag/binarylogs/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 8pt;" aria-label="binarylogs (1 item)">binarylogs</a>
<a href="https://elkano.org/blog/tag/bonding/" class="tag-cloud-link tag-link-158 tag-link-position-5" style="font-size: 11.230769230769pt;" aria-label="bonding (2 items)">bonding</a>
<a href="https://elkano.org/blog/tag/bundler/" class="tag-cloud-link tag-link-52 tag-link-position-6" style="font-size: 11.230769230769pt;" aria-label="bundler (2 items)">bundler</a>
<a href="https://elkano.org/blog/tag/calamari/" class="tag-cloud-link tag-link-133 tag-link-position-7" style="font-size: 11.230769230769pt;" aria-label="calamari (2 items)">calamari</a>
<a href="https://elkano.org/blog/tag/ceph/" class="tag-cloud-link tag-link-121 tag-link-position-8" style="font-size: 22pt;" aria-label="ceph (11 items)">ceph</a>
<a href="https://elkano.org/blog/tag/cluster/" class="tag-cloud-link tag-link-43 tag-link-position-9" style="font-size: 11.230769230769pt;" aria-label="Cluster (2 items)">Cluster</a>
<a href="https://elkano.org/blog/tag/cpanel/" class="tag-cloud-link tag-link-48 tag-link-position-10" style="font-size: 16.615384615385pt;" aria-label="cpanel (5 items)">cpanel</a>
<a href="https://elkano.org/blog/tag/davfs/" class="tag-cloud-link tag-link-17 tag-link-position-11" style="font-size: 8pt;" aria-label="Davfs (1 item)">Davfs</a>
<a href="https://elkano.org/blog/tag/dns/" class="tag-cloud-link tag-link-74 tag-link-position-12" style="font-size: 11.230769230769pt;" aria-label="dns (2 items)">dns</a>
<a href="https://elkano.org/blog/tag/dpkg/" class="tag-cloud-link tag-link-138 tag-link-position-13" style="font-size: 13.384615384615pt;" aria-label="dpkg (3 items)">dpkg</a>
<a href="https://elkano.org/blog/tag/index/" class="tag-cloud-link tag-link-95 tag-link-position-14" style="font-size: 11.230769230769pt;" aria-label="index (2 items)">index</a>
<a href="https://elkano.org/blog/tag/iptables/" class="tag-cloud-link tag-link-71 tag-link-position-15" style="font-size: 11.230769230769pt;" aria-label="iptables (2 items)">iptables</a>
<a href="https://elkano.org/blog/tag/kermit/" class="tag-cloud-link tag-link-22 tag-link-position-16" style="font-size: 8pt;" aria-label="kermit (1 item)">kermit</a>
<a href="https://elkano.org/blog/tag/kvm/" class="tag-cloud-link tag-link-147 tag-link-position-17" style="font-size: 16.615384615385pt;" aria-label="KVM (5 items)">KVM</a>
<a href="https://elkano.org/blog/tag/linux/" class="tag-cloud-link tag-link-144 tag-link-position-18" style="font-size: 11.230769230769pt;" aria-label="Linux (2 items)">Linux</a>
<a href="https://elkano.org/blog/tag/lvm/" class="tag-cloud-link tag-link-117 tag-link-position-19" style="font-size: 13.384615384615pt;" aria-label="lvm (3 items)">lvm</a>
<a href="https://elkano.org/blog/tag/migration/" class="tag-cloud-link tag-link-38 tag-link-position-20" style="font-size: 11.230769230769pt;" aria-label="Migration (2 items)">Migration</a>
<a href="https://elkano.org/blog/tag/minicom/" class="tag-cloud-link tag-link-23 tag-link-position-21" style="font-size: 8pt;" aria-label="minicom (1 item)">minicom</a>
<a href="https://elkano.org/blog/tag/mtu-9000/" class="tag-cloud-link tag-link-115 tag-link-position-22" style="font-size: 11.230769230769pt;" aria-label="MTU 9000 (2 items)">MTU 9000</a>
<a href="https://elkano.org/blog/tag/multipath/" class="tag-cloud-link tag-link-191 tag-link-position-23" style="font-size: 11.230769230769pt;" aria-label="multipath (2 items)">multipath</a>
<a href="https://elkano.org/blog/tag/mysql/" class="tag-cloud-link tag-link-10 tag-link-position-24" style="font-size: 16.615384615385pt;" aria-label="mysql (5 items)">mysql</a>
<a href="https://elkano.org/blog/tag/network/" class="tag-cloud-link tag-link-148 tag-link-position-25" style="font-size: 15.179487179487pt;" aria-label="network (4 items)">network</a>
<a href="https://elkano.org/blog/tag/neutron/" class="tag-cloud-link tag-link-132 tag-link-position-26" style="font-size: 11.230769230769pt;" aria-label="Neutron (2 items)">Neutron</a>
<a href="https://elkano.org/blog/tag/openldap/" class="tag-cloud-link tag-link-193 tag-link-position-27" style="font-size: 13.384615384615pt;" aria-label="OpenLDAP (3 items)">OpenLDAP</a>
<a href="https://elkano.org/blog/tag/openstack/" class="tag-cloud-link tag-link-149 tag-link-position-28" style="font-size: 17.871794871795pt;" aria-label="OpenStack (6 items)">OpenStack</a>
<a href="https://elkano.org/blog/tag/plugin/" class="tag-cloud-link tag-link-13 tag-link-position-29" style="font-size: 11.230769230769pt;" aria-label="Plugin (2 items)">Plugin</a>
<a href="https://elkano.org/blog/tag/postfix/" class="tag-cloud-link tag-link-181 tag-link-position-30" style="font-size: 11.230769230769pt;" aria-label="postfix (2 items)">postfix</a>
<a href="https://elkano.org/blog/tag/proxmox/" class="tag-cloud-link tag-link-35 tag-link-position-31" style="font-size: 19.666666666667pt;" aria-label="Proxmox (8 items)">Proxmox</a>
<a href="https://elkano.org/blog/tag/redmine/" class="tag-cloud-link tag-link-145 tag-link-position-32" style="font-size: 16.615384615385pt;" aria-label="Redmine (5 items)">Redmine</a>
<a href="https://elkano.org/blog/tag/replication/" class="tag-cloud-link tag-link-19 tag-link-position-33" style="font-size: 8pt;" aria-label="replication (1 item)">replication</a>
<a href="https://elkano.org/blog/tag/ruby/" class="tag-cloud-link tag-link-14 tag-link-position-34" style="font-size: 13.384615384615pt;" aria-label="Ruby (3 items)">Ruby</a>
<a href="https://elkano.org/blog/tag/search/" class="tag-cloud-link tag-link-15 tag-link-position-35" style="font-size: 8pt;" aria-label="Search (1 item)">Search</a>
<a href="https://elkano.org/blog/tag/serial-cable/" class="tag-cloud-link tag-link-24 tag-link-position-36" style="font-size: 8pt;" aria-label="serial cable (1 item)">serial cable</a>
<a href="https://elkano.org/blog/tag/slapd/" class="tag-cloud-link tag-link-94 tag-link-position-37" style="font-size: 13.384615384615pt;" aria-label="slapd (3 items)">slapd</a>
<a href="https://elkano.org/blog/tag/ssh/" class="tag-cloud-link tag-link-96 tag-link-position-38" style="font-size: 11.230769230769pt;" aria-label="ssh (2 items)">ssh</a>
<a href="https://elkano.org/blog/tag/switch-access/" class="tag-cloud-link tag-link-25 tag-link-position-39" style="font-size: 8pt;" aria-label="switch access (1 item)">switch access</a>
<a href="https://elkano.org/blog/tag/ubuntu/" class="tag-cloud-link tag-link-153 tag-link-position-40" style="font-size: 13.384615384615pt;" aria-label="ubuntu (3 items)">ubuntu</a>
<a href="https://elkano.org/blog/tag/ubuntu-14-04/" class="tag-cloud-link tag-link-124 tag-link-position-41" style="font-size: 11.230769230769pt;" aria-label="Ubuntu 14.04 (2 items)">Ubuntu 14.04</a>
<a href="https://elkano.org/blog/tag/virtual/" class="tag-cloud-link tag-link-16 tag-link-position-42" style="font-size: 8pt;" aria-label="Virtual (1 item)">Virtual</a>
<a href="https://elkano.org/blog/tag/vzdump/" class="tag-cloud-link tag-link-34 tag-link-position-43" style="font-size: 11.230769230769pt;" aria-label="vzdump (2 items)">vzdump</a>
<a href="https://elkano.org/blog/tag/webdav/" class="tag-cloud-link tag-link-18 tag-link-position-44" style="font-size: 8pt;" aria-label="webdav (1 item)">webdav</a>
<a href="https://elkano.org/blog/tag/xapian/" class="tag-cloud-link tag-link-12 tag-link-position-45" style="font-size: 8pt;" aria-label="Xapian (1 item)">Xapian</a></div>
</aside> </div>
</div><!-- #secondary -->
</div><!-- close .row -->
</div><!-- close .container -->
</div><!-- close .site-content -->
<div id="footer-area">
<div class="container footer-inner">
<div class="row">
</div>
</div>
<footer id="colophon" class="site-footer" role="contentinfo">
<div class="site-info container">
<div class="row">
<nav role="navigation" class="col-md-6">
</nav>
<div class="copyright col-md-6">
sparkling Theme by <a href="http://colorlib.com/" target="_blank">Colorlib</a> Powered by <a href="http://wordpress.org/" target="_blank">WordPress</a> </div>
</div>
</div><!-- .site-info -->
<div class="scroll-to-top"><i class="fa fa-angle-up"></i></div><!-- .scroll-to-top -->
</footer><!-- #colophon -->
</div>
</div><!-- #page -->
<script type="text/javascript">
jQuery(document).ready(function ($) {
if ($(window).width() >= 767) {
$('.navbar-nav > li.menu-item > a').click(function () {
if ($(this).attr('target') !== '_blank') {
window.location = $(this).attr('href')
}
})
}
})
</script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/plugins/ricg-responsive-images/js/picturefill.min.js?ver=3.0.1' id='picturefill-js'></script>
<script type='text/javascript' id='toc-front-js-extra'>
/* <![CDATA[ */
var tocplus = {"visibility_show":"show","visibility_hide":"hide","width":"275px"};
/* ]]> */
</script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/plugins/table-of-contents-plus/front.min.js?ver=2106' id='toc-front-js'></script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/plugins/wp-syntax/js/wp-syntax.js?ver=1.1' id='wp-syntax-js-js'></script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/themes/sparkling/assets/js/skip-link-focus-fix.min.js?ver=20140222' id='sparkling-skip-link-focus-fix-js'></script>
<script type='text/javascript' src='https://elkano.org/blog/wp-content/plugins/enlighter/cache/enlighterjs.min.js?ver=os63k/0ci962Cr9' id='enlighterjs-js'></script>
<script type='text/javascript' id='enlighterjs-js-after'>
!function(e,n){if("undefined"!=typeof EnlighterJS){var o={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":4,"ampersandCleanup":true,"linehover":true,"rawcodeDbclick":false,"textOverflow":"break","linenumbers":true,"theme":"standard","language":"shell","retainCssClasses":false,"collapse":false,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""}};(e.EnlighterJSINIT=function(){EnlighterJS.init(o.selectors.block,o.selectors.inline,o.options)})()}else{(n&&(n.error||n.log)||function(){})("Error: EnlighterJS resources not loaded yet!")}}(window,console);
</script>
<script type='text/javascript' src='https://elkano.org/blog/wp-includes/js/wp-embed.min.js?ver=5.8.10' id='wp-embed-js'></script>
<!-- Cookie Notice plugin v2.1.4 by Hu-manity.co https://hu-manity.co/ -->
<div id="cookie-notice" role="dialog" class="cookie-notice-hidden cookie-revoke-hidden cn-position-bottom" aria-label="Cookie Notice" style="background-color: rgba(0,0,0,1);"><div class="cookie-notice-container" style="color: #fff;"><span id="cn-notice-text" class="cn-text-container">We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.</span><span id="cn-notice-buttons" class="cn-buttons-container"><a href="#" id="cn-accept-cookie" data-cookie-set="accept" class="cn-set-cookie cn-button bootstrap" aria-label="Ok">Ok</a></span><a href="javascript:void(0);" id="cn-close-notice" data-cookie-set="accept" class="cn-close-icon" aria-label="Ok"></a></div>
</div>
<!-- / Cookie Notice plugin -->
</body>
</html>